Hi Lennart, Thanks for your good finding. I will fix it before pushing.
Regards, Vu > -----Original Message----- > From: Lennart Lund [mailto:lennart.l...@ericsson.com] > Sent: Friday, August 12, 2016 3:27 PM > To: Vu Minh Nguyen <vu.m.ngu...@dektech.com.au>; > mahesh.va...@oracle.com > Cc: opensaf-devel@lists.sourceforge.net > Subject: RE: [PATCH 1 of 1] log: fix incorrect usage of saImmRtObjectDelete > on cfg app stream [#1330] > > Hi Vu, > > Ack with comments > > Seems as if the isRtStream flag is not set to true when a rt-stream is > recovered see lgs_recov.cc > > Thanks > Lennart > > > > > -----Original Message----- > > From: Vu Minh Nguyen [mailto:vu.m.ngu...@dektech.com.au] > > Sent: den 20 juli 2016 08:11 > > To: mahesh.va...@oracle.com; Lennart Lund <lennart.l...@ericsson.com> > > Cc: opensaf-devel@lists.sourceforge.net > > Subject: [PATCH 1 of 1] log: fix incorrect usage of saImmRtObjectDelete on > > cfg app stream [#1330] > > > > osaf/services/saf/logsv/lgs/lgs_imm.cc | 25 +++++++++---------------- > > osaf/services/saf/logsv/lgs/lgs_mbcsv.cc | 1 + > > osaf/services/saf/logsv/lgs/lgs_stream.cc | 6 ++++-- > > osaf/services/saf/logsv/lgs/lgs_stream.h | 8 ++++++++ > > 4 files changed, 22 insertions(+), 18 deletions(-) > > > > > > saImmRtObjectDelete() was always called when closing app streams, > > even the stream was configurable. If it was the case, that IMM API > > would return SA_AIS_ERR_NOT_EXIST and had WA in syslog. > > > > This patch introduce one flag in `log_stream_t`, showing > > the closed stream is runtime or configurable. And only > > call to the IMM API if the app stream is runtime. > > And this flag value is cached locally at SCs node. > > > > diff --git a/osaf/services/saf/logsv/lgs/lgs_imm.cc > > b/osaf/services/saf/logsv/lgs/lgs_imm.cc > > --- a/osaf/services/saf/logsv/lgs/lgs_imm.cc > > +++ b/osaf/services/saf/logsv/lgs/lgs_imm.cc > > @@ -405,28 +405,21 @@ static void adminOperationCallback(SaImm > > > > if (opId == SA_LOG_ADMIN_CHANGE_FILTER) { > > /* Only allowed to update runtime objects (application > > streams) */ > > - /** > > - * className holds a pointer to an duplicated memory > > (strdup). > > - * Must be free after done using. > > - */ > > - SaImmClassNameT className = > > immutil_get_className(objectName); > > - > > - if (!strcmp(className, "SaLogStreamConfig")) { > > + if (stream->streamType != STREAM_TYPE_APPLICATION) { > > + report_om_error(immOiHandle, invocation, > > + "Admin op change filter for non app > > stream"); > > + goto done; > > + } > > + > > + /* Not allow perform adm op on configurable app streams */ > > + if (stream->isRtStream != SA_TRUE) { > > ais_rc = > > immutil_saImmOiAdminOperationResult(immOiHandle, > > - invocation, > > SA_AIS_ERR_NOT_SUPPORTED); > > + > invocation, > > SA_AIS_ERR_NOT_SUPPORTED); > > if (ais_rc != SA_AIS_OK) { > > > > LOG_ER("immutil_saImmOiAdminOperationResult failed %s", > > saf_error(ais_rc)); > > osaf_abort(0); > > } > > > > - free(className); > > - goto done; > > - } > > - free(className); > > - > > - if (stream->streamType != STREAM_TYPE_APPLICATION) { > > - report_om_error(immOiHandle, invocation, > > - "Admin op change filter for non app > > stream"); > > goto done; > > } > > > > diff --git a/osaf/services/saf/logsv/lgs/lgs_mbcsv.cc > > b/osaf/services/saf/logsv/lgs/lgs_mbcsv.cc > > --- a/osaf/services/saf/logsv/lgs/lgs_mbcsv.cc > > +++ b/osaf/services/saf/logsv/lgs/lgs_mbcsv.cc > > @@ -1943,6 +1943,7 @@ uint32_t ckpt_proc_open_stream(lgs_cb_t > > stream->logFileCurrent = param->logFileCurrent; > > stream->stb_prev_actlogFileCurrent = param- > > >logFileCurrent; > > stream->stb_logFileCurrent = param->logFileCurrent; > > + stream->isRtStream = SA_TRUE; > > } > > > > /* If configured for split file system files shall be opened on stand by > > diff --git a/osaf/services/saf/logsv/lgs/lgs_stream.cc > > b/osaf/services/saf/logsv/lgs/lgs_stream.cc > > --- a/osaf/services/saf/logsv/lgs/lgs_stream.cc > > +++ b/osaf/services/saf/logsv/lgs/lgs_stream.cc > > @@ -386,7 +386,7 @@ void log_stream_delete(log_stream_t **s) > > TRACE_ENTER2("%s", stream->name.c_str()); > > > > if (lgs_cb->ha_state == SA_AMF_HA_ACTIVE) { > > - if (stream->streamType == STREAM_TYPE_APPLICATION) { > > + if (stream->isRtStream == SA_TRUE) { > > SaAisErrorT rv; > > TRACE("Stream is closed, I am HA active so remove > > IMM object"); > > SaNameT objectName; > > @@ -457,6 +457,7 @@ int lgs_populate_log_stream( > > o_stream->twelveHourModeFlag = twelveHourModeFlag; > > o_stream->logRecordId = logRecordId; > > o_stream->stb_logRecordId = 0; > > + o_stream->isRtStream = SA_TRUE; > > > > o_stream->logFileFormat = strdup(logFileFormat); > > if (o_stream->logFileFormat == NULL) { > > @@ -633,7 +634,8 @@ log_stream_t *log_stream_new(const std:: > > stream->streamId = stream_id; > > stream->creationTimeStamp = lgs_get_SaTime(); > > stream->severityFilter = 0x7f; /* by default all levels are allowed */ > > - > > + stream->isRtStream = SA_FALSE; > > + > > /* Initiate local or shared stream file descriptor dependant on shared > > or > > * split file system > > */ > > diff --git a/osaf/services/saf/logsv/lgs/lgs_stream.h > > b/osaf/services/saf/logsv/lgs/lgs_stream.h > > --- a/osaf/services/saf/logsv/lgs/lgs_stream.h > > +++ b/osaf/services/saf/logsv/lgs/lgs_stream.h > > @@ -61,6 +61,14 @@ typedef struct log_stream { > > uint32_t logRecordId; /* log record indentifier increased for each > > record */ > > SaBoolT twelveHourModeFlag; /* Not used. Can be removed? */ > > logStreamTypeT streamType; > > + /** > > + * This info is cached locally at SCs node when stream is opened. > > + * Means that it is not checkpointed to standby node (to keep BC). > > + * Using this variable to avoid cost in sending request to IMM > > + * to get info whether the app stream is configurable or runtime > > + * when performing adm op or closing app stream. > > + */ > > + SaBoolT isRtStream; // default value is false > > > > /* > > * Checkpointed parameters used by standby in split file mode ------------------------------------------------------------------------------ What NetFlow Analyzer can do for you? Monitors network bandwidth and traffic patterns at an interface-level. Reveals which users, apps, and protocols are consuming the most bandwidth. Provides multi-vendor support for NetFlow, J-Flow, sFlow and other flows. Make informed decisions using capacity planning reports. http://sdm.link/zohodev2dev _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel