APIs return SA_AIS_OK after the node leaves then rejoins cluster.
Section 3.2 of the MSG B.03.01 spec states that if a node leaves then
rejoins the cluster, APIs need to return ERR_UNAVAILABLE for handles that
were obtained before the node left the cluster.
APIs need to return ERR_UNAVAILABLE for handles that were obtained
before the node left the cluster.
---
src/msg/Makefile.am | 1 +
src/msg/agent/mqa_api.c | 97 +--
src/msg/agent/mqa_db.h | 1 +
src/msg/agent/mqa_def.h | 1 +
src/msg/agent/mqa_init.c | 26 +
src/msg/agent/mqa_mds.c | 14 +
src/msg/apitest/test_ErrUnavailable.cc | 1009 ++++++++++++++++++++++++++++++++
src/msg/msgnd/mqnd_evt.c | 42 +-
8 files changed, 1139 insertions(+), 52 deletions(-)
create mode 100644 src/msg/apitest/test_ErrUnavailable.cc
diff --git a/src/msg/Makefile.am b/src/msg/Makefile.am
index 9ec9e59..aeec6ca 100644
--- a/src/msg/Makefile.am
+++ b/src/msg/Makefile.am
@@ -205,6 +205,7 @@ noinst_HEADERS += \
bin_msgtest_SOURCES = \
src/msg/apitest/msgtest.c \
src/msg/apitest/test_saMsgVersionT.cc \
+ src/msg/apitest/test_ErrUnavailable.cc \
src/msg/apitest/tet_mqa_conf.c \
src/msg/apitest/tet_mqsv_util.c \
src/msg/apitest/tet_mqa.c
diff --git a/src/msg/agent/mqa_api.c b/src/msg/agent/mqa_api.c
index 5ef238a..eeec00e 100644
--- a/src/msg/agent/mqa_api.c
+++ b/src/msg/agent/mqa_api.c
@@ -256,6 +256,7 @@ SaAisErrorT saMsgInitialize(SaMsgHandleT *msgHandle,
}
if (rc == SA_AIS_OK) {
+ mqa_cb->clm_node_joined = true;
/* create the client node and populate it */
client_info = mqa_client_tree_find_and_add(mqa_cb, 0, true);
@@ -281,6 +282,8 @@ SaAisErrorT saMsgInitialize(SaMsgHandleT *msgHandle,
goto final3;
}
+ client_info->isStale = false;
+
if (msgCallbacks)
client_info->msgCallbacks = *msgCallbacks;
else
@@ -373,8 +376,8 @@ SaAisErrorT saMsgSelectionObjectGet(SaMsgHandleT msgHandle,
goto done;
}
if (client_info->version.majorVersion == MQA_MAJOR_VERSION) {
- if (!mqa_cb->clm_node_joined) {
- TRACE_2("ERR_UNAVAILABLE: MQD or MQND is down");
+ if (!mqa_cb->clm_node_joined || client_info->isStale) {
+ TRACE_2("ERR_UNAVAILABLE: node is not cluster member");
rc = SA_AIS_ERR_UNAVAILABLE;
goto done;
}
@@ -461,8 +464,8 @@ SaAisErrorT saMsgDispatch(SaMsgHandleT msgHandle,
}
if (client_info->version.majorVersion == MQA_MAJOR_VERSION) {
- if (!mqa_cb->clm_node_joined) {
- TRACE_2("ERR_UNAVAILABLE: MQD or MQND is down");
+ if (!mqa_cb->clm_node_joined || client_info->isStale) {
+ TRACE_2("ERR_UNAVAILABLE: node is not cluster member");
rc = SA_AIS_ERR_UNAVAILABLE;
m_NCS_UNLOCK(&mqa_cb->cb_lock, NCS_LOCK_WRITE);
goto done;
@@ -805,8 +808,8 @@ saMsgQueueOpen(SaMsgHandleT msgHandle, const SaNameT
*queueName,
}
if (client_info->version.majorVersion == MQA_MAJOR_VERSION) {
- if (!mqa_cb->clm_node_joined) {
- TRACE_2("ERR_UNAVAILABLE: MQD or MQND is down");
+ if (!mqa_cb->clm_node_joined || client_info->isStale) {
+ TRACE_2("ERR_UNAVAILABLE: node is not cluster member");
rc = SA_AIS_ERR_UNAVAILABLE;
goto done;
}
@@ -1086,8 +1089,8 @@ saMsgQueueOpenAsync(SaMsgHandleT msgHandle, SaInvocationT
invocation,
}
if (client_info->version.majorVersion == MQA_MAJOR_VERSION) {
- if (!mqa_cb->clm_node_joined) {
- TRACE_2("ERR_UNAVAILABLE: MQD or MQND is down");
+ if (!mqa_cb->clm_node_joined || client_info->isStale) {
+ TRACE_2("ERR_UNAVAILABLE: node is not cluster member");
rc = SA_AIS_ERR_UNAVAILABLE;
goto done;
}
@@ -1240,9 +1243,10 @@ SaAisErrorT saMsgQueueClose(SaMsgQueueHandleT
queueHandle)
if (queue_node->client_info->version.majorVersion ==
MQA_MAJOR_VERSION) {
- if ((!mqa_cb->clm_node_joined) &&
+ if ((!mqa_cb->clm_node_joined ||
+ queue_node->client_info->isStale) &&
(!queue_node->client_info->finalize)) {
- TRACE_2("ERR_UNAVAILABLE: MQD or MQND is down");
+ TRACE_2("ERR_UNAVAILABLE: node is not cluster member");
rc = SA_AIS_ERR_UNAVAILABLE;
m_NCS_UNLOCK(&mqa_cb->cb_lock, NCS_LOCK_WRITE);
m_MQSV_MQA_GIVEUP_MQA_CB;
@@ -1398,8 +1402,8 @@ SaAisErrorT saMsgQueueStatusGet(SaMsgHandleT msgHandle,
}
if (client_info->version.majorVersion == MQA_MAJOR_VERSION) {
- if (!mqa_cb->clm_node_joined) {
- TRACE_2("ERR_UNAVAILABLE: MQD or MQND is down");
+ if (!mqa_cb->clm_node_joined || client_info->isStale) {
+ TRACE_2("ERR_UNAVAILABLE: node is not cluster member");
rc = SA_AIS_ERR_UNAVAILABLE;
goto done;
}
@@ -1551,8 +1555,9 @@ SaAisErrorT saMsgQueueRetentionTimeSet(SaMsgQueueHandleT
queueHandle,
if (queue_node->client_info->version.majorVersion ==
MQA_MAJOR_VERSION) {
- if (!mqa_cb->clm_node_joined) {
- TRACE_2("ERR_UNAVAILABLE: MQD or MQND is down");
+ if (!mqa_cb->clm_node_joined ||
+ queue_node->client_info->isStale) {
+ TRACE_2("ERR_UNAVAILABLE: node is not cluster member");
rc = SA_AIS_ERR_UNAVAILABLE;
m_NCS_UNLOCK(&mqa_cb->cb_lock, NCS_LOCK_WRITE);
m_MQSV_MQA_GIVEUP_MQA_CB;
@@ -1697,8 +1702,8 @@ SaAisErrorT saMsgQueueUnlink(SaMsgHandleT msgHandle,
const SaNameT *queueName)
}
if (client_info->version.majorVersion == MQA_MAJOR_VERSION) {
- if (!mqa_cb->clm_node_joined) {
- TRACE_2("ERR_UNAVAILABLE: MQD or MQND is down");
+ if (!mqa_cb->clm_node_joined || client_info->isStale) {
+ TRACE_2("ERR_UNAVAILABLE: node is not cluster member");
rc = SA_AIS_ERR_UNAVAILABLE;
goto done;
}
@@ -2469,8 +2474,8 @@ SaAisErrorT saMsgMessageSend(SaMsgHandleT msgHandle,
const SaNameT *destination,
}
if (client_info->version.majorVersion == MQA_MAJOR_VERSION) {
- if (!mqa_cb->clm_node_joined) {
- TRACE_2("ERR_UNAVAILABLE: MQD or MQND is down");
+ if (!mqa_cb->clm_node_joined || client_info->isStale) {
+ TRACE_2("ERR_UNAVAILABLE: node is not cluster member");
rc = SA_AIS_ERR_UNAVAILABLE;
goto done;
}
@@ -2561,8 +2566,8 @@ SaAisErrorT saMsgMessageSendAsync(SaMsgHandleT msgHandle,
}
if (client_info->version.majorVersion == MQA_MAJOR_VERSION) {
- if (!mqa_cb->clm_node_joined) {
- TRACE_2("ERR_UNAVAILABLE: MQD or MQND is down");
+ if (!mqa_cb->clm_node_joined || client_info->isStale) {
+ TRACE_2("ERR_UNAVAILABLE: node is not cluster member");
rc = SA_AIS_ERR_UNAVAILABLE;
goto done;
}
@@ -2685,7 +2690,8 @@ SaAisErrorT mqa_receive_message(SaMsgQueueHandleT
queueHandle,
if (queue_node->client_info->version.majorVersion ==
MQA_MAJOR_VERSION) {
- if (!mqa_cb->clm_node_joined) {
+ if (!mqa_cb->clm_node_joined ||
+ queue_node->client_info->isStale) {
TRACE_2("ERR_UNAVAILABLE: MQD or MQND is down");
rc = SA_AIS_ERR_UNAVAILABLE;
goto done;
@@ -3335,8 +3341,9 @@ SaAisErrorT saMsgMessageCancel(SaMsgQueueHandleT
queueHandle)
}
if (queue_node->client_info->version.majorVersion ==
MQA_MAJOR_VERSION) {
- if (!mqa_cb->clm_node_joined) {
- TRACE_2("ERR_UNAVAILABLE: MQD or MQND is down");
+ if (!mqa_cb->clm_node_joined ||
+ queue_node->client_info->isStale) {
+ TRACE_2("ERR_UNAVAILABLE: node is not cluster member");
rc = SA_AIS_ERR_UNAVAILABLE;
m_NCS_UNLOCK(&mqa_cb->cb_lock, NCS_LOCK_WRITE);
m_MQSV_MQA_GIVEUP_MQA_CB;
@@ -3581,8 +3588,8 @@ SaAisErrorT saMsgMessageSendReceive(SaMsgHandleT
msgHandle,
}
if (client_info->version.majorVersion == MQA_MAJOR_VERSION) {
- if (!mqa_cb->clm_node_joined) {
- TRACE_2("ERR_UNAVAILABLE: MQD or MQND is down");
+ if (!mqa_cb->clm_node_joined || client_info->isStale) {
+ TRACE_2("ERR_UNAVAILABLE: node is not cluster member");
rc = SA_AIS_ERR_UNAVAILABLE;
m_NCS_UNLOCK(&mqa_cb->cb_lock, NCS_LOCK_WRITE);
m_MQSV_MQA_GIVEUP_MQA_CB;
@@ -4302,8 +4309,8 @@ SaAisErrorT saMsgMessageReply(SaMsgHandleT msgHandle,
return rc;
}
if (client_info->version.majorVersion == MQA_MAJOR_VERSION) {
- if (!mqa_cb->clm_node_joined) {
- TRACE_2("ERR_UNAVAILABLE: MQD or MQND is down");
+ if (!mqa_cb->clm_node_joined || client_info->isStale) {
+ TRACE_2("ERR_UNAVAILABLE: node is not cluster member");
rc = SA_AIS_ERR_UNAVAILABLE;
m_MQSV_MQA_GIVEUP_MQA_CB;
return rc;
@@ -4390,8 +4397,8 @@ SaAisErrorT saMsgMessageReplyAsync(SaMsgHandleT msgHandle,
return rc;
}
if (client_info->version.majorVersion == MQA_MAJOR_VERSION) {
- if (!mqa_cb->clm_node_joined) {
- TRACE_2("ERR_UNAVAILABLE: MQD or MQND is down");
+ if (!mqa_cb->clm_node_joined || client_info->isStale) {
+ TRACE_2("ERR_UNAVAILABLE: node is not cluster member");
rc = SA_AIS_ERR_UNAVAILABLE;
m_MQSV_MQA_GIVEUP_MQA_CB;
return rc;
@@ -4536,8 +4543,8 @@ SaAisErrorT saMsgQueueGroupCreate(SaMsgHandleT msgHandle,
}
if (client_info->version.majorVersion == MQA_MAJOR_VERSION) {
- if (!mqa_cb->clm_node_joined) {
- TRACE_2("ERR_UNAVAILABLE: MQD or MQND is down");
+ if (!mqa_cb->clm_node_joined || client_info->isStale) {
+ TRACE_2("ERR_UNAVAILABLE: node is not cluster member");
rc = SA_AIS_ERR_UNAVAILABLE;
m_NCS_UNLOCK(&mqa_cb->cb_lock, NCS_LOCK_WRITE);
goto done;
@@ -4658,8 +4665,8 @@ SaAisErrorT saMsgQueueGroupDelete(SaMsgHandleT msgHandle,
}
if (client_info->version.majorVersion == MQA_MAJOR_VERSION) {
- if (!mqa_cb->clm_node_joined) {
- TRACE_2("ERR_UNAVAILABLE: MQD or MQND is down");
+ if (!mqa_cb->clm_node_joined || client_info->isStale) {
+ TRACE_2("ERR_UNAVAILABLE: node is not cluster member");
rc = SA_AIS_ERR_UNAVAILABLE;
m_NCS_UNLOCK(&mqa_cb->cb_lock, NCS_LOCK_WRITE);
goto done;
@@ -4791,8 +4798,8 @@ SaAisErrorT saMsgQueueGroupInsert(SaMsgHandleT msgHandle,
}
if (client_info->version.majorVersion == MQA_MAJOR_VERSION) {
- if (!mqa_cb->clm_node_joined) {
- TRACE_2("ERR_UNAVAILABLE: MQD or MQND is down");
+ if (!mqa_cb->clm_node_joined || client_info->isStale) {
+ TRACE_2("ERR_UNAVAILABLE: node is not cluster member");
rc = SA_AIS_ERR_UNAVAILABLE;
m_NCS_UNLOCK(&mqa_cb->cb_lock, NCS_LOCK_WRITE);
goto done;
@@ -4922,8 +4929,8 @@ SaAisErrorT saMsgQueueGroupRemove(SaMsgHandleT msgHandle,
}
if (client_info->version.majorVersion == MQA_MAJOR_VERSION) {
- if (!mqa_cb->clm_node_joined) {
- TRACE_2("ERR_UNAVAILABLE: MQD or MQND is down");
+ if (!mqa_cb->clm_node_joined || client_info->isStale) {
+ TRACE_2("ERR_UNAVAILABLE: node is not cluster member");
rc = SA_AIS_ERR_UNAVAILABLE;
m_NCS_UNLOCK(&mqa_cb->cb_lock, NCS_LOCK_WRITE);
goto done;
@@ -5071,8 +5078,8 @@ saMsgQueueGroupTrack(SaMsgHandleT msgHandle, const
SaNameT *queueGroupName,
}
if (client_info->version.majorVersion == MQA_MAJOR_VERSION) {
- if (!mqa_cb->clm_node_joined) {
- TRACE_2("ERR_UNAVAILABLE: MQD or MQND is down");
+ if (!mqa_cb->clm_node_joined || client_info->isStale) {
+ TRACE_2("ERR_UNAVAILABLE: node is not cluster member");
rc = SA_AIS_ERR_UNAVAILABLE;
m_NCS_UNLOCK(&mqa_cb->cb_lock, NCS_LOCK_WRITE);
goto done;
@@ -5390,8 +5397,8 @@ SaAisErrorT saMsgQueueGroupTrackStop(SaMsgHandleT
msgHandle,
}
if (client_info->version.majorVersion == MQA_MAJOR_VERSION) {
- if (!mqa_cb->clm_node_joined) {
- TRACE_2("ERR_UNAVAILABLE: MQD or MQND is down");
+ if (!mqa_cb->clm_node_joined || client_info->isStale) {
+ TRACE_2("ERR_UNAVAILABLE: node is not cluster member");
rc = SA_AIS_ERR_UNAVAILABLE;
m_NCS_UNLOCK(&mqa_cb->cb_lock, NCS_LOCK_WRITE);
goto done1;
@@ -5503,8 +5510,8 @@ saMsgQueueGroupNotificationFree(SaMsgHandleT msgHandle,
}
if (client_info->version.majorVersion == MQA_MAJOR_VERSION) {
- if (!mqa_cb->clm_node_joined) {
- TRACE_2("ERR_UNAVAILABLE: MQD or MQND is down");
+ if (!mqa_cb->clm_node_joined || client_info->isStale) {
+ TRACE_2("ERR_UNAVAILABLE: node is not cluster member");
rc = SA_AIS_ERR_UNAVAILABLE;
goto done;
}
@@ -5569,8 +5576,8 @@ SaAisErrorT saMsgMessageDataFree(SaMsgHandleT msgHandle,
void *data)
}
if (client_info->version.majorVersion == MQA_MAJOR_VERSION) {
- if (!mqa_cb->clm_node_joined) {
- TRACE_2("ERR_UNAVAILABLE: MQD or MQND is down");
+ if (!mqa_cb->clm_node_joined || client_info->isStale) {
+ TRACE_2("ERR_UNAVAILABLE: node is not cluster member");
rc = SA_AIS_ERR_UNAVAILABLE;
goto done;
}
diff --git a/src/msg/agent/mqa_db.h b/src/msg/agent/mqa_db.h
index 6b3cb63..2883df2 100644
--- a/src/msg/agent/mqa_db.h
+++ b/src/msg/agent/mqa_db.h
@@ -94,6 +94,7 @@ typedef struct mqa_client_info {
SYSF_MBX callbk_mbx;
NCS_PATRICIA_TREE mqa_track_tree;
uint8_t finalize;
+ bool isStale;
SaVersionT version;
} MQA_CLIENT_INFO;
diff --git a/src/msg/agent/mqa_def.h b/src/msg/agent/mqa_def.h
index e2ea1c4..5472c3e 100644
--- a/src/msg/agent/mqa_def.h
+++ b/src/msg/agent/mqa_def.h
@@ -52,6 +52,7 @@
/* function prototypes for client handling*/
MQA_CLIENT_INFO *mqa_client_tree_find_and_add(MQA_CB *mqa_cb,
SaMsgHandleT hdl_id, bool flag);
+MQA_CLIENT_INFO *mqa_client_tree_find_next(MQA_CB *, SaMsgHandleT);
uint32_t mqa_client_tree_delete_node(MQA_CB *mqa_cb,
MQA_CLIENT_INFO *client_info);
void mqa_queue_reader(NCSCONTEXT context);
diff --git a/src/msg/agent/mqa_init.c b/src/msg/agent/mqa_init.c
index 164e562..d799e43 100644
--- a/src/msg/agent/mqa_init.c
+++ b/src/msg/agent/mqa_init.c
@@ -681,6 +681,32 @@ MQA_CLIENT_INFO *mqa_client_tree_find_and_add(MQA_CB
*mqa_cb,
}
/****************************************************************************
+ Name : mqa_client_tree_find_next
+
+ Description : This routine gets the next client from the tree
+
+ Arguments :
+ mqa_cb : pointer to the mqa control block.
+ hdl_id : the handle id.
+
+ Return Values : returns the MQA_CLIENT_INFO node.
+
+ Notes : The caller takes the cb lock before calling this function
+
+******************************************************************************/
+MQA_CLIENT_INFO *mqa_client_tree_find_next(MQA_CB *mqa_cb, SaMsgHandleT hdl_id)
+{
+ MQA_CLIENT_INFO *client_info = NULL;
+ TRACE_ENTER();
+
+ client_info = (MQA_CLIENT_INFO *)ncs_patricia_tree_getnext(
+ &mqa_cb->mqa_client_tree, (uint8_t *)&hdl_id);
+
+ TRACE_LEAVE();
+ return client_info;
+}
+
+/****************************************************************************
Name : mqa_track_tree_find_and_add
Description : This routine adds/searches the new group track element to the
diff --git a/src/msg/agent/mqa_mds.c b/src/msg/agent/mqa_mds.c
index 089f403..569d5e5 100644
--- a/src/msg/agent/mqa_mds.c
+++ b/src/msg/agent/mqa_mds.c
@@ -502,6 +502,20 @@ static uint32_t mqa_mds_rcv(MQA_CB *cb,
MDS_CALLBACK_RECEIVE_INFO *rcv_info)
} else if (evt->type == MQSV_EVT_MQP_REQ) {
cb->clm_node_joined =
evt->msg.mqp_req.info.clmNotify.node_joined;
+
+ if (!cb->clm_node_joined) {
+ /* tell all clients they are stale now */
+ MQA_CLIENT_INFO *client_info;
+ SaMsgHandleT msgHandle = 0;
+ for (client_info =
+ mqa_client_tree_find_next(cb, msgHandle);
+ client_info;
+ client_info = mqa_client_tree_find_next(
+ cb, client_info->msgHandle)) {
+ client_info->isStale = true;
+ }
+ }
+
return rc;
}
diff --git a/src/msg/apitest/test_ErrUnavailable.cc
b/src/msg/apitest/test_ErrUnavailable.cc
new file mode 100644
index 0000000..3f37f8d
--- /dev/null
+++ b/src/msg/apitest/test_ErrUnavailable.cc
@@ -0,0 +1,1009 @@
+#include <cassert>
+#include <cstdio>
+#include <cstring>
+#include <iostream>
+#include <fstream>
+#include <string>
+#include <poll.h>
+#include <unistd.h>
+#include "msg/apitest/msgtest.h"
+#include "ais/include/saMsg.h"
+
+static SaVersionT msg3_1 = { 'B', 3, 0 };
+
+static const SaNameT queueName = {
+ sizeof("safMq=TestQueue") - 1,
+ "safMq=TestQueue"
+};
+
+static const SaNameT queueGroupName = {
+ sizeof("safMqg=TestQueueGroup") - 1,
+ "safMqg=TestQueueGroup"
+};
+
+static const SaMsgQueueCreationAttributesT creationAttributes = {
+ 0,
+ { 5, 5, 5, 5 },
+ SA_TIME_ONE_SECOND
+};
+
+static void queueOpenCallback(SaInvocationT invocation,
+ SaMsgQueueHandleT queueHandle,
+ SaAisErrorT error)
+{
+}
+
+static std::string getClmNodeName(void)
+{
+ std::ifstream ifs("/etc/opensaf/node_name");
+ std::string nodeName;
+
+ ifs >> nodeName;
+
+ return nodeName;
+}
+
+static void lockUnlockNode(bool lock)
+{
+ std::string command("immadm -o ");
+
+ if (lock)
+ command += '2';
+ else
+ command += '1';
+
+ command += " safNode=";
+
+ std::string nodeName(getClmNodeName());
+
+ command += nodeName;
+ command += ",safCluster=myClmCluster";
+
+ int rc(system(command.c_str()));
+
+ int status(WEXITSTATUS(rc));
+
+ if (status != 0) {
+ std::cerr << "unable to " << (lock ? "lock" : "unlock") << " local node"
+ << std::endl;
+ exit(EXIT_FAILURE);
+ }
+
+ sleep(1);
+}
+
+static void saErrUnavailable_01(void)
+{
+ lockUnlockNode(true);
+ SaMsgHandleT msgHandle;
+ SaAisErrorT rc = saMsgInitialize(&msgHandle, 0, &msg3_1);
+ test_validate(rc, SA_AIS_ERR_UNAVAILABLE);
+ lockUnlockNode(false);
+}
+
+static void saErrUnavailable_02(void)
+{
+ SaMsgHandleT msgHandle;
+ SaAisErrorT rc = saMsgInitialize(&msgHandle, 0, &msg3_1);
+ assert(rc == SA_AIS_OK);
+
+ lockUnlockNode(true);
+ SaSelectionObjectT selectionObject;
+ rc = saMsgSelectionObjectGet(msgHandle, &selectionObject);
+ test_validate(rc, SA_AIS_ERR_UNAVAILABLE);
+ lockUnlockNode(false);
+
+ rc = saMsgFinalize(msgHandle);
+ assert(rc == SA_AIS_OK);
+}
+
+static void saErrUnavailable_03(void)
+{
+ SaMsgHandleT msgHandle;
+ SaAisErrorT rc = saMsgInitialize(&msgHandle, 0, &msg3_1);
+ assert(rc == SA_AIS_OK);
+
+ lockUnlockNode(true);
+ rc = saMsgDispatch(msgHandle, SA_DISPATCH_ONE);
+ test_validate(rc, SA_AIS_ERR_UNAVAILABLE);
+ lockUnlockNode(false);
+
+ rc = saMsgFinalize(msgHandle);
+ assert(rc == SA_AIS_OK);
+}
+
+static void saErrUnavailable_04(void)
+{
+ SaMsgHandleT msgHandle;
+ SaAisErrorT rc = saMsgInitialize(&msgHandle, 0, &msg3_1);
+ assert(rc == SA_AIS_OK);
+
+ lockUnlockNode(true);
+ rc = saMsgFinalize(msgHandle);
+ test_validate(rc, SA_AIS_OK);
+ lockUnlockNode(false);
+}
+
+static void saErrUnavailable_05(void)
+{
+ SaMsgHandleT msgHandle;
+ SaAisErrorT rc = saMsgInitialize(&msgHandle, 0, &msg3_1);
+ assert(rc == SA_AIS_OK);
+
+ lockUnlockNode(true);
+ SaMsgQueueHandleT queueHandle;
+ rc = saMsgQueueOpen(msgHandle, &queueName, 0, 0, SA_TIME_END, &queueHandle);
+ test_validate(rc, SA_AIS_ERR_UNAVAILABLE);
+ lockUnlockNode(false);
+
+ rc = saMsgFinalize(msgHandle);
+ assert(rc == SA_AIS_OK);
+}
+
+static void saErrUnavailable_06(void)
+{
+ SaMsgHandleT msgHandle;
+ SaMsgCallbacksT callbacks = {
+ queueOpenCallback,
+ 0,
+ 0,
+ 0
+ };
+
+ SaAisErrorT rc = saMsgInitialize(&msgHandle, &callbacks, &msg3_1);
+ assert(rc == SA_AIS_OK);
+
+ lockUnlockNode(true);
+ rc = saMsgQueueOpenAsync(msgHandle, 1, &queueName, 0, 0);
+ test_validate(rc, SA_AIS_ERR_UNAVAILABLE);
+ lockUnlockNode(false);
+
+ rc = saMsgFinalize(msgHandle);
+ assert(rc == SA_AIS_OK);
+}
+
+static void saErrUnavailable_07(void)
+{
+ SaMsgHandleT msgHandle;
+ SaAisErrorT rc = saMsgInitialize(&msgHandle, 0, &msg3_1);
+ assert(rc == SA_AIS_OK);
+
+ SaMsgQueueHandleT queueHandle;
+ rc = saMsgQueueOpen(msgHandle,
+ &queueName,
+ &creationAttributes,
+ SA_MSG_QUEUE_CREATE,
+ SA_TIME_END,
+ &queueHandle);
+ assert(rc == SA_AIS_OK);
+
+ lockUnlockNode(true);
+ rc = saMsgQueueClose(queueHandle);
+ test_validate(rc, SA_AIS_ERR_UNAVAILABLE);
+ lockUnlockNode(false);
+
+ rc = saMsgFinalize(msgHandle);
+ assert(rc == SA_AIS_OK);
+}
+
+static void saErrUnavailable_08(void)
+{
+ SaMsgHandleT msgHandle;
+ SaAisErrorT rc = saMsgInitialize(&msgHandle, 0, &msg3_1);
+ assert(rc == SA_AIS_OK);
+
+ lockUnlockNode(true);
+ SaMsgQueueStatusT queueStatus;
+ rc = saMsgQueueStatusGet(msgHandle, &queueName, &queueStatus);
+ test_validate(rc, SA_AIS_ERR_UNAVAILABLE);
+ lockUnlockNode(false);
+
+ rc = saMsgFinalize(msgHandle);
+ assert(rc == SA_AIS_OK);
+}
+
+static void saErrUnavailable_09(void)
+{
+ SaMsgHandleT msgHandle;
+ SaAisErrorT rc = saMsgInitialize(&msgHandle, 0, &msg3_1);
+ assert(rc == SA_AIS_OK);
+
+ SaMsgQueueHandleT queueHandle;
+ rc = saMsgQueueOpen(msgHandle,
+ &queueName,
+ &creationAttributes,
+ SA_MSG_QUEUE_CREATE,
+ SA_TIME_END,
+ &queueHandle);
+ assert(rc == SA_AIS_OK);
+
+ lockUnlockNode(true);
+ SaTimeT rTime = SA_TIME_END;
+ rc = saMsgQueueRetentionTimeSet(queueHandle, &rTime);
+ test_validate(rc, SA_AIS_ERR_UNAVAILABLE);
+ lockUnlockNode(false);
+
+ rc = saMsgFinalize(msgHandle);
+ assert(rc == SA_AIS_OK);
+}
+
+static void saErrUnavailable_10(void)
+{
+ SaMsgHandleT msgHandle;
+ SaAisErrorT rc = saMsgInitialize(&msgHandle, 0, &msg3_1);
+ assert(rc == SA_AIS_OK);
+
+ SaMsgQueueHandleT queueHandle;
+ rc = saMsgQueueOpen(msgHandle,
+ &queueName,
+ &creationAttributes,
+ SA_MSG_QUEUE_CREATE,
+ SA_TIME_END,
+ &queueHandle);
+ assert(rc == SA_AIS_OK);
+
+ lockUnlockNode(true);
+ rc = saMsgQueueUnlink(msgHandle, &queueName);
+ test_validate(rc, SA_AIS_ERR_UNAVAILABLE);
+ lockUnlockNode(false);
+
+ rc = saMsgFinalize(msgHandle);
+ assert(rc == SA_AIS_OK);
+}
+
+static void saErrUnavailable_11(void)
+{
+ SaMsgHandleT msgHandle;
+ SaAisErrorT rc = saMsgInitialize(&msgHandle, 0, &msg3_1);
+ assert(rc == SA_AIS_OK);
+
+ lockUnlockNode(true);
+ rc = saMsgQueueGroupCreate(msgHandle, &queueGroupName,
SA_MSG_QUEUE_GROUP_ROUND_ROBIN);
+ test_validate(rc, SA_AIS_ERR_UNAVAILABLE);
+ lockUnlockNode(false);
+
+ rc = saMsgFinalize(msgHandle);
+ assert(rc == SA_AIS_OK);
+}
+
+static void saErrUnavailable_12(void)
+{
+ SaMsgHandleT msgHandle;
+ SaAisErrorT rc = saMsgInitialize(&msgHandle, 0, &msg3_1);
+ assert(rc == SA_AIS_OK);
+
+ lockUnlockNode(true);
+ rc = saMsgQueueGroupDelete(msgHandle, &queueGroupName);
+ test_validate(rc, SA_AIS_ERR_UNAVAILABLE);
+ lockUnlockNode(false);
+
+ rc = saMsgFinalize(msgHandle);
+ assert(rc == SA_AIS_OK);
+}
+
+static void saErrUnavailable_13(void)
+{
+ SaMsgHandleT msgHandle;
+ SaAisErrorT rc = saMsgInitialize(&msgHandle, 0, &msg3_1);
+ assert(rc == SA_AIS_OK);
+
+ lockUnlockNode(true);
+ rc = saMsgQueueGroupInsert(msgHandle, &queueGroupName, &queueName);
+ test_validate(rc, SA_AIS_ERR_UNAVAILABLE);
+ lockUnlockNode(false);
+
+ rc = saMsgFinalize(msgHandle);
+ assert(rc == SA_AIS_OK);
+}
+
+static void saErrUnavailable_14(void)
+{
+ SaMsgHandleT msgHandle;
+ SaAisErrorT rc = saMsgInitialize(&msgHandle, 0, &msg3_1);
+ assert(rc == SA_AIS_OK);
+
+ lockUnlockNode(true);
+ rc = saMsgQueueGroupRemove(msgHandle, &queueGroupName, &queueName);
+ test_validate(rc, SA_AIS_ERR_UNAVAILABLE);
+ lockUnlockNode(false);
+
+ rc = saMsgFinalize(msgHandle);
+ assert(rc == SA_AIS_OK);
+}
+
+static void saErrUnavailable_15(void)
+{
+ SaMsgHandleT msgHandle;
+ SaAisErrorT rc = saMsgInitialize(&msgHandle, 0, &msg3_1);
+ assert(rc == SA_AIS_OK);
+
+ lockUnlockNode(true);
+ rc = saMsgQueueGroupTrack(msgHandle, &queueGroupName, SA_TRACK_CHANGES, 0);
+ test_validate(rc, SA_AIS_ERR_UNAVAILABLE);
+ lockUnlockNode(false);
+
+ rc = saMsgFinalize(msgHandle);
+ assert(rc == SA_AIS_OK);
+}
+
+static void saErrUnavailable_16(void)
+{
+ SaMsgHandleT msgHandle;
+ SaAisErrorT rc = saMsgInitialize(&msgHandle, 0, &msg3_1);
+ assert(rc == SA_AIS_OK);
+
+ lockUnlockNode(true);
+ rc = saMsgQueueGroupTrackStop(msgHandle, &queueGroupName);
+ test_validate(rc, SA_AIS_ERR_UNAVAILABLE);
+ lockUnlockNode(false);
+
+ rc = saMsgFinalize(msgHandle);
+ assert(rc == SA_AIS_OK);
+}
+
+static void saErrUnavailable_17(void)
+{
+ SaMsgHandleT msgHandle;
+ SaAisErrorT rc = saMsgInitialize(&msgHandle, 0, &msg3_1);
+ assert(rc == SA_AIS_OK);
+
+ lockUnlockNode(true);
+ rc = saMsgQueueGroupNotificationFree(msgHandle, 0);
+ test_validate(rc, SA_AIS_ERR_UNAVAILABLE);
+ lockUnlockNode(false);
+
+ rc = saMsgFinalize(msgHandle);
+ assert(rc == SA_AIS_OK);
+}
+
+static void saErrUnavailable_18(void)
+{
+ SaMsgHandleT msgHandle;
+ SaAisErrorT rc = saMsgInitialize(&msgHandle, 0, &msg3_1);
+ assert(rc == SA_AIS_OK);
+
+ lockUnlockNode(true);
+ SaMsgMessageT message;
+ rc = saMsgMessageSend(msgHandle, &queueName, &message, SA_TIME_END);
+ test_validate(rc, SA_AIS_ERR_UNAVAILABLE);
+ lockUnlockNode(false);
+
+ rc = saMsgFinalize(msgHandle);
+ assert(rc == SA_AIS_OK);
+}
+
+static void saErrUnavailable_19(void)
+{
+ SaMsgHandleT msgHandle;
+ SaAisErrorT rc = saMsgInitialize(&msgHandle, 0, &msg3_1);
+ assert(rc == SA_AIS_OK);
+
+ lockUnlockNode(true);
+ SaMsgMessageT message;
+ rc = saMsgMessageSendAsync(msgHandle, 1, &queueName, &message, 0);
+ test_validate(rc, SA_AIS_ERR_UNAVAILABLE);
+ lockUnlockNode(false);
+
+ rc = saMsgFinalize(msgHandle);
+ assert(rc == SA_AIS_OK);
+}
+
+static void saErrUnavailable_20(void)
+{
+ SaMsgHandleT msgHandle;
+ SaAisErrorT rc = saMsgInitialize(&msgHandle, 0, &msg3_1);
+ assert(rc == SA_AIS_OK);
+
+ SaMsgQueueHandleT queueHandle;
+ rc = saMsgQueueOpen(msgHandle,
+ &queueName,
+ &creationAttributes,
+ SA_MSG_QUEUE_CREATE,
+ SA_TIME_END,
+ &queueHandle);
+ assert(rc == SA_AIS_OK);
+
+ lockUnlockNode(true);
+ SaMsgMessageT message;
+ SaMsgSenderIdT senderId;
+
+ rc = saMsgMessageGet(queueHandle, &message, 0, &senderId, 0);
+ test_validate(rc, SA_AIS_ERR_UNAVAILABLE);
+ lockUnlockNode(false);
+
+ rc = saMsgFinalize(msgHandle);
+ assert(rc == SA_AIS_OK);
+}
+
+static void saErrUnavailable_21(void)
+{
+ SaMsgHandleT msgHandle;
+ SaAisErrorT rc = saMsgInitialize(&msgHandle, 0, &msg3_1);
+ assert(rc == SA_AIS_OK);
+
+ lockUnlockNode(true);
+ rc = saMsgMessageDataFree(msgHandle, 0);
+ test_validate(rc, SA_AIS_ERR_UNAVAILABLE);
+ lockUnlockNode(false);
+
+ rc = saMsgFinalize(msgHandle);
+ assert(rc == SA_AIS_OK);
+}
+
+static void saErrUnavailable_22(void)
+{
+ SaMsgHandleT msgHandle;
+ SaAisErrorT rc = saMsgInitialize(&msgHandle, 0, &msg3_1);
+ assert(rc == SA_AIS_OK);
+
+ SaMsgQueueHandleT queueHandle;
+ rc = saMsgQueueOpen(msgHandle,
+ &queueName,
+ &creationAttributes,
+ SA_MSG_QUEUE_CREATE,
+ SA_TIME_END,
+ &queueHandle);
+ assert(rc == SA_AIS_OK);
+
+ lockUnlockNode(true);
+ rc = saMsgMessageCancel(queueHandle);
+ test_validate(rc, SA_AIS_ERR_UNAVAILABLE);
+ lockUnlockNode(false);
+
+ rc = saMsgFinalize(msgHandle);
+ assert(rc == SA_AIS_OK);
+}
+
+static void saErrUnavailable_23(void)
+{
+ SaMsgHandleT msgHandle;
+ SaAisErrorT rc = saMsgInitialize(&msgHandle, 0, &msg3_1);
+ assert(rc == SA_AIS_OK);
+
+ lockUnlockNode(true);
+ SaMsgMessageT message = { 0 }, receiveMessage;
+ rc = saMsgMessageSendReceive(msgHandle, &queueName, &message,
&receiveMessage, 0, SA_TIME_MAX);
+ test_validate(rc, SA_AIS_ERR_UNAVAILABLE);
+ lockUnlockNode(false);
+
+ rc = saMsgFinalize(msgHandle);
+ assert(rc == SA_AIS_OK);
+}
+
+static void saErrUnavailable_24(void)
+{
+ SaMsgHandleT msgHandle;
+ SaAisErrorT rc = saMsgInitialize(&msgHandle, 0, &msg3_1);
+ assert(rc == SA_AIS_OK);
+
+ lockUnlockNode(true);
+ SaMsgMessageT message;
+ SaMsgSenderIdT senderId;
+ rc = saMsgMessageReply(msgHandle, &message, &senderId, 0);
+ test_validate(rc, SA_AIS_ERR_UNAVAILABLE);
+ lockUnlockNode(false);
+
+ rc = saMsgFinalize(msgHandle);
+ assert(rc == SA_AIS_OK);
+}
+
+static void saErrUnavailable_25(void)
+{
+ SaMsgHandleT msgHandle;
+ SaAisErrorT rc = saMsgInitialize(&msgHandle, 0, &msg3_1);
+ assert(rc == SA_AIS_OK);
+
+ lockUnlockNode(true);
+ SaMsgMessageT message;
+ SaMsgSenderIdT senderId;
+ rc = saMsgMessageReplyAsync(msgHandle, 1, &message, &senderId, 0);
+ test_validate(rc, SA_AIS_ERR_UNAVAILABLE);
+ lockUnlockNode(false);
+
+ rc = saMsgFinalize(msgHandle);
+ assert(rc == SA_AIS_OK);
+}
+
+static void saErrUnavailable_30(void)
+{
+ lockUnlockNode(true);
+ SaMsgHandleT msgHandle;
+ SaAisErrorT rc = saMsgInitialize(&msgHandle, 0, &msg3_1);
+ assert(rc == SA_AIS_ERR_UNAVAILABLE);
+ lockUnlockNode(false);
+ rc = saMsgInitialize(&msgHandle, 0, &msg3_1);
+ test_validate(rc, SA_AIS_OK);
+ rc = saMsgFinalize(msgHandle);
+ assert(rc == SA_AIS_OK);
+}
+
+static void saErrUnavailable_31(void)
+{
+ SaMsgHandleT msgHandle;
+ SaAisErrorT rc = saMsgInitialize(&msgHandle, 0, &msg3_1);
+ assert(rc == SA_AIS_OK);
+
+ lockUnlockNode(true);
+ lockUnlockNode(false);
+ SaSelectionObjectT selectionObject;
+ rc = saMsgSelectionObjectGet(msgHandle, &selectionObject);
+ test_validate(rc, SA_AIS_ERR_UNAVAILABLE);
+
+ rc = saMsgFinalize(msgHandle);
+ assert(rc == SA_AIS_OK);
+}
+
+static void saErrUnavailable_32(void)
+{
+ SaMsgHandleT msgHandle;
+ SaAisErrorT rc = saMsgInitialize(&msgHandle, 0, &msg3_1);
+ assert(rc == SA_AIS_OK);
+
+ lockUnlockNode(true);
+ lockUnlockNode(false);
+ rc = saMsgDispatch(msgHandle, SA_DISPATCH_ONE);
+ test_validate(rc, SA_AIS_ERR_UNAVAILABLE);
+
+ rc = saMsgFinalize(msgHandle);
+ assert(rc == SA_AIS_OK);
+}
+
+static void saErrUnavailable_33(void)
+{
+ SaMsgHandleT msgHandle;
+ SaAisErrorT rc = saMsgInitialize(&msgHandle, 0, &msg3_1);
+ assert(rc == SA_AIS_OK);
+
+ lockUnlockNode(true);
+ lockUnlockNode(false);
+ rc = saMsgFinalize(msgHandle);
+ test_validate(rc, SA_AIS_OK);
+}
+
+static void saErrUnavailable_34(void)
+{
+ SaMsgHandleT msgHandle;
+ SaAisErrorT rc = saMsgInitialize(&msgHandle, 0, &msg3_1);
+ assert(rc == SA_AIS_OK);
+
+ lockUnlockNode(true);
+ lockUnlockNode(false);
+ SaMsgQueueHandleT queueHandle;
+ rc = saMsgQueueOpen(msgHandle, &queueName, 0, 0, SA_TIME_END, &queueHandle);
+ test_validate(rc, SA_AIS_ERR_UNAVAILABLE);
+
+ rc = saMsgFinalize(msgHandle);
+ assert(rc == SA_AIS_OK);
+}
+
+static void saErrUnavailable_35(void)
+{
+ SaMsgHandleT msgHandle;
+ SaMsgCallbacksT callbacks = {
+ queueOpenCallback,
+ 0,
+ 0,
+ 0
+ };
+
+ SaAisErrorT rc = saMsgInitialize(&msgHandle, &callbacks, &msg3_1);
+ assert(rc == SA_AIS_OK);
+
+ lockUnlockNode(true);
+ lockUnlockNode(false);
+ rc = saMsgQueueOpenAsync(msgHandle, 1, &queueName, 0, 0);
+ test_validate(rc, SA_AIS_ERR_UNAVAILABLE);
+
+ rc = saMsgFinalize(msgHandle);
+ assert(rc == SA_AIS_OK);
+}
+
+static void saErrUnavailable_36(void)
+{
+ SaMsgHandleT msgHandle;
+ SaAisErrorT rc = saMsgInitialize(&msgHandle, 0, &msg3_1);
+ assert(rc == SA_AIS_OK);
+
+ SaMsgQueueHandleT queueHandle;
+ rc = saMsgQueueOpen(msgHandle,
+ &queueName,
+ &creationAttributes,
+ SA_MSG_QUEUE_CREATE,
+ SA_TIME_END,
+ &queueHandle);
+ assert(rc == SA_AIS_OK);
+
+ lockUnlockNode(true);
+ lockUnlockNode(false);
+ rc = saMsgQueueClose(queueHandle);
+ test_validate(rc, SA_AIS_ERR_UNAVAILABLE);
+
+ rc = saMsgFinalize(msgHandle);
+ assert(rc == SA_AIS_OK);
+}
+
+static void saErrUnavailable_37(void)
+{
+ SaMsgHandleT msgHandle;
+ SaAisErrorT rc = saMsgInitialize(&msgHandle, 0, &msg3_1);
+ assert(rc == SA_AIS_OK);
+
+ lockUnlockNode(true);
+ lockUnlockNode(false);
+ SaMsgQueueStatusT queueStatus;
+ rc = saMsgQueueStatusGet(msgHandle, &queueName, &queueStatus);
+ test_validate(rc, SA_AIS_ERR_UNAVAILABLE);
+
+ rc = saMsgFinalize(msgHandle);
+ assert(rc == SA_AIS_OK);
+}
+
+static void saErrUnavailable_38(void)
+{
+ SaMsgHandleT msgHandle;
+ SaAisErrorT rc = saMsgInitialize(&msgHandle, 0, &msg3_1);
+ assert(rc == SA_AIS_OK);
+
+ SaMsgQueueHandleT queueHandle;
+ rc = saMsgQueueOpen(msgHandle,
+ &queueName,
+ &creationAttributes,
+ SA_MSG_QUEUE_CREATE,
+ SA_TIME_END,
+ &queueHandle);
+ assert(rc == SA_AIS_OK);
+
+ lockUnlockNode(true);
+ lockUnlockNode(false);
+ SaTimeT rTime = SA_TIME_END;
+ rc = saMsgQueueRetentionTimeSet(queueHandle, &rTime);
+ test_validate(rc, SA_AIS_ERR_UNAVAILABLE);
+
+ rc = saMsgFinalize(msgHandle);
+ assert(rc == SA_AIS_OK);
+}
+
+static void saErrUnavailable_39(void)
+{
+ SaMsgHandleT msgHandle;
+ SaAisErrorT rc = saMsgInitialize(&msgHandle, 0, &msg3_1);
+ assert(rc == SA_AIS_OK);
+
+ SaMsgQueueHandleT queueHandle;
+ rc = saMsgQueueOpen(msgHandle,
+ &queueName,
+ &creationAttributes,
+ SA_MSG_QUEUE_CREATE,
+ SA_TIME_END,
+ &queueHandle);
+ assert(rc == SA_AIS_OK);
+
+ lockUnlockNode(true);
+ lockUnlockNode(false);
+ rc = saMsgQueueUnlink(msgHandle, &queueName);
+ test_validate(rc, SA_AIS_ERR_UNAVAILABLE);
+
+ rc = saMsgFinalize(msgHandle);
+ assert(rc == SA_AIS_OK);
+}
+
+static void saErrUnavailable_40(void)
+{
+ SaMsgHandleT msgHandle;
+ SaAisErrorT rc = saMsgInitialize(&msgHandle, 0, &msg3_1);
+ assert(rc == SA_AIS_OK);
+
+ lockUnlockNode(true);
+ lockUnlockNode(false);
+ rc = saMsgQueueGroupCreate(msgHandle, &queueGroupName,
SA_MSG_QUEUE_GROUP_ROUND_ROBIN);
+ test_validate(rc, SA_AIS_ERR_UNAVAILABLE);
+
+ rc = saMsgFinalize(msgHandle);
+ assert(rc == SA_AIS_OK);
+}
+
+static void saErrUnavailable_41(void)
+{
+ SaMsgHandleT msgHandle;
+ SaAisErrorT rc = saMsgInitialize(&msgHandle, 0, &msg3_1);
+ assert(rc == SA_AIS_OK);
+
+ lockUnlockNode(true);
+ lockUnlockNode(false);
+ rc = saMsgQueueGroupDelete(msgHandle, &queueGroupName);
+ test_validate(rc, SA_AIS_ERR_UNAVAILABLE);
+
+ rc = saMsgFinalize(msgHandle);
+ assert(rc == SA_AIS_OK);
+}
+
+static void saErrUnavailable_42(void)
+{
+ SaMsgHandleT msgHandle;
+ SaAisErrorT rc = saMsgInitialize(&msgHandle, 0, &msg3_1);
+ assert(rc == SA_AIS_OK);
+
+ lockUnlockNode(true);
+ lockUnlockNode(false);
+ rc = saMsgQueueGroupInsert(msgHandle, &queueGroupName, &queueName);
+ test_validate(rc, SA_AIS_ERR_UNAVAILABLE);
+
+ rc = saMsgFinalize(msgHandle);
+ assert(rc == SA_AIS_OK);
+}
+
+static void saErrUnavailable_43(void)
+{
+ SaMsgHandleT msgHandle;
+ SaAisErrorT rc = saMsgInitialize(&msgHandle, 0, &msg3_1);
+ assert(rc == SA_AIS_OK);
+
+ lockUnlockNode(true);
+ lockUnlockNode(false);
+ rc = saMsgQueueGroupRemove(msgHandle, &queueGroupName, &queueName);
+ test_validate(rc, SA_AIS_ERR_UNAVAILABLE);
+
+ rc = saMsgFinalize(msgHandle);
+ assert(rc == SA_AIS_OK);
+}
+
+static void saErrUnavailable_44(void)
+{
+ SaMsgHandleT msgHandle;
+ SaAisErrorT rc = saMsgInitialize(&msgHandle, 0, &msg3_1);
+ assert(rc == SA_AIS_OK);
+
+ lockUnlockNode(true);
+ lockUnlockNode(false);
+ rc = saMsgQueueGroupTrack(msgHandle, &queueGroupName, SA_TRACK_CHANGES, 0);
+ test_validate(rc, SA_AIS_ERR_UNAVAILABLE);
+
+ rc = saMsgFinalize(msgHandle);
+ assert(rc == SA_AIS_OK);
+}
+
+static void saErrUnavailable_45(void)
+{
+ SaMsgHandleT msgHandle;
+ SaAisErrorT rc = saMsgInitialize(&msgHandle, 0, &msg3_1);
+ assert(rc == SA_AIS_OK);
+
+ lockUnlockNode(true);
+ lockUnlockNode(false);
+ rc = saMsgQueueGroupTrackStop(msgHandle, &queueGroupName);
+ test_validate(rc, SA_AIS_ERR_UNAVAILABLE);
+
+ rc = saMsgFinalize(msgHandle);
+ assert(rc == SA_AIS_OK);
+}
+
+static void saErrUnavailable_46(void)
+{
+ SaMsgHandleT msgHandle;
+ SaAisErrorT rc = saMsgInitialize(&msgHandle, 0, &msg3_1);
+ assert(rc == SA_AIS_OK);
+
+ lockUnlockNode(true);
+ lockUnlockNode(false);
+ rc = saMsgQueueGroupNotificationFree(msgHandle, 0);
+ test_validate(rc, SA_AIS_ERR_UNAVAILABLE);
+
+ rc = saMsgFinalize(msgHandle);
+ assert(rc == SA_AIS_OK);
+}
+
+static void saErrUnavailable_47(void)
+{
+ SaMsgHandleT msgHandle;
+ SaAisErrorT rc = saMsgInitialize(&msgHandle, 0, &msg3_1);
+ assert(rc == SA_AIS_OK);
+
+ lockUnlockNode(true);
+ lockUnlockNode(false);
+ SaMsgMessageT message;
+ rc = saMsgMessageSend(msgHandle, &queueName, &message, SA_TIME_END);
+ test_validate(rc, SA_AIS_ERR_UNAVAILABLE);
+
+ rc = saMsgFinalize(msgHandle);
+ assert(rc == SA_AIS_OK);
+}
+
+static void saErrUnavailable_48(void)
+{
+ SaMsgHandleT msgHandle;
+ SaAisErrorT rc = saMsgInitialize(&msgHandle, 0, &msg3_1);
+ assert(rc == SA_AIS_OK);
+
+ lockUnlockNode(true);
+ lockUnlockNode(false);
+ SaMsgMessageT message;
+ rc = saMsgMessageSendAsync(msgHandle, 1, &queueName, &message, 0);
+ test_validate(rc, SA_AIS_ERR_UNAVAILABLE);
+
+ rc = saMsgFinalize(msgHandle);
+ assert(rc == SA_AIS_OK);
+}
+
+static void saErrUnavailable_49(void)
+{
+ SaMsgHandleT msgHandle;
+ SaAisErrorT rc = saMsgInitialize(&msgHandle, 0, &msg3_1);
+ assert(rc == SA_AIS_OK);
+
+ SaMsgQueueHandleT queueHandle;
+ rc = saMsgQueueOpen(msgHandle,
+ &queueName,
+ &creationAttributes,
+ SA_MSG_QUEUE_CREATE,
+ SA_TIME_END,
+ &queueHandle);
+ assert(rc == SA_AIS_OK);
+
+ lockUnlockNode(true);
+ lockUnlockNode(false);
+ SaMsgMessageT message;
+ SaMsgSenderIdT senderId;
+
+ rc = saMsgMessageGet(queueHandle, &message, 0, &senderId, 0);
+ test_validate(rc, SA_AIS_ERR_UNAVAILABLE);
+
+ rc = saMsgFinalize(msgHandle);
+ assert(rc == SA_AIS_OK);
+}
+
+static void saErrUnavailable_50(void)
+{
+ SaMsgHandleT msgHandle;
+ SaAisErrorT rc = saMsgInitialize(&msgHandle, 0, &msg3_1);
+ assert(rc == SA_AIS_OK);
+
+ lockUnlockNode(true);
+ lockUnlockNode(false);
+ rc = saMsgMessageDataFree(msgHandle, 0);
+ test_validate(rc, SA_AIS_ERR_UNAVAILABLE);
+
+ rc = saMsgFinalize(msgHandle);
+ assert(rc == SA_AIS_OK);
+}
+
+static void saErrUnavailable_51(void)
+{
+ SaMsgHandleT msgHandle;
+ SaAisErrorT rc = saMsgInitialize(&msgHandle, 0, &msg3_1);
+ assert(rc == SA_AIS_OK);
+
+ SaMsgQueueHandleT queueHandle;
+ rc = saMsgQueueOpen(msgHandle,
+ &queueName,
+ &creationAttributes,
+ SA_MSG_QUEUE_CREATE,
+ SA_TIME_END,
+ &queueHandle);
+ assert(rc == SA_AIS_OK);
+
+ lockUnlockNode(true);
+ lockUnlockNode(false);
+ rc = saMsgMessageCancel(queueHandle);
+ test_validate(rc, SA_AIS_ERR_UNAVAILABLE);
+
+ rc = saMsgFinalize(msgHandle);
+ assert(rc == SA_AIS_OK);
+}
+
+static void saErrUnavailable_52(void)
+{
+ SaMsgHandleT msgHandle;
+ SaAisErrorT rc = saMsgInitialize(&msgHandle, 0, &msg3_1);
+ assert(rc == SA_AIS_OK);
+
+ lockUnlockNode(true);
+ lockUnlockNode(false);
+ SaMsgMessageT message = { 0 }, receiveMessage;
+ rc = saMsgMessageSendReceive(msgHandle, &queueName, &message,
&receiveMessage, 0, SA_TIME_MAX);
+ test_validate(rc, SA_AIS_ERR_UNAVAILABLE);
+
+ rc = saMsgFinalize(msgHandle);
+ assert(rc == SA_AIS_OK);
+}
+
+static void saErrUnavailable_53(void)
+{
+ SaMsgHandleT msgHandle;
+ SaAisErrorT rc = saMsgInitialize(&msgHandle, 0, &msg3_1);
+ assert(rc == SA_AIS_OK);
+
+ lockUnlockNode(true);
+ lockUnlockNode(false);
+ SaMsgMessageT message;
+ SaMsgSenderIdT senderId;
+ rc = saMsgMessageReply(msgHandle, &message, &senderId, 0);
+ test_validate(rc, SA_AIS_ERR_UNAVAILABLE);
+
+ rc = saMsgFinalize(msgHandle);
+ assert(rc == SA_AIS_OK);
+}
+
+static void saErrUnavailable_54(void)
+{
+ SaMsgHandleT msgHandle;
+ SaAisErrorT rc = saMsgInitialize(&msgHandle, 0, &msg3_1);
+ assert(rc == SA_AIS_OK);
+
+ lockUnlockNode(true);
+ lockUnlockNode(false);
+ SaMsgMessageT message;
+ SaMsgSenderIdT senderId;
+ rc = saMsgMessageReplyAsync(msgHandle, 1, &message, &senderId, 0);
+ test_validate(rc, SA_AIS_ERR_UNAVAILABLE);
+
+ rc = saMsgFinalize(msgHandle);
+ assert(rc == SA_AIS_OK);
+}
+
+
+__attribute__((constructor)) static void saErrUnavailable_constructor(void)
+{
+ test_suite_add(26, "SA_AIS_ERR_UNAVAILABLE Test Suite");
+ test_case_add(26, saErrUnavailable_01, "saMsgInitialize");
+ test_case_add(26, saErrUnavailable_02, "saMsgSelectionObjectGet");
+ test_case_add(26, saErrUnavailable_03, "saMsgDispatch");
+ test_case_add(26, saErrUnavailable_04, "saMsgFinalize");
+ test_case_add(26, saErrUnavailable_05, "saMsgQueueOpen");
+ test_case_add(26, saErrUnavailable_06, "saMsgQueueOpenAsync");
+ test_case_add(26, saErrUnavailable_07, "saMsgQueueClose");
+ test_case_add(26, saErrUnavailable_08, "saMsgQueueStatusGet");
+ test_case_add(26, saErrUnavailable_09, "saMsgQueueRetentionTimeSet");
+ test_case_add(26, saErrUnavailable_10, "saMsgQueueUnlink");
+ test_case_add(26, saErrUnavailable_11, "saMsgQueueGroupCreate");
+ test_case_add(26, saErrUnavailable_12, "saMsgQueueGroupDelete");
+ test_case_add(26, saErrUnavailable_13, "saMsgQueueGroupInsert");
+ test_case_add(26, saErrUnavailable_14, "saMsgQueueGroupRemove");
+ test_case_add(26, saErrUnavailable_15, "saMsgQueueGroupTrack");
+ test_case_add(26, saErrUnavailable_16, "saMsgQueueGroupTrackStop");
+ test_case_add(26, saErrUnavailable_17, "saMsgQueueGroupNotificationFree");
+ test_case_add(26, saErrUnavailable_18, "saMsgMessageSend");
+ test_case_add(26, saErrUnavailable_19, "saMsgMessageSendAsync");
+ test_case_add(26, saErrUnavailable_20, "saMsgMessageGet");
+ test_case_add(26, saErrUnavailable_21, "saMsgMessageDataFree");
+ test_case_add(26, saErrUnavailable_22, "saMsgMessageCancel");
+ test_case_add(26, saErrUnavailable_23, "saMsgMessageSendReceive");
+ test_case_add(26, saErrUnavailable_24, "saMsgMessageReply");
+ test_case_add(26, saErrUnavailable_25, "saMsgMessageReplyAsync");
+#if 0
+ test_case_add(26, saErrUnavailable_26, "saMsgQueueCapacityThresholdsSet");
+ test_case_add(26, saErrUnavailable_27, "saMsgQueueCapacityThresholdsGet");
+ test_case_add(26, saErrUnavailable_28, "saMsgMetadataSizeGet");
+ test_case_add(26, saErrUnavailable_29, "saMsgLimitGet");
+#endif
+ test_case_add(26, saErrUnavailable_30, "saMsgInitialize (stale)");
+ test_case_add(26, saErrUnavailable_31, "saMsgSelectionObjectGet (stale)");
+ test_case_add(26, saErrUnavailable_32, "saMsgDispatch (stale)");
+ test_case_add(26, saErrUnavailable_33, "saMsgFinalize (stale)");
+ test_case_add(26, saErrUnavailable_34, "saMsgQueueOpen (stale)");
+ test_case_add(26, saErrUnavailable_35, "saMsgQueueOpenAsync (stale)");
+ test_case_add(26, saErrUnavailable_36, "saMsgQueueClose (stale)");
+ test_case_add(26, saErrUnavailable_37, "saMsgQueueStatusGet (stale)");
+ test_case_add(26, saErrUnavailable_38, "saMsgQueueRetentionTimeSet (stale)");
+ test_case_add(26, saErrUnavailable_39, "saMsgQueueUnlink (stale)");
+ test_case_add(26, saErrUnavailable_40, "saMsgQueueGroupCreate (stale)");
+ test_case_add(26, saErrUnavailable_41, "saMsgQueueGroupDelete (stale)");
+ test_case_add(26, saErrUnavailable_42, "saMsgQueueGroupInsert (stale)");
+ test_case_add(26, saErrUnavailable_43, "saMsgQueueGroupRemove (stale)");
+ test_case_add(26, saErrUnavailable_44, "saMsgQueueGroupTrack (stale)");
+ test_case_add(26, saErrUnavailable_45, "saMsgQueueGroupTrackStop (stale)");
+ test_case_add(26, saErrUnavailable_46, "saMsgQueueGroupNotificationFree
(stale)");
+ test_case_add(26, saErrUnavailable_47, "saMsgMessageSend (stale)");
+ test_case_add(26, saErrUnavailable_48, "saMsgMessageSendAsync (stale)");
+ test_case_add(26, saErrUnavailable_49, "saMsgMessageGet (stale)");
+ test_case_add(26, saErrUnavailable_50, "saMsgMessageDataFree (stale)");
+ test_case_add(26, saErrUnavailable_51, "saMsgMessageCancel (stale)");
+ test_case_add(26, saErrUnavailable_52, "saMsgMessageSendReceive (stale)");
+ test_case_add(26, saErrUnavailable_53, "saMsgMessageReply (stale)");
+ test_case_add(26, saErrUnavailable_54, "saMsgMessageReplyAsync (stale)");
+#if 0
+ test_case_add(26, saErrUnavailable_55, "saMsgQueueCapacityThresholdsSet
(stale)");
+ test_case_add(26, saErrUnavailable_56, "saMsgQueueCapacityThresholdsGet
(stale)");
+ test_case_add(26, saErrUnavailable_57, "saMsgMetadataSizeGet (stale)");
+ test_case_add(26, saErrUnavailable_58, "saMsgLimitGet (stale)");
+#endif
+}
diff --git a/src/msg/msgnd/mqnd_evt.c b/src/msg/msgnd/mqnd_evt.c
index f1505f4..0c2a612 100644
--- a/src/msg/msgnd/mqnd_evt.c
+++ b/src/msg/msgnd/mqnd_evt.c
@@ -438,7 +438,11 @@ static uint32_t mqnd_evt_proc_mqp_qopen(MQND_CB *cb,
MQSV_EVT *evt)
ASAPi_OPR_INFO opr;
TRACE_ENTER();
- if (cb->is_restart_done)
+ if (!cb->clm_node_joined) {
+ TRACE("node is not cluster member");
+ err = SA_AIS_ERR_UNAVAILABLE;
+ goto error1;
+ } else if (cb->is_restart_done)
err = SA_AIS_OK;
else {
mqp_req = &evt->msg.mqp_req;
@@ -556,7 +560,11 @@ static uint32_t mqnd_evt_proc_mqp_qclose(MQND_CB *cb,
MQSV_EVT *evt)
goto send_rsp;
}
- if (cb->is_restart_done)
+ if (!cb->clm_node_joined) {
+ TRACE("node is not cluster member");
+ err = SA_AIS_ERR_UNAVAILABLE;
+ goto send_rsp;
+ } else if (cb->is_restart_done)
err = SA_AIS_OK;
else {
err = SA_AIS_ERR_TRY_AGAIN;
@@ -625,7 +633,11 @@ static uint32_t mqnd_evt_proc_unlink(MQND_CB *cb, MQSV_EVT
*evt)
ulink_req = &evt->msg.mqp_req.info.unlinkReq;
- if (cb->is_restart_done)
+ if (!cb->clm_node_joined) {
+ TRACE("node is not cluster member");
+ err = SA_AIS_ERR_UNAVAILABLE;
+ goto send_rsp;
+ } else if (cb->is_restart_done)
err = SA_AIS_OK;
else {
LOG_ER(
@@ -868,7 +880,11 @@ static uint32_t mqnd_evt_proc_status_req(MQND_CB *cb,
MQSV_EVT *evt)
sts_req = &evt->msg.mqp_req.info.statusReq;
- if (cb->is_restart_done)
+ if (!cb->clm_node_joined) {
+ TRACE("node is not cluster member");
+ err = SA_AIS_ERR_UNAVAILABLE;
+ goto send_rsp;
+ } else if (cb->is_restart_done)
err = SA_AIS_OK;
else {
err = SA_AIS_ERR_TRY_AGAIN;
@@ -1111,7 +1127,11 @@ static uint32_t mqnd_evt_proc_send_msg(MQND_CB *cb,
MQSV_DSEND_EVT *evt)
else
snd_msg = &evt->info.sndMsgAsync.SendMsg;
- if (!cb->is_restart_done) {
+ if (!cb->clm_node_joined) {
+ TRACE("node is not cluster member");
+ err = SA_AIS_ERR_UNAVAILABLE;
+ goto send_resp;
+ } else if (!cb->is_restart_done) {
LOG_ER(
"%s:%u: ERR_TRY_AGAIN: MQND is not completely Initialized",
__FILE__, __LINE__);
@@ -1583,7 +1603,11 @@ static uint32_t mqnd_evt_proc_qattr_get(MQND_CB *cb,
MQSV_EVT *evt)
qattr_req = &evt->msg.mqnd_ctrl.info.qattr_get;
- if (cb->is_restart_done)
+ if (!cb->clm_node_joined) {
+ TRACE("node is not cluster member");
+ err = SA_AIS_ERR_UNAVAILABLE;
+ goto send_rsp;
+ } else if (cb->is_restart_done)
err = SA_AIS_OK;
else {
LOG_ER(
@@ -1649,7 +1673,11 @@ static uint32_t mqnd_evt_proc_ret_time_set(MQND_CB *cb,
MQSV_EVT *evt)
MQSV_EVT rsp_evt;
TRACE_ENTER();
- if (cb->is_restart_done)
+ if (!cb->clm_node_joined) {
+ TRACE("node is not cluster member");
+ err = SA_AIS_ERR_UNAVAILABLE;
+ goto send_rsp;
+ } else if (cb->is_restart_done)
err = SA_AIS_OK;
else {
LOG_ER(
--
2.9.5
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel