From 86338ab551baf7c5dc4f63a1a103880e886acf69 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Thu, 8 Dec 2011 11:47:59 +1100 Subject: dbcheck: cope with objects disappearing during checking Autobuild-User: Andrew Tridgell Autobuild-Date: Thu Dec 8 03:23:49 CET 2011 on sn-devel-104 --- source4/scripting/python/samba/dbchecker.py | 20 +++++++++++++++----- source4/scripting/python/samba/netcmd/dbcheck.py | 2 +- 2 files changed, 16 insertions(+), 6 deletions(-) (limited to 'source4') 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") -- cgit