Ack Regards, Vu
> -----Original Message----- > From: canht32 <canh.v.tru...@dektech.com.au> > Sent: Thursday, March 28, 2019 1:15 PM > To: lennart.l...@ericsson.com; vu.m.ngu...@dektech.com.au > Cc: opensaf-devel@lists.sourceforge.net; canht32 > <canh.v.tru...@dektech.com.au> > Subject: [PATCH 1/1] log: fix logd crash due to well known stream has > numOpeners=0 [#3018] > > If client closes stream is successful in active node but it cannot be > checkpointed > to standby node. This causes the "numOpeners" is different between active > and standby. > It also different number of streams that client opened between standby and > active. > When the client open again that stream, the "numOpeners" is updated to be > equal between > active and standby while the client own number of streams is still different > betwwen > active and standby. This will causes the logd crash. > > Should restart standby node if handling the checkpoint of reopening stream > with different of "numOpeners" between active and standby node. > --- > src/log/logd/lgs_mbcsv.cc | 17 +++++++++++------ > 1 file changed, 11 insertions(+), 6 deletions(-) > > diff --git a/src/log/logd/lgs_mbcsv.cc b/src/log/logd/lgs_mbcsv.cc > index 8f66fb926..51201dbb7 100644 > --- a/src/log/logd/lgs_mbcsv.cc > +++ b/src/log/logd/lgs_mbcsv.cc > @@ -800,7 +800,6 @@ static uint32_t edu_enc_streams(lgs_cb_t *cb, > NCS_UBAID *uba) { > * > * Notes : None. > > ************************************************************** > *************/ > - > static uint32_t edu_enc_reg_list(lgs_cb_t *cb, NCS_UBAID *uba) { > log_client_t *client = NULL; > lgs_ckpt_initialize_msg_t ckpt_reg_rec; > @@ -2086,11 +2085,17 @@ uint32_t ckpt_proc_open_stream(lgs_cb_t *cb, > void *data) { > stream = log_stream_get_by_name(param->logStreamName); > if (stream != NULL) { > TRACE("\tExisting stream - id %u", stream->streamId); > - /* > - ** Update stream attributes that might change when a stream is > - ** opened a second time. > - */ > - stream->numOpeners = param->numOpeners; > + > + // Update the "numOpeners" on standby when reopening the stream > + ++stream->numOpeners; > + if (param->numOpeners != stream->numOpeners) { > + // In some cases the checkpoint of closing stream fail and standby node > + // haven't received the checkpoint. The "numOpeners" is different > between > + // standby and active node. Should restart standby node if reopening > + // the stream > + lgs_exit("NumOpeners is different between standby and active node", > + SA_AMF_COMPONENT_RESTART); > + } > } else { > TRACE("\tNew stream %s, id %u", param->logStreamName, param- > >streamId); > > -- > 2.15.1 _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel