Wait for memberof task and DS to start before proceeding in installation.

This was causing a replica DS instance to crash if the task was not
completed when we attempted a shutdown to do a restart.

In replication.py we were restarting the DS instance without waiting
for the ports to become available.

It is unlikely that the dn of the memberof task will change but just in
case I noted it in the two places it is referenced.

ticket 1188
This commit is contained in:
Rob Crittenden
2011-04-21 16:43:10 -04:00
committed by Martin Kosek
parent d2be41dd1b
commit 46a3411420
4 changed files with 34 additions and 0 deletions

View File

@@ -641,6 +641,29 @@ class IPAdmin(SimpleLDAPObject):
return entry
def checkTask(self, dn, dowait=False, verbose=False):
"""check task status - task is complete when the nsTaskExitCode attr
is set return a 2 tuple (true/false,code) first is false if task is
running, true if done - if true, second is the exit code - if dowait
is True, this function will block until the task is complete
"""
attrlist = ['nsTaskLog', 'nsTaskStatus', 'nsTaskExitCode', 'nsTaskCurrentItem', 'nsTaskTotalItems']
done = False
exitCode = 0
while not done:
try:
entry = self.getEntry(dn, ldap.SCOPE_BASE, "(objectclass=*)", attrlist)
except errors.NotFound:
break
if verbose:
print entry
if entry.nsTaskExitCode:
exitCode = int(entry.nsTaskExitCode)
done = True
if dowait: time.sleep(1)
else: break
return (done, exitCode)
def normalizeDN(dn):
# not great, but will do until we use a newer version of python-ldap
# that has DN utilities