This is explained in the commit message of the changeset. The function immnd_evt_proc_rt_object_create is a fevs receiver function, i.e. The message is received from the IMMD not the originating client which is only local to one of the IMMNDs receiving the message.
But that rt-object-create, that you are worried about, initially arrives from the client (AMFD in this case) as an invoke of immnd_evt_proc_fevs_forward at the local IMMND. And if you look into the code, it already catches the missing Client case and handles it correctly. But should the client node dissapear at the local IMMND after immnd_evt_proc_fevs_forward has been successfully processed (the client node existed at the local IMMND at that time, But dissapeared after the fevs message was forwarded to the IMMD) then when the fevs message (the rt-object-create in this case) arrives back to the IMMNDs, including the originating IMMND, then that IMMND can not send any BAD_HANDLE to the client if the client node is gone, Because that cliend-node was the only heap structure available having the clients respose address. /AndersBj -----Original Message----- From: Hans Feldt Sent: den 27 november 2013 15:53 To: Anders Björnerstedt; reddy.neelaka...@oracle.com Cc: opensaf-devel@lists.sourceforge.net Subject: RE: [PATCH 1 of 1] IMMND replies BAD_HANDLE if client node is missing for non fevs request [#637] Hi, A question, I can see the log message " Client %llu went down so no response " in many places in immnd. The patch only changes four locations. What about for example immnd_evt_proc_rt_object_create? Thanks, Hans > -----Original Message----- > From: Anders Björnerstedt > Sent: den 27 november 2013 15:06 > To: reddy.neelaka...@oracle.com; Hans Feldt > Cc: opensaf-devel@lists.sourceforge.net > Subject: [PATCH 1 of 1] IMMND replies BAD_HANDLE if client node is > missing for non fevs request [#637] > > osaf/services/saf/immsv/immnd/immnd_evt.c | 22 > ++++++++++++---------- > 1 files changed, 12 insertions(+), 10 deletions(-) > > > For non fevs requests, if the local IMMND can not find the client node > corresponding to the imm-handle sent by the client, then the local > IMMND replies directly with SA_AIS_ERR_BAD_HANDLE, instead of just > dropping the request and causing client to timeout. > > This short circuited behavior is not possible for fevs requests, > because such requests are forwarded to the IMMD and broadcast back to > all IMMNDs including the originating node. The originating node's > IMMND then no longer has the reply information on the stack. It > expects to find it in the client node on the heap. If the client node > does not exist, then no reply, not even ERR_BAD_HANDLE, can be sent to the > client of that fevs request. > > diff --git a/osaf/services/saf/immsv/immnd/immnd_evt.c > b/osaf/services/saf/immsv/immnd/immnd_evt.c > --- a/osaf/services/saf/immsv/immnd/immnd_evt.c > +++ b/osaf/services/saf/immsv/immnd/immnd_evt.c > @@ -1913,8 +1913,9 @@ static uint32_t immnd_evt_proc_admowner_ > client_hdl = evt->info.adminitReq.client_hdl; > immnd_client_node_get(cb, client_hdl, &cl_node); > if (cl_node == NULL || cl_node->mIsStale) { > - LOG_WA("IMMND - Client %llu went down so no response", > client_hdl); > - return rc; > + LOG_WA("ERR_BAD_HANDLE: Client not found in server"); > + send_evt.info.imma.info.admInitRsp.error = > SA_AIS_ERR_BAD_HANDLE; > + goto agent_rsp; > } > > if (!immnd_is_immd_up(cb)) { > @@ -2018,8 +2019,9 @@ static uint32_t immnd_evt_proc_impl_set( > client_hdl = evt->info.implSet.client_hdl; > immnd_client_node_get(cb, client_hdl, &cl_node); > if (cl_node == NULL || cl_node->mIsStale) { > - LOG_WA("IMMND - Client went down so no response"); > - return rc; > + LOG_WA("ERR_BAD_HANDLE: Client not found in server"); > + send_evt.info.imma.info.implSetRsp.error = > SA_AIS_ERR_BAD_HANDLE; > + goto agent_rsp; > } > > if (!immnd_is_immd_up(cb)) { > @@ -2141,9 +2143,9 @@ static uint32_t immnd_evt_proc_ccb_init( > client_hdl = evt->info.ccbinitReq.client_hdl; > immnd_client_node_get(cb, client_hdl, &cl_node); > if (cl_node == NULL || cl_node->mIsStale) { > - LOG_WA("IMMND - Client went down so no response"); > - TRACE_LEAVE(); > - return rc; > + LOG_WA("ERR_BAD_HANDLE: Client not found in server"); > + send_evt.info.imma.info.ccbInitRsp.error = > SA_AIS_ERR_BAD_HANDLE; > + goto agent_rsp; > } > > if (!immnd_is_immd_up(cb)) { > @@ -2256,9 +2258,9 @@ static uint32_t immnd_evt_proc_rt_update > client_hdl = evt->info.objModify.immHandle; > immnd_client_node_get(cb, client_hdl, &cl_node); > if (cl_node == NULL || cl_node->mIsStale) { > - LOG_WA("IMMND - Client went down so no response"); > - TRACE_LEAVE(); > - return rc; > + LOG_WA("ERR_BAD_HANDLE: Client not found in server"); > + err = SA_AIS_ERR_BAD_HANDLE; > + goto agent_rsp; > } > > /* Do broadcast checks BEFORE updating model because we dont want ------------------------------------------------------------------------------ Rapidly troubleshoot problems before they affect your business. Most IT organizations don't have a clear picture of how application performance affects their revenue. With AppDynamics, you get 100% visibility into your Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics Pro! http://pubads.g.doubleclick.net/gampad/clk?id=84349351&iu=/4140/ostg.clktrk _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel