Hi Hans,

As there's no window that immnd is unsupervised, I agree #2158 is a 
duplicate of #2204.

Thanks,
Minh

On 22/12/16 19:20, Hans Nordebäck wrote:
> Hi Minh & Praveen,
>
> Do we agree to close ticket #2158 as a duplicate of #2204?
>
> /Thanks HansN
>
> -----Original Message-----
> From: Hans Nordebäck [mailto:hans.nordeb...@ericsson.com]
> Sent: den 20 december 2016 08:18
> To: praveen malviya <praveen.malv...@oracle.com>; nagendr...@oracle.com; Gary 
> Lee <gary....@dektech.com.au>; Minh Hon Chau <minh.c...@dektech.com.au>
> Cc: opensaf-devel@lists.sourceforge.net
> Subject: Re: [devel] [PATCH 1 of 1] amfnd: monitor immnd process using FIFO 
> [#2158]
>
> Hi Praveen,
>
> I agree about your summary below.
>
> /Thanks HansN
>
> -----Original Message-----
> From: praveen malviya [mailto:praveen.malv...@oracle.com]
> Sent: den 20 december 2016 07:57
> To: Hans Nordebäck <hans.nordeb...@ericsson.com>; nagendr...@oracle.com; Gary 
> Lee <gary....@dektech.com.au>; Minh Hon Chau <minh.c...@dektech.com.au>
> Cc: opensaf-devel@lists.sourceforge.net
> Subject: Re: [PATCH 1 of 1] amfnd: monitor immnd process using FIFO [#2158]
>
> Hi Hans,
>
> Please see inline with [Praveen].
>
> Thanks,
> Praveen
>
> On 16-Dec-16 4:45 PM, Hans Nordeback wrote:
>> Hi Praveen, please see inline with [HansN].
>>
>> /Thanks HansN
>>
>>
>> On 12/16/2016 11:13 AM, praveen malviya wrote:
>>> Hi Hans,
>>>
>>> Please see inline with [Praveen].
>>>
>>> Thanks,
>>> Praveen
>>>
>>> On 16-Dec-16 3:14 PM, Hans Nordeback wrote:
>>>> Hi Praveen,
>>>>
>>>> please see some comments/questions inline below.
>>>>
>>>> /Thanks HansN
>>>>
>>>>
>>>> On 12/16/2016 07:42 AM, praveen malviya wrote:
>>>>> Hi Hans,
>>>>>
>>>>> Currently, AMFND responds to NID when all MW components are in AMF
>>>>> control. So there is window.
>>>> [HansN] you mean 'no window'?
>>> [Praveen] Sorry I missed 'no'. It is indeed 'no window'.
>>>>> I have explicitly mentioned in the patch below (see Note in main()
>>>>> in amfnd.cc below), that this may be usable only in future.
>>>>> However there is one very weak case, when AMFND is just starting
>>>>> NoRed components like CPD etc and immnd has still not become AMF
>>>>> component and also AMFND has not responded to NID. Now at this
>>>>> stage if immnd process crashes then node will reboot only after CPD
>>>>> instantiation timer expires which is about 10 seconds.
>>>> [HansN] with #2204 v2 nid will detect that immnd has crashed and it
>>>> is configurable in the opensafd script to reboot the node or not at
>>>> nid failure. If amfnd, with this patch, also detects that immnd has
>>>> crashed, there may be a raise between amfnd and nid, where amfnd
>>>> performs a reboot while nid may be configured to not reboot?
>>> [Praveen] I agree with this. But this puts a restriction on NID
>>> recovery that its recovery can be reboot only because if NID wants to
>>> restart IMMND process again, then all other MW processes needs to be
>>> examined to take this into account and be ready for re-initialization
>>> with IMM in case the restarted IMM does not resurrect old handles.
>>> Not only handles, there can be other resources also.
>> [HansN] the configurable restart of e.g. IMMND will not be done after
>> nid notify. There will be no restart attempts of e.g IMMND after
>>
>> nid notify. The FIFOmonitoring will not restart the service, but exit.
> [Praveen] So the concern that I raised does not hold now as NID will not 
> restart IMMND after it has done NID notify. So we have following sequences of 
> handlings:
> 1) If IMMND crashes before replying to NID then NID will restart it.
> 2) If IMMND crashes after NID reply then NID will exit with error. Now 
> opensafd script will reboot the node based on the user configured value of 
> REBOOT_ON_FAIL_TIMEOUT.
>
> Now case2 above gives choice to the user to configure for node reboot in such 
> cases.
> Coming back to this patch of #2158: AMFND is started by NID as last service. 
> By this time, IMMND has already notified to the NID. As I had already said 
> #2158 patch will reboot the node. Here NID's action can be to exit and based 
> on NID status opensaf script will take action. So rebooting the node because 
> of #2158 patch will interfere with user's choice of REBOOT_ON_FAIL_TIMEOUT. 
> Because of this fact #2158 becomes a duplicate of #2204.
>
>
>>> Since #2204 is a defect so, I think, enhance capabilities can be
>>> ignored. In that case #2158 becomes almost a duplicate of #2204.
>>>
>>>>> But this patch will do an immediate reboot. In this case it can be
>>>>> argued that NID can also take action but I think since this is the
>>>>> last service NID will also act very lately. Here other NoRed
>>>>> components instantiation will fail as, I think, they want to use
>>>>> IMM which is not available.
>>>>> I will see if something can be done to make IMM as first Nored comp
>>>>> to get instantiated using compinstantiationlevel. In that case this
>>>>> patch may not be needed.
>>>>>
>>>>>
>>>>> Thanks,
>>>>> Praveen
>>>>>
>>>>> On 15-Dec-16 7:45 PM, Hans Nordeback wrote:
>>>>>> Hi Praveen,
>>>>>>
>>>>>> I'll review this ticket tomorrow, but one question in advance,
>>>>>> what is the use case for this ticket?
>>>>>>
>>>>>> Looking at the ticket description, the use case seems to be immnd
>>>>>> crashes during the nid phase,
>>>>>>
>>>>>> but that use case is handled by ticket #2204. Is there a "window"
>>>>>> after
>>>>>> amfnd has called "nid_notify" where
>>>>>>
>>>>>> immnd is not monitored by amf?  /Thanks HansN
>>>>>>
>>>>>>
>>>>>> On 12/13/2016 11:48 AM, praveen.malv...@oracle.com wrote:
>>>>>>> osaf/services/saf/amf/amfnd/clc.cc              |  11 +++
>>>>>>>    osaf/services/saf/amf/amfnd/comp.cc             |  13 ++++
>>>>>>>    osaf/services/saf/amf/amfnd/evt.cc              |   4 +
>>>>>>>    osaf/services/saf/amf/amfnd/include/avnd_cb.h   |   6 ++
>>>>>>>    osaf/services/saf/amf/amfnd/include/avnd_comp.h |   1 +
>>>>>>>    osaf/services/saf/amf/amfnd/include/avnd_evt.h  |   1 +
>>>>>>>    osaf/services/saf/amf/amfnd/include/avnd_proc.h |   1 +
>>>>>>>    osaf/services/saf/amf/amfnd/main.cc             |  72
>>>>>>> +++++++++++++++++++++++-
>>>>>>>    8 files changed, 105 insertions(+), 4 deletions(-)
>>>>>>>
>>>>>>>
>>>>>>> If IMMND dies before it becomes AMF component there is no entity
>>>>>>> to restart it.
>>>>>>> With ticket #2204, NID will monitor using existing FIFO each of
>>>>>>> the started process until it itself exits.
>>>>>>> This patch will also monitor IMMND using FIFO.
>>>>>>> If IMMND dies before becoming AMF component and after NID exit
>>>>>>> then with this patch AMFND will reboot the node because AMFND
>>>>>>> does not have configuration to restart IMMND.
>>>>>>>
>>>>>>> diff --git a/osaf/services/saf/amf/amfnd/clc.cc
>>>>>>> b/osaf/services/saf/amf/amfnd/clc.cc
>>>>>>> --- a/osaf/services/saf/amf/amfnd/clc.cc
>>>>>>> +++ b/osaf/services/saf/amf/amfnd/clc.cc
>>>>>>> @@ -909,6 +909,7 @@ uint32_t avnd_comp_clc_fsm_run(AVND_CB *
>>>>>>>        TRACE_LEAVE2("%u", rc);
>>>>>>>        return rc;
>>>>>>>    }
>>>>>>> +
>>>>>>>
>>>>>>> /****************************************************************
>>>>>>> ************
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>      Name          : avnd_comp_clc_st_chng_prc
>>>>>>>     @@ -1486,6 +1487,12 @@ uint32_t avnd_comp_clc_st_chng_prc(AVND_
>>>>>>>                (comp->su->pres == SA_AMF_PRESENCE_INSTANTIATED))
>>>>>>>            rc = avnd_compdb_rec_del(cb, comp->name);
>>>>>>>    +    if ((final_st == SA_AMF_PRESENCE_INSTANTIATED) &&
>>>>>>> +            (comp->is_comp_immnd() == true)) {
>>>>>>> +        AVND_EVT *evt = avnd_evt_create(cb,
>>>>>>> + AVND_EVT_IMMND_COMP_UP,
>>>>>>> 0, 0, 0, 0, 0);
>>>>>>> +        if (evt)
>>>>>>> +            rc = avnd_evt_send(cb, evt);
>>>>>>> +    }
>>>>>>>     done:
>>>>>>>        TRACE_LEAVE2("%u", rc);
>>>>>>>        return rc;
>>>>>>> @@ -1553,6 +1560,10 @@ uint32_t avnd_comp_clc_uninst_inst_hdler
>>>>>>>              /* transition to 'instantiating' state */
>>>>>>>            avnd_comp_pres_state_set(cb, comp,
>>>>>>> SA_AMF_PRESENCE_INSTANTIATING);
>>>>>>> +        if (comp->is_comp_immnd() == true) {
>>>>>>> +          TRACE("immnd is instantiating");
>>>>>>> +          avnd_cb->imm_comp_state = AMFND_IMM_COMP_INSTANTIATING;
>>>>>>> +        }
>>>>>>>        }
>>>>>>>      done:
>>>>>>> diff --git a/osaf/services/saf/amf/amfnd/comp.cc
>>>>>>> b/osaf/services/saf/amf/amfnd/comp.cc
>>>>>>> --- a/osaf/services/saf/amf/amfnd/comp.cc
>>>>>>> +++ b/osaf/services/saf/amf/amfnd/comp.cc
>>>>>>> @@ -3016,3 +3016,16 @@ uint32_t avnd_amfa_mds_info_evh(AVND_CB
>>>>>>>      return NCSCC_RC_SUCCESS;
>>>>>>>    }
>>>>>>>    +bool AVND_COMP::is_comp_immnd() const {
>>>>>>> +  if ((su->is_ncs == true) &&
>>>>>>> +    (name.find("safSg=NoRed,safApp=OpenSAF") !=
>>>>>>> std::string::npos) &&
>>>>>>> +    (name.find("safComp=IMMND") != std::string::npos))
>>>>>>> +                return true;
>>>>>>> +  return false;
>>>>>>> +}
>>>>>>> +
>>>>>>> +uint32_t avnd_immnd_comp_evh(AVND_CB *cb, AVND_EVT *evt) {
>>>>>>> +    avnd_cb->imm_comp_state = AMFND_IMM_COMP_UP;
>>>>>>> +    TRACE("IMMND is now AMF component");
>>>>>>> +    return NCSCC_RC_SUCCESS;
>>>>>>> +}
>>>>>>> diff --git a/osaf/services/saf/amf/amfnd/evt.cc
>>>>>>> b/osaf/services/saf/amf/amfnd/evt.cc
>>>>>>> --- a/osaf/services/saf/amf/amfnd/evt.cc
>>>>>>> +++ b/osaf/services/saf/amf/amfnd/evt.cc
>>>>>>> @@ -185,6 +185,8 @@ AVND_EVT *avnd_evt_create(AVND_CB *cb,
>>>>>>>          case AVND_EVT_AMFA_MDS_VER_INFO:
>>>>>>>            break;
>>>>>>> +    case AVND_EVT_IMMND_COMP_UP:
>>>>>>> +        break;
>>>>>>>        default:
>>>>>>>            delete evt;
>>>>>>>            evt = nullptr;
>>>>>>> @@ -316,6 +318,8 @@ void avnd_evt_destroy(AVND_EVT *evt)
>>>>>>>            break;
>>>>>>>        case AVND_EVT_AMFA_MDS_VER_INFO:
>>>>>>>            break;
>>>>>>> +    case AVND_EVT_IMMND_COMP_UP:
>>>>>>> +        break;
>>>>>>>          default:
>>>>>>>            LOG_NO("%s: unknown event type %u", __FUNCTION__,
>>>>>>> type); diff --git a/osaf/services/saf/amf/amfnd/include/avnd_cb.h
>>>>>>> b/osaf/services/saf/amf/amfnd/include/avnd_cb.h
>>>>>>> --- a/osaf/services/saf/amf/amfnd/include/avnd_cb.h
>>>>>>> +++ b/osaf/services/saf/amf/amfnd/include/avnd_cb.h
>>>>>>> @@ -34,6 +34,11 @@
>>>>>>>    #define AVND_CB_H
>>>>>>>    #include <map>
>>>>>>>    +typedef enum {
>>>>>>> +        AMFND_IMM_COMP_BASE = 1,
>>>>>>> +        AMFND_IMM_COMP_INSTANTIATING = 2,
>>>>>>> +        AMFND_IMM_COMP_UP = 3
>>>>>>> +} AMFND_IMM_COMP_STATUS;
>>>>>>>      typedef struct avnd_cb_tag {
>>>>>>>        SYSF_MBX mbx;        /* mailbox on which AvND waits */
>>>>>>> @@ -121,6 +126,7 @@ typedef struct avnd_cb_tag {
>>>>>>>        SaTimeT scs_absence_max_duration;
>>>>>>>        /* the timer for supervision of the absence of SC */
>>>>>>>        AVND_TMR sc_absence_tmr;
>>>>>>> +    AMFND_IMM_COMP_STATUS imm_comp_state;
>>>>>>>    } AVND_CB;
>>>>>>>      #define AVND_CB_NULL ((AVND_CB *)0) diff --git
>>>>>>> a/osaf/services/saf/amf/amfnd/include/avnd_comp.h
>>>>>>> b/osaf/services/saf/amf/amfnd/include/avnd_comp.h
>>>>>>> --- a/osaf/services/saf/amf/amfnd/include/avnd_comp.h
>>>>>>> +++ b/osaf/services/saf/amf/amfnd/include/avnd_comp.h
>>>>>>> @@ -401,6 +401,7 @@ typedef struct avnd_comp_tag {
>>>>>>>        std::bitset<NumAttrs> *use_comptype_attr;
>>>>>>>        SaInvocationT term_cbq_inv_value; /* invocation value for
>>>>>>> termination callback. */
>>>>>>>        SaVersionT version; //SAF version of comp.
>>>>>>> +    bool is_comp_immnd() const;
>>>>>>>    } AVND_COMP;
>>>>>>>      #define AVND_COMP_NULL ((AVND_COMP *)0) diff --git
>>>>>>> a/osaf/services/saf/amf/amfnd/include/avnd_evt.h
>>>>>>> b/osaf/services/saf/amf/amfnd/include/avnd_evt.h
>>>>>>> --- a/osaf/services/saf/amf/amfnd/include/avnd_evt.h
>>>>>>> +++ b/osaf/services/saf/amf/amfnd/include/avnd_evt.h
>>>>>>> @@ -113,6 +113,7 @@ typedef enum avnd_evt_type {
>>>>>>>        AVND_EVT_TMR_QSCING_CMPL,
>>>>>>>        AVND_EVT_IR,
>>>>>>>        AVND_EVT_AMFA_MDS_VER_INFO,
>>>>>>> +    AVND_EVT_IMMND_COMP_UP,
>>>>>>>          AVND_EVT_MAX
>>>>>>>    } AVND_EVT_TYPE;
>>>>>>> diff --git a/osaf/services/saf/amf/amfnd/include/avnd_proc.h
>>>>>>> b/osaf/services/saf/amf/amfnd/include/avnd_proc.h
>>>>>>> --- a/osaf/services/saf/amf/amfnd/include/avnd_proc.h
>>>>>>> +++ b/osaf/services/saf/amf/amfnd/include/avnd_proc.h
>>>>>>> @@ -118,5 +118,6 @@ uint32_t avnd_evt_tmr_avd_hb_duration_ev
>>>>>>>    uint32_t avnd_evt_tmr_sc_absence_evh(struct avnd_cb_tag *,
>>>>>>> struct avnd_evt_tag *);
>>>>>>>    uint32_t avnd_evt_avd_reboot_evh(struct avnd_cb_tag *, struct
>>>>>>> avnd_evt_tag *);
>>>>>>>    uint32_t avnd_amfa_mds_info_evh(struct avnd_cb_tag *, struct
>>>>>>> avnd_evt_tag *);
>>>>>>> +uint32_t avnd_immnd_comp_evh(struct avnd_cb_tag *, struct
>>>>>>> avnd_evt_tag *);
>>>>>>>      #endif
>>>>>>> diff --git a/osaf/services/saf/amf/amfnd/main.cc
>>>>>>> b/osaf/services/saf/amf/amfnd/main.cc
>>>>>>> --- a/osaf/services/saf/amf/amfnd/main.cc
>>>>>>> +++ b/osaf/services/saf/amf/amfnd/main.cc
>>>>>>> @@ -31,11 +31,15 @@
>>>>>>>    #include "immutil.h"
>>>>>>>    #include "logtrace.h"
>>>>>>>    #include "nid_api.h"
>>>>>>> +#include "osaf_time.h"
>>>>>>>    #include <imm.h>
>>>>>>>      #define FD_MBX   0
>>>>>>>    #define FD_TERM  1
>>>>>>>    #define FD_CLM   2
>>>>>>> +#define FD_IMMND_FIFO 3
>>>>>>> +#define FD_MAX 4
>>>>>>> +
>>>>>>>      static const char* internal_version_id_  __attribute__
>>>>>>> ((used)) =
>>>>>>> "@(#) $Id: " INTERNAL_VERSION_ID " $";
>>>>>>>    @@ -121,7 +125,8 @@ extern const AVND_EVT_HDLR g_avnd_func_l
>>>>>>>        avnd_evt_pid_exit_evh,    /* AVND_EVT_PID_EXIT */
>>>>>>>        avnd_evt_tmr_qscing_cmpl_evh,    /* AVND_EVT_TMR_QSCING_CMPL */
>>>>>>>        avnd_evt_ir_evh,    /* AVND_EVT_IR */
>>>>>>> -    avnd_amfa_mds_info_evh /* AVND_EVT_AMFA_MDS_VER_INFO*/
>>>>>>> +    avnd_amfa_mds_info_evh, /* AVND_EVT_AMFA_MDS_VER_INFO*/
>>>>>>> +    avnd_immnd_comp_evh /* AVND_EVT_IMMND_COMP_UP*/
>>>>>>>    };
>>>>>>>      extern struct ImmutilWrapperProfile immutilWrapperProfile; @@
>>>>>>> -301,6 +306,7 @@ AVND_CB *avnd_cb_create()
>>>>>>>        cb->hb_duration_tmr.is_active = false;
>>>>>>>        cb->hb_duration_tmr.type = AVND_TMR_HB_DURATION;
>>>>>>>        cb->hb_duration = AVSV_DEF_HB_DURATION;
>>>>>>> +    cb->imm_comp_state = AMFND_IMM_COMP_BASE;
>>>>>>>          if ((val = getenv("AVSV_HB_DURATION")) != nullptr) {
>>>>>>>            cb->hb_duration = strtoll(val, nullptr, 0); @@ -495,6
>>>>>>> +501,30 @@ static void sigterm_handler(int sig)
>>>>>>>        ncs_sel_obj_ind(&term_sel_obj);
>>>>>>>        signal(SIGTERM, SIG_IGN);
>>>>>>>    }
>>>>>>> +//Thanks to Hans for above function in #1857, I just copied and
>>>>>>> renamed it for using with IMM.
>>>>>>> +static int open_immnd_fifo() {
>>>>>>> +  const std::string fifo_dir = PKGLOCALSTATEDIR;
>>>>>>> +  std::string fifo_file = fifo_dir + "/" + "osafimmnd.fifo";
>>>>>>> +  int fifo_fd = -1;
>>>>>>> +  int retry_cnt = 0;
>>>>>>> +
>>>>>>> +  if (access(fifo_file.c_str(), F_OK ) != -1 ) {
>>>>>>> +    do {
>>>>>>> +      if (retry_cnt > 0) {
>>>>>>> +        osaf_nanosleep(&kHundredMilliseconds);
>>>>>>> +      }
>>>>>>> +      fifo_fd = open(fifo_file.c_str(), O_WRONLY|O_NONBLOCK);
>>>>>>> +    } while ((fifo_fd == -1) &&
>>>>>>> +            (retry_cnt++ < 5 && (errno == EINTR || errno ==
>>>>>>> ENXIO)));
>>>>>>> +    if (fifo_fd == -1) {
>>>>>>> +      LOG_ER("Failed to open %s, error: %s", fifo_file.c_str(),
>>>>>>> +             strerror(errno));
>>>>>>> +    } else {
>>>>>>> +      LOG_NO("Start monitoring IMMND using %s", fifo_file.c_str());
>>>>>>> +    }
>>>>>>> +  }
>>>>>>> +  return fifo_fd;
>>>>>>> +}
>>>>>>>
>>>>>>> /****************************************************************
>>>>>>> ************
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>      Name          : avnd_main_process
>>>>>>> @@ -510,8 +540,9 @@ static void sigterm_handler(int sig)
>>>>>>>    void avnd_main_process(void)
>>>>>>>    {
>>>>>>>        NCS_SEL_OBJ mbx_fd;
>>>>>>> -    struct pollfd fds[4];
>>>>>>> -    nfds_t nfds = 3;
>>>>>>> +    int immnd_fifo_fd = -1;
>>>>>>> +    struct pollfd fds[FD_MAX];
>>>>>>> +    nfds_t nfds = FD_MAX;
>>>>>>>        AVND_EVT *evt;
>>>>>>>        SaAisErrorT result = SA_AIS_OK;
>>>>>>>        SaAisErrorT rc = SA_AIS_OK; @@ -542,6 +573,9 @@ void
>>>>>>> avnd_main_process(void)
>>>>>>>        fds[FD_CLM].fd = avnd_cb->clm_sel_obj;
>>>>>>>        fds[FD_CLM].events = POLLIN;
>>>>>>>    +    immnd_fifo_fd = open_immnd_fifo();
>>>>>>> +    fds[FD_IMMND_FIFO].fd = immnd_fifo_fd;
>>>>>>> +    fds[FD_IMMND_FIFO].events = POLLIN;
>>>>>>>        /* now wait forever */
>>>>>>>        while (1) {
>>>>>>>            int ret = poll(fds, nfds, -1); @@ -554,6 +588,29 @@
>>>>>>> void avnd_main_process(void)
>>>>>>>                LOG_ER("%s: poll failed - %s", __FUNCTION__,
>>>>>>> strerror(errno));
>>>>>>>                break;
>>>>>>>            }
>>>>>>> +         if (fds[FD_IMMND_FIFO].revents & POLLERR) {
>>>>>>> +            TRACE_1("IMMND crashed");
>>>>>>> +            if (!(m_AVND_IS_SHUTTING_DOWN(avnd_cb)) &&
>>>>>>> +                (avnd_cb->imm_comp_state == AMFND_IMM_COMP_BASE) &&
>>>>>>> +                (avnd_cb->led_state == AVND_LED_STATE_GREEN)) {
>>>>>>> +                /* AMFND is last NID started service. If AMFND
>>>>>>> + has
>>>>>>> responded to NID
>>>>>>> +                   and IMMND has not become AMF component then
>>>>>>> reboot
>>>>>>> the node because
>>>>>>> +                   AMFND does not have configuration to
>>>>>>> re-instantiate immnd.
>>>>>>> +                   If IMM has become AMF component then AMF will
>>>>>>> restart it.
>>>>>>> +                   If AMFND has not responded to NID, then it
>>>>>>> + will
>>>>>>> take care of IMMND process.
>>>>>>> +                   Note:This is overlapping region as AMFND
>>>>>>> + responds
>>>>>>> to NID only when all
>>>>>>> +                        NoRed components comes in AMF control.
>>>>>>> May be
>>>>>>> used in future only.
>>>>>>> +                */
>>>>>>> +                LOG_ER("IMMND crashed and has not become AMF
>>>>>>> component. Rebooting node");
>>>>>>> +                opensaf_reboot(avnd_cb->node_info.nodeId,
>>>>>>> +
>>>>>>> osaf_extended_name_borrow(&avnd_cb->node_info.executionEnvironmen
>>>>>>> t),
>>>>>>> +                        "IMMND crashed and has not become AMF
>>>>>>> component. Rebooting node");
>>>>>>> +                exit(0);
>>>>>>> +            }
>>>>>>> +            //It means IMM has become AMF component, poll for
>>>>>>> + IMMND
>>>>>>> when it gets started.
>>>>>>> +            nfds = FD_MAX - 1;
>>>>>>> +            fds[FD_IMMND_FIFO].fd =  -1;
>>>>>>> +                }
>>>>>>>              if (avnd_cb->clmHandle && (fds[FD_CLM].revents &
>>>>>>> POLLIN)) {
>>>>>>>                //LOG_NO("DEBUG-> CLM event fd: %d sel_obj: %llu,
>>>>>>> clm
>>>>>>> handle: %llu", fds[FD_CLM].fd, avnd_cb->clm_sel_obj,
>>>>>>> avnd_cb->clmHandle); @@ -573,8 +630,15 @@ void
>>>>>>> avnd_main_process(void)
>>>>>>>            }
>>>>>>>              if (fds[FD_MBX].revents & POLLIN) {
>>>>>>> -            while (nullptr != (evt = (AVND_EVT
>>>>>>> *)ncs_ipc_non_blk_recv(&avnd_cb->mbx)))
>>>>>>> +            while (nullptr != (evt = (AVND_EVT
>>>>>>> *)ncs_ipc_non_blk_recv(&avnd_cb->mbx))) {
>>>>>>> +                if (evt->type == AVND_EVT_IMMND_COMP_UP) {
>>>>>>> +                    immnd_fifo_fd = open_immnd_fifo();
>>>>>>> +                    fds[FD_IMMND_FIFO].fd = immnd_fifo_fd;
>>>>>>> +                    fds[FD_IMMND_FIFO].events = POLLIN;
>>>>>>> +                    nfds = FD_MAX;
>>>>>>> +                }
>>>>>>>                    avnd_evt_process(evt);
>>>>>>> +            }
>>>>>>>            }
>>>>>>>              if (fds[FD_TERM].revents & POLLIN) {
> ------------------------------------------------------------------------------
> 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/intel 
> _______________________________________________
> Opensaf-devel mailing list
> Opensaf-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/opensaf-devel
>


------------------------------------------------------------------------------
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/intel
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to