Offene Transaktionen vor DB-Upgrades comitten
authorMoritz Bunkus <m.bunkus@linet-services.de>
Mon, 23 Jun 2014 14:15:11 +0000 (16:15 +0200)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Mon, 23 Jun 2014 14:15:11 +0000 (16:15 +0200)
Hintergrund ist, dass Locks potenziell vorhanden sein können. Einfaches
Beispiel: $::instance_conf wird geladen (dadurch implizites
ACCESS-SHARE-Lock auf »defaults«), Upgrade will Schema von »defaults«
verändern, was dann hängt, weil dafür ACCESS-EXCLUSIVE benötigt wird –
das mit ACCESS-SHARE kollidiert.

SL/User.pm

index 8bb9b99..42622f8 100644 (file)
@@ -384,6 +384,9 @@ sub dbupdate2 {
 
   &dbconnect_vars($form, $db);
 
+  # Flush potentially held database locks.
+  $form->get_standard_dbh->commit;
+
   my $dbh = SL::DBConnect->connect($form->{dbconnect}, $form->{dbuser}, $form->{dbpasswd}, SL::DBConnect->get_options) or $form->dberror;
 
   $dbh->do($form->{dboptions}) if ($form->{dboptions});