SL::DB::Helper::TransNumberGenerator: Tabellen und Zeilen locken
authorMoritz Bunkus <m.bunkus@linet-services.de>
Wed, 3 Jun 2015 10:46:00 +0000 (12:46 +0200)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Wed, 3 Jun 2015 14:53:00 +0000 (16:53 +0200)
commite852b156652474de1b5cb4b12b1a08d4954f69a6
treecc21d92f19e80ce3a3bc0feffab50b26c32b6ac2
parent77c9e01057c863eef7f8647ba91c715a7b6b4dd1
SL::DB::Helper::TransNumberGenerator: Tabellen und Zeilen locken

Die Tabelle, aus der die Liste der bereits benutzten Belegnummern
ausgelesen wird, muss exklusiv gelockt werden, um zu verhindern, dass
danach zwischen dem Auslesen und der Vergabe der neuen Belegnummer eine
andere DB-Verbindung dasselbe macht und dieselbe Nummer verwendet.

Dieses Locking muss daher vor dem Auslesen der Daten geschehen.

Weiterhin müssen die Zeilen in den Nummernkreistabellen (defaults
bzw. business) gelockt werden. Hier reicht aber das Locking der
entsprechenden Zeile.

Beide Locks müssen analog zu SL::TransNumber gehandhabt werden, um einen
potenziellen Deadlock zu vermeiden, sprich zuerst die Belegtabelle,
danach die Zeile in der Nummernkreistabelle.
SL/DB/Helper/TransNumberGenerator.pm