From 535511db8738e320c9305442c863b8a7ec11401f Mon Sep 17 00:00:00 2001 From: Mark Reynolds Date: Sep 24 2012 17:34:53 +0000 Subject: Ticket 477 - CLEANALLRUV if there are only winsync agmts task will hang Bug Description: If there are only winsync agmts, the task will loop forever. Fix Description: Need to clear a flag after skipping over invalid agmts. The same issue would apply for agmts that were all disabled. https://fedorahosted.org/389/ticket/477 Reviewed by: richm(Thanks!) (cherry picked from commit 47c44d4e61723bb3013e614c1dafce5b37694e3c) --- diff --git a/ldap/servers/plugins/replication/repl5_replica_config.c b/ldap/servers/plugins/replication/repl5_replica_config.c index 9d47100..c5ca965 100644 --- a/ldap/servers/plugins/replication/repl5_replica_config.c +++ b/ldap/servers/plugins/replication/repl5_replica_config.c @@ -1552,6 +1552,7 @@ replica_cleanallruv_thread(void *arg) agmt = (Repl_Agmt*)object_get_data (agmt_obj); if(!agmt_is_enabled(agmt) || get_agmt_agreement_type(agmt) == REPLICA_TYPE_WINDOWS){ agmt_obj = agmtlist_get_next_agreement_for_replica (data->replica, agmt_obj); + agmt_not_notified = 0; continue; } if(replica_cleanallruv_send_extop(agmt, data->rid, data->task, data->payload, 1) == 0){ @@ -1605,6 +1606,7 @@ replica_cleanallruv_thread(void *arg) agmt = (Repl_Agmt*)object_get_data (agmt_obj); if(!agmt_is_enabled(agmt) || get_agmt_agreement_type(agmt) == REPLICA_TYPE_WINDOWS){ agmt_obj = agmtlist_get_next_agreement_for_replica (data->replica, agmt_obj); + found_dirty_rid = 0; continue; } if(replica_cleanallruv_check_ruv(agmt, rid_text, data->task) == 0){ @@ -1698,6 +1700,7 @@ check_agmts_are_caught_up(Replica *replica, ReplicaId rid, char *maxcsn, Slapi_T agmt = (Repl_Agmt*)object_get_data (agmt_obj); if(!agmt_is_enabled(agmt) || get_agmt_agreement_type(agmt) == REPLICA_TYPE_WINDOWS){ agmt_obj = agmtlist_get_next_agreement_for_replica (replica, agmt_obj); + not_all_caughtup = 0; continue; } if(replica_cleanallruv_check_maxcsn(agmt, rid_text, maxcsn, task) == 0){ @@ -1753,6 +1756,7 @@ check_agmts_are_alive(Replica *replica, ReplicaId rid, Slapi_Task *task) agmt = (Repl_Agmt*)object_get_data (agmt_obj); if(!agmt_is_enabled(agmt) || get_agmt_agreement_type(agmt) == REPLICA_TYPE_WINDOWS){ agmt_obj = agmtlist_get_next_agreement_for_replica (replica, agmt_obj); + not_all_alive = 0; continue; } if(replica_cleanallruv_replica_alive(agmt) == 0){ @@ -2364,6 +2368,7 @@ replica_abort_task_thread(void *arg) agmt = (Repl_Agmt*)object_get_data (agmt_obj); if(!agmt_is_enabled(agmt) || get_agmt_agreement_type(agmt) == REPLICA_TYPE_WINDOWS){ agmt_obj = agmtlist_get_next_agreement_for_replica (data->replica, agmt_obj); + agmt_not_notified = 0; continue; } if(replica_cleanallruv_send_abort_extop(agmt, data->task, data->payload)){