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