Hi Srinivas, I have some comments:
1) Add such retry logic could hang the main thread and may cause unwanted troubles such as health-check timeout, delay processing higher priority events. 2) Possibility of race condition using IMM OI handle b/w main thread and recovery thread. 3) When getting TIMEOUT, we don't know the job is in progress on IMM side or not. It could finally successfully create the object, we don't know. If that is the case, that object may be leaked. Regards, Vu > -----Original Message----- > From: Srinivas [mailto:srinivas.mangip...@oracle.com] > Sent: Monday, December 4, 2017 10:34 AM > To: lennart.l...@ericsson.com; vu.m.ngu...@dektech.com.au > Cc: opensaf-devel@lists.sourceforge.net; Srinivas > <srinivas.mangip...@oracle.com> > Subject: [PATCH 1/1] log: Added retry logic for RT object creation call fails due > to timeout error [#2711] > > --- > src/log/logd/lgs_stream.cc | 44 +++++++++++++++++++++++++++++++---------- > --- > 1 file changed, 31 insertions(+), 13 deletions(-) > > diff --git a/src/log/logd/lgs_stream.cc b/src/log/logd/lgs_stream.cc > index 65689d6..4f7c3f8 100644 > --- a/src/log/logd/lgs_stream.cc > +++ b/src/log/logd/lgs_stream.cc > @@ -623,19 +623,37 @@ SaAisErrorT lgs_create_rt_appstream(log_stream_t > *const stream) { > NULL}; > > { > - /** > - * Have to have retry for Rt creation. > - * Rt update could consider removing retry to avoid blocking > - */ > - rc = immutil_saImmOiRtObjectCreate_2( > - lgs_cb->immOiHandle, > const_cast<SaImmClassNameT>("SaLogStream"), > - parentName, attrValues); > - free(dndup); > - > - if (rc != SA_AIS_OK) { > - LOG_WA("saImmOiRtObjectCreate_2 returned %u for %s, parent %s", > rc, > - stream->name.c_str(), parent_name); > - } > + uint16_t count = 0; > + rc = immutil_saImmOiRtObjectCreate_2( > + lgs_cb->immOiHandle, > const_cast<SaImmClassNameT>("SaLogStream"), > + parentName, attrValues); > + > + while (((rc == SA_AIS_ERR_TIMEOUT) || (rc == > SA_AIS_ERR_BAD_HANDLE)) > + && (count < 10)) { > + LOG_WA( > + "immutil_saImmOiRtObjectCreate_2 returned %u for %s, parent > %s", > + rc, stream->name.c_str(), parent_name); > + > + if ( rc == SA_AIS_ERR_BAD_HANDLE ) { > + saImmOiFinalize(lgs_cb->immOiHandle); > + lgs_cb->immOiHandle = 0; > + lgs_cb->immSelectionObject = -1; > + /* Initiate IMM reinitializtion */ > + lgs_imm_impl_reinit_nonblocking(lgs_cb); > + } > + count++; > + osaf_nanosleep(&kHundredMilliseconds); > + rc = immutil_saImmOiRtObjectCreate_2( > + lgs_cb->immOiHandle, > const_cast<SaImmClassNameT>("SaLogStream"), > + parentName, attrValues); > + } > + free(dndup); > + > + if (rc != SA_AIS_OK) { > + LOG_WA( > + "saImmOiRtObjectCreate_2 returned %u for %s, parent %s", > + rc, stream->name.c_str(), parent_name); > + } > } > } > > -- > 2.7.4 ------------------------------------------------------------------------------ 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