osaf/services/saf/smfsv/smfd/SmfUpgradeProcedure.cc | 40 ++++++++++++++++++++- 1 files changed, 39 insertions(+), 1 deletions(-)
diff --git a/osaf/services/saf/smfsv/smfd/SmfUpgradeProcedure.cc b/osaf/services/saf/smfsv/smfd/SmfUpgradeProcedure.cc --- a/osaf/services/saf/smfsv/smfd/SmfUpgradeProcedure.cc +++ b/osaf/services/saf/smfsv/smfd/SmfUpgradeProcedure.cc @@ -1381,6 +1381,44 @@ SmfUpgradeProcedure::mergeStepIntoSingle } } + // For forAddRemove AU/DU the node level AU/DU will be optimized with other rolling/formodify proceduers. + // Because node will never be optimized away. + // But AU/DU at SU/Comp will not be optimized for AddRemove and will be as is, because there is a chance that + // Su/comp can be removed if they are in the scope of the node/Su. + + std::list < unitNameAndState >::iterator addRemoveUnit_iter, nodeLevel_iter; + for (addRemoveUnit_iter = forAddRemoveAU.begin(); addRemoveUnit_iter != forAddRemoveAU.end(); ) { + for (nodeLevel_iter = nodeLevelDU.begin(); nodeLevel_iter!= nodeLevelDU.end(); nodeLevel_iter++) { + if ((*addRemoveUnit_iter).name == (*nodeLevel_iter).name){ + //if item is already presented in nodeLevelDU, erase it from the forAddRemove list + LOG_NO("[%s] is already presented in the merged DU list, remove it from forAddRemoveAU list", + (*addRemoveUnit_iter).name.c_str()); + addRemoveUnit_iter = forAddRemoveAU.erase(addRemoveUnit_iter); + break; + } + } + if(nodeLevel_iter == nodeLevelDU.end()){ + addRemoveUnit_iter++; + } + } + + + for (addRemoveUnit_iter = forAddRemoveDU.begin(); addRemoveUnit_iter != forAddRemoveDU.end(); ) { + for (nodeLevel_iter = nodeLevelDU.begin(); nodeLevel_iter != nodeLevelDU.end(); nodeLevel_iter++) { + if ((*addRemoveUnit_iter).name == (*nodeLevel_iter).name){ + //if item is already presented in nodeLevelDU, erase it from the forAddRemove list + LOG_NO("[%s] is already presented in the merged DU list, remove it from forAddRemoveDU list", + (*addRemoveUnit_iter).name.c_str()); + addRemoveUnit_iter = forAddRemoveDU.erase(addRemoveUnit_iter); + break; + } + } + if(nodeLevel_iter == nodeLevelDU.end()){ + addRemoveUnit_iter++; + } + } + + newStep->addDeactivationUnits(nodeLevelDU); //Add the node level DU newStep->addDeactivationUnits(suLevelDU); //Add the SU level DU newStep->addDeactivationUnits(tmpDU); //Add the comp level DU @@ -1388,7 +1426,7 @@ SmfUpgradeProcedure::mergeStepIntoSingle newStep->addActivationUnits(suLevelDU); //Rolling and forModify are symetric, Add the SU level DU newStep->addActivationUnits(tmpDU); //Rolling and forModify are symetric, Add the comp level DU - //Copy the forAddRemove AU/DU into the lists as is. They must be run as specified in the campaign. + //Copy the forAddRemove AU/DU(except the optimized nodes) into the lists as is. They must be run as specified in the campaign. newStep->addDeactivationUnits(forAddRemoveDU); newStep->addActivationUnits(forAddRemoveAU); ------------------------------------------------------------------------------ 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 Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel