Verteilte Anwendungen

TL-Sync: Bereits gesendete Daten erneut senden

WARNUNG: Das Versenden von alten Daten kann zu Fehlern bei der Datenübertragung führen, durch die diese vollständig und dauerhaft anhält, bis der Fehler manuell behoben wurde. Das passiert, wenn es im Laufe der Zeit Änderungen am Daten-Modell gab, und die alten Daten aufgrund dessen zum Teil nicht mehr gelesen werden können. Das fällt im normalen Betrieb nicht immer auf, weil nicht von allen Arten von Fachobjekten alte Datenstände angezeigt werden können. Beim erneuten Versenden aller Daten kann das aber auffallen, weil dabei systematisch alten Datenstände gelesen werden. Des weiteren kann es zu Fehlern kommen, wenn eine empfangende Anwendung die Daten nicht mittels TL-Sync verarbeitet, sondern dafür andere Mechanismen nutzt.

Hinweis: Vorsichtshalber sollte unbedingt ein Backup aller Anwendungen, sowohl der sendenden als auch aller empfangenden, erstellt werden.

  1. Alle Cluster-Knoten der sendenden Anwendung herunterfahren.

  2. In der Datenbank der sendenden Anwendung folgendes SQL-Statement ausführen:

    1. delete from TL_PROPERTIES where "propKey" like 'TLSync.lastSentRevisionAtDate%';

    2. Dadurch wird gelöscht, welche KnowledgeBase Revision die Anwendung zuletzt per TL-Sync gesendet hat. Sie fängt daher wieder von vorne an.

  3. Die Anwendung wieder starten.

Hinweis: Alle Anwendungen, sowohl die sendende als auch alle empfangenden, sollten getestet werden, bevor sie wieder verwendet werden.

TL-Sync: Bereits verarbeitete Daten erneut verarbeiten

WARNUNG: Das doppelte Verarbeiten von Daten kann zu schweren Schäden am Datenstand führen, wenn die Anwendung nicht technisch und fachlich dafür geeignet und darauf vorbereitet ist. Insbesondere gilt: Falls ein Objekt vorher schon übertragen aber noch nicht gelöscht wurde, wird es dadurch ein zweites Mal angelegt. Das bereits existierende Objekt wird nicht wiedererkannt und daher auch nicht aktualisiert. Dadurch können IDs, die eindeutig sein müssen, nicht mehr eindeutig sein. Das kann zu schweren technischen Problemen führen.

Hinweis: Vorsichtshalber sollte unbedingt ein Backup der Anwendung erstellt werden.

  1. Alle Cluster-Knoten der empfangenden Anwendung müssen herunterfahren.

  2. Das Kafka Topic muss geleert werden. Gemeint ist hier das Kafka Topic, über das die Anwendung mittels TL-Sync Daten empfängt. Alle anderen Topics sind hierfür irrelevant.

    1. Anmerkung: Das leeren des Topics ist vor dem erneuten Senden notwendig, weil sonst die Nachrichten, die sich noch im Kafka befinden, eventuell vor den erneut gesendeten Daten gelesen werden. Das führt erstens zu Daten Chaos. Und zweitens werden dadurch die Datenbank Einträge, die weiter unten gelöscht werden, durch diese Nachrichten wiederhergestellt und die erneut gesendeten Daten dadurch ignoriert.

    2. Anmerkung: Wenn sich noch alle Nachrichten im Topic befänden, könnte das leeren und erneut versenden entfallen. Es ist allerdings sehr unwahrscheinlich, dass der Kafka Server die Nachrichten jahrelang speichert. Daher wird das hier nicht weiter behandelt. Wenn die Anwendung das Chunking von TL-Sync Kafka Nachrichten verwendet, müsste dann in der Datenbank der empfangenden Anwendung in der Tabelle TL_PROPERTIES noch die Last Message ID für die sendende Anwendung zurückgesetzt werden.

  3. Die sendende Anwendung muss alle ihre Daten erneut senden.

  4. In der Datenbank der sendenden Anwendung folgendes SQL ausführen:

    1. select "propValue" from TL_PROPERTIES where "propKey" = 'system_id';

    2. Das ermittels die "System ID". Diese wird weiter unten benötigt. Es handelt sich um eine lange Zahl, die auch negativ sein kann. Das Vorzeichen ist also relevant.

  5. In der Datenbank der empfangenden Anwendung folgendes SQL ausführen. Dazu zuerst in der Query [System ID] durch die oben ermittelte ersetzen. Dabei das Vorzeichen nicht vergessen.

    1. Das Ergebnis sieht zum Beispiel so aus: TLSync.source90180788049700885.lastProcessedRev

    2. Oder bei einer negativen Zahl entsprechend: TLSync.source-90180788049700885.lastProcessedRev

    3. Auszuführendes SQL: delete from TL_PROPERTIES where "propKey" like 'TLSync.source[System ID].lastProcessedRev';

    4. Dadurch wird gelöscht, welche KnowledgeBase Revision die Anwendung zuletzt per TL-Sync von diesem Server verarbeitet hat. Sie fängt daher bei diesem Server wieder von vorne an die Daten zu verarbeiten.

  6. Die Anwendung wieder starten.

Hinweis: Die Anwendung sollte getestet werden, bevor sie wieder verwendet wird.

TL-Sync: Gesamten Datenstand anfordern

Hinweis: Falls es weitere Anwendungen gibt, die von der sendenden Anwendung Daten empfangen, empfangen diese den Datenstand ebenfalls nochmal.

  1. Auf der sendenden Anwendung muss folgende Anleitung befolgt werden: "Bereits gesendete Daten erneut senden" (siehe oben)
  2. Falls die empfangende Anwendung die Daten bereits vorher empfangen und verarbeitet hat, muss außerdem folgende Anleitung befolgt werden: "Bereits verarbeitete Daten erneut verarbeiten"
    1. Andernfalls werden die erneut gesendeten Daten als "bereits verarbeitet" erkannt und ignoriert.