diff --git a/exec/ckpt.c b/exec/ckpt.c index 99c89496..085f57d6 100644 --- a/exec/ckpt.c +++ b/exec/ckpt.c @@ -148,7 +148,7 @@ static int message_handler_req_lib_ckpt_checkpointsynchronize (struct conn_info static int message_handler_req_lib_ckpt_checkpointsynchronizeasync (struct conn_info *conn_info, void *message); -static int message_handler_req_lib_ckpt_sectioniteratorinitialize (struct conn_info *conn_info, void *message); +static int message_handler_req_lib_ckpt_sectioniterationinitialize (struct conn_info *conn_info, void *message); static int message_handler_req_lib_ckpt_sectioniteratornext (struct conn_info *conn_info, void *message); @@ -289,8 +289,8 @@ struct libais_handler ckpt_libais_handlers[] = .flow_control = FLOW_CONTROL_NOT_REQUIRED }, { /* 15 */ - .libais_handler_fn = message_handler_req_lib_ckpt_sectioniteratorinitialize, - .response_size = sizeof (struct res_lib_ckpt_sectioniteratorinitialize), + .libais_handler_fn = message_handler_req_lib_ckpt_sectioniterationinitialize, + .response_size = sizeof (struct res_lib_ckpt_sectioniterationinitialize), .response_id = MESSAGE_RES_CKPT_SECTIONITERATOR_SECTIONITERATORINITIALIZE, .flow_control = FLOW_CONTROL_NOT_REQUIRED }, @@ -3335,10 +3335,10 @@ static int message_handler_req_lib_ckpt_checkpointsynchronizeasync (struct conn_ return (0); } -static int message_handler_req_lib_ckpt_sectioniteratorinitialize (struct conn_info *conn_info, void *message) +static int message_handler_req_lib_ckpt_sectioniterationinitialize (struct conn_info *conn_info, void *message) { - struct req_lib_ckpt_sectioniteratorinitialize *req_lib_ckpt_sectioniteratorinitialize = (struct req_lib_ckpt_sectioniteratorinitialize *)message; - struct res_lib_ckpt_sectioniteratorinitialize res_lib_ckpt_sectioniteratorinitialize; + struct req_lib_ckpt_sectioniterationinitialize *req_lib_ckpt_sectioniterationinitialize = (struct req_lib_ckpt_sectioniterationinitialize *)message; + struct res_lib_ckpt_sectioniterationinitialize res_lib_ckpt_sectioniterationinitialize; struct saCkptCheckpoint *ckptCheckpoint; struct saCkptCheckpointSection *ckptCheckpointSection; struct saCkptSectionIteratorEntry *ckptSectionIteratorEntries; @@ -3351,12 +3351,18 @@ static int message_handler_req_lib_ckpt_sectioniteratorinitialize (struct conn_i log_printf (LOG_LEVEL_DEBUG, "section iterator initialize\n"); ckptSectionIterator = &conn_info->ais_ci.u.libckpt_ci.sectionIterator; - ckptCheckpoint = ckpt_checkpoint_find_global (&req_lib_ckpt_sectioniteratorinitialize->checkpointName); + ckptCheckpoint = ckpt_checkpoint_find_global (&req_lib_ckpt_sectioniterationinitialize->checkpointName); if (ckptCheckpoint == 0) { error = SA_AIS_ERR_NOT_EXIST; goto error_exit; } + if (ckptCheckpoint->active_replica_set == 0) { + log_printf (LOG_LEVEL_NOTICE, "iterationinitialize: no active replica, returning error.\n"); + error = SA_AIS_ERR_NOT_EXIST; + goto error_exit; + } + /* * Iterate list of checkpoint sections */ @@ -3392,12 +3398,12 @@ static int message_handler_req_lib_ckpt_sectioniteratorinitialize (struct conn_i ckptSectionIterator->iteratorCount = iteratorEntries; error_exit: - res_lib_ckpt_sectioniteratorinitialize.header.size = sizeof (struct res_lib_ckpt_sectioniteratorinitialize); - res_lib_ckpt_sectioniteratorinitialize.header.id = MESSAGE_RES_CKPT_SECTIONITERATOR_SECTIONITERATORINITIALIZE; - res_lib_ckpt_sectioniteratorinitialize.header.error = error; + res_lib_ckpt_sectioniterationinitialize.header.size = sizeof (struct res_lib_ckpt_sectioniterationinitialize); + res_lib_ckpt_sectioniterationinitialize.header.id = MESSAGE_RES_CKPT_SECTIONITERATOR_SECTIONITERATORINITIALIZE; + res_lib_ckpt_sectioniterationinitialize.header.error = error; - libais_send_response (conn_info, &res_lib_ckpt_sectioniteratorinitialize, - sizeof (struct res_lib_ckpt_sectioniteratorinitialize)); + libais_send_response (conn_info, &res_lib_ckpt_sectioniterationinitialize, + sizeof (struct res_lib_ckpt_sectioniterationinitialize)); return (0); } diff --git a/include/ipc_ckpt.h b/include/ipc_ckpt.h index e98cfd5d..7c6ea2de 100644 --- a/include/ipc_ckpt.h +++ b/include/ipc_ckpt.h @@ -186,14 +186,14 @@ struct res_lib_ckpt_sectionexpirationtimeset { struct res_header header; }; -struct req_lib_ckpt_sectioniteratorinitialize { +struct req_lib_ckpt_sectioniterationinitialize { struct req_header header; SaNameT checkpointName; SaCkptSectionsChosenT sectionsChosen; SaTimeT expirationTime; }; -struct res_lib_ckpt_sectioniteratorinitialize { +struct res_lib_ckpt_sectioniterationinitialize { struct res_header header; }; diff --git a/lib/ckpt.c b/lib/ckpt.c index 8bb02797..f94706df 100644 --- a/lib/ckpt.c +++ b/lib/ckpt.c @@ -1165,8 +1165,8 @@ saCkptSectionIterationInitialize ( SaAisErrorT error; struct ckptCheckpointInstance *ckptCheckpointInstance; struct ckptSectionIterationInstance *ckptSectionIterationInstance; - struct req_lib_ckpt_sectioniteratorinitialize req_lib_ckpt_sectioniteratorinitialize; - struct res_lib_ckpt_sectioniteratorinitialize res_lib_ckpt_sectioniteratorinitialize; + struct req_lib_ckpt_sectioniterationinitialize req_lib_ckpt_sectioniterationinitialize; + struct res_lib_ckpt_sectioniterationinitialize res_lib_ckpt_sectioniterationinitialize; if (sectionIterationHandle == NULL) { return (SA_AIS_ERR_INVALID_PARAM); @@ -1209,18 +1209,18 @@ saCkptSectionIterationInitialize ( */ list_init (&ckptSectionIterationInstance->sectionIdListHead); - req_lib_ckpt_sectioniteratorinitialize.header.size = sizeof (struct req_lib_ckpt_sectioniteratorinitialize); - req_lib_ckpt_sectioniteratorinitialize.header.id = MESSAGE_REQ_CKPT_SECTIONITERATOR_SECTIONITERATORINITIALIZE; - req_lib_ckpt_sectioniteratorinitialize.sectionsChosen = sectionsChosen; - req_lib_ckpt_sectioniteratorinitialize.expirationTime = expirationTime; - memcpy (&req_lib_ckpt_sectioniteratorinitialize.checkpointName, + req_lib_ckpt_sectioniterationinitialize.header.size = sizeof (struct req_lib_ckpt_sectioniterationinitialize); + req_lib_ckpt_sectioniterationinitialize.header.id = MESSAGE_REQ_CKPT_SECTIONITERATOR_SECTIONITERATORINITIALIZE; + req_lib_ckpt_sectioniterationinitialize.sectionsChosen = sectionsChosen; + req_lib_ckpt_sectioniterationinitialize.expirationTime = expirationTime; + memcpy (&req_lib_ckpt_sectioniterationinitialize.checkpointName, &ckptCheckpointInstance->checkpointName, sizeof (SaNameT)); pthread_mutex_lock (&ckptSectionIterationInstance->response_mutex); error = saSendRetry (ckptSectionIterationInstance->response_fd, - &req_lib_ckpt_sectioniteratorinitialize, - sizeof (struct req_lib_ckpt_sectioniteratorinitialize), + &req_lib_ckpt_sectioniterationinitialize, + sizeof (struct req_lib_ckpt_sectioniterationinitialize), MSG_NOSIGNAL); if (error != SA_AIS_OK) { @@ -1228,15 +1228,15 @@ saCkptSectionIterationInitialize ( } error = saRecvRetry (ckptSectionIterationInstance->response_fd, - &res_lib_ckpt_sectioniteratorinitialize, - sizeof (struct res_lib_ckpt_sectioniteratorinitialize), + &res_lib_ckpt_sectioniterationinitialize, + sizeof (struct res_lib_ckpt_sectioniterationinitialize), MSG_WAITALL | MSG_NOSIGNAL); pthread_mutex_unlock (&ckptSectionIterationInstance->response_mutex); saHandleInstancePut (&ckptSectionIterationHandleDatabase, *sectionIterationHandle); - return (error == SA_AIS_OK ? res_lib_ckpt_sectioniteratorinitialize.header.error : error); + return (error == SA_AIS_OK ? res_lib_ckpt_sectioniterationinitialize.header.error : error); error_put_destroy: saHandleInstancePut (&ckptSectionIterationHandleDatabase, *sectionIterationHandle);