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

Reply via email to