Hi Lennart, Oops, I seemed to have replied to the wrong thread. My ACK was meant for #593. W.r.t the backward compatibility comment, Yes, you might remember my comments on using MDS versioning or MBCSv scheme. Like I said, there was need to create a new mechanism in logsv to start with. Thanks, Mathi.
> -----Original Message----- > From: Lennart Lund [mailto:[email protected]] > Sent: Monday, August 31, 2015 8:48 PM > To: Mathivanan Naickan Palanivelu; Giang Do T; Vu Nguyen M > Cc: [email protected]; Lennart Lund; Anders Widell > Subject: RE: [PATCH 1 of 1] log: Make more configuration attributes possible > to change in runtime [#1288] > > Hi Mathi, > > Can you please explain what maintainability problems that we will get > because of this way of checkpointing? > > By the way you said that you needed some more time to review #593 "#593 > needs more effort, will prioritize to close it on Monday(28th)". Can you say > when that can be? > > Thanks > Lennart > > -----Original Message----- > From: Mathivanan Naickan Palanivelu [mailto:[email protected]] > Sent: den 31 augusti 2015 16:35 > To: Giang Do T; Lennart Lund; Vu Nguyen M > Cc: [email protected] > Subject: RE: [PATCH 1 of 1] log: Make more configuration attributes possible > to change in runtime [#1288] > > ACK, > > On a different topic, I think we should remove this way of checkpointing! > We would end up(if not already) creating maintainability problems, > We should rather use the versioning scheme of mds or mbcsv to perform the > checkpointing. > > Thanks, > Mathi. > > > > -----Original Message----- > > From: giang do [mailto:[email protected]] > > Sent: Monday, August 31, 2015 1:25 PM > > To: Lennart Lund; Mathivanan Naickan Palanivelu; > > [email protected] > > Cc: [email protected] > > Subject: Re: [PATCH 1 of 1] log: Make more configuration attributes > possible > > to change in runtime [#1288] > > > > Hi Lennart, > > > > Tested and Acked from me. > > > > There are some minor comments in lines. > > > > Best Regards, > > Giang Do > > > > > > On 25/08/2015 20:26, Lennart Lund wrote: > > > osaf/services/saf/logsv/README | 21 + > > > osaf/services/saf/logsv/lgs/lgs_config.c | 50 +- > > > osaf/services/saf/logsv/lgs/lgs_config.h | 1 + > > > osaf/services/saf/logsv/lgs/lgs_file.c | 1 + > > > osaf/services/saf/logsv/lgs/lgs_imm.c | 224 +++++--- > > > tests/logsv/logtest.c | 2 +- > > > tests/logsv/tet_LogOiOps.c | 714 > > +++++++++++++++++++++++++++++- > > > 7 files changed, 867 insertions(+), 146 deletions(-) > > > > > > > > > More log service configuration attributes can be changed in runtime > > > including logMaxLogrecsize > > > > > > diff --git a/osaf/services/saf/logsv/README > > b/osaf/services/saf/logsv/README > > > --- a/osaf/services/saf/logsv/README > > > +++ b/osaf/services/saf/logsv/README > > > @@ -212,6 +212,8 @@ The following attributes can be changed > > > Can be changed to an existing path. > > > > > > - logStreamFileFormat > > > + - logMaxLogrecsize > > > + - logFileIoTimeout > > > > > > - logStreamSystemHighLimit > > > logStreamSystemLowLimit > > > @@ -500,6 +502,8 @@ in the same way as checkpointing is done > > > Configuration changes are now checkpointed using a variable length > > buffer > > > containing a cfgupd list. > > > > > > +With this change, when attributes are check pointed, > > > +the list is always updated with all check pointed values. > > > > > > CONTRIBUTORS/MAINTAINERS > > > ======================== > > > @@ -711,3 +715,20 @@ of second from log timestamp (@Ck, @Nk). > > > - @Nk: for alarm and notification log stream. > > > > > > Preceding and trailing zeros (0) if needed should exist. > > > + > > > + > > > +2. Log record size could be up to 32Kb (#1288) > > > +---------------------------------------------- > > > +With this ticket, logMaxLogrecsize and logFileIoTimeout attributes > > > +could be possible to change in runtime. > > > + > > > +logMaxLogrecsize attribute value could be up to 32768 (32Kb). > > > + > > > +logFileIoTimeout, this attribute defines the time period for > > > +which the main thread has to wait for the file IO operation to complete. > > > +The value is in milliseconds. In default, the main thread waits up to > 500ms > > > +for file handling thread complete file IO operation. > > > + > > > +If user suffers the timeout when sending a big record size (e.g: 32Kb), > > > +He can adjust the waiting time by updating logFileIoTimeout attribute > > value up to 5000ms. > > > + > > > diff --git a/osaf/services/saf/logsv/lgs/lgs_config.c > > b/osaf/services/saf/logsv/lgs/lgs_config.c > > > --- a/osaf/services/saf/logsv/lgs/lgs_config.c > > > +++ b/osaf/services/saf/logsv/lgs/lgs_config.c > > > @@ -120,24 +120,22 @@ static struct { > > > SaUint32T logStreamSystemLowLimit; > > > SaUint32T logStreamAppHighLimit; > > > SaUint32T logStreamAppLowLimit; > > > - > > > - /* Not runtime configurable */ > > > SaUint32T logMaxLogrecsize; > > > SaUint32T logMaxApplicationStreams; > > > SaUint32T logFileIoTimeout; > > > SaUint32T logFileSysConfig; > > > } lgs_conf_def = { > > > - PKGLOGDIR, /*logRootDirectory*/ > > > - "", /*logDataGroupname*/ > > > - DEFAULT_APP_SYS_FORMAT_EXP, /* logStreamFileFormat */ > > > - 1024, /*logMaxLogrecsize*/ > > > - 0, /*logStreamSystemHighLimit*/ > > > - 0, /*logStreamSystemLowLimit*/ > > > - 0, /*logStreamAppHighLimit*/ > > > - 0, /*logStreamAppLowLimit*/ > > > - 64, /*logMaxApplicationStreams*/ > > > - 500, /*logFileIoTimeout*/ > > > - 1, /*logFileSysConfig*/ > > > + .logRootDirectory = PKGLOGDIR, /*logRootDirectory*/ > > > + .logDataGroupname = "", /*logDataGroupname*/ > > > + .logStreamFileFormat = DEFAULT_APP_SYS_FORMAT_EXP, /* > > logStreamFileFormat */ > > > + .logStreamSystemHighLimit = 0, > > /*logStreamSystemHighLimit*/ > > > + .logStreamSystemLowLimit = 0, /*logStreamSystemLowLimit*/ > > > + .logStreamAppHighLimit = 0, /*logStreamAppHighLimit*/ > > > + .logStreamAppLowLimit = 0, /*logStreamAppLowLimit*/ > > > + .logMaxLogrecsize = 1024, /*logMaxLogrecsize*/ > > > + .logMaxApplicationStreams = 64, > > /*logMaxApplicationStreams*/ > > > + .logFileIoTimeout = 500, /*logFileIoTimeout*/ > > > + .logFileSysConfig = 1, /*logFileSysConfig*/ > > [giang] Should remove comments in above lines because name of struct's > > member are good enough. > > > > > }; > > > > > > static lgs_conf_t lgs_conf = { > > > @@ -544,9 +542,8 @@ int lgs_cfg_verify_log_file_format(const > > > /** > > > * Verify logMaxLogrecsize; Max size of a log record including header > > > * Rules: > > > - * - Because of an incorrect declaration in the server (uint16_t) that > > > shall > > be > > > - * uint32_t the max value cannot be set > 2^15-1 (32767) > > > - * - Must be > 256 > > > + * - Must be >= 256 > > > + * - Must not larger than 65535 (UINT16_MAX) > > > * > > > * @param max_logrecsize_in[in] > > > * @return -1 on error > > > @@ -554,8 +551,7 @@ int lgs_cfg_verify_log_file_format(const > > > int lgs_cfg_verify_max_logrecsize(uint32_t max_logrecsize_in) > > > { > > > int rc = 0; > > > - > > > - if ((max_logrecsize_in > 32767) || (max_logrecsize_in < 256)) { > > > + if ((max_logrecsize_in > 65535) || (max_logrecsize_in < 256)) { > > > LOG_NO("verify_max_logrecsize Fail"); > > > rc = -1; > > > } > > > @@ -609,14 +605,24 @@ int lgs_cfg_verify_max_application_strea > > > > > > /** > > > * Verify logFileIoTimeout > > > - * Rules: No rules defined will always return 0 (ok) > > > - * > > > + * Rules: timeout must not be larger than 15s as it will impact on amf > > healthcheck. > > > + * - Maximum value is less than 5s > > > + * - Minimum timeout is not less than 500ms > > > + * NOTE: This range has not been measured in real system yet. > > > * @param log_file_io_timeout[in] > > > * @return -1 on error > > > */ > > > -static int lgs_cfg_verify_file_io_timeout(uint32_t log_file_io_timeout) > > > +int lgs_cfg_verify_file_io_timeout(uint32_t log_file_io_timeout) > > > { > > > - return 0; > > > + int rc = 0; > > > + > > > + if ((log_file_io_timeout < 500) || (log_file_io_timeout > 5000)) { > > > + LOG_NO("logFileIoTimeout has invalid value = %u", > > > + log_file_io_timeout); > > > + rc = -1; > > > + } > > > + > > > + return rc; > > > } > > > > > > /** > > > diff --git a/osaf/services/saf/logsv/lgs/lgs_config.h > > b/osaf/services/saf/logsv/lgs/lgs_config.h > > > --- a/osaf/services/saf/logsv/lgs/lgs_config.h > > > +++ b/osaf/services/saf/logsv/lgs/lgs_config.h > > > @@ -97,6 +97,7 @@ int lgs_cfg_verify_log_file_format(const > > > int lgs_cfg_verify_max_logrecsize(uint32_t max_logrecsize_in); > > > int lgs_cfg_verify_mbox_limit(uint32_t high, uint32_t low); > > > int lgs_cfg_verify_max_application_streams(uint32_t > max_app_streams); > > > +int lgs_cfg_verify_file_io_timeout(uint32_t log_file_io_timeout); > > > > > > /* > > > * Handle runtime object for showing actual configuration > > > diff --git a/osaf/services/saf/logsv/lgs/lgs_file.c > > b/osaf/services/saf/logsv/lgs/lgs_file.c > > > --- a/osaf/services/saf/logsv/lgs/lgs_file.c > > > +++ b/osaf/services/saf/logsv/lgs/lgs_file.c > > > @@ -428,6 +428,7 @@ lgsf_retcode_t log_file_api(lgsf_apipar_ > > > if (rc != 0) osaf_abort(rc); > > > > > > /* Wait for an answer */ > > > + max_waittime_ms = *(SaUint32T *) > > lgs_cfg_get(LGS_IMM_FILEHDL_TIMEOUT); > > [giang] Because we get this value from lgs_conf -> we don't need to use > > static variable anymore. > > => we should remove this line: "static uint32_t max_waittime_ms = > > 500;" > > and use local variable instead. > > > > > get_timeout_time(&timeout_time, max_waittime_ms); > > > > > > while (lgs_com_data.answer_f == false) { > > > diff --git a/osaf/services/saf/logsv/lgs/lgs_imm.c > > b/osaf/services/saf/logsv/lgs/lgs_imm.c > > > --- a/osaf/services/saf/logsv/lgs/lgs_imm.c > > > +++ b/osaf/services/saf/logsv/lgs/lgs_imm.c > > > @@ -772,9 +772,15 @@ static SaAisErrorT config_ccb_completed_ > > > TRACE("%s value is accepted", logFileFormat); > > > goto done; > > > } else if (!strcmp(attribute->attrName, > > LOG_MAX_LOGRECSIZE)) { > > > - report_oi_error(immOiHandle, opdata->ccbId, > > > - "%s cannot be changed", attribute- > > >attrName); > > > - ais_rc = SA_AIS_ERR_FAILED_OPERATION; > > > + SaUint32T maxLogRecordSize = *((SaUint32T > > *)value); > > > + rc = > > lgs_cfg_verify_max_logrecsize(maxLogRecordSize); > > > + if (rc == -1) { > > > + report_oi_error(immOiHandle, opdata- > > >ccbId, > > > + "%s value is NOT accepted", > > attribute->attrName); > > > + ais_rc = SA_AIS_ERR_INVALID_PARAM; > > > + goto done; > > > + } > > > + TRACE("%s is accepted", attribute->attrName); > > > goto done; > > > } else if (!strcmp(attribute->attrName, > > LOG_STREAM_SYSTEM_HIGH_LIMIT)) { > > > vattr_v3.logStreamSystemHighLimit = *((SaUint32T > > *)value); > > > @@ -802,9 +808,15 @@ static SaAisErrorT config_ccb_completed_ > > > ais_rc = SA_AIS_ERR_FAILED_OPERATION; > > > goto done; > > > } else if (!strcmp(attribute->attrName, > > LOG_FILE_IO_TIMEOUT)) { > > > - report_oi_error(immOiHandle, opdata->ccbId, > > > - "%s cannot be changed", attribute- > > >attrName); > > > - ais_rc = SA_AIS_ERR_FAILED_OPERATION; > > > + SaUint32T logFileIoTimeout = *((SaUint32T *) value); > > > + rc = > > lgs_cfg_verify_file_io_timeout(logFileIoTimeout); > > > + if (rc == -1) { > > > + report_oi_error(immOiHandle, opdata- > > >ccbId, > > > + "%s value is NOT accepted", > > attribute->attrName); > > > + ais_rc = SA_AIS_ERR_INVALID_PARAM; > > > + goto done; > > > + } > > > + TRACE("%d value is accepted", logFileIoTimeout); > > > goto done; > > > } else if (!strcmp(attribute->attrName, > > LOG_FILE_SYS_CONFIG)) { > > > report_oi_error(immOiHandle, opdata->ccbId, > > > @@ -1063,35 +1075,36 @@ bool chk_filepath_stream_exist( > > > /** > > > * Verify fixedLogRecordSize and maxLogFileSize. > > > * Rules: > > > - * - fixedLogRecordSize must be less than maxLogFileSize > > > - * - fixedLogRecordSize must be less than or equal to logMaxLogrecsize > > > - * - fixedLogRecordSize can be 0. Means variable record size > > > - * - maxLogFileSize must be bigger than 0. No limit is not supported > > > - * - maxLogFileSize must be bigger than logMaxLogrecsize > > > + * 1 - saLogStreamFixedLogRecordSize must be less than > > saLogStreamMaxLogFileSize > > > + * 2 - saLogStreamFixedLogRecordSize must be less than or equal to > > logMaxLogrecsize > > > + * 3 - saLogStreamFixedLogRecordSize can be 0. Means variable record > > size > > > + * 4 - saLogStreamMaxLogFileSize must be bigger than 0. No limit is not > > supported > > > + * 5 - saLogStreamMaxLogFileSize must be bigger than logMaxLogrecsize > > > + * 6 - saLogStreamMaxLogFileSize must be bigger than > > saLogStreamFixedLogRecordSize > > > * > > > - * The ..._flag variable == true means that the corresponding attribute > > > is > > > - * changed. > > > + * The ..._mod variable == true means that the corresponding attribute > is > > > + * modified. > > > * > > > - * @param immOiHandle > > > - * @param maxLogFileSize > > > - * @param maxLogFileSize_flag > > > - * @param fixedLogRecordSize > > > - * @param fixedLogRecordSize_flag > > > - * @param stream > > > - * @param operationType > > > + * @param immOiHandle[in] > > > + * @param streamMaxLogFileSize[in] > > > + * @param streamMaxLogFileSize_mod[in] > > > + * @param streamFixedLogRecordSize[in] > > > + * @param streamFixedLogRecordSize_mod[in] > > > + * @param stream[in] > > > + * @param operationType[in] > > > * @return false if error > > > */ > > > static bool chk_max_filesize_recordsize_compatible(SaImmOiHandleT > > immOiHandle, > > > - SaUint64T maxLogFileSize, > > > - bool maxLogFileSize_mod, > > > - SaUint32T fixedLogRecordSize, > > > - bool fixedLogRecordSize_mod, > > > + SaUint64T streamMaxLogFileSize, > > > + bool streamMaxLogFileSize_mod, > > > + SaUint32T streamFixedLogRecordSize, > > > + bool streamFixedLogRecordSize_mod, > > > log_stream_t *stream, > > > enum CcbUtilOperationType operationType, > > > SaImmOiCcbIdT ccbId) > > > { > > > - SaUint64T i_maxLogFileSize = 0; > > > - SaUint32T i_fixedLogRecordSize = 0; > > > + SaUint64T i_streamMaxLogFileSize = 0; > > > + SaUint32T i_streamFixedLogRecordSize = 0; > > > SaUint32T i_logMaxLogrecsize = 0; > > > lgs_stream_defval_t *stream_default; > > > > > > @@ -1117,77 +1130,98 @@ static bool chk_max_filesize_recordsize_ > > > LOG_ER("448 %s stream == NULL", __FUNCTION__); > > > osafassert(0); > > > } > > > - if (fixedLogRecordSize_mod == false) { > > > - /* fixedLogRecordSize is not given. Get from stream > > */ > > > - i_fixedLogRecordSize = stream->fixedLogRecordSize; > > > - TRACE("\t448 Get from stream, fixedLogRecordSize = > > %d", > > > - i_fixedLogRecordSize); > > > + if (streamFixedLogRecordSize_mod == false) { > > > + /* streamFixedLogRecordSize is not given. Get from > > stream */ > > > + i_streamFixedLogRecordSize = stream- > > >fixedLogRecordSize; > > > + TRACE("\t448 Get from stream, > > streamFixedLogRecordSize = %d", > > > + i_streamFixedLogRecordSize); > > > } else { > > > - i_fixedLogRecordSize = fixedLogRecordSize; > > > + i_streamFixedLogRecordSize = > > streamFixedLogRecordSize; > > > } > > > > > > - if (maxLogFileSize_mod == false) { > > > - /* maxLogFileSize is not given. Get from stream */ > > > - i_maxLogFileSize = stream->maxLogFileSize; > > > - TRACE("\t448 Get from stream, maxLogFileSize = > > %lld", > > > - i_maxLogFileSize); > > > + if (streamMaxLogFileSize_mod == false) { > > > + /* streamMaxLogFileSize is not given. Get from > > stream */ > > > + i_streamMaxLogFileSize = stream->maxLogFileSize; > > > + TRACE("\t448 Get from stream, > > streamMaxLogFileSize = %lld", > > > + i_streamMaxLogFileSize); > > > } else { > > > - i_maxLogFileSize = maxLogFileSize; > > > - TRACE("\t448 Modified maxLogFileSize = %lld", > > i_maxLogFileSize); > > > + i_streamMaxLogFileSize = streamMaxLogFileSize; > > > + TRACE("\t448 Modified streamMaxLogFileSize = > > %lld", i_streamMaxLogFileSize); > > > } > > > } else if (operationType == CCBUTIL_CREATE) { > > > TRACE("\t448 operationType == CCBUTIL_CREATE"); > > > /* The stream does not yet exist > > > */ > > > - if (fixedLogRecordSize_mod == false) { > > > - /* fixedLogRecordSize is not given. Use default */ > > > - i_fixedLogRecordSize = stream_default- > > >saLogStreamFixedLogRecordSize; > > > - TRACE("\t448 Get default, fixedLogRecordSize = %d", > > > - i_fixedLogRecordSize); > > > + if (streamFixedLogRecordSize_mod == false) { > > > + /* streamFixedLogRecordSize is not given. Use > > default */ > > > + i_streamFixedLogRecordSize = stream_default- > > >saLogStreamFixedLogRecordSize; > > > + TRACE("\t448 Get default, streamFixedLogRecordSize > > = %d", > > > + i_streamFixedLogRecordSize); > > > } else { > > > - i_fixedLogRecordSize = fixedLogRecordSize; > > > + i_streamFixedLogRecordSize = > > streamFixedLogRecordSize; > > > } > > > > > > - if (maxLogFileSize_mod == false) { > > > - /* maxLogFileSize is not given. Use default */ > > > - i_maxLogFileSize = stream_default- > > >saLogStreamMaxLogFileSize; > > > - TRACE("\t448 Get default, maxLogFileSize = %lld", > > > - i_maxLogFileSize); > > > + if (streamMaxLogFileSize_mod == false) { > > > + /* streamMaxLogFileSize is not given. Use default */ > > > + i_streamMaxLogFileSize = stream_default- > > >saLogStreamMaxLogFileSize; > > > + TRACE("\t448 Get default, streamMaxLogFileSize = > > %lld", > > > + i_streamMaxLogFileSize); > > > } else { > > > - i_maxLogFileSize = maxLogFileSize; > > > + i_streamMaxLogFileSize = streamMaxLogFileSize; > > > } > > > } else { > > > /* Unknown operationType */ > > > LOG_ER("%s Unknown operationType", __FUNCTION__); > > > osafassert(0); > > > } > > > - > > > - /** Do the verification **/ > > > - if (i_maxLogFileSize <= i_logMaxLogrecsize) { > > > - /* maxLogFileSize must be bigger than logMaxLogrecsize */ > > > - report_oi_error(immOiHandle, ccbId, > > > - "maxLogFileSize out of range"); > > > - TRACE("\t448 i_maxLogFileSize (%lld) <= i_logMaxLogrecsize > > (%d)", > > > - i_maxLogFileSize, i_logMaxLogrecsize); > > > - rc = false; > > > - } else if (i_fixedLogRecordSize == 0) { > > > - /* fixedLogRecordSize can be 0. Means variable record size > > */ > > > - TRACE("\t448 fixedLogRecordSize = 0"); > > > - rc = true; > > > - } else if (i_fixedLogRecordSize >= i_maxLogFileSize) { > > > - /* fixedLogRecordSize must be less than maxLogFileSize */ > > > - report_oi_error(immOiHandle, ccbId, > > > - "fixedLogRecordSize out of range"); > > > - TRACE("\t448 i_fixedLogRecordSize >= i_maxLogFileSize"); > > > - rc = false; > > > - } else if (i_fixedLogRecordSize > i_logMaxLogrecsize) { > > > - /* fixedLogRecordSize must be less than maxLogFileSize */ > > > - report_oi_error(immOiHandle, ccbId, > > > - "fixedLogRecordSize out of range"); > > > - TRACE("\t448 i_fixedLogRecordSize > i_logMaxLogrecsize"); > > > - rc = false; > > > + > > > + > > > + /* > > > + * Do verification > > > + */ > > > + if (streamMaxLogFileSize_mod == true) { > > > + if (i_streamMaxLogFileSize <= i_logMaxLogrecsize) { > > > + /* streamMaxLogFileSize must be bigger than > > logMaxLogrecsize */ > > > + report_oi_error(immOiHandle, ccbId, > > > + > > "streamMaxLogFileSize out of range"); > > > + TRACE("\t448 i_streamMaxLogFileSize (%lld) <= > > i_logMaxLogrecsize (%d)", > > > + i_streamMaxLogFileSize, > > i_logMaxLogrecsize); > > > + rc = false; > > > + goto done; > > > + } else if (i_streamMaxLogFileSize <= > > i_streamFixedLogRecordSize) { > > > + /* streamMaxLogFileSize must be bigger than > > streamFixedLogRecordSize */ > > > + report_oi_error(immOiHandle, ccbId, > > > + > > "streamMaxLogFileSize out of range"); > > > + TRACE("\t448 i_streamMaxLogFileSize (%lld) <= > > i_streamFixedLogRecordSize (%d)", > > > + i_streamMaxLogFileSize, > > i_streamFixedLogRecordSize); > > > + rc = false; > > > + goto done; > > > + } > > > } > > > - > > > + > > > + if (streamFixedLogRecordSize_mod == true) { > > > + if (i_streamFixedLogRecordSize == 0) { > > > + /* streamFixedLogRecordSize can be 0. Means > > variable record size */ > > > + TRACE("\t448 streamFixedLogRecordSize = 0"); > > > + rc = true; > > > + } else if (i_streamFixedLogRecordSize >= > > i_streamMaxLogFileSize) { > > > + /* streamFixedLogRecordSize must be less than > > streamMaxLogFileSize */ > > > + report_oi_error(immOiHandle, ccbId, > > > + > > "streamFixedLogRecordSize out of range"); > > > + TRACE("\t448 i_streamFixedLogRecordSize (%d) >= > > i_streamMaxLogFileSize (%lld)", > > > + i_streamFixedLogRecordSize, > > i_streamMaxLogFileSize); > > > + rc = false; > > > + } else if (i_streamFixedLogRecordSize > i_logMaxLogrecsize) { > > > + /* streamFixedLogRecordSize must be less than > > streamMaxLogFileSize */ > > > + report_oi_error(immOiHandle, ccbId, > > > + > > "streamFixedLogRecordSize out of range"); > > > + TRACE("\t448 i_streamFixedLogRecordSize (%d) > > > i_logMaxLogrecsize (%d)", > > > + i_streamFixedLogRecordSize, > > i_logMaxLogrecsize); > > > + rc = false; > > > + } > > > + } > > > + > > > +done: > > > TRACE_LEAVE2("448 rc = %d", rc); > > > return rc; > > > } > > > @@ -1218,10 +1252,10 @@ static SaAisErrorT check_attr_validity(S > > > char *i_pathName = NULL; > > > bool i_pathName_mod = false; > > > /* Modification flag -> true if modified */ > > > - SaUint32T i_fixedLogRecordSize = 0; > > > - bool i_fixedLogRecordSize_mod = false; > > > - SaUint64T i_maxLogFileSize = 0; > > > - bool i_maxLogFileSize_mod = false; > > > + SaUint32T i_streamFixedLogRecordSize = 0; > > > + bool i_streamFixedLogRecordSize_mod = false; > > > + SaUint64T i_streamMaxLogFileSize = 0; > > > + bool i_streamMaxLogFileSize_mod = false; > > > SaUint32T i_logFullAction = 0; > > > bool i_logFullAction_mod = false; > > > char *i_logFileFormat = NULL; > > > @@ -1322,16 +1356,16 @@ static SaAisErrorT check_attr_validity(S > > > /* Save and compare with FixedLogRecordSize > > > after > > all attributes > > > * are read. Must be bigger than > > > FixedLogRecordSize > > > */ > > > - i_maxLogFileSize = *((SaUint64T *) value); > > > - i_maxLogFileSize_mod = true; > > > + i_streamMaxLogFileSize = *((SaUint64T *) value); > > > + i_streamMaxLogFileSize_mod = true; > > > TRACE("\t448 Saved attribute \"%s\"", attribute- > > >attrName); > > > > > > } else if (!strcmp(attribute->attrName, > > "saLogStreamFixedLogRecordSize")) { > > > /* Save and compare with MaxLogFileSize after > > > all > > attributes > > > * are read. Must be smaller than MaxLogFileSize > > > */ > > > - i_fixedLogRecordSize = *((SaUint64T *) value); > > > - i_fixedLogRecordSize_mod = true; > > > + i_streamFixedLogRecordSize = *((SaUint64T *) > > value); > > > + i_streamFixedLogRecordSize_mod = true; > > > TRACE("\t448 Saved attribute \"%s\"", attribute- > > >attrName); > > > > > > } else if (!strcmp(attribute->attrName, > > "saLogStreamLogFullAction")) { > > > @@ -1436,14 +1470,14 @@ static SaAisErrorT check_attr_validity(S > > > /* saLogStreamMaxLogFileSize or > > saLogStreamFixedLogRecordSize > > > * See chk_max_filesize_recordsize_compatible() for > > > rules > > > */ > > > - if (i_maxLogFileSize_mod || i_fixedLogRecordSize_mod) { > > > + if (i_streamMaxLogFileSize_mod || > > i_streamFixedLogRecordSize_mod) { > > > TRACE("\t448 Check saLogStreamMaxLogFileSize," > > > " > > > saLogStreamFixedLogRecordSize"); > > > if > > (chk_max_filesize_recordsize_compatible(immOiHandle, > > > - i_maxLogFileSize, > > > - i_maxLogFileSize_mod, > > > - i_fixedLogRecordSize, > > > - i_fixedLogRecordSize_mod, > > > + i_streamMaxLogFileSize, > > > + i_streamMaxLogFileSize_mod, > > > + i_streamFixedLogRecordSize, > > > + i_streamFixedLogRecordSize_mod, > > > stream, > > > opdata->operationType, > > > opdata->ccbId) == false) { > > > @@ -1966,6 +2000,16 @@ static void config_ccb_apply_modify(cons > > > mailbox_lim_upd = true; > > > > > lgs_cfgupd_list_create(LOG_STREAM_APP_LOW_LIMIT, > > > uint32_str, &config_data); > > > + } else if (!strcmp(attribute->attrName, > > LOG_MAX_LOGRECSIZE)) { > > > + uint32_val = *(SaUint32T *) value; > > > + snprintf(uint32_str, 20, "%u", uint32_val); > > > + lgs_cfgupd_list_create(LOG_MAX_LOGRECSIZE, > > > + uint32_str, &config_data); > > > + } else if (!strcmp(attribute->attrName, > > LOG_FILE_IO_TIMEOUT)) { > > > + uint32_val = *(SaUint32T *) value; > > > + snprintf(uint32_str, 20, "%u", uint32_val); > > > + lgs_cfgupd_list_create(LOG_FILE_IO_TIMEOUT, > > > + uint32_str, &config_data); > > > } > > > > > > attrMod = opdata->param.modify.attrMods[i++]; > > > diff --git a/tests/logsv/logtest.c b/tests/logsv/logtest.c > > > --- a/tests/logsv/logtest.c > > > +++ b/tests/logsv/logtest.c > > > @@ -190,7 +190,7 @@ void init_logrootpath(void) > > > > > > > > > /** > > > - * Get attribute value in string from IMM > > > + * Get attribute value from IMM > > > * @param inObjname Distinguished Name > > > * @param inAttr Attribute to search for value > > > * @param outNume The holder for the output for number data type > > attribute > > > diff --git a/tests/logsv/tet_LogOiOps.c b/tests/logsv/tet_LogOiOps.c > > [giang] Should check alignment of new added code. > > Some place use tab, some place use space. > > EX: in void verLogFileIoTimeout(void), void > > verMaxLogRecord_02(void) > > functions > > > > > --- a/tests/logsv/tet_LogOiOps.c > > > +++ b/tests/logsv/tet_LogOiOps.c > > > @@ -28,6 +28,24 @@ > > > #define opensaf_user "opensaf" > > > #define data_group "log-data" > > > > > > +/** > > > + * Due to the ticket #1443, if creating/deleting conf obj class > continuously, > > > + * logsv will be crashed or deleting action gets failed. > > > + * > > > + * For now, until the ticket is fixed, adding some delay b/w > > creating/deleting > > > + * as a workaround to avoid impact on testing that frequently encounter > > > + * when running whole test suite in one go. > > > + * > > > + */ > > > + > > > +/* Add delay 10ms. Once the #1443 is done, undefine following macro > */ > > > +#define __ADD_SLEEP__ > > > +#ifdef __ADD_SLEEP__ > > > +static void delay_ms(void) { usleep (10*1000); } > > > +#else > > > +static void delay_ms(void) {}; > > > +#endif // __ADD_SLEEP__ > > > + > > > static SaLogFileCreateAttributesT_2 appStreamLogFileCreateAttributes = > > > { > > > .logFilePathName = DEFAULT_APP_FILE_PATH_NAME, > > > @@ -1061,21 +1079,6 @@ void saLogOi_81(void) > > > } > > > > > > /** > > > - * CCB Object Modify, logMaxLogrecsize. Not allowed > > > - * Result, Reject > > > - */ > > > -void saLogOi_53(void) > > > -{ > > > - int rc; > > > - char command[256]; > > > - > > > - sprintf(command, "immcfg -a logMaxLogrecsize=%d " > > > - "logConfig=1,safApp=safLogService 2> > > /dev/null",1025); > > > - rc = system(command); > > > - rc_validate(WEXITSTATUS(rc), 1); > > > -} > > > - > > > -/** > > > * CCB Object Modify, logStreamSystemHighLimit > > > logStreamSystemLowLimit. OK > > > * Result OK > > > */ > > > @@ -1211,21 +1214,6 @@ void saLogOi_62(void) > > > } > > > > > > /** > > > - * CCB Object Modify, logFileIoTimeout. Not allowed > > > - * Result, Reject > > > - */ > > > -void saLogOi_63(void) > > > -{ > > > - int rc; > > > - char command[256]; > > > - > > > - sprintf(command, "immcfg -a logFileIoTimeout=%d" > > > - " logConfig=1,safApp=safLogService 2> > > /dev/null",600); > > > - rc = system(command); > > > - rc_validate(WEXITSTATUS(rc), 1); > > > -} > > > - > > > -/** > > > * CCB Object Modify, logFileSysConfig. Not allowed > > > * Result, Reject > > > */ > > > @@ -1281,6 +1269,7 @@ void saLogOi_65(void) > > > rc = system(command); > > > > > > sprintf(command,"immcfg -d > > safLgStrCfg=str6,safApp=safLogService"); > > > + delay_ms(); > > > safassert(system(command),0); > > > rc_validate(WEXITSTATUS(rc), 0); > > > } > > > @@ -1335,6 +1324,7 @@ void saLogOi_68(void) > > > rc = system(command); > > > /* Delete the test object */ > > > sprintf(command,"immcfg -d > > safLgStrCfg=str6,safApp=safLogService"); > > > + delay_ms(); > > > safassert(system(command),0); > > > > > > rc_validate(WEXITSTATUS(rc), 1); > > > @@ -1356,6 +1346,7 @@ void saLogOi_69(void) > > > rc = system(command); > > > /* Delete the test object */ > > > sprintf(command,"immcfg -d > > safLgStrCfg=str6,safApp=safLogService"); > > > + delay_ms(); > > > safassert(system(command),0); > > > > > > rc_validate(WEXITSTATUS(rc), 0); > > > @@ -1411,6 +1402,7 @@ void saLogOi_72(void) > > > rc = system(command); > > > /* Delete the test object */ > > > sprintf(command,"immcfg -d > > safLgStrCfg=str6,safApp=safLogService"); > > > + delay_ms(); > > > safassert(system(command),0); > > > rc_validate(WEXITSTATUS(rc), 0); > > > } > > > @@ -1437,6 +1429,7 @@ void saLogOi_73(void) > > > > > > /* Delete the test object */ > > > sprintf(command,"immcfg -d > > safLgStrCfg=str6,safApp=safLogService"); > > > + delay_ms(); > > > rc = tet_system(command); > > > if (rc != 0) { > > > fprintf(stderr, "%s Fail rc=%d\n", command, rc); > > > @@ -1468,6 +1461,7 @@ void saLogOi_74(void) > > > } > > > /* Delete the test object */ > > > sprintf(command,"immcfg -d > > safLgStrCfg=str6,safApp=safLogService"); > > > + delay_ms(); > > > rc = tet_system(command); > > > if (rc != 0) { > > > fprintf(stderr, "'%s' Fail rc=%d\n", command, rc); > > > @@ -1510,6 +1504,7 @@ void saLogOi_76(void) > > > rc = system(command); > > > /* Delete the test object */ > > > sprintf(command,"immcfg -d > > safLgStrCfg=str6,safApp=safLogService"); > > > + delay_ms(); > > > safassert(system(command),0); > > > rc_validate(WEXITSTATUS(rc), 0); > > > } > > > @@ -1587,6 +1582,7 @@ void saLogOi_100(void) > > > rc = system(command); > > > /* Delete */ > > > sprintf(command,"immcfg -d > > safLgStrCfg=str6,safApp=safLogService"); > > > + delay_ms(); > > > safassert(system(command),0); > > > > > > rc_validate(WEXITSTATUS(rc), 0); > > > @@ -1615,6 +1611,7 @@ void saLogOi_101(void) > > > rc = system(command); > > > /* Delete */ > > > sprintf(command,"immcfg -d > > safLgStrCfg=str6,safApp=safLogService"); > > > + delay_ms(); > > > safassert(system(command),0); > > > > > > rc_validate(WEXITSTATUS(rc), 1); > > > @@ -1643,6 +1640,7 @@ void saLogOi_102(void) > > > rc = system(command); > > > /* Delete */ > > > sprintf(command,"immcfg -d > > safLgStrCfg=str6,safApp=safLogService"); > > > + delay_ms(); > > > safassert(system(command),0); > > > > > > rc_validate(WEXITSTATUS(rc), 1); > > > @@ -1671,6 +1669,7 @@ void saLogOi_103(void) > > > rc = system(command); > > > /* Delete */ > > > sprintf(command,"immcfg -d > > safLgStrCfg=str6,safApp=safLogService"); > > > + delay_ms(); > > > safassert(system(command),0); > > > > > > rc_validate(WEXITSTATUS(rc), 1); > > > @@ -1705,8 +1704,10 @@ void saLogOi_104(void) > > > > > > /* Delete */ > > > sprintf(command,"immcfg -d > > safLgStrCfg=str6,safApp=safLogService"); > > > + delay_ms(); > > > safassert(system(command),0); > > > sprintf(command,"immcfg -d > > safLgStrCfg=str6a,safApp=safLogService"); > > > + delay_ms(); > > > safassert(system(command),0); > > > rc_validate(WEXITSTATUS(rc), 0); > > > } > > > @@ -1733,6 +1734,7 @@ void saLogOi_105(void) > > > rc = system(command); > > > /* Delete */ > > > sprintf(command,"immcfg -d > > safLgStrCfg=str6a,safApp=safLogService"); > > > + delay_ms(); > > > safassert(system(command),0); > > > > > > rc_validate(WEXITSTATUS(rc), 0); > > > @@ -1760,6 +1762,7 @@ void saLogOi_106(void) > > > rc = system(command); > > > /* Delete */ > > > sprintf(command,"immcfg -d > > safLgStrCfg=str6,safApp=safLogService"); > > > + delay_ms(); > > > safassert(system(command),0); > > > > > > rc_validate(WEXITSTATUS(rc), 0); > > > @@ -1788,6 +1791,7 @@ void saLogOi_107(void) > > > rc = system(command); > > > /* Delete */ > > > sprintf(command,"immcfg -d > > safLgStrCfg=str6,safApp=safLogService"); > > > + delay_ms(); > > > safassert(system(command),0); > > > > > > rc_validate(WEXITSTATUS(rc), 1); > > > @@ -1816,6 +1820,7 @@ void saLogOi_108(void) > > > rc = system(command); > > > /* Delete */ > > > sprintf(command,"immcfg -d > > safLgStrCfg=str6,safApp=safLogService"); > > > + delay_ms(); > > > safassert(system(command),0); > > > > > > rc_validate(WEXITSTATUS(rc), 1); > > > @@ -1844,6 +1849,7 @@ void saLogOi_109(void) > > > rc = system(command); > > > /* Delete */ > > > sprintf(command,"immcfg -d > > safLgStrCfg=str6,safApp=safLogService"); > > > + delay_ms(); > > > safassert(system(command),0); > > > > > > rc_validate(WEXITSTATUS(rc), 0); > > > @@ -1872,6 +1878,7 @@ void saLogOi_110(void) > > > rc = system(command); > > > /* Delete */ > > > sprintf(command,"immcfg -d > > safLgStrCfg=str6,safApp=safLogService"); > > > + delay_ms(); > > > safassert(system(command),0); > > > > > > rc_validate(WEXITSTATUS(rc), 0); > > > @@ -1900,6 +1907,7 @@ void saLogOi_111(void) > > > rc = system(command); > > > /* Delete */ > > > sprintf(command,"immcfg -d > > safLgStrCfg=str6,safApp=safLogService"); > > > + delay_ms(); > > > safassert(system(command),0); > > > > > > rc_validate(WEXITSTATUS(rc), 0); > > > @@ -1928,6 +1936,7 @@ void saLogOi_112(void) > > > rc = system(command); > > > /* Delete */ > > > sprintf(command,"immcfg -d > > safLgStrCfg=str6,safApp=safLogService"); > > > + delay_ms(); > > > safassert(system(command),0); > > > > > > rc_validate(WEXITSTATUS(rc), 1); > > > @@ -1956,6 +1965,7 @@ void saLogOi_113(void) > > > rc = system(command); > > > /* Delete */ > > > sprintf(command,"immcfg -d > > safLgStrCfg=str6,safApp=safLogService"); > > > + delay_ms(); > > > safassert(system(command),0); > > > > > > rc_validate(WEXITSTATUS(rc), 0); > > > @@ -1984,6 +1994,7 @@ void saLogOi_114(void) > > > rc = system(command); > > > /* Delete */ > > > sprintf(command,"immcfg -d > > safLgStrCfg=str6,safApp=safLogService"); > > > + delay_ms(); > > > safassert(system(command),0); > > > > > > rc_validate(WEXITSTATUS(rc), 1); > > > @@ -2012,6 +2023,7 @@ void saLogOi_115(void) > > > rc = system(command); > > > /* Delete */ > > > sprintf(command,"immcfg -d > > safLgStrCfg=str6,safApp=safLogService"); > > > + delay_ms(); > > > safassert(system(command),0); > > > > > > rc_validate(WEXITSTATUS(rc), 1); > > > @@ -2471,6 +2483,627 @@ void verDefaultLogFileFmt(void) > > > > > > #undef MAX_LOGRECSIZE > > > > > > +/** > > > + * Add test cases for ticket #1288 > > > + * - logFileIoTimeout is changeable in runtime > > > + * - logMaxLogrecsize is changeable in runtime > > > + * - Max log record is up to 65535 > > > + */ > > > + > > > +#define MAX_LOGRECSIZE (65535) > > > + > > > +/** > > > + * CCB Object Modify, logFileIoTimeout. > > > + * Verify it is possible to change the value > > > + */ > > > +void verLogFileIoTimeout(void) > > > +{ > > > + int rc; > > > + char command[256]; > > > + uint32_t val = 0; > > > + uint32_t *tmp = &val; > > > + > > > + /* Get current value of logMaxApplicationStreams */ > > > + rc = get_attr_value(&configurationObject, "logFileIoTimeout", > > > + (void **)&tmp, NULL); > > > + if (rc == -1) { > > > + /* if failed, use default value */ > > > + fprintf(stderr, "Failed to get attribute value from IMM \n"); > > > + val = 500; > > > + } else { > > > + val = *tmp; > > > + } > > > + > > > + sprintf(command, "immcfg -a logFileIoTimeout=%d" > > > + " logConfig=1,safApp=safLogService 2> /dev/null", > > 600); > > > + rc = system(command); > > > + rc_validate(WEXITSTATUS(rc), 0); > > > + > > > + /* If perform the command succesfully, restore to previous value. */ > > > + if (WEXITSTATUS(rc) == 0) { > > > + sprintf(command, "immcfg -a logFileIoTimeout=%u" > > > + " logConfig=1,safApp=safLogService 2> > > /dev/null", val); > > > + rc = system(command); > > > + } > > > +} > > > + > > > +/** > > > + * CCB Object Modify, logFileIoTimeout < 500. Not allowed > > > + * Result, Reject > > > + */ > > > +void verLogFileIoTimeout_Err_01(void) > > > +{ > > > + int rc; > > > + char command[256]; > > > + > > > + sprintf(command, "immcfg -a logFileIoTimeout=%d" > > > + " logConfig=1,safApp=safLogService 2> /dev/null", > > 400); > > > + rc = system(command); > > > + rc_validate(WEXITSTATUS(rc), 1); > > > +} > > > + > > > +/** > > > + * CCB Object Modify, logFileIoTimeout > 5000. Not allowed > > > + * Result, Reject > > > + */ > > > +void verLogFileIoTimeout_Err_02(void) > > > +{ > > > + int rc; > > > + char command[256]; > > > + > > > + sprintf(command, "immcfg -a logFileIoTimeout=%d" > > > + " logConfig=1,safApp=safLogService 2> /dev/null", > > 6000); > > > + rc = system(command); > > > + rc_validate(WEXITSTATUS(rc), 1); > > > +} > > > + > > > +/** > > > + * CCB Object Modify, valid logMaxLogrecsize value is in range [256 - > > 65535]. > > > + */ > > > +void verLogMaxLogrecsize(void) > > > +{ > > > + int rc; > > > + char command[256]; > > > + uint32_t logMaxRec = 0; > > > + uint32_t *tmp = &logMaxRec; > > > + > > > + /* Get current value of the attribute, use default value if failed > > > (-1) */ > > > + rc = get_attr_value(&configurationObject, "logMaxLogrecsize", (void > > **)&tmp, > > > + NULL); > > > + if (rc == -1) { > > > + /* Failed, use default one */ > > > + fprintf(stderr, "Failed to get attribute value from IMM\n"); > > > + logMaxRec = 1024; > > > + } else { > > > + logMaxRec = *tmp; > > > + } > > > + > > > + sprintf(command, "immcfg -a logMaxLogrecsize=%d " > > > + "logConfig=1,safApp=safLogService 2> /dev/null", > > MAX_LOGRECSIZE); > > > + rc = system(command); > > > + rc_validate(WEXITSTATUS(rc), 0); > > > + > > > + /* Restore logMaxLogrecsize to previous value */ > > > + sprintf(command, "immcfg -a logMaxLogrecsize=%d " > > > + "logConfig=1,safApp=safLogService 2> /dev/null", > > logMaxRec); > > > + rc = system(command); > > > +} > > > + > > > +/** > > > + * CCB Object Modify, verify the rule: > > > + * saLogStreamMaxLogFileSize > logMaxLogrecsize >= > > saLogStreamFixedLogRecordSize > > > + */ > > > +void verLogMaxLogrecsize_dep(void) > > > +{ > > > + int rc; > > > + char command[256]; > > > + uint32_t logMaxRec = 0; > > > + uint32_t *tmp = &logMaxRec; > > > + > > > + /* Get current value of the attribute, use default value if failed > > > (-1) */ > > > + rc = get_attr_value(&configurationObject, "logMaxLogrecsize", (void > > **)&tmp, > > > + NULL); > > > + if (rc == -1) { > > > + /* Failed, use default one */ > > > + fprintf(stderr, "Failed to get attribute value from IMM\n"); > > > + logMaxRec = 1024; > > > + } else { > > > + logMaxRec = *tmp; > > > + } > > > + > > > + /* Change the logMaxLogrecsize */ > > > + sprintf(command, "immcfg -a logMaxLogrecsize=%d " > > > + "logConfig=1,safApp=safLogService 2> /dev/null", > > 1000); > > > + rc = system(command); > > > + if (WEXITSTATUS(rc)) { > > > + /* Failed to perform command. Report test failed */ > > > + fprintf(stderr, "Failed to perfom command - %s \n", > > command); > > > + rc_validate(WEXITSTATUS(rc), 0); > > > + return; > > > + } > > > + > > > + /* Create an stream with valid values */ > > > + sprintf(command, "immcfg -c SaLogStreamConfig > > safLgStrCfg=Test,safApp=safLogService" > > > + " -a saLogStreamFileName=Test -a > > saLogStreamPathName=Test" > > > + " -a saLogStreamFixedLogRecordSize=1000 " > > > + " -a saLogStreamMaxLogFileSize=5000"); > > > + rc = system(command); > > > + if (WEXITSTATUS(rc)) { > > > + /* Failed to perform command. Report test failed */ > > > + fprintf(stderr, "Failed to perfom command - %s \n", > > command); > > > + rc_validate(WEXITSTATUS(rc), 0); > > > + goto done; > > > + } > > > + > > > + /* Change the logMaxLogrecsize to value less than above > > fixedLogRecordSize */ > > > + sprintf(command, "immcfg -a logMaxLogrecsize=%d " > > > + "logConfig=1,safApp=safLogService 2> /dev/null", > > 500); > > > + rc = system(command); > > > + if (WEXITSTATUS(rc)) { > > > + /* Failed to perform command. Report test failed */ > > > + fprintf(stderr, "Failed to perfom command - %s \n", > > command); > > > + rc_validate(WEXITSTATUS(rc), 0); > > > + goto free_class; > > > + } > > > + > > > + /* > > > + * Change the saLogStreamMaxLogFileSize to valid value. > > > + * Verify that the command performs succesfully. > > > + */ > > > + sprintf(command, "immcfg -a saLogStreamMaxLogFileSize=%d " > > > + "safLgStrCfg=Test,safApp=safLogService 2> > > /dev/null", 6000); > > > + rc = system(command); > > > + rc_validate(WEXITSTATUS(rc), 0); > > > + > > > +free_class: > > > + /* Delete created obj class */ > > > + sprintf(command, "immcfg -d > > safLgStrCfg=Test,safApp=safLogService " > > > + "2> /dev/null"); > > > + rc = system(command); > > > + > > > +done: > > > + /* Restore logMaxLogrecsize to previous value */ > > > + sprintf(command, "immcfg -a logMaxLogrecsize=%d " > > > + "logConfig=1,safApp=safLogService 2> /dev/null", > > logMaxRec); > > > + rc = system(command); > > > +} > > > + > > > +/** > > > + * CCB Object Modify, logMaxLogrecsize < 256. Not allowed. > > > + */ > > > +void verLogMaxLogrecsize_Err_01(void) > > > +{ > > > + int rc; > > > + char command[256]; > > > + > > > + sprintf(command, "immcfg -a logMaxLogrecsize=%d " > > > + "logConfig=1,safApp=safLogService 2> /dev/null", > > 255); > > > + rc = system(command); > > > + rc_validate(WEXITSTATUS(rc), 1); > > > +} > > > + > > > +/** > > > + * CCB Object Modify, logMaxLogrecsize > 65535. Not allowed. > > > + */ > > > +void verLogMaxLogrecsize_Err_02(void) > > > +{ > > > + int rc; > > > + char command[256]; > > > + > > > + sprintf(command, "immcfg -a logMaxLogrecsize=%d " > > > + "logConfig=1,safApp=safLogService 2> /dev/null", > > MAX_LOGRECSIZE + 1); > > > + rc = system(command); > > > + rc_validate(WEXITSTATUS(rc), 1); > > > +} > > > + > > > +/** > > > + * Also add test cases to verify the rules: > > > + * --------------------------------------- > > > + * 1 - saLogStreamFixedLogRecordSize must be less than > > saLogStreamMaxLogFileSize > > > + * 2 - saLogStreamFixedLogRecordSize must be less than or equal to > > logMaxLogrecsize > > > + * 3 - saLogStreamFixedLogRecordSize can be 0. Means variable record > > size > > > + * 4 - saLogStreamMaxLogFileSize must be bigger than 0. No limit is not > > supported > > > + * 5 - saLogStreamMaxLogFileSize must be bigger than logMaxLogrecsize > > > + * 6 - saLogStreamMaxLogFileSize must be bigger than > > saLogStreamFixedLogRecordSize > > > + * ---------------------------------------- > > > + * > > > + * For rules #2, #3, #5, test cases are already added above. > > > + */ > > > + > > > +/** > > > + * CCB Object modify, verify rule #1/#6 > > > + * saLogStreamFixedLogRecordSize < saLogStreamMaxLogFileSize. > > Allowed. > > > + */ > > > +void verFixLogRec_MaxFileSize(void) > > > +{ > > > + int rc; > > > + char command[256]; > > > + uint32_t fixLogRec = 0; > > > + uint32_t *tmpFix = &fixLogRec; > > > + uint32_t maxFileSize = 0; > > > + uint32_t *tmpMax = &maxFileSize; > > > + uint32_t logMaxRec = 0; > > > + uint32_t *tmp = &logMaxRec; > > > + > > > + /* Get current value of logMaxLogrecsize attribute, use default value > if > > failed (-1) */ > > > + rc = get_attr_value(&configurationObject, "logMaxLogrecsize", (void > > **)&tmp, > > > + NULL); > > > + if (rc == -1) { > > > + /* Failed, use default one */ > > > + fprintf(stderr, "Failed to get attribute value from IMM\n"); > > > + logMaxRec = 1024; > > > + } else { > > > + logMaxRec = *tmp; > > > + } > > > + > > > + /* Get current value of saLogStreamFixedLogRecordSize */ > > > + rc = get_attr_value(&alarmStreamName, > > "saLogStreamFixedLogRecordSize", > > > + (void **)&tmpFix, NULL); > > > + if (rc == -1) { > > > + /* Report test failed and exit if getting value failed */ > > > + fprintf(stderr, "Failed to get attribute value from IMM \n"); > > > + test_validate(rc, 0); > > > + return; > > > + } > > > + > > > + /* Backup the current saLogStreamFixedLogRecordSize value */ > > > + fixLogRec = *tmpFix; > > > + > > > + /* Get current value of saLogStreamMaxLogFileSize */ > > > + rc = get_attr_value(&alarmStreamName, > > "saLogStreamMaxLogFileSize", > > > + (void **)&tmpMax, NULL); > > > + if (rc == -1) { > > > + /* Report test failed and exit if getting value failed */ > > > + fprintf(stderr, "Failed to get attribute value from IMM \n"); > > > + test_validate(rc, 0); > > > + return; > > > + } > > > + > > > + /* Backup the current saLogStreamMaxLogFileSize value */ > > > + maxFileSize = *tmpMax; > > > + > > > + /* Allow to set saLogStreamMaxLogFileSize > > > saLogStreamFixedLogRecordSize */ > > > + sprintf(command, "immcfg -a saLogStreamMaxLogFileSize=%d " > > > + "-a saLogStreamFixedLogRecordSize=%d %s 2> > > /dev/null", > > > + logMaxRec + 1, logMaxRec, > > SA_LOG_STREAM_ALARM); > > > + rc = system(command); > > > + rc_validate(WEXITSTATUS(rc), 0); > > > + > > > + /* Restore the changed value */ > > > + if (WEXITSTATUS(rc) == 0) { > > > + sprintf(command, "immcfg -a > > saLogStreamMaxLogFileSize=%d " > > > + " -a saLogStreamFixedLogRecordSize=%d %s > > 2> /dev/null", > > > + maxFileSize, fixLogRec, > > SA_LOG_STREAM_ALARM); > > > + rc = system(command); > > > + } > > > +} > > > + > > > +/** > > > + * CCB Object modify, verify rule #1/#6 > > > + * saLogStreamFixedLogRecordSize > saLogStreamMaxLogFileSize. Not > > allowed. > > > + */ > > > +void verFixLogRec_MaxFileSize_Err(void) > > > +{ > > > + int rc; > > > + char command[256]; > > > + uint32_t fixLogRec = 0; > > > + uint32_t *tmpFix = &fixLogRec; > > > + uint32_t maxFileSize = 0; > > > + uint32_t *tmpMax = &maxFileSize; > > > + > > > + /* Get current value of saLogStreamFixedLogRecordSize */ > > > + rc = get_attr_value(&alarmStreamName, > > "saLogStreamFixedLogRecordSize", > > > + (void **)&tmpFix, NULL); > > > + if (rc == -1) { > > > + /* Report test failed and exit if getting value failed */ > > > + fprintf(stderr, "Failed to get attribute value from IMM \n"); > > > + test_validate(rc, 0); > > > + return; > > > + } > > > + > > > + /* Backup the current saLogStreamFixedLogRecordSize value */ > > > + fixLogRec = *tmpFix; > > > + > > > + /* Get current value of saLogStreamMaxLogFileSize */ > > > + rc = get_attr_value(&alarmStreamName, > > "saLogStreamMaxLogFileSize", > > > + (void **)&tmpMax, NULL); > > > + if (rc == -1) { > > > + /* Report test failed and exit if getting value failed */ > > > + fprintf(stderr, "Failed to get attribute value from IMM \n"); > > > + test_validate(rc, 0); > > > + return; > > > + } > > > + > > > + /* Backup the current saLogStreamMaxLogFileSize value */ > > > + maxFileSize = *tmpMax; > > > + > > > + /* Not allow to set saLogStreamMaxLogFileSize < > > saLogStreamFixedLogRecordSize */ > > > + sprintf(command, "immcfg -a saLogStreamMaxLogFileSize=%d %s 2> > > /dev/null", > > > + fixLogRec - 1, SA_LOG_STREAM_ALARM); > > > + rc = system(command); > > > + rc_validate(WEXITSTATUS(rc), 1); > > > + > > > + /* Restore the changed value */ > > > + if (WEXITSTATUS(rc) == 0) { > > > + sprintf(command, "immcfg -a > > saLogStreamMaxLogFileSize=%d %s 2> /dev/null", > > > + maxFileSize, SA_LOG_STREAM_ALARM); > > > + rc = system(command); > > > + } > > > +} > > > + > > > +/** > > > + * CCB Object modify, verify rule #4 > > > + * saLogStreamMaxLogFileSize = 0. Not allowed. > > > + */ > > > +void verMaxLogFileSize_Err(void) > > > +{ > > > + int rc; > > > + char command[256]; > > > + uint32_t val = 0; > > > + uint32_t *tmp = &val; > > > + > > > + /* Get current value of logMaxApplicationStreams */ > > > + rc = get_attr_value(&alarmStreamName, > > "saLogStreamMaxLogFileSize", > > > + (void **)&tmp, NULL); > > > + if (rc == -1) { > > > + /* Report test failed and exit if getting value failed */ > > > + fprintf(stderr, "Failed to get attribute value from IMM \n"); > > > + test_validate(rc, 0); > > > + return; > > > + } > > > + > > > + /* Backup the current value */ > > > + val = *tmp; > > > + > > > + /* Allow to set saLogStreamMaxLogFileSize=0 */ > > > + sprintf(command, "immcfg -a saLogStreamMaxLogFileSize=0 %s 2> > > /dev/null", > > > + SA_LOG_STREAM_ALARM); > > > + rc = system(command); > > > + rc_validate(WEXITSTATUS(rc), 1); > > > + > > > + /* Restore the changed value */ > > > + if (WEXITSTATUS(rc) == 0) { > > > + sprintf(command, "immcfg -a > > saLogStreamMaxLogFileSize=%d %s 2> /dev/null", > > > + val, SA_LOG_STREAM_ALARM); > > > + rc = system(command); > > > + } > > > +} > > > + > > > +/** > > > + * Write a maximum log record to app stream. > > > + * Then, verify if it is done succesfully or not. > > > + * > > > + * Steps: > > > + * > > > + * 1. Change the logMaxLogrecsize value to maximum one. > > > + * 2. Create application stream with saLogStreamFixedLogRecordSize > > > + * equal to logMaxLogrecsize (maximum value). > > > + * 3. Create a log record buffer with 65535 bytes. > > > + * 4. Using saflogger tool, writing that buffer to the created app > > > stream. > > > + * 5. Get file size of the app stream log file > > > + * 6. Verify if the size of file is larger than 65535 bytes or not > > > + * 7. Delete created app class > > > + */ > > > + > > > +void verMaxLogRecord_01(void) > > > +{ > > > + int rc; > > > + char command[66000]; > > > + char logRecord[MAX_LOGRECSIZE]; > > > + uint32_t logMaxRec = 0; > > > + uint32_t *tmp = &logMaxRec; > > > + > > > + /* Get current value of the attribute, use default value if failed > > > (-1) */ > > > + rc = get_attr_value(&configurationObject, "logMaxLogrecsize", (void > > **)&tmp, > > > + NULL); > > > + if (rc == -1) { > > > + /* Failed, use default one */ > > > + fprintf(stderr, "Failed to get attribute value from IMM\n"); > > > + logMaxRec = 1024; > > > + } else { > > > + logMaxRec = *tmp; > > > + } > > > + > > > + /* Change the attribute value to maximum one */ > > > + sprintf(command, "immcfg -a logMaxLogrecsize=%u" > > > + " logConfig=1,safApp=safLogService 2> /dev/null", > > MAX_LOGRECSIZE); > > > + > > > + rc = system(command); > > > + if (WEXITSTATUS(rc)) { > > > + /* Failed to set logMaxLogrecsize. Report test failed */ > > > + fprintf(stderr, "Failed to perform command = %s\n", > > command); > > > + rc_validate(WEXITSTATUS(rc), 0); > > > + return; > > > + } > > > + > > > + /* Set saLogStreamFixedLogRecordSize = 0, fix log record = > > maxLogRecordSize */ > > > + sprintf(command, "immcfg -c SaLogStreamConfig > > safLgStrCfg=maxrecsize,safApp=safLogService" > > > + " -a saLogStreamFileName=verMaxLogrecsize -a > > saLogStreamPathName=vermaxsize" > > > + " -a saLogStreamFixedLogRecordSize=0"); > > > + > > > + rc = system(command); > > > + if (WEXITSTATUS(rc)) { > > > + /* Fail to perform the command. Report TC failed */ > > > + fprintf(stderr, "Failed to perform command = %s", > > command); > > > + rc_validate(WEXITSTATUS(rc), 0); > > > + goto done; > > > + } > > > + > > > + /* Prepare log record data */ > > > + memset(logRecord, 'A', MAX_LOGRECSIZE - 2); > > > + logRecord[MAX_LOGRECSIZE - 1] = '\0'; > > > + > > > + sprintf(command, "saflogger -a > > safLgStrCfg=maxrecsize,safApp=safLogService \"%s\"", > > > + logRecord); > > > + > > > + rc = system(command); > > > + if (WEXITSTATUS(rc)) { > > > + /* Fail to perform command. Report test failed. */ > > > + fprintf(stderr, "Failed to perform command = %s\n", > > command); > > > + rc_validate(WEXITSTATUS(rc), 0); > > > + goto free_class; > > > + } > > > + /* Write log record succesfully. Then, measure the log file size. */ > > > + FILE *fp = NULL; > > > + char fileSize_c[10]; > > > + uint32_t fileSize = 0; > > > + > > > + /* Command to get exact app stream log file, and measure that file > > size. */ > > > + sprintf(command, "find %s/vermaxsize -type f -mmin -1 " > > > + "| egrep \"%s_([0-9]{8}_[0-9]{6}\\.log$)\" " > > > + "| xargs wc -c | awk '{printf $1}'", > > > + log_root_path, "verMaxLogrecsize"); > > > + > > > + fp = popen(command, "r"); > > > + > > > + if (fp == NULL) { > > > + /* Fail to read size of log file. Report test failed. */ > > > + fprintf(stderr, "Failed to run command = %s\n", command); > > > + test_validate(1, 0); > > > + goto free_class; > > > + } > > > + /* Get output of the command - actually the file size in chars */ > > > + while (fgets(fileSize_c, sizeof(fileSize_c) - 1, fp) != NULL) {}; > > > + pclose(fp); > > > + > > > + /* Convert chars to number */ > > > + fileSize = atoi(fileSize_c); > > > + > > > + if (fileSize < MAX_LOGRECSIZE) { > > > + fprintf(stderr, "Log file size (%u) is less than %d \n", > > > + fileSize, MAX_LOGRECSIZE); > > > + test_validate(fileSize, MAX_LOGRECSIZE); > > > + goto free_class; > > > + } else { > > > + rc_validate(WEXITSTATUS(rc), 0); > > > + } > > > + > > > +free_class: > > > + /* Delete class created */ > > > + (void)strcpy(command, "immcfg -d > > safLgStrCfg=maxrecsize,safApp=safLogService"); > > > + rc = system(command); > > > + > > > +done: > > > + /* Restore logMaxLogrecsize to previous value */ > > > + sprintf(command, "immcfg -a logMaxLogrecsize=%d " > > > + "logConfig=1,safApp=safLogService 2> /dev/null", > > logMaxRec); > > > + rc = system(command); > > > +} > > > + > > > +/** > > > + * Write a log record containing special characters. > > > + * Make sure the logsv functions normally. > > > + */ > > > +void verMaxLogRecord_02(void) > > > +{ > > > + int rc; > > > + char command[66000]; > > > + char logRecord[MAX_LOGRECSIZE]; > > > + uint32_t logMaxRec = 0; > > > + uint32_t *tmp = &logMaxRec; > > > + > > > + /* Get current value of the attribute, use default value if failed > > > (-1) */ > > > + rc = get_attr_value(&configurationObject, "logMaxLogrecsize", (void > > **)&tmp, > > > + NULL); > > > + if (rc == -1) { > > > + /* Failed, use default one */ > > > + fprintf(stderr, "Failed to get attribute value from IMM\n"); > > > + logMaxRec = 1024; > > > + } else { > > > + logMaxRec = *tmp; > > > + } > > > + > > > + /* Change the attribute value to maximum one */ > > > + sprintf(command, "immcfg -a logMaxLogrecsize=%u" > > > + " logConfig=1,safApp=safLogService 2> /dev/null", > > MAX_LOGRECSIZE); > > > + > > > + rc = system(command); > > > + if (WEXITSTATUS(rc)) { > > > + /* Failed to set logMaxLogrecsize. Report test failed */ > > > + fprintf(stderr, "Failed to perform command = %s\n", > > command); > > > + rc_validate(WEXITSTATUS(rc), 0); > > > + return; > > > + } > > > + /* Set saLogStreamFixedLogRecordSize = max */ > > > + sprintf(command, "immcfg -c SaLogStreamConfig > > safLgStrCfg=specialCharactor,safApp=safLogService" > > > + " -a saLogStreamFileName=specialCharactor -a > > saLogStreamPathName=vermaxsize" > > > + " -a saLogStreamFixedLogRecordSize=%d", > > MAX_LOGRECSIZE); > > > + > > > + rc = system(command); > > > + if (WEXITSTATUS(rc)) { > > > + /* Fail to perform the command. Report TC failed */ > > > + fprintf(stderr, "Failed to perform command = %s", > > command); > > > + rc_validate(WEXITSTATUS(rc), 0); > > > + goto done; > > > + } > > > + > > > + /* Prepare log record data with special characters */ > > > + memset(logRecord, 'A', MAX_LOGRECSIZE - 2); > > > + logRecord[1] = '\t'; > > > + logRecord[2] = 't'; > > > + logRecord[3] = '\n'; > > > + logRecord[4] = 'n'; > > > + logRecord[5] = ' '; > > > + logRecord[6] = 'S'; > > > + logRecord[MAX_LOGRECSIZE - 1] = '\0'; > > > + > > > + sprintf(command, "saflogger -a > > safLgStrCfg=specialCharactor,safApp=safLogService \"%s\"", > > > + logRecord); > > > + > > > + rc = system(command); > > > + if (WEXITSTATUS(rc)) { > > > + /* Fail to perform command. Report test failed. */ > > > + fprintf(stderr, "Failed to perform command = %s\n", > > command); > > > + rc_validate(WEXITSTATUS(rc), 0); > > > + goto free_class; > > > + } > > > + /* Write log record succesfully. Then, measure the log file size. */ > > > + FILE *fp = NULL; > > > + char fileSize_c[10]; > > > + uint32_t fileSize = 0; > > > + > > > + /* Command to get exact app stream log file, and measure that file > > size. */ > > > + sprintf(command, "find %s/vermaxsize -type f -mmin -1 " > > > + "| egrep \"%s_([0-9]{8}_[0-9]{6}\\.log$)\" " > > > + "| xargs wc -c | awk '{printf $1}'", > > > + log_root_path, "specialCharactor"); > > > + > > > + fp = popen(command, "r"); > > > + > > > + if (fp == NULL) { > > > + /* Fail to read size of log file. Report test failed. */ > > > + fprintf(stderr, "Failed to run command = %s\n", command); > > > + test_validate(1, 0); > > > + goto free_class; > > > + } > > > + /* Get output of the command - actually the file size in chars */ > > > + while (fgets(fileSize_c, sizeof(fileSize_c) - 1, fp) != NULL) {}; > > > + pclose(fp); > > > + > > > + /* Convert chars to number */ > > > + fileSize = atoi(fileSize_c); > > > + > > > + if (fileSize < MAX_LOGRECSIZE) { > > > + fprintf(stderr, "Log file size (%u) is less than %d \n", > > > + fileSize, MAX_LOGRECSIZE); > > > + test_validate(fileSize, MAX_LOGRECSIZE); > > > + goto free_class; > > > + } else { > > > + rc_validate(WEXITSTATUS(rc), 0); > > > + } > > > + > > > +free_class: > > > + /* Delete class created */ > > > + (void)strcpy(command, "immcfg -d > > safLgStrCfg=specialCharactor,safApp=safLogService"); > > > + rc = system(command); > > > + > > > +done: > > > + /* Restore logMaxLogrecsize to previous value */ > > > + sprintf(command, "immcfg -a logMaxLogrecsize=%d " > > > + "logConfig=1,safApp=safLogService 2> /dev/null", > > logMaxRec); > > > + rc = system(command); > > > +} > > > + > > > __attribute__ ((constructor)) static void > > saOiOperations_constructor(void) > > > { > > > /* Stream objects */ > > > @@ -2546,7 +3179,6 @@ void verDefaultLogFileFmt(void) > > > test_case_add(5, saLogOi_79, "CCB Object Modify, data group. Group > > does not exist. Not allowed"); > > > test_case_add(5, saLogOi_80, "CCB Object Modify, data group. Group > > exists. OK"); > > > test_case_add(5, saLogOi_81, "CCB Object Modify, delete data group. > > OK"); > > > - test_case_add(5, saLogOi_53, "CCB Object Modify, logMaxLogrecsize. > > Not allowed"); > > > test_case_add(5, saLogOi_54, "CCB Object Modify, > > logStreamSystemHighLimit > logStreamSystemLowLimit. OK"); > > > test_case_add(5, saLogOi_55, "CCB Object Modify, > > logStreamSystemHighLimit = logStreamSystemLowLimit, != 0. Ok"); > > > test_case_add(5, saLogOi_56, "CCB Object Modify, > > logStreamSystemHighLimit < logStreamSystemLowLimit. Error"); > > > @@ -2556,9 +3188,17 @@ void verDefaultLogFileFmt(void) > > > test_case_add(5, saLogOi_60, "CCB Object Modify, > > logStreamAppHighLimit < logStreamAppLowLimit. Error"); > > > test_case_add(5, saLogOi_61, "CCB Object Modify, > > logStreamAppHighLimit = logStreamAppLowLimit = 0. OK"); > > > test_case_add(5, saLogOi_62, "CCB Object Modify, > > logMaxApplicationStreams. Not allowed"); > > > - test_case_add(5, saLogOi_63, "CCB Object Modify, logFileIoTimeout. > > Not allowed"); > > > test_case_add(5, saLogOi_64, "CCB Object Modify, logFileSysConfig. > Not > > allowed"); > > > - > > > + > > > + /* Add test cases to test #1288 */ > > > + test_case_add(5, verLogFileIoTimeout, "CCB Object Modify: > > logFileIoTimeout is in range [500 - 5000], OK"); > > > + test_case_add(5, verLogFileIoTimeout_Err_01, "CCB Object Modify: > > logFileIoTimeout < 500, ERR"); > > > + test_case_add(5, verLogFileIoTimeout_Err_02, "CCB Object Modify: > > logFileIoTimeout > 5000, ERR"); > > > + test_case_add(5, verLogMaxLogrecsize, "CCB Object Modify: > > logMaxLogrecsize is in range [256 - 65535], OK"); > > > + test_case_add(5, verLogMaxLogrecsize_dep, "CCB Object Modify: > > logMaxLogrecsize dependencies, OK"); > > > + test_case_add(5, verLogMaxLogrecsize_Err_01, "CCB Object Modify: > > logMaxLogrecsize < 256, ERR"); > > > + test_case_add(5, verLogMaxLogrecsize_Err_02, "CCB Object Modify: > > logMaxLogrecsize > 65535, ERR"); > > > + > > > /* Stream configuration object */ > > > /* Tests for create */ > > > test_suite_add(6, "LOG OI tests, Stream configuration object > > attribute validation"); > > > @@ -2586,6 +3226,9 @@ void verDefaultLogFileFmt(void) > > > test_case_add(6, saLogOi_106, "Modify: saLogStreamMaxLogFileSize > > > logMaxLogrecsize, Ok"); > > > test_case_add(6, saLogOi_107, "Modify: saLogStreamMaxLogFileSize > > == logMaxLogrecsize, ERR"); > > > test_case_add(6, saLogOi_108, "Modify: saLogStreamMaxLogFileSize > > < logMaxLogrecsize, ERR"); > > > + test_case_add(6, verFixLogRec_MaxFileSize, "Modify: > > saLogStreamMaxLogFileSize > saLogStreamFixedLogRecordSize, OK"); > > > + test_case_add(6, verFixLogRec_MaxFileSize_Err, "Modify: > > saLogStreamMaxLogFileSize <= saLogStreamFixedLogRecordSize, ERR"); > > > + test_case_add(6, verMaxLogFileSize_Err, "Modify: > > saLogStreamMaxLogFileSize == 0, ERR"); > > > test_case_add(6, saLogOi_109, "Modify: > > saLogStreamFixedLogRecordSize < logMaxLogrecsize, Ok"); > > > test_case_add(6, saLogOi_110, "Modify: > > saLogStreamFixedLogRecordSize == 0, Ok"); > > > test_case_add(6, saLogOi_111, "Modify: > > saLogStreamFixedLogRecordSize == logMaxLogrecsize, Ok"); > > > @@ -2593,4 +3236,9 @@ void verDefaultLogFileFmt(void) > > > test_case_add(6, saLogOi_113, "Modify: > > saLogStreamMaxFilesRotated < 128, Ok"); > > > test_case_add(6, saLogOi_114, "Modify: > > saLogStreamMaxFilesRotated > 128, ERR"); > > > test_case_add(6, saLogOi_115, "Modify: > > saLogStreamMaxFilesRotated == 128, ERR"); > > > + > > > + /* Add test cases to test #1288 */ > > > + test_case_add(6, verMaxLogRecord_01, "Modify: > > saLogStreamFixedLogRecordSize == 0, write a record = 65535 bytes, OK"); > > > + test_case_add(6, verMaxLogRecord_02, "Modify: > > saLogStreamFixedLogRecordSize == 65535, Write a record = 65535 bytes > with > > special characters, OK"); > > > + > > > } > > > ------------------------------------------------------------------------------ _______________________________________________ Opensaf-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/opensaf-devel
