From b2a31e7655b4e8dbe114d9a21718330b409735f8 Mon Sep 17 00:00:00 2001
From: gary_williams <gary_williams@localhost>
Date: Tue, 05 Jun 2007 09:26:09 +0000
Subject: [PATCH] Issue 606 implement a full re-synchronization through a protocol
---
opends/tests/functional-tests/shared/functions/dsadm.xml | 330 ++++++++++++++++++++++++++++++++++++++++++++----------
1 files changed, 269 insertions(+), 61 deletions(-)
diff --git a/opends/tests/functional-tests/shared/functions/dsadm.xml b/opends/tests/functional-tests/shared/functions/dsadm.xml
index b1d635b..44c1d3c 100755
--- a/opends/tests/functional-tests/shared/functions/dsadm.xml
+++ b/opends/tests/functional-tests/shared/functions/dsadm.xml
@@ -28,9 +28,9 @@
<stax>
<!-- This function configures DS using the configure-ds script -->
- <function name="ConfigureDsWithScript">
+ <function name="SetUpDsWithScript">
<function-prolog>
- This function configures a Directory Server using a script
+ This function sets up a Directory Server using a script
</function-prolog>
<function-map-args>
<function-arg-def name="location" type="optional" default="'%s' % STAXServiceMachine">
@@ -129,7 +129,7 @@
'%s %s' % (STAFCmd, STAFCmdParams)
</message>
- <process name="'Configure DS Script'">
+ <process name="'Setup DS Script'">
<location>'%s' % location</location>
<command>'%s' % STAFCmd</command>
<parms>'%s' % STAFCmdParams</parms>
@@ -1037,7 +1037,7 @@
<!-- Local variables -->
<script>
- mylocation=location
+ myLocation=location
taskLdif='%s/../functional-tests/shared/data/import-task.ldif' % dsPath
tmpTaskLdif='%s/import-task.ldif' % TMP_DATA_DIR
taskDN='ds-task-id=%s,cn=Scheduled Tasks,cn=Tasks' % taskID
@@ -1102,12 +1102,12 @@
{ 'location' : STAXServiceMachine,
'srcfile' : tmpTaskLdif,
'destfile' : taskLdif,
- 'remotehost' : mylocation }
+ 'remotehost' : myLocation }
</call>
<!-- Start the task using ldap task interface -->
<call function="'StartLdapTask'">
- { 'location' : mylocation,
+ { 'location' : myLocation,
'taskLabel' : 'Online Import Task',
'dsHost' : dsInstanceHost,
'dsPort' : dsInstancePort,
@@ -1118,7 +1118,7 @@
<!-- Check that the ldap task is completed -->
<call function="'CheckLdapTask'">
- { 'location' : mylocation,
+ { 'location' : myLocation,
'dsTaskDn' : taskDN,
'dsHost' : dsInstanceHost,
'dsPort' : dsInstancePort,
@@ -1214,7 +1214,8 @@
<!-- Local variables -->
<script>
- mylocation=location
+ myLocation=location
+ myPath=dsPath
myhost=dsHost
myport=dsPort
mydn=dsDn
@@ -1234,12 +1235,18 @@
<sequence>
<!-- StartDS -->
<call function="'StartDsWithScript'">
- { 'location' : mylocation }
+ { 'location' : myLocation,
+ 'dsPath' : myPath }
</call>
<!-- Wait for DS to start -->
<call function="'isAlive'">
- { 'location' : mylocation,
+ { 'location' : myLocation,
+ 'dsPath' : myPath,
+ 'dsInstanceHost' : myhost ,
+ 'dsInstancePort' : myport ,
+ 'dsInstanceDn' : mydn ,
+ 'dsInstancePswd' : mypswd ,
'noOfLoops' : 5 ,
'noOfMilliSeconds' : 2000 }
</call>
@@ -1251,7 +1258,8 @@
<iterate var="expectedEntry" in="expectedEntries">
<sequence>
<call function="'SearchObject'">
- { 'location' : mylocation ,
+ { 'location' : myLocation ,
+ 'dsPath' : myPath,
'dsInstanceHost' : myhost ,
'dsInstancePort' : myport ,
'dsInstanceDn' : mydn ,
@@ -1274,7 +1282,8 @@
<break/>
</if>
<call function="'SearchObject'">
- { 'location' : mylocation ,
+ { 'location' : myLocation ,
+ 'dsPath' : myPath,
'dsInstanceHost' : myhost ,
'dsInstancePort' : myport ,
'dsInstanceDn' : mydn ,
@@ -1295,10 +1304,11 @@
<if expr="stopDS == 'yes'">
<!-- StopDS -->
<call function="'StopDsWithScript'">
- { 'location' : mylocation ,
- 'dsHost' : myhost ,
- 'dsPort' : myport ,
- 'dsBindDN' : mydn ,
+ { 'location' : myLocation ,
+ 'dsPath' : myPath,
+ 'dsHost' : myhost ,
+ 'dsPort' : myport ,
+ 'dsBindDN' : mydn ,
'dsBindPwd' : mypswd }
</call>
</if>
@@ -1503,7 +1513,7 @@
<!-- Local variables -->
<script>
- mylocation=location
+ myLocation=location
taskLdif='%s/../functional-tests/shared/data/export-task.ldif' % dsPath
tmpTaskLdif='%s/export-task.ldif' % TMP_DATA_DIR
taskDN='ds-task-id=%s,cn=Scheduled Tasks,cn=Tasks' % taskID
@@ -1562,12 +1572,12 @@
{ 'location' : STAXServiceMachine,
'srcfile' : tmpTaskLdif,
'destfile' : taskLdif,
- 'remotehost' : mylocation }
+ 'remotehost' : myLocation }
</call>
<!-- Start the task using ldap task interface -->
<call function="'StartLdapTask'">
- { 'location' : mylocation,
+ { 'location' : myLocation,
'taskLabel' : 'Online Export Task',
'dsHost' : dsInstanceHost,
'dsPort' : dsInstancePort,
@@ -1578,7 +1588,7 @@
<!-- Check that the task is completed -->
<call function="'CheckLdapTask'">
- { 'location' : mylocation,
+ { 'location' : myLocation,
'dsTaskDn' : taskDN,
'dsHost' : dsInstanceHost,
'dsPort' : dsInstancePort,
@@ -1631,13 +1641,13 @@
<!-- Local variables -->
<script>
- mylocation=location
+ myLocation=location
</script>
<message>
'backup%s -n %s -d %s %s' % (fileExt,backEnd,backupDir,extraParams)
</message>
<process name="'Offline Backup'">
- <location>'%s' % mylocation </location>
+ <location>'%s' % myLocation </location>
<command>'%s/backup%s' % (dsBinPath,fileExt)</command>
<parms>'-d %s -n %s %s' % (backupDir,backEnd,extraParams)</parms>
<workdir>'%s' % dsBinPath</workdir>
@@ -1765,7 +1775,7 @@
<sequence>
<script>
- mylocation=location
+ myLocation=location
taskLdif='%s/../functional-tests/shared/data/backup-task.ldif' % dsPath
tmpTaskLdif='%s/backup-task.ldif' % TMP_DATA_DIR
taskDN='ds-task-id=%s,cn=Scheduled Tasks,cn=Tasks' % taskID
@@ -1812,12 +1822,12 @@
{ 'location' : STAXServiceMachine,
'srcfile' : tmpTaskLdif,
'destfile' : taskLdif,
- 'remotehost' : mylocation }
+ 'remotehost' : myLocation }
</call>
<!-- Start the task using ldap task interface -->
<call function="'StartLdapTask'">
- { 'location' : mylocation,
+ { 'location' : myLocation,
'taskLabel' : 'Online Backup Task',
'dsHost' : dsInstanceHost,
'dsPort' : dsInstancePort,
@@ -1828,7 +1838,7 @@
<!-- Check that the ldap task is completed -->
<call function="'CheckLdapTask'">
- { 'location' : mylocation,
+ { 'location' : myLocation,
'dsTaskDn' : taskDN,
'dsHost' : dsInstanceHost,
'dsPort' : dsInstancePort,
@@ -1875,14 +1885,14 @@
<!-- Local variables -->
<script>
- mylocation=location
+ myLocation=location
</script>
<message>
'restore%s -d %s %s' % (fileExt,backupDir,extraParams)
</message>
<process name="'Offline restore'">
- <location>'%s' % mylocation </location>
+ <location>'%s' % myLocation </location>
<command>'%s/restore%s' % (dsBinPath,fileExt)</command>
<parms>'-d %s %s' % (backupDir,extraParams)</parms>
<workdir>'%s' % dsBinPath</workdir>
@@ -1975,7 +1985,7 @@
<sequence>
<script>
- mylocation=location
+ myLocation=location
taskLdif='%s/../functional-tests/shared/data/restore-task.ldif' % dsPath
tmpTaskLdif='%s/restore-task.ldif' % TMP_DATA_DIR
taskDN='ds-task-id=%s,cn=Scheduled Tasks,cn=Tasks' % taskID
@@ -2014,12 +2024,12 @@
{ 'location' : STAXServiceMachine,
'srcfile' : tmpTaskLdif,
'destfile' : taskLdif,
- 'remotehost' : mylocation }
+ 'remotehost' : myLocation }
</call>
<!-- Start the task using ldap task interface -->
<call function="'StartLdapTask'">
- { 'location' : mylocation,
+ { 'location' : myLocation,
'taskLabel' : 'Online Restore Task',
'dsHost' : dsInstanceHost,
'dsPort' : dsInstancePort,
@@ -2030,7 +2040,7 @@
<!-- Check that the ldap task is completed -->
<call function="'CheckLdapTask'">
- { 'location' : mylocation,
+ { 'location' : myLocation,
'dsTaskDn' : taskDN,
'dsHost' : dsInstanceHost,
'dsPort' : dsInstancePort,
@@ -2102,7 +2112,7 @@
<sequence>
<script>
- mylocation=location
+ myLocation=location
taskLdif='%s/../functional-tests/shared/data/schema-task.ldif' % dsPath
tmpTaskLdif='%s/schema-task.ldif' % TMP_DATA_DIR
taskDN='ds-task-id=%s,cn=Scheduled Tasks,cn=Tasks' % taskID
@@ -2138,21 +2148,21 @@
{ 'location' : STAXServiceMachine,
'srcfile' : tmpTaskLdif,
'destfile' : taskLdif,
- 'remotehost' : mylocation }
+ 'remotehost' : myLocation }
</call>
<!-- Copy the schema update ldif to remote host's config/schema directory -->
<message>'Copy schema update ldif file.'</message>
<call function="'copyFile'">
- { 'location' : mylocation,
+ { 'location' : myLocation,
'srcfile' : '%s/schema/ldifs/%s' % (STAGED_DATA_DIR,ldifFile),
'destfile' : '%s/%s/config/schema/%s' % (DIRECTORY_INSTANCE_DIR,OPENDSNAME,ldifFile),
- 'remotehost' : mylocation }
+ 'remotehost' : myLocation }
</call>
<!-- Start the task using ldap task interface -->
<call function="'StartLdapTask'">
- { 'location' : mylocation,
+ { 'location' : myLocation,
'taskLabel' : 'Online Schema Task',
'dsHost' : dsInstanceHost,
'dsPort' : dsInstancePort,
@@ -2163,7 +2173,7 @@
<!-- Check that the ldap task is completed -->
<call function="'CheckLdapTask'">
- { 'location' : mylocation,
+ { 'location' : myLocation,
'dsTaskDn' : taskDN,
'dsHost' : dsInstanceHost,
'dsPort' : dsInstancePort,
@@ -2174,6 +2184,185 @@
</sequence>
</function>
+ <!-- Total Update Task Function -->
+ <function name="TotalUpdateTask">
+
+ <function-prolog>
+ This function performs a total update of a replication domain
+ </function-prolog>
+
+ <function-map-args>
+ <function-arg-def name="location" type="optional" default="'%s' % STAF_REMOTE_HOSTNAME">
+ <function-arg-description>
+ Location of target host
+ </function-arg-description>
+ <function-arg-property name="type" value="hostname"/>
+ </function-arg-def>
+ <function-arg-def name="dsPath" type="optional" default="'%s/%s' % (DIRECTORY_INSTANCE_DIR,OPENDSNAME)">
+ <function-arg-description>
+ Pathname to installation root
+ </function-arg-description>
+ <function-arg-property name="type" value="pathname"/>
+ </function-arg-def>
+ <function-arg-def name="dsInstanceHost" type="optional">
+ <function-arg-description>
+ Directory server host name
+ </function-arg-description>
+ <function-arg-property name="type" value="integer"/>
+ </function-arg-def>
+ <function-arg-def name="dsInstancePort" type="optional">
+ <function-arg-description>
+ Directory server port number
+ </function-arg-description>
+ <function-arg-property name="type" value="integer"/>
+ </function-arg-def>
+ <function-arg-def name="dsInstanceDn" type="optional">
+ <function-arg-description>
+ Bind DN
+ </function-arg-description>
+ <function-arg-property name="type" value="dn"/>
+ </function-arg-def>
+ <function-arg-def name="dsInstancePswd" type="optional">
+ <function-arg-description>
+ Bind password
+ </function-arg-description>
+ </function-arg-def>
+ <function-arg-def name="taskID" type="optional">
+ <function-arg-description>
+ The identifier for the task
+ </function-arg-description>
+ <function-arg-property name="type" value="string"/>
+ </function-arg-def>
+ <function-arg-def name="domainDN" type="required">
+ <function-arg-description>
+ The dn of the domain to be replicated
+ </function-arg-description>
+ <function-arg-property name="type" value="dn"/>
+ </function-arg-def>
+ <function-arg-def name="replicaServerID" type="required">
+ <function-arg-description>
+ The id of the replica server
+ </function-arg-description>
+ <function-arg-property name="type" value="integer"/>
+ </function-arg-def>
+ </function-map-args>
+
+ <sequence>
+
+ <script>
+ myLocation=location
+ myPath=dsPath
+ myDataFolder='shared/data/replication'
+ taskLdif='%s/../functional-tests/shared/data/totalupdate-task.ldif' % dsPath
+ tmpTaskLdif='%s/totalupdate-task.ldif' % TMP_DATA_DIR
+ taskDN='ds-task-id=%s,cn=Scheduled Tasks,cn=Tasks' % taskID
+ </script>
+
+ <!-- Build the total update task configuration object -->
+ <script>
+ ldifLines=[]
+ ldifLines.append('dn: %s' % taskDN)
+ ldifLines.append('objectclass: top')
+ ldifLines.append('objectclass: ds-task')
+ ldifLines.append('objectclass: ds-task-initialize-from-remote-replica')
+ ldifLines.append('ds-task-class-name: org.opends.server.tasks.InitializeTask')
+ ldifLines.append('ds-task-id: %s' % taskID)
+ ldifLines.append('ds-task-initialize-domain-dn: %s' % domainDN)
+ ldifLines.append('ds-task-initialize-replica-server-id: %s' % replicaServerID)
+ </script>
+
+ <!-- Write out the totalupdate-task ldif -->
+ <script>
+ outfile = open(tmpTaskLdif,"w")
+
+ for line in ldifLines:
+ outfile.write("%s\n" % line)
+
+ outfile.close()
+ </script>
+
+ <!-- Copy the totalupdate-task ldif to remote host -->
+ <message>'Copy totalupdate task ldif file.'</message>
+ <call function="'copyFile'">
+ { 'location' : STAXServiceMachine,
+ 'srcfile' : tmpTaskLdif,
+ 'destfile' : taskLdif,
+ 'remotehost' : myLocation }
+ </call>
+
+ <script>
+ STAXCode, STAXReason=STAXResult
+ </script>
+
+ <if expr="STAXCode != 0">
+ <sequence>
+ <message>
+ 'Copy of totalupdate task failed (STAXCode=%s)' % STAXCode
+ </message>
+ <return>[STAXCode, STAXReason]</return>
+ </sequence>
+ </if>
+
+ <!-- Start the task using ldap task interface -->
+ <call function="'StartLdapTask'">
+ { 'location' : myLocation,
+ 'dsPath' : myPath,
+ 'taskLabel' : 'Online Total Update Task',
+ 'dsHost' : dsInstanceHost,
+ 'dsPort' : dsInstancePort,
+ 'dsBindDn' : dsInstanceDn,
+ 'dsBindPswd' : dsInstancePswd,
+ 'dsTaskLdif' : taskLdif }
+ </call>
+
+ <script>
+ STAXCode, STAXReason=STAXResult
+ </script>
+
+ <if expr="STAXCode != 0">
+ <sequence>
+ <message>
+ 'Start of totalupdate task failed (Code=%s)' % STAXCode
+ </message>
+ <return>[STAXCode, STAXReason]</return>
+ </sequence>
+ </if>
+
+ <!-- Check that the ldap task is completed -->
+ <call function="'CheckLdapTask'">
+ { 'location' : myLocation,
+ 'dsPath' : myPath,
+ 'dsTaskDn' : taskDN,
+ 'dsHost' : dsInstanceHost,
+ 'dsPort' : dsInstancePort,
+ 'dsBindDn' : dsInstanceDn,
+ 'dsBindPswd' : dsInstancePswd }
+ </call>
+
+ <script>
+ STAXCode, STAXReason=STAXResult
+ </script>
+
+ <if expr="STAXCode != 0">
+ <sequence>
+ <message>
+ 'Check of totalupdate task failed (Code=%s)' % STAXCode
+ </message>
+ <return>[STAXCode, STAXReason]</return>
+ </sequence>
+ </if>
+
+ <script>
+ STAXCode=0
+ STAXReason='%s: Success' % STAXCurrentFunction
+ </script>
+
+ <return>[STAXCode, STAXReason]</return>
+
+ </sequence>
+
+ </function>
+
<function name="StartLdapTask">
<function-prolog>
This function starts a task using the ldap task interface
@@ -2233,7 +2422,7 @@
<!-- Local variables -->
<script>
- mylocation=location
+ myLocation=location
</script>
<!-- Build the Modify Command -->
@@ -2268,7 +2457,7 @@
<!-- Perform Task with ldapmodify -->
<process name="'%s' % taskLabel">
- <location>'%s' % mylocation</location>
+ <location>'%s' % myLocation</location>
<command>'%s' % STAFCmd</command>
<parms>'%s' % STAFCmdParams</parms>
<workdir>'%s' % dsBinPath</workdir>
@@ -2279,12 +2468,19 @@
<stderr mode="'stdout'"/>
<returnstdout/>
</process>
-
- <call function="'checkRC'">
- { 'returncode' : RC ,
- 'result' : STAXResult }
- </call>
+
+ <script>
+ STAFCmdRC=RC
+ STAFCmdResult=STAXResult
+ </script>
+ <call function="'checkRC'">
+ { 'returncode' : STAFCmdRC ,
+ 'result' : STAFCmdResult }
+ </call>
+
+ <return>[STAFCmdRC, STAFCmdResult[0][1]]</return>
+
</sequence>
</function>
@@ -2342,7 +2538,7 @@
<!-- Local variables -->
<script>
- mylocation=location
+ myLocation=location
</script>
<script>
@@ -2376,17 +2572,21 @@
dsAttribute='ds-task-state'
STAFCmdParamsList.append('%s' % dsAttribute)
+
+ dsAttribute='ds-task-log-message'
+ STAFCmdParamsList.append('%s' % dsAttribute)
STAFCmdParams=' '.join(STAFCmdParamsList)
</script>
<script>
- searchre = re.compile('ds-task-state: COMPLETED_SUCCESSFULLY')
+ successPattern = re.compile('ds-task-state: COMPLETED_SUCCESSFULLY')
+ stopErrPattern = re.compile('ds-task-state: STOPPED_BY_ERROR')
</script>
<!-- Wait for the task to be COMPLETED_SUCCESSFULLY -->
<script>taskRC=1</script>
- <loop from="1" to="5" while="taskRC != 0">
+ <loop from="1" to="10" while="taskRC != 0">
<sequence>
<message>
@@ -2395,7 +2595,7 @@
<!-- Search for task status -->
<process name="'Search On line Import Task'">
- <location>'%s' % mylocation</location>
+ <location>'%s' % myLocation</location>
<command>'%s' % STAFCmd</command>
<parms>'%s' % STAFCmdParams</parms>
<workdir>'%s' % dsBinPath</workdir>
@@ -2407,39 +2607,47 @@
</process>
<script>
- searchRC=RC
- searchResult=STAXResult
+ STAFCmdRC=RC
+ STAFCmdResult=STAXResult
</script>
-
- <script>
- result = STAXResult[0][1]
- </script>
-
- <if expr='re.search(searchre, result) != None'>
+
+ <if expr='re.search(successPattern, STAFCmdResult[0][1]) != None'>
<sequence>
<script>taskRC=0</script>
<message>
- '%s' % searchResult
+ '%s' % STAFCmdResult
</message>
+ <return>[taskRC, STAFCmdResult[0][1]]</return>
</sequence>
+ <elseif expr='re.search(stopErrPattern, STAFCmdResult[0][1]) != None'>
+ <sequence>
+ <message level="'error'">
+ '%s' % STAFCmdResult
+ </message>
+ <return>[taskRC, STAFCmdResult[0][1]]</return>
+ </sequence>
+ </elseif>
<else>
<message level="'Warning'">
- '%s' % searchResult
+ '%s' % STAFCmdResult
</message>
</else>
</if>
<call function="'checkRC'">
- { 'returncode' : searchRC ,
- 'result' : searchResult }
+ { 'returncode' : STAFCmdRC ,
+ 'result' : STAFCmdResult }
</call>
<call function="'Sleep'">
{ 'sleepForMilliSeconds' : '2000' }
</call>
+
</sequence>
</loop>
+ <return>[taskRC, STAFCmdResult[0][1]]</return>
+
</sequence>
</function>
--
Gitblit v1.10.0