def test_abort(topology_m4, m4rid): """Test the abort task basic functionality :id: b09a6887-8de0-4fac-8e41-73ccbaaf7a08 :setup: Replication setup with four suppliers :steps: 1. Disable replication on supplier 4 2. Remove agreements to supplier 4 from other suppliers 3. Stop supplier 2 4. Run a cleanallruv task on supplier 1 5. Run a cleanallruv abort task on supplier 1 :expectedresults: No hanging tasks left 1. Replication on supplier 4 should be disabled 2. Agreements to supplier 4 should be removed 3. Supplier 2 should be stopped 4. Operation should be successful 5. Operation should be successful """ log.info('Running test_abort...') # Remove the agreements from the other suppliers that point to supplier 4 remove_supplier4_agmts("test_abort", topology_m4) # Stop supplier 2 log.info('test_abort: stop supplier 2 to freeze the cleanAllRUV task...') topology_m4.ms["supplier2"].stop() # Run the task log.info('test_abort: add the cleanAllRUV task...') cruv_task = CleanAllRUVTask(topology_m4.ms["supplier1"]) cruv_task.create( properties={ 'replica-id': m4rid, 'replica-base-dn': DEFAULT_SUFFIX, 'replica-force-cleaning': 'no', 'replica-certify-all': 'yes' }) # Wait a bit time.sleep(2) # Abort the task cruv_task.abort() # Check supplier 1 does not have the clean task running log.info( 'test_abort: check supplier 1 no longer has a cleanAllRUV task...') if not task_done(topology_m4, cruv_task.dn): log.fatal('test_abort: CleanAllRUV task was not aborted') assert False # Start supplier 2 log.info('test_abort: start supplier 2 to begin the restore process...') topology_m4.ms["supplier2"].start() log.info('test_abort PASSED, restoring supplier 4...')
def test_abort_certify(topology_m4, m4rid): """Test the abort task with a replica-certify-all option :id: 78959966-d644-44a8-b98c-1fcf21b45eb0 :setup: Replication setup with four masters :steps: 1. Disable replication on master 4 2. Remove agreements to master 4 from other masters 3. Stop master 2 4. Run a cleanallruv task on master 1 5. Run a cleanallruv abort task on master 1 with a replica-certify-all option :expectedresults: No hanging tasks left 1. Replication on master 4 should be disabled 2. Agreements to master 4 should be removed 3. Master 2 should be stopped 4. Operation should be successful 5. Operation should be successful """ log.info('Running test_abort_certify...') # Remove the agreements from the other masters that point to master 4 remove_master4_agmts("test_abort_certify", topology_m4) # Stop master 2 log.info( 'test_abort_certify: stop master 2 to freeze the cleanAllRUV task...') topology_m4.ms["master2"].stop() # Run the task log.info('test_abort_certify: add the cleanAllRUV task...') cruv_task = CleanAllRUVTask(topology_m4.ms["master1"]) cruv_task.create( properties={ 'replica-id': m4rid, 'replica-base-dn': DEFAULT_SUFFIX, 'replica-force-cleaning': 'no', 'replica-certify-all': 'yes' }) # Wait a bit time.sleep(2) # Abort the task log.info('test_abort_certify: abort the cleanAllRUV task...') abort_task = cruv_task.abort(certify=True) # Wait a while and make sure the abort task is still running log.info('test_abort_certify...') if task_done(topology_m4, abort_task.dn, 10): log.fatal('test_abort_certify: abort task incorrectly finished') assert False # Now start master 2 so it can be aborted log.info( 'test_abort_certify: start master 2 to allow the abort task to finish...' ) topology_m4.ms["master2"].start() # Wait for the abort task to stop if not task_done(topology_m4, abort_task.dn, 90): log.fatal( 'test_abort_certify: The abort CleanAllRUV task was not aborted') assert False # Check master 1 does not have the clean task running log.info( 'test_abort_certify: check master 1 no longer has a cleanAllRUV task...' ) if not task_done(topology_m4, cruv_task.dn): log.fatal('test_abort_certify: CleanAllRUV task was not aborted') assert False log.info('test_abort_certify PASSED, restoring master 4...')
def test_abort_restart(topology_m4, m4rid): """Test the abort task can handle a restart, and then resume :id: b66e33d4-fe85-4e1c-b882-75da80f70ab3 :setup: Replication setup with four masters :steps: 1. Disable replication on master 4 2. Remove agreements to master 4 from other masters 3. Stop master 3 4. Run a cleanallruv task on master 1 5. Run a cleanallruv abort task on master 1 6. Restart master 1 7. Make sure that no crash happened 8. Start master 3 9. Check master 1 does not have the clean task running 10. Check that errors log doesn't have 'Aborting abort task' message :expectedresults: 1. Replication on master 4 should be disabled 2. Agreements to master 4 should be removed 3. Master 3 should be stopped 4. Operation should be successful 5. Operation should be successful 6. Master 1 should be restarted 7. No crash should happened 8. Master 3 should be started 9. Check master 1 shouldn't have the clean task running 10. Errors log shouldn't have 'Aborting abort task' message """ log.info('Running test_abort_restart...') # Remove the agreements from the other masters that point to master 4 remove_master4_agmts("test_abort", topology_m4) # Stop master 3 log.info( 'test_abort_restart: stop master 3 to freeze the cleanAllRUV task...') topology_m4.ms["master3"].stop() # Run the task log.info('test_abort_restart: add the cleanAllRUV task...') cruv_task = CleanAllRUVTask(topology_m4.ms["master1"]) cruv_task.create( properties={ 'replica-id': m4rid, 'replica-base-dn': DEFAULT_SUFFIX, 'replica-force-cleaning': 'no', 'replica-certify-all': 'yes' }) # Wait a bit time.sleep(2) # Abort the task cruv_task.abort(certify=True) # Check master 1 does not have the clean task running log.info( 'test_abort_abort: check master 1 no longer has a cleanAllRUV task...') if not task_done(topology_m4, cruv_task.dn): log.fatal('test_abort_restart: CleanAllRUV task was not aborted') assert False # Now restart master 1, and make sure the abort process completes topology_m4.ms["master1"].restart() if topology_m4.ms["master1"].detectDisorderlyShutdown(): log.fatal('test_abort_restart: Master 1 previously crashed!') assert False # Start master 3 topology_m4.ms["master3"].start() # Need to wait 5 seconds before server processes any leftover tasks time.sleep(6) # Check master 1 tried to run abort task. We expect the abort task to be aborted. if not topology_m4.ms["master1"].searchErrorsLog('Aborting abort task'): log.fatal('test_abort_restart: Abort task did not restart') assert False log.info('test_abort_restart PASSED, restoring master 4...')