osaf/services/saf/smfsv/smfd/SmfUpgradeStep.cc | 94 +++++++++++++++--------
osaf/services/saf/smfsv/smfd/SmfUpgradeStep.hh | 9 ++-
osaf/services/saf/smfsv/smfd/smfd_campaign_oi.cc | 10 +--
3 files changed, 71 insertions(+), 42 deletions(-)
When rebootAffectedNodes is enabled and sw bundles list it's own plmExecEnv
nodes for specific sw bundles, the specified nodes are rebooted.
diff --git a/osaf/services/saf/smfsv/smfd/SmfUpgradeStep.cc
b/osaf/services/saf/smfsv/smfd/SmfUpgradeStep.cc
--- a/osaf/services/saf/smfsv/smfd/SmfUpgradeStep.cc
+++ b/osaf/services/saf/smfsv/smfd/SmfUpgradeStep.cc
@@ -525,6 +525,15 @@ SmfUpgradeStep::removeSwNodeListDuplicat
}
//------------------------------------------------------------------------------
+// clearSwNodeList()
+//------------------------------------------------------------------------------
+void
+SmfUpgradeStep::clearSwNodeList()
+{
+ m_swNodeList.clear();
+}
+
+//------------------------------------------------------------------------------
// getSwNodeList()
//------------------------------------------------------------------------------
const std::list<std::string> &
@@ -1235,7 +1244,10 @@ bool SmfUpgradeStep::calculateSingleStep
if (i_plmExecEnvList.empty()) {
TRACE("No <plmExecEnv> was specified, use m_swNodeList");
- o_nodelist = m_swNodeList;
+ std::list<std::string>::iterator it;
+ for (it = m_swNodeList.begin(); it != m_swNodeList.end(); it++)
{
+ o_nodelist.push_back(*it);
+ }
} else {
TRACE("<plmExecEnv> was specified, get the AMF nodes from the
provided plmExecEnvList");
std::list<SmfPlmExecEnv>::const_iterator ee;
@@ -1440,6 +1452,34 @@ SmfUpgradeStep::calculateStepType()
// *If SMF execute on the controller
included, swap controllers
// *Otherwise , node reboot step is selected.
+ //Find out which nodes are affected for each
bundle, plmExecEnv overrides calc nodes
+ std::list < SmfBundleRef >::const_iterator
bundleit;
+ std::list<std::string> swNodeList; //The
total list of nodes
+
+ //Find out which nodes was addressed for
removal
+ for (bundleit = m_swRemoveList.begin();
bundleit != m_swRemoveList.end(); ++bundleit) {
+ if
(!calculateSingleStepNodes(bundleit->getPlmExecEnvList(), swNodeList)) {
+ LOG_NO("Fail to calculate
nodes for bundle [%s]", bundleit->getBundleDn().c_str());
+ }
+ }
+ //Find out which nodes was addressed for
installation
+ for (bundleit = m_swAddList.begin(); bundleit
!= m_swAddList.end(); ++bundleit) {
+ if
(!calculateSingleStepNodes(bundleit->getPlmExecEnvList(), swNodeList)) {
+ LOG_NO("Fail to calculate
nodes for bundle [%s]", bundleit->getBundleDn().c_str());
+ }
+ }
+
+ //Clear the nodelist. Calculated nodes will be
copied in calculateSingleStepNodes()
+ //method for bundles without plmExecEnv list.
+ clearSwNodeList();
+
+ //The swNodeList contain no duplicates from
method calculateSingleStepNodes()
+ //Rewrite the nodelist
+ std::list<std::string>::iterator strIter;
+ for ( strIter = swNodeList.begin(); strIter !=
swNodeList.end(); ++strIter) {
+ addSwNode(*strIter);
+ }
+
bool allControllersAffected = false; //Assume
all controllers is not within the single step list of nodes
int noOfAffectedControllers = 0;
std::string matchingController;
@@ -1452,6 +1492,7 @@ SmfUpgradeStep::calculateStepType()
goto selectStepType;
}
+
if (smfd_cb->smfClusterControllers[0] != NULL)
{ //Controller is configured
//Count the number of controllers
configured
@@ -1847,32 +1888,22 @@ SmfUpgradeStep::callActivationCmd()
not bound to a particular node, so the
"i_node" will be empty. */
- std::list<SmfPlmExecEnv> plmExecEnvList; //The resulting PLM
env list
+ //Find out which nodes are affected for each bundle,
plmExecEnv overrides calc nodes
+ std::list < SmfBundleRef >::const_iterator bundleit;
+ std::list<std::string> swNodeList; //The total list of nodes
- //Find out which nodes was addressed for installation and
removal
- for (bundleit = m_swRemoveList.begin(); bundleit !=
m_swRemoveList.end(); ++bundleit) {
- std::list<SmfPlmExecEnv> tmp =
bundleit->getPlmExecEnvList();
- std::list<SmfPlmExecEnv>::iterator it;
- for (it = tmp.begin(); it != tmp.end(); ++it) {
- plmExecEnvList.push_back(*it);
- }
- }
-
- for (bundleit = m_swAddList.begin(); bundleit !=
m_swAddList.end(); ++bundleit) {
- std::list<SmfPlmExecEnv> tmp =
bundleit->getPlmExecEnvList();
- std::list<SmfPlmExecEnv>::iterator it;
- for (it = tmp.begin(); it != tmp.end(); ++it) {
- plmExecEnvList.push_back(*it);
- }
- }
-
- //Translate the PLM exec env to AMF nodes
- //Duplicates are removed in the calculateSingleStepNodes method
- std::list<std::string> swNodeList;
- if (!calculateSingleStepNodes(plmExecEnvList, swNodeList)) {
- result = false;
- goto done;
- }
+ //Find out which nodes was addressed for removal
+ for (bundleit = m_swRemoveList.begin(); bundleit !=
m_swRemoveList.end(); ++bundleit) {
+ if
(!calculateSingleStepNodes(bundleit->getPlmExecEnvList(), swNodeList)) {
+ LOG_NO("Fail to calculate nodes for bundle
[%s]", bundleit->getBundleDn().c_str());
+ }
+ }
+ //Find out which nodes was addressed for installation
+ for (bundleit = m_swAddList.begin(); bundleit !=
m_swAddList.end(); ++bundleit) {
+ if
(!calculateSingleStepNodes(bundleit->getPlmExecEnvList(), swNodeList)) {
+ LOG_NO("Fail to calculate nodes for bundle
[%s]", bundleit->getBundleDn().c_str());
+ }
+ }
std::list<std::string>::const_iterator n;
for (n = swNodeList.begin(); n != swNodeList.end(); n++) {
@@ -2230,6 +2261,10 @@ SmfUpgradeStep::nodeReboot()
int localTimeout = 500; // 500 * 10
ms = 5 seconds
SmfndNodeDest nodeDest;
std::list<std::string> nodeList;
+ std::list<std::string>::iterator listIt;
+ std::list<SmfNodeUpInfo> rebootedNodeList;
+ std::list<SmfNodeUpInfo> cmdNodeList;
+ std::list<SmfNodeUpInfo>::iterator nodeIt;
//Copy the step node/nodelist into a local node list
if (getSwNode().length() == 0) { //Single step procedure
@@ -2244,11 +2279,6 @@ SmfUpgradeStep::nodeReboot()
return result;
}
- std::list<std::string>::iterator listIt;
- std::list<SmfNodeUpInfo> rebootedNodeList;
- std::list<SmfNodeUpInfo> cmdNodeList;
- std::list<SmfNodeUpInfo>::iterator nodeIt;
-
//Order smf node director to reboot the node
cmd = smfd_cb->smfNodeRebootCmd;
@@ -2266,7 +2296,7 @@ SmfUpgradeStep::nodeReboot()
command execution anyway so it doesn't nodeReboot()matter
that the timeout is really long */
cmdrc = smfnd_exec_remote_cmd(cmd.c_str(), &nodeDest,
cliTimeout, localTimeout);
if (cmdrc != 0) {
- LOG_NO("Reboot command [%s] on node [%s] failed
rc=[%x], continue", cmd.c_str(), (*listIt).c_str(), cmdrc);
+ LOG_NO("Reboot command [%s] on node [%s] return
rc=[%x], continue", cmd.c_str(), (*listIt).c_str(), cmdrc);
}
/* Save the nodename and node UP counter for later use */
diff --git a/osaf/services/saf/smfsv/smfd/SmfUpgradeStep.hh
b/osaf/services/saf/smfsv/smfd/SmfUpgradeStep.hh
--- a/osaf/services/saf/smfsv/smfd/SmfUpgradeStep.hh
+++ b/osaf/services/saf/smfsv/smfd/SmfUpgradeStep.hh
@@ -338,7 +338,14 @@ class SmfUpgradeStep {
/// @return A list of DNs to AMF nodes
///
const std::list<std::string> & getSwNodeList();
-
+
+///
+/// Purpose: Clear the list of nodes where sw should be added/removed (single
step)
+/// @param None
+/// @return None
+///
+ void clearSwNodeList();
+
///
/// Purpose: Set type of step
/// @param type
diff --git a/osaf/services/saf/smfsv/smfd/smfd_campaign_oi.cc
b/osaf/services/saf/smfsv/smfd/smfd_campaign_oi.cc
--- a/osaf/services/saf/smfsv/smfd/smfd_campaign_oi.cc
+++ b/osaf/services/saf/smfsv/smfd/smfd_campaign_oi.cc
@@ -1111,7 +1111,6 @@ uint32_t read_config_and_set_control_blo
//If this routine is called early, it has showed the
saClmNodeID attribute is empty
//If empty wait a second and retry
bool saClmNodeIDEmpty = true;
- int retryCntr = 0;
while (true == saClmNodeIDEmpty) {
if (immutil.getChildrenAndAttrBySearchHandle("",
immSearchHandle, SA_IMM_SUBTREE, (SaImmAttrNameT*)attributeNames, "SaClmNode")
== false) {
LOG_NO("getChildrenAndAttrBySearchHandle
fail");
@@ -1125,16 +1124,9 @@ uint32_t read_config_and_set_control_blo
const SaUint32T *nodeId =
immutil_getUint32Attr((const SaImmAttrValuesT_2 **)attributes, "saClmNodeID",
0);
if (nodeId == NULL) {
(void)
immutil_saImmOmSearchFinalize(immSearchHandle);
- if (retryCntr >= 10) { //Retry 10
times
- LOG_NO("Attribute saClmNodeID
still empty, giving up");
- TRACE_LEAVE();
- return NCSCC_RC_FAILURE;
- }
- saClmNodeIDEmpty = true; //Continue
in: while (true == saClmNodeIDEmpty)
LOG_NO("Attribute saClmNodeID empty,
wait and retry");
- struct timespec sleepTime = { 1, 0 };
//One second
+ struct timespec sleepTime = { 2, 0 };
//Two seconds
osaf_nanosleep(&sleepTime);
- retryCntr++;
break;
}
saClmNodeIDEmpty = false; //Do not continue
in: while (true == saClmNodeIDEmpty) }
------------------------------------------------------------------------------
One dashboard for servers and applications across Physical-Virtual-Cloud
Widest out-of-the-box monitoring support with 50+ applications
Performance metrics, stats and reports that give you Actionable Insights
Deep dive visibility with transaction tracing using APM Insight.
http://ad.doubleclick.net/ddm/clk/290420510;117567292;y
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel