Обработка ошибок Y2.036K и Y2.038K
В настоящее время я работаю над проектом с требованием, чтобы наше программное обеспечение работало как минимум до 2050 года. Недавно мы столкнулись с проблемами, связанными с "ошибкой" Y2.036K в протоколе NTP, а также ошибкой Y2.038K. По сути, наше программное обеспечение должно продолжать работать после этих дат со всеми данными, записанными с использованием правильных отметок времени. Учитывая, что в настоящее время нет решения ни для одной из этих ошибок, необходимо использовать обходной путь.
Крайне важно, чтобы наше программное обеспечение продолжало корректно работать после этих двух событий и дат. Не критично, что системное время ОС будет правильным. Учитывая, что мы используем Java, мы должны иметь возможность обрабатывать даты, относящиеся к основной эпохе 1900 года, после того, как она перевернется. Однако java JVM даже не будет работать, если системное время было установлено до эпохи Unix в 1970 году! Это просто вылетает.
Чтобы подлить масла в огонь, NTP-сервер поставляется другим поставщиком, и мы не можем его контролировать. Поэтому использование другого протокола или изменение сервера для обработки всего этого невозможно.
Требуется креативное решение. Излишне говорить, что должно произойти какое-то глубокое вуду. Мы рассмотрели следующее:
Измените клиентское программное обеспечение ntpd, чтобы каким-то образом взаимодействовать с сервером ntp и сместить местное время от даты, превышающей эпоху Unix в 1970 году, а не в 1900 году. Таким образом, JVM может работать без сбоев при инициализации. Все метки времени будут обрабатываться относительно выбранной нами даты пролонгации. (В общем, убедитесь, что мы перенесены на дату, превышающую эпоху Unix).
Позвольте ntp исправленное время, чтобы перенести на 1900 эпох и найти исправление, чтобы JVM не потерпел крах.
Кто-нибудь еще занимался этим вопросом? А также, есть ли другие проблемы, которые могут возникнуть, которые я не предвидел, что делает одно или оба этих решения вообще неосуществимым?
1 ответ
Установите программное обеспечение на 64-битной Linux с 64-битной JVM. time_t
и друзья здесь 64-битные, настройте время после 2038 года, посмотрите, все ли еще работает. Если у вас все хорошо, отбросьте NTP, найдите gps или другой источник, который можно использовать как точные часы и гарантирующий, что у них нет 32-битных проблем, настройте интерфейс вашего программного обеспечения для считывания / синхронизации времени с этого.