Hi Alex,

I am waiting #2144 to be pushed(fixed) before this. Testing the #2145 
requires #2144 to be fixed.

The patch may not be backward compatible.
while upgrading from 5.1 to 5.2, consider the campaign having 
applications along with middle-ware components.
There may be a chance that the (application)software that is just 
upgraded in one of the SC will go to software disable.
The campaign will go to "suspended-by-error-detected" and the upgrade 
will fail.

Older, campaigns without modification may fail.


Thanks,
Neel.

On 2016/11/15 02:51 AM, Alex Jones wrote:
> Hi Lennart,
>
>    The only way this new code would be different from the legacy behavior
> is if there is a bug in the newly updated software. If the software that
> was just updated goes into AMF DISABLED operational state while the
> campaign is still running, the campaign would then go into
> "suspended-by-error-detected", and the failed SU would be shown in
> saSmfCmpgError attribute.
>
>    In the "legacy" version, SMF would not detect that the new software
> crashed, and would continue the campaign.
>
>    It's not that the old behavior is not correct, it's that asynchronous
> errors of AMF entities were not handled.
>
>    Can you give a specific scenario of what you would consider
> non-backwards-compatible?
>
> Alex
>
> On 11/14/2016 10:28 AM, Lennart Lund wrote:
>> ------------------------------------------------------------------------
>> NOTICE: This email was received from an EXTERNAL sender
>> ------------------------------------------------------------------------
>>
>> Hi Alex
>>
>> Your code adds a not previously implemented behavior correctly according
>> to the AIS. The problem is that I think this new correct behavior
>> differs from the 'legacy' behavior. So even if the new behavior is
>> correct and the old is not it is still NBC since some existing system
>> using SMF may not work correctly after the change is introduced. These
>> kind of problems are usually handled by making the new feature
>> configurable in such a way that the legacy behavior is default.
>> But please correct me if I have misunderstood how your change is working
>> in this aspect
>>
>> Thanks
>> Lennart
>>
>>> -----Original Message-----
>>> From: Alex Jones [mailto:ajo...@genband.com]
>>> Sent: den 14 november 2016 15:47
>>> To: Lennart Lund <lennart.l...@ericsson.com>;
>>> reddy.neelaka...@oracle.com; Rafael Odzakow
>>> <rafael.odza...@ericsson.com>
>>> Cc: opensaf-devel@lists.sourceforge.net
>> <mailto:opensaf-devel@lists.sourceforge.net>
>>> Subject: Re: [devel] [PATCH 1 of 1] smfd: add support for asynchronous
>>> detection of failed AMF entities [#2145]
>>>
>>> Hi Lennart,
>>>
>>> I'm not sure I understand this. Can you explain why you think this is
>>> not backwards compatible?
>>>
>>> This new functionality will put the campaign into "suspended by error
>>> detected" if any new/upgraded SU (or component in the SU) fails during
>>> the campaign (after it has been upgraded).
>>>
>>> Alex
>>>
>>> On 11/14/2016 09:35 AM, Lennart Lund wrote:
>>>> ------------------------------------------------------------------------
>>>> NOTICE: This email was received from an EXTERNAL sender
>>>> ------------------------------------------------------------------------
>>>>
>>>> Hi Alex
>>>>
>>>> After I posted this ack I and Rafael found a possible Non backwards
>>>> compatibility (NBC) problem. If so this must be solved before pushing.
>>>>
>>>> I believe this change introduce a new behavior when campaigns are
>>>> executed if a component is failing. If I am right this could be solved
>>>> by introducing a new attribute in the SMF configuration class that makes
>>>> it possible to switch on/off this new behavior. The default must be that
>>>> it is switched off (legacy behavior) also the absence of the new
>>>> attribute must be interpreted as off (legacy)
>>>>
>>>> Thanks
>>>> Lennart
>>>>
>>>>> -----Original Message-----
>>>>> From: Lennart Lund [mailto:lennart.l...@ericsson.com]
>>>>> Sent: den 14 november 2016 13:56
>>>>> To: Alex Jones <ajo...@genband.com>; reddy.neelaka...@oracle.com;
>>>>> Rafael Odzakow <rafael.odza...@ericsson.com>
>>>>> Cc: opensaf-devel@lists.sourceforge.net
>> <mailto:opensaf-devel@lists.sourceforge.net>
>>>> <mailto:opensaf-devel@lists.sourceforge.net>
>>>>> Subject: Re: [devel] [PATCH 1 of 1] smfd: add support for asynchronous
>>>>> detection of failed AMF entities [#2145]
>>>>>
>>>>> Hi Alex
>>>>>
>>>>> Ack with comment
>>>>> See my comments/questions inline [Lennart]
>>>>>
>>>>> Thanks
>>>>> Lennart
>>>>>
>>>>>> -----Original Message-----
>>>>>> From: Alex Jones [mailto:ajo...@genband.com]
>>>>>> Sent: den 11 november 2016 20:50
>>>>>> To: reddy.neelaka...@oracle.com; Lennart Lund
>>>>>> <lennart.l...@ericsson.com>; Rafael Odzakow
>>>>>> <rafael.odza...@ericsson.com>
>>>>>> Cc: opensaf-devel@lists.sourceforge.net
>> <mailto:opensaf-devel@lists.sourceforge.net>
>>>> <mailto:opensaf-devel@lists.sourceforge.net>
>>>>>> Subject: [PATCH 1 of 1] smfd: add support for asynchronous detection
>>> of
>>>>>> failed AMF entities [#2145]
>>>>>>
>>>>>> osaf/services/saf/smfsv/smfd/SmfCampaignThread.cc | 235
>>>>>> +++++++++++++++++++++-
>>>>>> osaf/services/saf/smfsv/smfd/SmfCampaignThread.hh | 15 +
>>>>>> osaf/services/saf/smfsv/smfd/SmfStepTypes.cc | 32 +-
>>>>>> 3 files changed, 263 insertions(+), 19 deletions(-)
>>>>>>
>>>>>>
>>>>>> This patch adds support for section 4.2.1.3 of SMF A.01.02 spec.
>>>>>>
>>>>>> diff --git a/osaf/services/saf/smfsv/smfd/SmfCampaignThread.cc
>>>>>> b/osaf/services/saf/smfsv/smfd/SmfCampaignThread.cc
>>>>>> --- a/osaf/services/saf/smfsv/smfd/SmfCampaignThread.cc
>>>>>> +++ b/osaf/services/saf/smfsv/smfd/SmfCampaignThread.cc
>>>>>> @@ -39,6 +39,7 @@
>>>>>> #include "SmfUtils.hh"
>>>>>>
>>>>>> SmfCampaignThread *SmfCampaignThread::s_instance = NULL;
>>>>>> +SaNtfSubscriptionIdT SmfCampaignThread::operStateSubId(1);
>>>>>>
>>>>>> #define SMF_RDA_RETRY_COUNT 25 /* This is taken as the csi's are
>>>>> assigned
>>>>>> in parallel */
>>>>>>
>>>>>> @@ -140,7 +141,12 @@ void SmfCampaignThread::main(NCSCONTEXT
>>>>>> SmfCampaignThread::~SmfCampaignThread()
>>>>>> {
>>>>>> TRACE_ENTER();
>>>>>> - SaAisErrorT rc = saNtfFinalize(m_ntfHandle);
>>>>>> + SaAisErrorT rc(saNtfNotificationUnsubscribe(operStateSubId));
>>>>>> + if (rc != SA_AIS_OK) {
>>>>>> + LOG_ER("Failed to unsubscribe to oper state notifications
>>>>>> %u", rc);
>>>>>> + }
>>>>> [Lennart] Why is this needed? Does not saNtfFinalize remove SMF as a
>>> NTF
>>>>> client including all subscriptions?
>>>>>
>>>>>> +
>>>>>> + rc = saNtfFinalize(m_ntfHandle);
>>>>>> if (rc != SA_AIS_OK) {
>>>>>> LOG_ER("Failed to finalize NTF handle %u", rc);
>>>>>> }
>>>>>> @@ -303,10 +309,14 @@ int SmfCampaignThread::initNtf(void)
>>>>>> {
>>>>>> SaAisErrorT rc = SA_AIS_ERR_TRY_AGAIN;
>>>>>> SaVersionT ntfVersion = { 'A', 1, 1 };
>>>>>> + SaNtfCallbacksT callbacks = {
>>>>>> + ntfNotificationCallback,
>>>>>> + 0
>>>>>> + };
>>>>>> unsigned int numOfTries = 50;
>>>>>>
>>>>>> while (rc == SA_AIS_ERR_TRY_AGAIN && numOfTries > 0) {
>>>>>> - rc = saNtfInitialize(&m_ntfHandle, NULL, &ntfVersion);
>>>>>> + rc = saNtfInitialize(&m_ntfHandle, &callbacks, &ntfVersion);
>>>>>> if (rc != SA_AIS_ERR_TRY_AGAIN) {
>>>>>> break;
>>>>>> }
>>>>>> @@ -319,9 +329,202 @@ int SmfCampaignThread::initNtf(void)
>>>>>> return -1;
>>>>>> }
>>>>>>
>>>>>> + // subscribe to operational state change notifications generated
>>>> by AMF
>>>>>> + rc = initNtfSubscriptions();
>>>>>> + if (rc != SA_AIS_OK) {
>>>>>> + LOG_ER("initNtfSubscriptions FAILED rc=%s", saf_error(rc));
>>>>>> + return -1;
>>>>>> + }
>>>>>> +
>>>>>> return 0;
>>>>>> }
>>>>>>
>>>>>> +SaAisErrorT SmfCampaignThread::initNtfSubscriptions(void) {
>>>>>> + TRACE_ENTER();
>>>>>> + SaAisErrorT rc(SA_AIS_OK);
>>>>>> +
>>>>>> + do {
>>>>>> + SaNtfStateChangeNotificationFilterT stateChangeFilter;
>>>>>> +
>>>>>> + SaAisErrorT rc(saNtfStateChangeNotificationFilterAllocate(
>>>>>> + m_ntfHandle,
>>>>>> + &stateChangeFilter,
>>>>>> + 0,
>>>>>> + 0,
>>>>>> + 0,
>>>>>> + 0,
>>>>>> + 0,
>>>>>> + 0));
>>>>>> +
>>>>>> + if (rc != SA_AIS_OK) {
>>>>>> + LOG_ER("saNtfAttributeChangeNotificationFilterAllocate FAILED
>>>>> rc=%s",
>>>>>> + saf_error(rc));
>>>>>> + break;
>>>>>> + }
>>>>>> +
>>>>>> + SaNtfNotificationTypeFilterHandlesT notificationFilterHandles = {
>>>>>> + 0,
>>>>>> + 0,
>>>>>> + stateChangeFilter.notificationFilterHandle,
>>>>>> + 0,
>>>>>> + 0
>>>>>> + };
>>>>>> +
>>>>>> + rc = saNtfNotificationSubscribe(&notificationFilterHandles,
>>>>>> operStateSubId);
>>>>>> +
>>>>>> + if (rc != SA_AIS_OK) {
>>>>>> + LOG_ER("saNtfNotificationSubscribe FAILED rc=%s", saf_error(rc));
>>>>>> + break;
>>>>>> + }
>>>>>> +
>>>>>> + rc =
>>>>>>
>> saNtfNotificationFilterFree(stateChangeFilter.notificationFilterHandle);
>>>>>> + if (rc != SA_AIS_OK) {
>>>>>> + LOG_ER("saNtfNotificationFilterFree FAILED rc=%s", saf_error(rc));
>>>>>> + break;
>>>>>> + }
>>>>>> + } while (false);
>>>>>> +
>>>>>> + TRACE_LEAVE();
>>>>>> + return rc;
>>>>>> +}
>>>>>> +
>>>>>> +bool SmfCampaignThread::isAMFOperState(const SaNtfClassIdT&
>>> classId)
>>>>>> const {
>>>>>> + TRACE_ENTER();
>>>>>> + bool status(false);
>>>>>> +
>>>>>> + if (classId.vendorId == SA_NTF_VENDOR_ID_SAF &&
>>>>>> + classId.majorId == SA_SVC_AMF &&
>>>>>> + classId.minorId == SA_AMF_NTFID_SU_OP_STATE) {
>>>>>> + status = true;
>>>>>> + }
>>>>>> +
>>>>>> + TRACE_LEAVE2("%i", status);
>>>>>> + return status;
>>>>>> +}
>>>>>> +
>>>>>> +void SmfCampaignThread::handleStateChangeNotification(
>>>>>> + const SaNtfStateChangeNotificationT& stateChangeNotification) {
>>>>>> + TRACE_ENTER();
>>>>>> + if (stateChangeNotification.notificationHeader.eventType) {
>>>>>> + if (*stateChangeNotification.notificationHeader.eventType ==
>>>>>> + SA_NTF_OBJECT_STATE_CHANGE) {
>>>>>> + handleObjectStateChangeNotification(stateChangeNotification);
>>>>>> + } else {
>>>>>> + TRACE("ignoring state change notification with event type: %i",
>>>>>> + *stateChangeNotification.notificationHeader.eventType);
>>>>>> + }
>>>>>> + }
>>>>>> + TRACE_LEAVE();
>>>>>> +}
>>>>>> +
>>>>>> +void SmfCampaignThread::handleAmfObjectStateChangeNotification(
>>>>>> + const SaNtfStateChangeNotificationT& stateChangeNotification) {
>>>>>> + TRACE_ENTER();
>>>>>> +
>>>>>> + do {
>>>>>> + bool disabled(false);
>>>>>> +
>>>>>> + // see if this is a failure of an upgraded SU
>>>>>> + for (SaUint16T i(0); i < stateChangeNotification.numStateChanges;
>>>> i++) {
>>>>>> + if (stateChangeNotification.changedStates[i].newState ==
>>>>>> + SA_AMF_OPERATIONAL_DISABLED) {
>>>>>> + disabled = true;
>>>>>> + break;
>>>>>> + }
>>>>>> + }
>>>>>> +
>>>>>> + if (!disabled) {
>>>>>> + TRACE("state change is not to DISABLED -- ignoring");
>>>>>> + break;
>>>>>> + }
>>>>>> +
>>>>>> + for (SaUint16T i(0);
>>>>>> + i < stateChangeNotification.notificationHeader.numAdditionalInfo;
>>>>>> + i++) {
>>>>>> + if
>>>> (stateChangeNotification.notificationHeader.additionalInfo[i].infoId
>>>>> !=
>>>>>> + SA_AMF_MAINTENANCE_CAMPAIGN_DN ||
>>>>>> +
>>>>> stateChangeNotification.notificationHeader.additionalInfo[i].infoType
>>>>>> + != SA_NTF_VALUE_LDAP_NAME) {
>>>>>> + continue;
>>>>>> + }
>>>>>> +
>>>>>> + SaNameT *name(0);
>>>>>> + SaUint16T dataSize(0);
>>>>>> +
>>>>>> + SaAisErrorT rc(saNtfPtrValGet(
>>>>>> + stateChangeNotification.notificationHandle,
>>>>>> +
>>>>>>
>>> &stateChangeNotification.notificationHeader.additionalInfo[i].infoValue,
>>>>>> + reinterpret_cast<void **>(&name),
>>>>>> + &dataSize));
>>>>>> +
>>>>>> + if (rc == SA_AIS_OK) {
>>>>>> + SaConstStringT maintenanceCampaign(saAisNameBorrow(name));
>>>>>> +
>>>>>> + if (!strcmp(maintenanceCampaign,
>>>>>> + s_instance->m_campaign->getDn().c_str())) {
>>>>>> + LOG_ER("SU: %s failed after upgrade in campaign",
>>>>>> +
>>>>>>
>>> saAisNameBorrow(stateChangeNotification.notificationHeader.notificationO
>>>>>> bject));
>>>>>> + s_instance->m_campaign->getUpgradeCampaign()->suspend();
>>>>>> + s_instance->m_campaign->getUpgradeCampaign()->setCampState(
>>>>>> + SA_SMF_CMPG_ERROR_DETECTED);
>>>>>> +
>>>>>> + std::string error(saAisNameBorrow(
>>>>>> + stateChangeNotification.notificationHeader.notificationObject));
>>>>>> +
>>>>>> + error += " failed after upgrade";
>>>>>> + s_instance->m_campaign->setError(error);
>>>>>> + } else {
>>>>>> + LOG_ER("maintenance campaign received from AMF (%s) is not the "
>>>>>> + "same as ours (%s)",
>>>>>> + maintenanceCampaign,
>>>>>> + s_instance->m_campaign->getDn().c_str());
>>>>>> + }
>>>>>> + } else {
>>>>>> + LOG_ER("saNtfPtrValGet failed: %d", rc);
>>>>>> + }
>>>>>> + }
>>>>>> + } while (false);
>>>>>> +
>>>>>> + TRACE_LEAVE();
>>>>>> +}
>>>>>> +
>>>>>> +void SmfCampaignThread::handleObjectStateChangeNotification(
>>>>>> + const SaNtfStateChangeNotificationT& stateChangeNotification) {
>>>>>> + TRACE_ENTER();
>>>>>> +
>>>>>> + if
>> (stateChangeNotification.notificationHeader.notificationClassId &&
>>>>>> +
>>>>>>
>>> isAMFOperState(*stateChangeNotification.notificationHeader.notificationCl
>>>>>> assId)) {
>>>>>> + handleAmfObjectStateChangeNotification(stateChangeNotification);
>>>>>> + } else {
>>>>>> + TRACE("ignoring non-AMF state change notification");
>>>>>> + }
>>>>>> +
>>>>>> + TRACE_LEAVE();
>>>>>> +}
>>>>>> +
>>>>>> +void SmfCampaignThread::ntfNotificationCallback(
>>>>>> + SaNtfSubscriptionIdT subId,
>>>>>> + const SaNtfNotificationsT *notification) {
>>>>>> + TRACE_ENTER();
>>>>>> +
>>>>>> + do {
>>>>>> + if (subId != operStateSubId) {
>>>>>> + TRACE("unknown subscription id received in ntfNotificationCallback:
>>>>>> %d",
>>>>>> + subId);
>>>>>> + break;
>>>>>> + }
>>>>>> +
>>>>>> + if (notification->notificationType == SA_NTF_TYPE_STATE_CHANGE) {
>>>>>> + s_instance->handleStateChangeNotification(
>>>>>> + notification->notification.stateChangeNotification);
>>>>>> + } else {
>>>>>> + TRACE("ignoring NTF notification of type: %i",
>>>>>> + notification->notificationType);
>>>>>> + }
>>>>>> + } while (false);
>>>>>> +
>>>>>> + TRACE_LEAVE();
>>>>>> +}
>>>>>> /**
>>>>>> * SmfCampaignThread::send
>>>>>> * send event to the thread.
>>>>>> @@ -672,18 +875,31 @@ int SmfCampaignThread::handleEvents(void
>>>>>> {
>>>>>> TRACE_ENTER();
>>>>>> NCS_SEL_OBJ mbx_fd = ncs_ipc_get_sel_obj(&m_mbx);
>>>>>> - struct pollfd fds[1];
>>>>>> +
>>>>>> + SaSelectionObjectT ntfSelObj(0);
>>>>>> +
>>>>>> + SaAisErrorT rc(saNtfSelectionObjectGet(m_ntfHandle, &ntfSelObj));
>>>>>> + if (rc != SA_AIS_OK) {
>>>>>> + LOG_ER("saNtfSelectionObjectGet FAILED - %s", saf_error(rc));
>>>>>> + return 1;
>>>>>> + }
>>>>>> +
>>>>>> + struct pollfd fds[2];
>>>>>>
>>>>>> /* Set up all file descriptors to listen to */
>>>>>> fds[0].fd = mbx_fd.rmv_obj;
>>>>>> fds[0].events = POLLIN;
>>>>>> fds[0].revents = 0;
>>>>>>
>>>>>> + fds[1].fd = ntfSelObj;
>>>>>> + fds[1].events = POLLIN;
>>>>>> + fds[1].revents = 0;
>>>>>> +
>>>>>> TRACE("Campaign thread %s waiting for events", m_campaign-
>>>>>>> getDn().c_str());
>>>>>> while (m_running) {
>>>>>>
>>>>>> - int ret = poll(fds, 1, SMF_UPDATE_ELAPSED_TIME_INTERVAL);
>>>>>> + int ret = poll(fds, sizeof(fds) / sizeof(pollfd),
>>>>>> SMF_UPDATE_ELAPSED_TIME_INTERVAL);
>>>>>>
>>>>>> if (ret == -1) {
>>>>>> if (errno == EINTR)
>>>>>> @@ -699,7 +915,16 @@ int SmfCampaignThread::handleEvents(void
>>>>>> processEvt();
>>>>>> }
>>>>>>
>>>>>> - m_campaign->updateElapsedTime();
>>>>>> + if (fds[1].revents & POLLIN) {
>>>>>> + // dispatch NTF events
>>>>>> + rc = saNtfDispatch(m_ntfHandle, SA_DISPATCH_ALL);
>>>>>> +
>>>>>> + if (rc != SA_AIS_OK) {
>>>>>> + LOG_ER("saNtfDispatch FAILED - %s", saf_error(rc));
>>>>>> + }
>>>>>> + }
>>>>>> +
>>>>>> + m_campaign->updateElapsedTime();
>>>>>> }
>>>>>> TRACE_LEAVE();
>>>>>> return 0;
>>>>>> diff --git a/osaf/services/saf/smfsv/smfd/SmfCampaignThread.hh
>>>>>> b/osaf/services/saf/smfsv/smfd/SmfCampaignThread.hh
>>>>>> --- a/osaf/services/saf/smfsv/smfd/SmfCampaignThread.hh
>>>>>> +++ b/osaf/services/saf/smfsv/smfd/SmfCampaignThread.hh
>>>>>> @@ -190,9 +190,24 @@ class SmfCampaignThread {
>>>>>>
>>>>>> SaAisErrorT createImmHandle(SmfCampaign * i_campaign);
>>>>>> SaAisErrorT deleteImmHandle();
>>>>>> + SaAisErrorT initNtfSubscriptions(void);
>>>>>> +
>>>>>> + void handleStateChangeNotification(const
>>>>>> SaNtfStateChangeNotificationT&);
>>>>>> +
>>>>>> + void handleObjectStateChangeNotification(
>>>>>> + const SaNtfStateChangeNotificationT&);
>>>>>> +
>>>>>> + void handleAmfObjectStateChangeNotification(
>>>>>> + const SaNtfStateChangeNotificationT&);
>>>>>> +
>>>>>> + bool isAMFOperState(const SaNtfClassIdT&) const;
>>>>>> +
>>>>>> + static void ntfNotificationCallback(SaNtfSubscriptionIdT,
>>>>>> + const SaNtfNotificationsT *);
>>>>>>
>>>>>> static void main(NCSCONTEXT info);
>>>>>> static SmfCampaignThread *s_instance;
>>>>>> + static SaNtfSubscriptionIdT operStateSubId;
>>>>>>
>>>>>> NCSCONTEXT m_task_hdl;
>>>>>> SYSF_MBX m_mbx; /* mailbox */
>>>>>> diff --git a/osaf/services/saf/smfsv/smfd/SmfStepTypes.cc
>>>>>> b/osaf/services/saf/smfsv/smfd/SmfStepTypes.cc
>>>>>> --- a/osaf/services/saf/smfsv/smfd/SmfStepTypes.cc
>>>>>> +++ b/osaf/services/saf/smfsv/smfd/SmfStepTypes.cc
>>>>>> @@ -1247,8 +1247,8 @@ SmfStepTypeNodeReboot::execute()
>>>>>> return false;
>>>>>> }
>>>>>>
>>>>>> - /* Modify information model and set maintenance status */
>>>>>> - LOG_NO("STEP: Modify information model and set maintenance
>>>>>> status");
>>>>>> + /* Modify information model */
>>>>>> + LOG_NO("STEP: Modify information model");
>>>>>> if (m_step->modifyInformationModel() != SA_AIS_OK) {
>>>>>> LOG_ER("Failed to Modify information model in step=%s",m_step-
>>>>>>> getRdn().c_str());
>>>>>> return false;
>>>>>> @@ -1261,11 +1261,6 @@ SmfStepTypeNodeReboot::execute()
>>>>>> return false;
>>>>>> }
>>>>>>
>>>>>> - if (m_step->setMaintenanceStateActUnits() == false) {
>>>>>> - LOG_ER("Failed to set maintenance state in step=%s",m_step-
>>>>>>> getRdn().c_str());
>>>>>> - return false;
>>>>>> - }
>>>>>> -
>>>>>> /* The action below is an add on to
>>>> SMF.-------------------------------------
>>>>> --
>>>>>> */
>>>>>> /* See if any of the software bundles installed at online
>>>> installation has
>>>>>> the */
>>>>>> /* saSmfBundleInstallOfflineScope attribute set to
>>>>>> SA_SMF_CMD_SCOPE_PLM_EE */
>>>>>> @@ -1372,6 +1367,13 @@ SmfStepTypeNodeReboot::execute()
>>>>>> /* the units in the same state as before locking */
>>>>>> m_step->copyDuInitStateToAu();
>>>>>>
>>>>>> + /* Now that the node is up, set the maintenance status */
>>>>>> + LOG_NO("STEP: Set Maintenance Status");
>>>>>> + if (m_step->setMaintenanceStateActUnits() == false) {
>>>>>> + LOG_ER("Failed to set maintenance state in step=%s",m_step-
>>>>>>> getRdn().c_str());
>>>>>> + return false;
>>>>>> + }
>>>>>> +
>>>>>> /* Instantiate activation units */
>>>>>> LOG_NO("STEP: Instantiate activation units");
>>>>>> if (m_step->instantiateActivationUnits() == false) {
>>>>>> @@ -1685,8 +1687,8 @@ SmfStepTypeNodeRebootAct::execute()
>>>>>> return false;
>>>>>> }
>>>>>>
>>>>>> - /* Modify information model and set maintenance status */
>>>>>> - LOG_NO("STEP: Modify information model and set maintenance
>>>>>> status");
>>>>>> + /* Modify information model */
>>>>>> + LOG_NO("STEP: Modify information model");
>>>>>> if (m_step->modifyInformationModel() != SA_AIS_OK) {
>>>>>> LOG_ER("Failed to Modify information model in step=%s",m_step-
>>>>>>> getRdn().c_str());
>>>>>> return false;
>>>>>> @@ -1699,11 +1701,6 @@ SmfStepTypeNodeRebootAct::execute()
>>>>>> return false;
>>>>>> }
>>>>>>
>>>>>> - if (m_step->setMaintenanceStateActUnits() == false) {
>>>>>> - LOG_ER("Failed to set maintenance state in step=%s",m_step-
>>>>>>> getRdn().c_str());
>>>>>> - return false;
>>>>>> - }
>>>>>> -
>>>>>> /* Offline installation of new software */
>>>>>> LOG_NO("STEP: Offline installation of new software");
>>>>>> if (m_step->offlineInstallNewBundles() == false) {
>>>>>> @@ -1746,6 +1743,13 @@ SmfStepTypeNodeRebootAct::execute()
>>>>>> /* the units in the same state as before locking */
>>>>>> m_step->copyDuInitStateToAu();
>>>>>>
>>>>>> + /* Now that the node is up, set the maintenance status */
>>>>>> + LOG_NO("STEP: Set Maintenance Status");
>>>>>> + if (m_step->setMaintenanceStateActUnits() == false) {
>>>>>> + LOG_ER("Failed to set maintenance state in step=%s",m_step-
>>>>>>> getRdn().c_str());
>>>>>> + return false;
>>>>>> + }
>>>>>> +
>>>>>> /* Instantiate activation units */
>>>>>> LOG_NO("STEP: Instantiate activation units");
>>>>>> if (m_step->instantiateActivationUnits() == false) {
>>>>>
>>>>>
>> ------------------------------------------------------------------------------
>>>>> Developer Access Program for Intel Xeon Phi Processors
>>>>> Access to Intel Xeon Phi processor-based developer platforms.
>>>>> With one year of Intel Parallel Studio XE.
>>>>> Training and support from Colfax.
>>>>> Order your platform today. http://sdm.link/xeonphi
>>>>> _______________________________________________
>>>>> Opensaf-devel mailing list
>>>>> Opensaf-devel@lists.sourceforge.net
>> <mailto:Opensaf-devel@lists.sourceforge.net>
>>>> <mailto:Opensaf-devel@lists.sourceforge.net>
>>>>> https://lists.sourceforge.net/lists/listinfo/opensaf-devel


------------------------------------------------------------------------------
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to