Auto-Removal: datastore record does not exist anymore

Ein Datastore-Writer auf untouchedRecords eines anderen Writers scheitert mir unregelmäßig, einige wenige Male im Monat.

Ich schreibe mir Daten mit Status SUCCESS in den Datastore, und danach die untouchedRecords als MARK_DELETE:

Auto-Removal im Datastore auf instant gesetzt, und auf den Status beschränkt:

Und der Fehler dann so:

Versteh ich nicht. Im Datastore können (solange er nicht angefasst wird) keine MARK_DELETE-Einträge drin sein, weil die direkt entfernt werden.

Also muss jeder vorhandene untouchedRecords-Eintrag einen anderen Status gehabt haben in dem Moment in dem ich den DS aktualisiere.

Aber warum findet dann der zweite DatastoreWriter seinen record nicht? Bevor er nicht auf MARK_DELETE gesetzt wurde, kann er doch gar nicht verschwinden.

Denk ich falsch?

Danke im Voraus, Daniel

Hallo Daniel,

Ich vermute das hier die Ursache für den Fehler liegt. Die Datensätze werden nicht „sofort“ gelöscht, sondern per Hintergrundjob.

Das kann unter Umständen dazu führen, dass im nächsten Run noch „MARK_DELETE“ Datensätze im Datastore vorhanden sind. Wenn der Job zum Löschen der Datensätze dann genau zwischen/währen der Ausführung deiner beiden DatstoreWriter Steps loslegt, sind die „untouched“ Datensätze im zweiten DS Writer Step möglicherweise nicht mehr vorhanden.

VG Torsten

Okay, danke @synesty-Torsten.

Dann kann ich aber auch nix machen, oder? Wenn ich die Löschung nen Tag hoch setze hab ich das selbe Problem, nur nen Tag später :sweat_smile:

Gut, dann ignoriere ich den Fehler einfach. Konnte jetzt funktional auch keine Probleme fest stellen. Wollte egtl nur die Mail los werden :wink:

Grüße

Hallo Daniel,

Ja, du kannst tatsächlich wenig machen. Wir versuchen den Job zum Löschen der Datensätze noch ein wenig zu optimieren. Kannst du uns eventuell sagen wie viel Zeit zwischen den den Runs liegt bzw. zwischen den Importen in den Datastore (Screenshot der beiden DatastoreWriter des Runs vor dem Fehler wäre super).
Falls mehrere Flows (DatastoreWriter) in diesen Datastore importieren, sollte die Zeit dazwischen größer 10min sein. Da könntest du über „Zeige Referenzen“ im Datastore nochmal prüfen, ob es noch weiter Flows in diesen Datastore schreiben.

VG Torsten

Hi Torsten

Okay, da wird das Problem sein. Ich hab drei Flows, die jeweils doppelt (einmal „normal“ und dann das MARK_DELETE auf die untouchedRecords, direkt nach einander) da rein schreiben :weary_face:

Von zwei Flows weiß ich auch, dass da keine 10 Minuten vergehen.

Ich schau mal dass ich das die Tage genauer prüfe, und melde mich dann noch mal, danke!

Zwischen den beiden Steps: sehr wenig. Sekunden wenn es wenige Datensätze sind, wenige Minuten unter Last


(das ist ein x-beliebiger Run, nicht der vor dem Fehler. Da ist das Log schon leer. Aber das wird sich da auch nicht anders verhalten haben)

Da wird der Hund begraben liegen, denn so viel Zeit vergeht nicht.

Bei wenig Last verhält es sich so:

  • (A) der erste Flow läuft immer zur vollen und halben Stunde, und schreibt etwa eine Minute später zwei Mal in den Datastore

  • (B) der stößt einen Flow an, der einen Flow anstößt, der einen Flow anstößt, der etwa 1-2 Minuten später erneut zwei Mal in den Datastore schreibt

  • (C) der dritte Flow läuft unabhängig davon, und schreibt etwa 22 Minuten nach der vollen Stunde ebenfalls zwei mal in den Datastore

Bei viel Last verzögert sich alles etwas mehr, aber auch dann wird es immer wieder dazu kommen dass keine 10 Minuten zwischen den Schreibvorgängen liegen

Wirklich verhindern kann ich das nicht, die drei Flows haben andere Inputs und schreiben z.T. verschiedene Zeilen im Datestore (also legen die an), es gibt aber auch Überschneidungen, also dass ein Flow eine Zeile aktualisiert die kurz davor bereits von einem anderen geschrieben wurde.

Mir würde noch ein ganz grauenhafter Workaround einfallen:

Bevor unser Vertrag groß genug war für die Datastore-Management Features, hab ich mir die Funktionalität selbst gebaut, und bei Querverweisen immer den Status mit rein geholt, und wenn er auf MARK_DELETE stand, den verwiesen Wert selbst genullt :nerd_face:

Das ist funktional das selbe wie ein Querverweis auf eine Zeile die durchs Cleanup bereits entfernt wurde (und in der der QV einen Default von 0 hat für nicht gefundene Datensätze), aber es ist halt echt nicht schön im Handling.

Anderer Ansatz wäre, dass die drei Flows alle eigene Datastores verwenden. Ich verweise da nix zwischen Flows, jeder geschriebene Datensatz wird immer auch nur von dem Flow gelesen der ihn auch geschrieben hat.

Ich hab sie halt zusammen gelegt, weil sie alle das selbe (Bestände im selben Lager) schreiben, und es halt aufgeräumter ist alles in einem zu haben. Und weil es am Ende drei Lager pro Flow sind, und wenn ich das aufsplitte, ich dann neun Datastores statt drei benötige.

Ich glaube ich warte jetzt mal, wie sehr mich die Mail mit dem Fehler in Zukunft noch nerven wird :sweat_smile: Hauptsaison ist bald vorbei, dann wird das bestimmt besser…

Und wenn nicht, dann einzelne Datastores. Dann vergeht auch genug Zeit.

Primär wollte ich egtl auch nur wissen, ob ich irgendwas falsch mache und den Fehler vermeiden kann. Soweit ich sehen kann, hat er bis jetzt kein grobes Fehlverhalten verursacht, ich wollte nur die Mail nicht immer wegklicken müssen :person_shrugging:

Grüße Daniel