Frage

Zur Zeit arbeite ich an einem Projekt mit einer Anforderung, dass unsere Software arbeiten muss, bis mindestens 2050. Vor kurzem haben wir auf Probleme stoßen, die sie mit der Y2.036K „Bug“ in dem NTP-Protokoll und auch den Y2.038K Fehler. Grundsätzlich müssen unsere Software weiter vorbei an diese Termine mit allen Daten laufen korrekte Zeitstempel aufgezeichnet werden. In Anbetracht, dass es derzeit keine Lösung für einen dieser Fehler eine Abhilfe eingesetzt werden müssen.

Es ist wichtig, dass unsere Software immer wieder korrekt nach diesen beiden Ereignissen und Aufzeichnungen Daten ausgeführt wird. Es ist nicht entscheidend, dass die OS-Systemzeit korrekt sein. Da wir Java verwenden wir sollten in der Lage sein, um Termine in Bezug auf die Prime Epoche des Jahres 1900 zu behandeln, nachdem es über rollt. Allerdings wird die Java JVM nicht, selbst wenn die Systemzeit läuft gesetzt im Jahr 1970 vor dem Unix-Epoche! Er stürzt gerade.

Um Kraftstoff ins Feuer, der NTP-Server von einem anderen Lieferanten geliefert und wir haben keine Kontrolle darüber. So mit einem anderen Protokoll oder Modifizieren des Server irgendetwas davon zu handhaben ist nicht möglich.

Eine kreative Lösung erforderlich ist. Unnötig zu sagen, müssen einige tiefe Voodoo statt. Wir haben Folgendes berücksichtigt:

  1. Ändern Sie den ntpd-Client-Software, um irgendwie zusammenarbeiten mit dem NTP-Server und versetzt die lokale Zeit von einem Zeitpunkt mehr als Epoche Unix im Jahr 1970 statt 1900. So ist die JVM ermöglicht, ohne Absturz auf die Initialisierung auszuführen. Alle Zeitstempel werden dann zu unserem gewählten Prolongationstermin behandelt relativ werden. (Also im Grunde, stellt sicher, dass wir Umsatz der Einzahlung zu einem Zeitpunkt größer als die Unix-Epoche).

  2. Lassen Sie den NTP-Zeit zur Überschlags bis 1900 Epoche korrigiert und ein Update finden, so dass die JVM wird nicht abstürzen.

Hat jemand dieses Problem in Angriff genommen? Und auch, gibt es andere Probleme, die auftreten können, die ich nicht ahnen, so dass eine oder beide dieser Lösungen überhaupt nicht machbar?

War es hilfreich?

Lösung

Installieren der Software auf einem 64-Bit-Linux mit einem 64-Bit-JVM. time_t und Freunde sind 64-Bit hier, stellen Sie die Zeit vorbei 2038 sehen, wenn Sachen noch funktioniert. Wenn Sie sich gut, werfen weg NTP, finden ein GPS oder eine andere Quelle, die als präzise Uhr genutzt werden kann und garantiert sie haben keine 32-Bit-Probleme, eine Schnittstelle der Software zu lesen / sync Zeit das.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top