mirror of
https://git.proxmox.com/git/mirror_corosync
synced 2025-07-24 20:05:04 +00:00
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:
parent
2db57a7bf5
commit
89a60a2caa
26
exec/clm.c
26
exec/clm.c
@ -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);
|
||||
}
|
||||
|
||||
|
@ -42,6 +42,7 @@
|
||||
|
||||
struct libclm_ci {
|
||||
SaUint8T trackFlags;
|
||||
int tracking_enabled;
|
||||
};
|
||||
|
||||
extern SaClmClusterNodeT *clm_get_by_nodeid (struct in_addr node_id);
|
||||
|
@ -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;
|
||||
};
|
||||
|
||||
|
22
lib/clm.c
22
lib/clm.c
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user