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

Reply via email to