defect 792

saClmTrackStop not returning SA_AIS_ERR_NOT_EXIST


git-svn-id: http://svn.fedorahosted.org/svn/corosync/trunk@784 fd59a12c-fef9-0310-b244-a6a79926bd2f
This commit is contained in:
Steven Dake 2005-07-29 21:17:12 +00:00
parent 2db57a7bf5
commit 89a60a2caa
4 changed files with 36 additions and 17 deletions

View File

@ -124,7 +124,7 @@ static int message_handler_req_exec_clm_nodejoin (void *message, struct in_addr
static int message_handler_req_clm_clustertrack (struct conn_info *conn_info,
void *message);
static int message_handler_req_clm_trackstop (struct conn_info *conn_info,
static int message_handler_req_lib_clm_trackstop (struct conn_info *conn_info,
void *message);
static int message_handler_req_clm_nodeget (struct conn_info *conn_info,
@ -147,8 +147,8 @@ struct libais_handler clm_libais_handlers[] =
.flow_control = FLOW_CONTROL_NOT_REQUIRED
},
{ /* 1 */
.libais_handler_fn = message_handler_req_clm_trackstop,
.response_size = sizeof (struct res_clm_trackstop),
.libais_handler_fn = message_handler_req_lib_clm_trackstop,
.response_size = sizeof (struct res_lib_clm_trackstop),
.response_id = MESSAGE_RES_CLM_TRACKSTOP, // TODO RESPONSE
.flow_control = FLOW_CONTROL_NOT_REQUIRED
},
@ -541,6 +541,7 @@ int message_handler_req_clm_clustertrack (struct conn_info *conn_info, void *mes
conn_info->conn_info_partner->ais_ci.u.libclm_ci.trackFlags = req_clm_clustertrack->trackFlags;
conn_info->conn_info_partner->ais_ci.u.libclm_ci.tracking_enabled = 1;
list_add (&conn_info->conn_info_partner->conn_list, &library_notification_send_listhead);
@ -550,12 +551,27 @@ int message_handler_req_clm_clustertrack (struct conn_info *conn_info, void *mes
}
static int message_handler_req_clm_trackstop (struct conn_info *conn_info, void *message)
static int message_handler_req_lib_clm_trackstop (struct conn_info *conn_info, void *message)
{
conn_info->ais_ci.u.libclm_ci.trackFlags = 0;
struct res_lib_clm_trackstop res_lib_clm_trackstop;
res_lib_clm_trackstop.header.size = sizeof (struct res_lib_clm_trackstop);
res_lib_clm_trackstop.header.id = MESSAGE_RES_CLM_TRACKSTOP;
if (conn_info->conn_info_partner->ais_ci.u.libclm_ci.tracking_enabled) {
res_lib_clm_trackstop.header.error = SA_OK;
} else {
res_lib_clm_trackstop.header.error = SA_AIS_ERR_NOT_EXIST;
}
conn_info->conn_info_partner->ais_ci.u.libclm_ci.trackFlags = 0;
conn_info->conn_info_partner->ais_ci.u.libclm_ci.tracking_enabled = 0;
list_del (&conn_info->conn_info_partner->conn_list);
libais_send_response (conn_info, &res_lib_clm_trackstop,
sizeof (struct res_lib_clm_trackstop));
return (0);
}

View File

@ -42,6 +42,7 @@
struct libclm_ci {
SaUint8T trackFlags;
int tracking_enabled;
};
extern SaClmClusterNodeT *clm_get_by_nodeid (struct in_addr node_id);

View File

@ -63,13 +63,13 @@ struct req_clm_clustertrack {
struct res_clm_clustertrack {
struct res_header header;
};
struct req_clm_trackstop {
struct req_lib_clm_trackstop {
struct req_header header;
SaSizeT dataRead;
SaErrorT error;
};
struct res_clm_trackstop {
struct res_lib_clm_trackstop {
struct res_header header;
};

View File

@ -478,11 +478,12 @@ saClmClusterTrackStop (
SaClmHandleT clmHandle)
{
struct clmInstance *clmInstance;
struct req_clm_trackstop req_trackstop;
struct req_lib_clm_trackstop req_lib_clm_trackstop;
struct res_lib_clm_trackstop res_lib_clm_trackstop;
SaAisErrorT error = SA_OK;
req_trackstop.header.size = sizeof (struct req_clm_trackstop);
req_trackstop.header.id = MESSAGE_REQ_CLM_TRACKSTOP;
req_lib_clm_trackstop.header.size = sizeof (struct req_lib_clm_trackstop);
req_lib_clm_trackstop.header.id = MESSAGE_REQ_CLM_TRACKSTOP;
error = saHandleInstanceGet (&clmHandleDatabase, clmHandle,
(void *)&clmInstance);
@ -492,18 +493,19 @@ saClmClusterTrackStop (
pthread_mutex_lock (&clmInstance->response_mutex);
error = saSendRetry (clmInstance->response_fd, &req_trackstop,
sizeof (struct req_clm_trackstop), MSG_NOSIGNAL);
error = saSendReceiveReply (clmInstance->response_fd,
&req_lib_clm_trackstop,
sizeof (struct req_lib_clm_trackstop),
&res_lib_clm_trackstop,
sizeof (struct res_lib_clm_trackstop));
pthread_mutex_unlock (&clmInstance->response_mutex);
clmInstance->notificationBuffer.notification = 0;
pthread_mutex_unlock (&clmInstance->response_mutex);
// TODO what about getting response from executive? The
// executive should send a response
saHandleInstancePut (&clmHandleDatabase, clmHandle);
return (error);
return (error == SA_AIS_OK ? res_lib_clm_trackstop.header.error : error);
}
SaAisErrorT