Deadlock found when trying to get lock

In diesem Forum können Fragen zum OrderSprinter gestellt werden.
misery
Beiträge: 36
Registriert: Do 24. Sep 2020, 09:53

Re: Deadlock found when trying to get lock

Beitrag von misery »

Ich habe mir gerade mal überlegt, ob dieser Workflow an dieser Stelle hilfreich wäre. Wie es aussieht scheint ja das Problem zu sein, dass die TSE-Daten nicht korrekt abgespeichert werden können weil mit der DB irgendwas ist. Also wird ein Rollback durchgeführt, richtig? Damit besteht ja immer das Problem, dass die TSE-Daten nicht ankommen.

Um eine langlaufende Transaktion zu vermeiden, könnte man so vorgehen. Auch die TSE-Daten gehen nicht verloren.

1. Bestellung wird in die DB committed.
2. Das TSE wird für die Signatur angesteuert und eine ID mitgegeben.
3. Der TSEConnector signiert und speichert die Daten temporär in eine Datei mit der mitgegeben ID.
4. Die TSE-Daten werden in der DB hinzugefügt.
5. Dem TSEConnector wird bestätigt, dass die ID gespeichert wurde.
6. Der TSEConnector löscht die temporäre Datei.

Nun kann gut unterschieden werden, ob die TSE-Daten noch nicht in der DB hinterlegt wurden oder noch gar nicht beim TSE angekommen sind.

Fehlen die TSE-Daten, kann dies in der DB erkannt werden und mittels der ID die TSE-Daten beim TSEConnector erneut abgefragt werden. Dazu braucht es natürlich eine weitere API im Connector, dass die ID erwartet. Somit kann man die TSE-Daten mehrfach abholen bis bestätigt wurde, dass sie gesichert wurden. Kennt der TSEConnector die ID nicht, wurden die Daten noch gar nicht signiert.

Was meinst du? Sinnvoll für Ordersprinter? Kenne das darunterliegende System nicht wie Ordersprinter agiert. :-)
Eventuell könnte man noch einen Admin-Checker einbauen, ob es Lücken beim TSE-Counter gibt um rechtzeitig Alarm zu schlagen, dass irgendwas hief läuft.

Viele Grüße
André
pichel
Administrator
Beiträge: 1154
Registriert: So 13. Sep 2015, 19:48
Wohnort: Hamburg
Kontaktdaten:

Re: Deadlock found when trying to get lock

Beitrag von pichel »

Hallo André,

so ein ova-File wäre super, wenn du mir das zur Verfügung stellen könntest!

Es gibt bereits ein Feld TSE-Fehler. Das benötige ich, um darzustellen, ob die TSE kaputt ist und nicht signieren kann, wichtig für den DSFinv-k-Export.

Aber nach deiner Beschreibung liegt hier ja ein ganz anderer Fehler vor, nämlich, dass die Signaturinfo korrekt erzeugt wurde, aber nicht den Weg in die DB findet. Da die Kernapplikation ständig Daten in die DB schreibt, vermute ich das Problem eher weniger beim DB-Zugriff, sondern eher bei der Schnittstelle zwischen TSEConnector und Kernapplikation. Nutzt du immer den Simulator oder die richtige TSE-Hardware?

Tritt der Fehler immer sofort auf oder erst nach einer gewissen Zeit (Standby? Deadlocks?). Welches OS verwendest du eigentlich?

Wie gesagt, ein ova-File würde mir sicher sehr weiterhelfen :)

Gruß,

Stefan
Stefan Pichel
Entwickler der Kassensoftware OrderSprinter (http://www.ordersprinter.de)
misery
Beiträge: 36
Registriert: Do 24. Sep 2020, 09:53

Re: Deadlock found when trying to get lock

Beitrag von misery »

Moin Stefan,

habe dir die Daten per Mail geschickt.
Ja, dass es Probleme mit der DB sind, habe ich mir schon gedacht. Daher die Idee oben. Was sagst du dazu, dass der TSEConnector die Daten so lange vorhält bis sie abgelegt werden konnten?

André
pichel
Administrator
Beiträge: 1154
Registriert: So 13. Sep 2015, 19:48
Wohnort: Hamburg
Kontaktdaten:

Re: Deadlock found when trying to get lock

Beitrag von pichel »

Hallo André,

prinzipiell keine so schlechte Idee, aber im Moment möchte ich gerne die Zeit in die Fehleranalyse stecken, warum so wie du schreibst keine Exception im error_log zu sehen ist, obwohl die vom TSEConnector zurückgelieferte Info offenbar in deinem Setup nicht in die DB geschrieben wird.

Aber ich habe dich richtig verstanden, dass der Fehler bisher nur aufgetreten ist, wenn gleichzeitig die DB per mysqldump gestresst wird - und du befürchtest, dass der Fehler auch im richtigen Betrieb irgendwann mal auftreten könnte?

Die kommende Woche wird übrigens leider wieder weniger Zeit für OS bereitstehen..

Gruß,

Stefan
Stefan Pichel
Entwickler der Kassensoftware OrderSprinter (http://www.ordersprinter.de)
misery
Beiträge: 36
Registriert: Do 24. Sep 2020, 09:53

Re: Deadlock found when trying to get lock

Beitrag von misery »

Moin Stefan,

ja, genau, das passiert nicht im normalen Betrieb.
Sorry, das habe ich wohl nicht deutlich genug geschrieben. :-)

Da es programmatisch anscheinend möglich ist, dass es zu diesem Fehlverhalten kommen KANN, macht mir das natürlich Sorge. Vor allem wenn die TSE-Daten ohne Fehlermeldung verschwinden KÖNNTEN. :-)
In der Realität besteht erst mal keine Panik. Aber eine Angst, dass es dazu kommen KANN, ist schon da. :-)

Ja, kein Problem. :-)

André
misery
Beiträge: 36
Registriert: Do 24. Sep 2020, 09:53

Re: Deadlock found when trying to get lock

Beitrag von misery »

Hallo Stefan,

hast du schon Zeit gefunden die VM zum Fliegen zubringen? :-)

André
pichel
Administrator
Beiträge: 1154
Registriert: So 13. Sep 2015, 19:48
Wohnort: Hamburg
Kontaktdaten:

Re: Deadlock found when trying to get lock

Beitrag von pichel »

Hallo André,

nee sorry, hatte ich tatsächlich gar nicht mehr auf dem Plan. Tritt der Fehler mit der neuesten Version denn immer noch auf? Ich bin froh, wenn ich die TSEConnector-Geschichte endlich mal abschließen kann...

Gruß,

Stefan
Stefan Pichel
Entwickler der Kassensoftware OrderSprinter (http://www.ordersprinter.de)
misery
Beiträge: 36
Registriert: Do 24. Sep 2020, 09:53

Re: Deadlock found when trying to get lock

Beitrag von misery »

Moin Stefan,

habe gerade mal die 2.0.11 ausprobiert. Das Problem besteht immer noch... bei großer Last kommt es zwar beim TSE an aber erscheint nicht in der Datenbank bzw. Tischoberfläche.

André
pichel
Administrator
Beiträge: 1154
Registriert: So 13. Sep 2015, 19:48
Wohnort: Hamburg
Kontaktdaten:

Re: Deadlock found when trying to get lock

Beitrag von pichel »

Moin André,

ich bin wieder mal unterwegs ohne meinen Entwicklungsrechner (d.h. ohne Virtual Box und deinem OVA-Image), aber kurze Frage: Hattest du die in der php.ini die max_execution_time wie auf meiner Webseite empfohlen auf 6000 eingestellt?

Insoferm die PHP-Execution länger erlaubt ist, als die Zeiträume, in denen der PHP-Thread durch Backup oder was auch immer geblockt ist, sollte es doch eigentlich nicht zum Deadlock kommen (natürlich nur wenn man im Test zwischen den Blockierungen auch Luft lässt, damit auch andere Aufgaben abgearbeitet werden können).

Gruß,

Stefan
Stefan Pichel
Entwickler der Kassensoftware OrderSprinter (http://www.ordersprinter.de)
misery
Beiträge: 36
Registriert: Do 24. Sep 2020, 09:53

Re: Deadlock found when trying to get lock

Beitrag von misery »

Moin Stefan,

ja, der Wert ist auf 6000 geändert. Kann sein, dass in deinem OVA-Image noch 600 steht. Aber selbst 5 Minuten sollten ja lang genug sein. Im Test wechselt die GUI auch sofort auf den Raumplan. Da ist kaum eine Verzögerung zu sehen.

André
Antworten