osaf/libs/common/immsv/immpbe_dump.cc | 1 +
osaf/libs/common/immsv/include/immsv_evt.h | 2 +-
osaf/services/saf/immsv/immd/immd_cb.h | 2 +-
osaf/services/saf/immsv/immd/immd_evt.c | 26 ++++++++++++--------------
osaf/services/saf/immsv/immd/immd_proc.c | 2 +-
osaf/services/saf/immsv/immd/immd_sbevt.c | 2 +-
osaf/services/saf/immsv/immnd/ImmModel.cc | 2 +-
osaf/services/saf/immsv/immnd/immnd_cb.h | 2 +-
osaf/services/saf/immsv/immnd/immnd_evt.c | 10 +++++-----
osaf/services/saf/immsv/immnd/immnd_proc.c | 17 +++++++----------
10 files changed, 31 insertions(+), 35 deletions(-)
The patch conatins fixes from reviewers comments.
diff --git a/osaf/libs/common/immsv/immpbe_dump.cc
b/osaf/libs/common/immsv/immpbe_dump.cc
--- a/osaf/libs/common/immsv/immpbe_dump.cc
+++ b/osaf/libs/common/immsv/immpbe_dump.cc
@@ -1307,6 +1307,7 @@ static bool verifyClassObjectsPBE(std::s
for(i=0; attrDefinitions[i]; i++) {
if(attrDefinitions[i]->attrFlags & SA_IMM_ATTR_RDN) {
rdnAttrDefIndex = i;
+ break;
}
}
diff --git a/osaf/libs/common/immsv/include/immsv_evt.h
b/osaf/libs/common/immsv/include/immsv_evt.h
--- a/osaf/libs/common/immsv/include/immsv_evt.h
+++ b/osaf/libs/common/immsv/include/immsv_evt.h
@@ -438,7 +438,7 @@ typedef struct immsv_nd2d_control {
IMMSV_OCTET_STRING xmlFile;
IMMSV_OCTET_STRING pbeFile;
- /* OpenSaf4.6: At restart of IMMD sv-id, IMMND gives feeedback on:
+ /* OpenSaf5.0: At restart of IMMD sv-id, IMMND gives feeedback on:
- fevs_count
- admo_id_count
- ccb_id_count
diff --git a/osaf/services/saf/immsv/immd/immd_cb.h
b/osaf/services/saf/immsv/immd/immd_cb.h
--- a/osaf/services/saf/immsv/immd/immd_cb.h
+++ b/osaf/services/saf/immsv/immd/immd_cb.h
@@ -138,7 +138,7 @@ typedef struct immd_cb_tag {
bool m2PbeExtraWait; /* true => Used only to prolong wait if both SCs
have been introduced but one has not yet
replied. */
bool nid_started; /* true if started by NID */
- SaUint16T mScAbsenceAllowed; /* Non zero if "headless Hydra" allowed
(loss of both IMMDs/SCs).
+ SaUint16T mScAbsenceAllowed; /* Non zero if SC absence is allowed (loss
of both IMMDs/SCs).
Value is number of seconds of SC absence
tolerated. */
MDS_DEST payload_coord_dest; /* IMMND coord may be at payload if
mScAbsenceAllowed is nonzero */
} IMMD_CB;
diff --git a/osaf/services/saf/immsv/immd/immd_evt.c
b/osaf/services/saf/immsv/immd/immd_evt.c
--- a/osaf/services/saf/immsv/immd/immd_evt.c
+++ b/osaf/services/saf/immsv/immd/immd_evt.c
@@ -414,7 +414,6 @@ static void immd_abort_sync_ok(IMMD_CB *
sync_evt.info.immnd.info.ctrl.nodeId = node_info->immnd_key;
sync_evt.info.immnd.info.ctrl.rulingEpoch = cb->mRulingEpoch;
sync_evt.info.immnd.info.ctrl.fevsMsgStart = cb->fevsSendCount;
- sync_evt.info.immnd.info.ctrl.ndExecPid = node_info->immnd_execPid;
sync_evt.info.immnd.info.ctrl.canBeCoord =
(node_info->isOnController)?1:(cb->mScAbsenceAllowed)?4:0;
sync_evt.info.immnd.info.ctrl.ndExecPid =
(sync_evt.info.immnd.info.ctrl.canBeCoord==4)?(cb->mScAbsenceAllowed):node_info->immnd_execPid;
sync_evt.info.immnd.info.ctrl.isCoord = node_info->isCoord;
@@ -458,7 +457,6 @@ static void immd_prto_purge_mutations(IM
sync_evt.info.immnd.info.ctrl.nodeId = node_info->immnd_key;
sync_evt.info.immnd.info.ctrl.rulingEpoch = cb->mRulingEpoch;
sync_evt.info.immnd.info.ctrl.fevsMsgStart = cb->fevsSendCount;
- sync_evt.info.immnd.info.ctrl.ndExecPid = node_info->immnd_execPid;
sync_evt.info.immnd.info.ctrl.canBeCoord =
(node_info->isOnController)?1:(cb->mScAbsenceAllowed)?4:0;
sync_evt.info.immnd.info.ctrl.ndExecPid =
(sync_evt.info.immnd.info.ctrl.canBeCoord==4)?(cb->mScAbsenceAllowed):node_info->immnd_execPid;
sync_evt.info.immnd.info.ctrl.isCoord = node_info->isCoord;
@@ -565,7 +563,6 @@ static void immd_req_sync(IMMD_CB *cb, I
rqsync_evt.info.immnd.info.ctrl.nodeId = node_info->immnd_key;
rqsync_evt.info.immnd.info.ctrl.rulingEpoch = cb->mRulingEpoch;
rqsync_evt.info.immnd.info.ctrl.canBeCoord =
(node_info->isOnController)?1:(cb->mScAbsenceAllowed)?4:0;
- rqsync_evt.info.immnd.info.ctrl.ndExecPid = node_info->immnd_execPid;
rqsync_evt.info.immnd.info.ctrl.ndExecPid =
(rqsync_evt.info.immnd.info.ctrl.canBeCoord==4)?(cb->mScAbsenceAllowed):node_info->immnd_execPid;
rqsync_evt.info.immnd.info.ctrl.fevsMsgStart = cb->fevsSendCount;
rqsync_evt.info.immnd.info.ctrl.isCoord = node_info->isCoord;
@@ -620,10 +617,10 @@ static void immd_req_sync(IMMD_CB *cb, I
goto done;
}
- LOG_IN("ABT coord at payload ? cb->immnd_coord:%x
cb->mScAbsenceAllowed: %u dest:%" PRIu64,
+ LOG_IN("coord at payload ? cb->immnd_coord:%x cb->mScAbsenceAllowed: %u
dest:%" PRIu64,
cb->immnd_coord, cb->mScAbsenceAllowed, cb->payload_coord_dest);
- if(cb->immnd_coord && cb->mScAbsenceAllowed) {
+ if(cb->payload_coord_dest && cb->mScAbsenceAllowed) {
LOG_NO("Sc Absence Allowed is configured (%u) => IMMND coord at
payload node:%x dest%" PRIu64,
cb->mScAbsenceAllowed, cb->immnd_coord,
cb->payload_coord_dest);
TRACE_5("Send-4 SYNC_REQ to remote coord IMMND at payload,
dest:%" PRIu64, cb->payload_coord_dest);
@@ -677,13 +674,11 @@ static void immd_accept_node(IMMD_CB *cb
IMMD_MBCSV_MSG mbcp_msg;
bool isOnController = node_info->isOnController;
bool fsParamMbcp = false;
- int32_t mds_attached_nodes =
(int32_t)immd_immnd_info_node_cardinality(&cb->immnd_tree);
- LOG_NO("Attached Nodes:%u Accepted nodes:%u KnownVeteran:%u
doReply:%u", mds_attached_nodes, accepted_nodes, knownVeteran, doReply);
TRACE_ENTER();
memset(&accept_evt, 0, sizeof(IMMSV_EVT));
memset(&mbcp_msg, 0, sizeof(IMMD_MBCSV_MSG));
- if(cb->mScAbsenceAllowed && doReply) {++accepted_nodes;}
+ if(cb->mScAbsenceAllowed && !cb->immnd_coord && doReply)
{++accepted_nodes;}
accept_evt.type = IMMSV_EVT_TYPE_IMMND;
accept_evt.info.immnd.type = IMMND_EVT_D2ND_INTRO_RSP;
@@ -696,15 +691,18 @@ static void immd_accept_node(IMMD_CB *cb
/* Sending back pbeEnabled from IMMD to IMMNDs not really needed.*/
accept_evt.info.immnd.info.ctrl.pbeEnabled = (cb->mRim ==
SA_IMM_KEEP_REPOSITORY);
if (isOnController) {
- if(cb->immnd_coord == 0) {/* No coord */
+ if(cb->immnd_coord == 0) {/* No coord */
+ int32_t mds_attached_nodes =
(int32_t)immd_immnd_info_node_cardinality(&cb->immnd_tree);
+ LOG_NO("Attached Nodes:%u Accepted nodes:%u
KnownVeteran:%u doReply:%u", mds_attached_nodes, accepted_nodes, knownVeteran,
doReply);
+
if(cb->mIs2Pbe) {
LOG_NO("IMMND on SC found at %x this IMMD at
%x."
" Cluster is loading. 2PBE configured
=> Wait.",
node_info->immnd_key, cb->node_id);
accept_evt.info.immnd.info.ctrl.canBeCoord = 2;
/* 2PBE => order preload. */
- } else if(!(cb->mScAbsenceAllowed) || knownVeteran ||
(mds_attached_nodes == 1) ||
+ } else if(!(cb->mScAbsenceAllowed) ||
(mds_attached_nodes == 1) ||
(accepted_nodes > (mds_attached_nodes - 2)))
{
- /* ABT possibly need timeout conditionj ALSO.
But we dont want another config variable */
+ /* possibly need timeout condition ALSO. But we
dont want another config variable */
LOG_NO("First IMMND on SC found at %x this IMMD
at %x."
" Cluster is loading, *not* 2PBE =>
designating that IMMND as coordinator",
node_info->immnd_key, cb->node_id);
@@ -715,8 +713,8 @@ static void immd_accept_node(IMMD_CB *cb
doReply = false;
--accepted_nodes;
} else {
- LOG_NO("PROBLEM CASE (?) ScAbsenceAllowed: %u;
accepted_nodes:%u; mds_attached_nodess:%u",
- cb->mScAbsenceAllowed, accepted_nodes,
mds_attached_nodes);
+ LOG_NO("PROBLEM CASE (?) ScAbsenceAllowed: %u;
accepted_nodes:%u; mds_attached_nodess:%u",
+ cb->mScAbsenceAllowed,
accepted_nodes, mds_attached_nodes);
}
} else {
/* Coord already exists. An SC is joining the cluster.
*/
@@ -833,7 +831,7 @@ static void immd_accept_node(IMMD_CB *cb
}
}
- if(cb->mScAbsenceAllowed && cb->payload_coord_dest) {
+ if(cb->mScAbsenceAllowed && cb->payload_coord_dest &&
!node_info->isCoord) {
/* SC absence allowed and coord is configured
at payload. */
TRACE("Payload intro sent to IMMND coord at
payload (%x)", cb->immnd_coord);
proc_rc = immd_mds_msg_send(cb,
NCSMDS_SVC_ID_IMMND, cb->payload_coord_dest, &accept_evt);
diff --git a/osaf/services/saf/immsv/immd/immd_proc.c
b/osaf/services/saf/immsv/immd/immd_proc.c
--- a/osaf/services/saf/immsv/immd/immd_proc.c
+++ b/osaf/services/saf/immsv/immd/immd_proc.c
@@ -276,7 +276,7 @@ bool immd_proc_elect_coord(IMMD_CB *cb,
one step higher than the coord epoch.
*/
} else {
- /* Try to elect a new coord. ABT Do I need to reset
payload_coord_dest earlier ? */
+ /* Try to elect a new coord. */
cb->payload_coord_dest = 0LL;
memset(&key, 0, sizeof(MDS_DEST));
immd_immnd_info_node_getnext(&cb->immnd_tree, &key,
&immnd_info_node);
diff --git a/osaf/services/saf/immsv/immd/immd_sbevt.c
b/osaf/services/saf/immsv/immd/immd_sbevt.c
--- a/osaf/services/saf/immsv/immd/immd_sbevt.c
+++ b/osaf/services/saf/immsv/immd/immd_sbevt.c
@@ -193,6 +193,7 @@ uint32_t immd_process_node_accept(IMMD_C
if(ctrl->isCoord) {
SaImmRepositoryInitModeT oldRim = cb->mRim;
cb->immnd_coord = immnd_info_node->immnd_key;
+ cb->payload_coord_dest =
(immnd_info_node->isOnController) ? 0LL : immnd_info_node->immnd_dest;
cb->m2PbeCanLoad = true;
LOG_NO("IMMND coord at %x", immnd_info_node->immnd_key);
immnd_info_node->syncStarted = ctrl->syncStarted;
@@ -251,7 +252,6 @@ uint32_t immd_process_node_accept(IMMD_C
cb->mDir = ctrl->dir.buf; /*steal*/
} else if(ctrl->dir.size && cb->mDir) {
/* Should not get here since fs params sent only once.*/
- LOG_NO("ABT Should not get here since fs params sent
only once");
if(strcmp(cb->mDir, ctrl->dir.buf)) {
LOG_WA("SBY: Discrepancy on IMM directory: %s
!= %s",
cb->mDir, ctrl->dir.buf);
diff --git a/osaf/services/saf/immsv/immnd/ImmModel.cc
b/osaf/services/saf/immsv/immnd/ImmModel.cc
--- a/osaf/services/saf/immsv/immnd/ImmModel.cc
+++ b/osaf/services/saf/immsv/immnd/ImmModel.cc
@@ -17378,7 +17378,7 @@ ImmModel::setScAbsenceAllowed(SaUint16T
ImmAttrValue* valuep = (ImmAttrValue *) avi->second;
valuep->setValue_int(scAbsenceAllowed);
- LOG_NO("ABT ImmModel received scAbsenceAllowed %u", scAbsenceAllowed);
+ LOG_NO("ImmModel received scAbsenceAllowed %u", scAbsenceAllowed);
}
SaAisErrorT
diff --git a/osaf/services/saf/immsv/immnd/immnd_cb.h
b/osaf/services/saf/immsv/immnd/immnd_cb.h
--- a/osaf/services/saf/immsv/immnd/immnd_cb.h
+++ b/osaf/services/saf/immsv/immnd/immnd_cb.h
@@ -132,7 +132,7 @@ typedef struct immnd_cb_tag {
bool mIsOtherScUp; //If set & this is an SC then other SC is up(2pbe).
//False=> *allow* 1safe 2pbe. May err conservatively (true)
bool mForceClean; //true => Force cleanTheHouse to run once *now*.
- SaUint16T mScAbsenceAllowed; /* Non zero if "headless Hydra" allowed
(loss of both IMMDs/SCs).
+ SaUint16T mScAbsenceAllowed; /* Non zero if SC absence is allowed (loss
of both IMMDs/SCs).
Value is number of seconds of SC absence
tolerated. */
/* Information about the IMMD */
diff --git a/osaf/services/saf/immsv/immnd/immnd_evt.c
b/osaf/services/saf/immsv/immnd/immnd_evt.c
--- a/osaf/services/saf/immsv/immnd/immnd_evt.c
+++ b/osaf/services/saf/immsv/immnd/immnd_evt.c
@@ -2198,7 +2198,7 @@ static uint32_t immnd_evt_proc_imm_clien
cl_node->mIsResurrect = 0x1;
if (immnd_client_node_add(cb, cl_node) != NCSCC_RC_SUCCESS) {
-#if 0 //CLOUD-PROTO ABT clients should be discarded !!!!
+#if 0 //CLOUD-PROTO clients should be discarded !!!!
LOG_ER("IMMND - Adding temporary imma client Failed.");
/*free(cl_node);*/
abort();
@@ -8782,8 +8782,8 @@ static uint32_t immnd_evt_proc_intro_rsp
if(cb->mCanBeCoord == 4) {
osafassert(!(cb->m2Pbe));
cb->mScAbsenceAllowed = evt->info.ctrl.ndExecPid;
- LOG_IN("ABT cb->mScAbsenceAllowed:%u
evt->info.ctrl.ndExecPid:%u", cb->mScAbsenceAllowed, evt->info.ctrl.ndExecPid);
- LOG_IN("SC_ABSENCE_ALLOWED (Headless Hydra) is
configured for %u seconds. CanBeCoord:%u",
+ LOG_IN("cb->mScAbsenceAllowed:%u
evt->info.ctrl.ndExecPid:%u", cb->mScAbsenceAllowed, evt->info.ctrl.ndExecPid);
+ LOG_IN("SC_ABSENCE_ALLOWED is configured for %u
seconds. CanBeCoord:%u",
cb->mScAbsenceAllowed, cb->mCanBeCoord);
}
@@ -8814,7 +8814,7 @@ static uint32_t immnd_evt_proc_intro_rsp
}
if(cb->mIsCoord) {
if(!(evt->info.ctrl.isCoord)) {
- LOG_NO("ABT CLOUD PROTO avoided canceling coord
- SHOULD NOT GET HERE");
+ LOG_NO("Avoided canceling coord - SHOULD NOT
GET HERE");
}
} else {
LOG_NO("SETTING COORD TO %u CLOUD PROTO",
evt->info.ctrl.isCoord);
@@ -9325,7 +9325,7 @@ static void immnd_evt_proc_finalize_sync
SaImmHandleT prev_hdl;
unsigned int count = 0;
IMMSV_EVT send_evt;
- /* Sync completed for veteran & headless allowed =>
trigger active
+ /* Sync completed for veteran & SC absence allowed =>
trigger active
resurrect. */
memset(&send_evt, '\0', sizeof(IMMSV_EVT));
send_evt.type = IMMSV_EVT_TYPE_IMMA;
diff --git a/osaf/services/saf/immsv/immnd/immnd_proc.c
b/osaf/services/saf/immsv/immnd/immnd_proc.c
--- a/osaf/services/saf/immsv/immnd/immnd_proc.c
+++ b/osaf/services/saf/immsv/immnd/immnd_proc.c
@@ -157,7 +157,9 @@ uint32_t immnd_proc_imma_discard_connect
Abort all such ccbs via broadcast over IMMD.
*/
- immModel_getCcbIdsForOrigCon(cb, client_id, &arrSize, &idArr);
+ if(!scAbsence)
+ immModel_getCcbIdsForOrigCon(cb, client_id, &arrSize, &idArr);
+
if (arrSize) {
SaUint32T ix;
memset(&send_evt, '\0', sizeof(IMMSV_EVT));
@@ -166,7 +168,7 @@ uint32_t immnd_proc_imma_discard_connect
for (ix = 0; ix < arrSize && !(cl_node->mIsStale); ++ix) {
send_evt.info.immd.info.ccbId = idArr[ix];
TRACE_5("Discarding Ccb id:%u originating at dead
connection: %u", idArr[ix], client_id);
- if (!scAbsence && immnd_mds_msg_send(cb,
NCSMDS_SVC_ID_IMMD, cb->immd_mdest_id,
+ if (immnd_mds_msg_send(cb, NCSMDS_SVC_ID_IMMD,
cb->immd_mdest_id,
&send_evt) != NCSCC_RC_SUCCESS) {
if (immnd_is_immd_up(cb)) {
LOG_ER("Failure to broadcast discard
Ccb for ccbId:%u "
@@ -177,8 +179,6 @@ uint32_t immnd_proc_imma_discard_connect
"(immd down)- will retry later",
idArr[ix]);
}
cl_node->mIsStale = true;
- } else if(scAbsence) {
- /* ABT TODO discard local ccbs ??*/
}
}
free(idArr);
@@ -505,7 +505,7 @@ static int32_t immnd_iAmLoader(IMMND_CB
TRACE_5("Loading is not possible, preLoader still attached");
return (-3);
}
-LOG_IN("ABT CLOUD PROTO cb->mMyEpoch:%u != cb->mRulingEpoch:%u",
cb->mMyEpoch, cb->mRulingEpoch);
+
if (cb->mMyEpoch != cb->mRulingEpoch) {
/*We are joining the cluster, need to sync this IMMND. */
return (-2);
@@ -561,7 +561,7 @@ static uint32_t immnd_requestSync(IMMND_
uint32_t rc = NCSCC_RC_SUCCESS;
IMMSV_EVT send_evt;
memset(&send_evt, '\0', sizeof(IMMSV_EVT));
-LOG_NO("ABT REQUESTING SYNC");
+
send_evt.type = IMMSV_EVT_TYPE_IMMD;
send_evt.info.immd.type = IMMD_EVT_ND2D_REQ_SYNC;
send_evt.info.immd.info.ctrl_msg.ndExecPid = cb->mMyPid;
@@ -2317,7 +2317,7 @@ void immnd_dump_client_info(IMMND_IMM_CL
#endif
-/* Only for scAbsenceAllowed (headless hydra) */
+/* Only for scAbsenceAllowed */
void immnd_proc_discard_other_nodes(IMMND_CB *cb)
{
TRACE_ENTER();
@@ -2328,15 +2328,12 @@ void immnd_proc_discard_other_nodes(IMMN
while (cl_node) {
LOG_NO("Removing client id:%llx sv_id:%u",
cl_node->imm_app_hdl, cl_node->sv_id);
osafassert(immnd_proc_imma_discard_connection(cb, cl_node,
true));
- LOG_NO("ABT discard_connection OK");
osafassert(immnd_client_node_del(cb, cl_node) ==
NCSCC_RC_SUCCESS);
free(cl_node);
cl_node = NULL;
- LOG_NO("ABT Client node REMOVED");
immnd_client_node_getnext(cb, 0, &cl_node);
}
- LOG_NO("ABT DONE REMOVING CLIENTS ENTERING immModel_isolateThisNode(cb)
");
immModel_isolateThisNode(cb);
immModel_abortNonCriticalCcbs(cb);
TRACE_LEAVE();
------------------------------------------------------------------------------
Site24x7 APM Insight: Get Deep Visibility into Application Performance
APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month
Monitor end-to-end web transactions and take corrective actions now
Troubleshoot faster and improve end-user experience. Signup Now!
http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel