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 /source4/scripting/python | |
| 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
Diffstat (limited to 'source4/scripting/python')
| -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")  | 
