s4 upgradeprovision: Make grouped commit / rollback more resistant to unexpected...
authorMatthieu Patou <mat@matws.net>
Wed, 16 Jun 2010 07:25:19 +0000 (11:25 +0400)
committerJelmer Vernooij <jelmer@samba.org>
Sat, 19 Jun 2010 22:43:09 +0000 (00:43 +0200)
Signed-off-by: Jelmer Vernooij <jelmer@samba.org>
source4/scripting/python/samba/upgradehelpers.py

index 4cb84ba54f766cac130febf25c45e65b86bcde6f..db6ea560a2123723e008de9930ae12a813bbc004 100755 (executable)
@@ -81,39 +81,68 @@ class ProvisionLDB(object):
         self.secrets.transaction_start()
         self.idmap.transaction_start()
         self.privilege.transaction_start()
+# TO BE DONE
 #        self.hkcr.transaction_start()
 #        self.hkcu.transaction_start()
 #        self.hku.transaction_start()
 #        self.hklm.transaction_start()
 
     def groupedRollback(self):
-        self.sam.transaction_cancel()
-        self.secrets.transaction_cancel()
-        self.idmap.transaction_cancel()
-        self.privilege.transaction_cancel()
+        ok = True
+        try:
+            self.sam.transaction_cancel()
+        except:
+            ok = False
+
+        try:
+            self.secrets.transaction_cancel()
+        except:
+            ok = False
+
+        try:
+            self.idmap.transaction_cancel()
+        except:
+            ok = False
+
+        try:
+            self.privilege.transaction_cancel()
+        except:
+            ok = False
+
+        return ok
+# TO BE DONE
 #        self.hkcr.transaction_cancel()
 #        self.hkcu.transaction_cancel()
 #        self.hku.transaction_cancel()
 #        self.hklm.transaction_cancel()
 
     def groupedCommit(self):
-        self.sam.transaction_prepare_commit()
-        self.secrets.transaction_prepare_commit()
-        self.idmap.transaction_prepare_commit()
-        self.privilege.transaction_prepare_commit()
+        try:
+            self.sam.transaction_prepare_commit()
+            self.secrets.transaction_prepare_commit()
+            self.idmap.transaction_prepare_commit()
+            self.privilege.transaction_prepare_commit()
+        except:
+            return self.groupedRollback()
+# TO BE DONE
 #        self.hkcr.transaction_prepare_commit()
 #        self.hkcu.transaction_prepare_commit()
 #        self.hku.transaction_prepare_commit()
 #        self.hklm.transaction_prepare_commit()
-
-        self.sam.transaction_commit()
-        self.secrets.transaction_commit()
-        self.idmap.transaction_commit()
-        self.privilege.transaction_commit()
+        try:
+            self.sam.transaction_commit()
+            self.secrets.transaction_commit()
+            self.idmap.transaction_commit()
+            self.privilege.transaction_commit()
+        except:
+            return self.groupedRollback()
+        
+# TO BE DONE
 #        self.hkcr.transaction_commit()
 #        self.hkcu.transaction_commit()
 #        self.hku.transaction_commit()
 #        self.hklm.transaction_commit()
+        return True
 
 def get_ldbs(paths, creds, session, lp):
     """Return LDB object mapped on most important databases