SOSDataExchange (SOSFTP)

Handling of changes to the history file structure

Details

  • Type: New Feature New Feature
  • Status: Closed Closed
  • Priority: Major Major
  • Resolution: Fixed
  • Affects Version/s: 0.9.1
  • Fix Version/s: 0.9.2
  • Component/s: None
  • Description:
    Hide

    Eine bestehende Historiendatei kann erweitert werden durch neue Felder, z.B. im Zuge der Einführung einer neuen SOSFTP Version.

    Dabei wird die Feldliste in der ersten Zeile der Historiendatei ergänzt und durch einen sicheren Mechanismus das gleichzeitige Ändern und Schreiben durch mehrere SOSFTP-Prozesse synchronisiert:

    • SOSFTP erzeugt im Fall einer erforderlichen Feldstrukturänderung diese Datei: <transfer_history>.lock
    • Andere parallele SOSFTP Instanzen suchen diese Datei, falls vorhanden wird das Schreiben verzögert. Nach timeout (Default: 60s) wird mit Fehler abgebrochen.
    • Die .lock Datei nimmt die PID des aktuellen SOSFTP-Prozesses auf.
      + Unix: $$
      + Windows: http://www.jroller.com/santhosh/entry/get_current_java_process_id zeigt wie das mit getpids.exe geht, eine eigene Lösung wäre aber besser. getpids.exe scheint nur die PIDs von Kindprozessen zu zeigen, nicht aber die aktuelle.
    • Parallele SOSFTP-Instanzen, die ebenfalls eine .lock Datei anlegen wollen, lesen den Inhalt der Datei und prüfen, ob es einen Prozess mit dieser PID gibt.
      + Wie prüft man das Vorhandensein eines Prozesses via PID
      ++ Unix: ps-Kommand (Achtung: betriebssystemabhängig)
      ++ Windows: k.A.
      Wenn der Prozess vorhanden ist, dann wartet die SOSFTP-Instanz. Ist der Prozess nicht mehr vorhanden, dann löscht SOSFTP die Datei, legt sie neu an mit seiner PID.
    Show
    Eine bestehende Historiendatei kann erweitert werden durch neue Felder, z.B. im Zuge der Einführung einer neuen SOSFTP Version. Dabei wird die Feldliste in der ersten Zeile der Historiendatei ergänzt und durch einen sicheren Mechanismus das gleichzeitige Ändern und Schreiben durch mehrere SOSFTP-Prozesse synchronisiert:
    • SOSFTP erzeugt im Fall einer erforderlichen Feldstrukturänderung diese Datei: <transfer_history>.lock
    • Andere parallele SOSFTP Instanzen suchen diese Datei, falls vorhanden wird das Schreiben verzögert. Nach timeout (Default: 60s) wird mit Fehler abgebrochen.
    • Die .lock Datei nimmt die PID des aktuellen SOSFTP-Prozesses auf. + Unix: $$ + Windows: http://www.jroller.com/santhosh/entry/get_current_java_process_id zeigt wie das mit getpids.exe geht, eine eigene Lösung wäre aber besser. getpids.exe scheint nur die PIDs von Kindprozessen zu zeigen, nicht aber die aktuelle.
    • Parallele SOSFTP-Instanzen, die ebenfalls eine .lock Datei anlegen wollen, lesen den Inhalt der Datei und prüfen, ob es einen Prozess mit dieser PID gibt. + Wie prüft man das Vorhandensein eines Prozesses via PID ++ Unix: ps-Kommand (Achtung: betriebssystemabhängig) ++ Windows: k.A. Wenn der Prozess vorhanden ist, dann wartet die SOSFTP-Instanz. Ist der Prozess nicht mehr vorhanden, dann löscht SOSFTP die Datei, legt sie neu an mit seiner PID.

Activity

Hide
Mürüvet Öksüz added a comment - 18 September 2009 11:36

Auf die Frage: Wie prüft man das Vorhandensein eines Prozesses via PID
Ein ganz simpler Aufruf wie
sun.management.ManagementFactory.getRuntimeMXBean().getName()
liefert uns die <pid>@<rechnername>. Z.B 5536@mo. Die Java Klasse kann diese Information in die lock Datei schreiben.
Das geht leider nur ab java version 1.5.

Statt getPids() würde ich gerne die Kommandoaufruf tasklist.exe verwenden. Dieser Kommandobefehl liefert folgende Information:

  • Abbildname
  • PID
  • Sitzungsname
  • Sitz.-Nr.
  • Speichernutzung

Parallele SOSFTP-Instanzen, die auch in die Historiendatei schreiben wollen, überprüfen zuerst, ob eine lock Datei existiert. Wenn ja, wird das Schreiben verzögert. Nach der Verzögerung wird wieder überprüft, ob die lock Datei weiterhin existiert. Wenn nicht, kann der parallele SOSFTP-Instanz wie gewohnt schreiben. Wenn der lock Datei weiterhin existiert, dann wird der PID aus der lock Datei gelesen und mithilfe von tasklist überprüft, ob diese Process mit der PID weiter existiert. Ist der Prozess nicht mehr vorhanden, dann löscht SOSFTP die lock Datei und legt sie neu an mit seiner PID.

ZUR INFO: Der Kommandobefehl tasklist wird meistens mit Windows mitgeliefert. Wenn nicht, dann kann Sie kostenfrei heruntergeladen werden und unter c:/Windows/System32 gespeichert werden.
Es gibt auch die nette Kommandozeile mit taskkill.exe, der wie der Name sagt, einen process killen kann.

Wäre es ein Problem auf java 1.5 umzusteigen.

Show
Mürüvet Öksüz added a comment - 18 September 2009 11:36 Auf die Frage: Wie prüft man das Vorhandensein eines Prozesses via PID Ein ganz simpler Aufruf wie sun.management.ManagementFactory.getRuntimeMXBean().getName() liefert uns die <pid>@<rechnername>. Z.B 5536@mo. Die Java Klasse kann diese Information in die lock Datei schreiben. Das geht leider nur ab java version 1.5. Statt getPids() würde ich gerne die Kommandoaufruf tasklist.exe verwenden. Dieser Kommandobefehl liefert folgende Information:
  • Abbildname
  • PID
  • Sitzungsname
  • Sitz.-Nr.
  • Speichernutzung
Parallele SOSFTP-Instanzen, die auch in die Historiendatei schreiben wollen, überprüfen zuerst, ob eine lock Datei existiert. Wenn ja, wird das Schreiben verzögert. Nach der Verzögerung wird wieder überprüft, ob die lock Datei weiterhin existiert. Wenn nicht, kann der parallele SOSFTP-Instanz wie gewohnt schreiben. Wenn der lock Datei weiterhin existiert, dann wird der PID aus der lock Datei gelesen und mithilfe von tasklist überprüft, ob diese Process mit der PID weiter existiert. Ist der Prozess nicht mehr vorhanden, dann löscht SOSFTP die lock Datei und legt sie neu an mit seiner PID. ZUR INFO: Der Kommandobefehl tasklist wird meistens mit Windows mitgeliefert. Wenn nicht, dann kann Sie kostenfrei heruntergeladen werden und unter c:/Windows/System32 gespeichert werden. Es gibt auch die nette Kommandozeile mit taskkill.exe, der wie der Name sagt, einen process killen kann. Wäre es ein Problem auf java 1.5 umzusteigen.

People

Dates

  • Due:
    14/Sep/09
    Created:
    11 September 2009 13:50
    Updated:
    20 June 2011 12:34
    Resolved:
    13 November 2009 12:20