Hi Mahesh, See my responses inline.
Regards, Vu > -----Original Message----- > From: A V Mahesh [mailto:mahesh.va...@oracle.com] > Sent: Monday, October 3, 2016 5:52 PM > To: Vu Minh Nguyen <vu.m.ngu...@dektech.com.au>; > lennart.l...@ericsson.com > Cc: opensaf-devel@lists.sourceforge.net > Subject: Re: [PATCH 1 of 1] log: fix runtime log stream is deleted after > restarting from headless [#2071] > > Hi Vu, > > In case of LGS_RECOVERY logic is going next `next` but > `open_sync_param->lstr_open_flags & SA_LOG_STREAM_CREATE` will be > false [Vu] Will end up with SA_AIS_ERR_NOT_EXIST. > > if (i_rc == -1) { > // Not find the opening stream in recovery database. > // Goto next for checking other inputs. > goto next; > } > > we will end up with SA_AIS_ERR_NO_RESOURCES for LGS_RECOVERY , is > that ok ? [Vu] I guess you referred to wrong place. Get error code SA_AIS_ERR_NO_RESOURCES if following condition meet: (open_sync_param->lstr_open_flags & SA_LOG_STREAM_CREATE) == true *AND* (check_max_stream() == true). Means: create an new app stream, but number of existing app streams reaches the limitation. In that case, returning NO_RESOURCES to log client. > > -AVM > > > On 9/27/2016 6:10 PM, Vu Minh Nguyen wrote: > > osaf/services/saf/logsv/lgs/lgs_evt.cc | 54 +++++++++++++++++----------- > ------ > > 1 files changed, 27 insertions(+), 27 deletions(-) > > > > > > Did not look up in recovery list for openning streams, then there was case > > the openning log stream did not exist in stream database but existing in > > recovery list. So, creating this log stream would lead to ERR_EXIST (14) > > and logsv deleted the stream from IMM. > > > > This patch fixes this. Looking up in the recovery first, if not found > > then creating log stream. > > > > diff --git a/osaf/services/saf/logsv/lgs/lgs_evt.cc > b/osaf/services/saf/logsv/lgs/lgs_evt.cc > > --- a/osaf/services/saf/logsv/lgs/lgs_evt.cc > > +++ b/osaf/services/saf/logsv/lgs/lgs_evt.cc > > @@ -1027,33 +1027,34 @@ static uint32_t proc_stream_open_msg(lgs > > goto snd_rsp; > > } > > > > + /* > > + * Check if the stream is in the list of stream objects > > + * not recovered. If in list, recover the stream and > > + * add it to the client > > + */ > > + if (lgs_cb->lgs_recovery_state == LGS_RECOVERY) { > > + TRACE("%s LGS_RECOVERY",__FUNCTION__); > > + i_rc = lgs_restore_one_app_stream(name, > > + open_sync_param->client_id, > > + &logStream); > > + if (i_rc == -1) { > > + // Not find the opening stream in recovery database. > > + // Goto next for checking other inputs. > > + goto next; > > + } > > + > > + TRACE("%s Stream %s is recovered", __FUNCTION__, name.c_str()); > > + log_stream_print(logStream); /* TRACE */ > > + lstr_id = logStream->streamId; > > + goto snd_rsp; > > + } > > + > > + next: > > if ((open_sync_param->lstr_open_flags & SA_LOG_STREAM_CREATE) > == 0) { > > - /* The stream does not exist but the create flag is not > > - * set. If lgs_state is LGS_RECOVERY then: > > - * Check if the stream is in the list of stream objects > > - * not recovered. If in list, recover the stream and > > - * add it to the client > > - */ > > - if (lgs_cb->lgs_recovery_state == LGS_RECOVERY) { > > - TRACE("%s LGS_RECOVERY",__FUNCTION__); > > - i_rc = lgs_restore_one_app_stream(name, > > - open_sync_param->client_id, > > - &logStream); > > - if (i_rc == -1) { > > - TRACE("%s lgs_restore_one_stream Fail", __FUNCTION__); > > - ais_rv = SA_AIS_ERR_NOT_EXIST; > > - goto snd_rsp; > > - } > > - TRACE("%s Stream %s is recovered", __FUNCTION__, name.c_str()); > > - log_stream_print(logStream); /* TRACE */ > > - lstr_id = logStream->streamId; > > - goto snd_rsp; > > - } else { > > - /* Trying to open a non existing stream */ > > - TRACE("%s Attempt to open not existing stream", __FUNCTION__); > > - ais_rv = SA_AIS_ERR_NOT_EXIST; > > - goto snd_rsp; > > - } > > + /* Trying to open a non existing stream */ > > + TRACE("%s Attempt to open not existing stream", __FUNCTION__); > > + ais_rv = SA_AIS_ERR_NOT_EXIST; > > + goto snd_rsp; > > } > > > > if (check_max_stream()) { > > @@ -1066,7 +1067,6 @@ static uint32_t proc_stream_open_msg(lgs > > * - Check parameters > > * - Create the stream in the stream "data base" > > * - If active create IMM runtime object > > - * - If recover do not create IMM object > > * > > * Note: Files are not created here > > */ ------------------------------------------------------------------------------ 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