diff options
author | Andrew Tridgell <tridge@samba.org> | 2011-12-08 11:47:59 +1100 |
---|---|---|
committer | Andrew Tridgell <tridge@samba.org> | 2011-12-08 03:23:49 +0100 |
commit | 86338ab551baf7c5dc4f63a1a103880e886acf69 (patch) | |
tree | 398a8766d9cf0eb0d362a47fc02d06e4a89a080a | |
parent | 819f11285d12041f2a22a6c92ebabb8a559886c5 (diff) | |
download | samba-86338ab551baf7c5dc4f63a1a103880e886acf69.tar.gz samba-86338ab551baf7c5dc4f63a1a103880e886acf69.tar.bz2 samba-86338ab551baf7c5dc4f63a1a103880e886acf69.zip |
dbcheck: cope with objects disappearing during checking
Autobuild-User: Andrew Tridgell <tridge@samba.org>
Autobuild-Date: Thu Dec 8 03:23:49 CET 2011 on sn-devel-104
-rw-r--r-- | source4/scripting/python/samba/dbchecker.py | 20 | ||||
-rw-r--r-- | source4/scripting/python/samba/netcmd/dbcheck.py | 2 |
2 files changed, 16 insertions, 6 deletions
diff --git a/source4/scripting/python/samba/dbchecker.py b/source4/scripting/python/samba/dbchecker.py index 6792538f75..ff3fd6ee38 100644 --- a/source4/scripting/python/samba/dbchecker.py +++ b/source4/scripting/python/samba/dbchecker.py @@ -30,7 +30,8 @@ from samba.common import dsdb_Dn class dbcheck(object): """check a SAM database for errors""" - def __init__(self, samdb, samdb_schema=None, verbose=False, fix=False, yes=False, quiet=False): + def __init__(self, samdb, samdb_schema=None, verbose=False, fix=False, yes=False, + quiet=False, in_transaction=False): self.samdb = samdb self.dict_oid_name = None self.samdb_schema = (samdb_schema or samdb) @@ -48,6 +49,7 @@ class dbcheck(object): self.fix_time_metadata = False self.fix_all_missing_backlinks = False self.fix_all_orphaned_backlinks = False + self.in_transaction = in_transaction def check_database(self, DN=None, scope=ldb.SCOPE_SUBTREE, controls=[], attrs=['*']): '''perform a database check, returning the number of errors found''' @@ -423,11 +425,19 @@ class dbcheck(object): if '*' in attrs: attrs.append("replPropertyMetaData") - res = self.samdb.search(base=dn, scope=ldb.SCOPE_BASE, - controls=["extended_dn:1:1", "show_recycled:1", "show_deleted:1"], - attrs=attrs) + try: + res = self.samdb.search(base=dn, scope=ldb.SCOPE_BASE, + controls=["extended_dn:1:1", "show_recycled:1", "show_deleted:1"], + attrs=attrs) + except ldb.LdbError, (enum, estr): + if enum == ldb.ERR_NO_SUCH_OBJECT: + if self.in_transaction: + self.report("ERROR: Object %s disappeared during check" % dn) + return 1 + return 0 + raise if len(res) != 1: - self.report("Object %s disappeared during check" % dn) + self.report("ERROR: Object %s failed to load during check" % dn) return 1 obj = res[0] error_count = 0 diff --git a/source4/scripting/python/samba/netcmd/dbcheck.py b/source4/scripting/python/samba/netcmd/dbcheck.py index 1d4a5b4f33..bd250eb6be 100644 --- a/source4/scripting/python/samba/netcmd/dbcheck.py +++ b/source4/scripting/python/samba/netcmd/dbcheck.py @@ -102,7 +102,7 @@ class cmd_dbcheck(Command): started_transaction = True try: chk = dbcheck(samdb, samdb_schema=samdb_schema, verbose=verbose, - fix=fix, yes=yes, quiet=quiet) + fix=fix, yes=yes, quiet=quiet, in_transaction=started_transaction) if reindex: self.outf.write("Re-indexing...\n") |