Hi Canh Van,

ACK not tested.

-AVM


On 3/22/2017 8:26 PM, Canh Van Truong wrote:
>   src/log/apitest/tet_LogOiOps.c |  92 
> ++++++++++++++++++++++++++++++++++++++++++
>   src/log/logd/lgs_stream.cc     |   3 +
>   2 files changed, 95 insertions(+), 0 deletions(-)
>
>
> When updating attributes of log file, the log server closes the opening 
> cfg/log
> log files and creates new ones. The problem is the logsv still keep old log 
> file
> size for new log. This causes the new log file will be rotated even though its
> size does not reach MAX_FILE_SIZE. This patch help reset current log file size
> in this case.
>
> diff --git a/src/log/apitest/tet_LogOiOps.c b/src/log/apitest/tet_LogOiOps.c
> --- a/src/log/apitest/tet_LogOiOps.c
> +++ b/src/log/apitest/tet_LogOiOps.c
> @@ -4982,6 +4982,97 @@ done:
>       }
>   }
>   
> +/**
> + * Test case for ticket #1439
> + *
> + * Write the log file then verify that the log file is not
> + * rotated until reaching saLogStreamMaxLogFileSize
> + *
> + * Step:
> + * 1. Write log record 500b to System stream
> + * 2. Change max log size (1500) and fixed log records size (1000)
> + *    attribute in System stream
> + * 3. Write log record 1000b to System stream
> + * 4. Check and verify log file is not rotated
> + *
> + */
> +void verLogFileRotate(void)
> +{
> +     int rc;
> +     char command[1500];
> +     FILE *fp = NULL;
> +     char fileSize_c[10];
> +     uint32_t fileSize = 0;
> +     char logRecord[1000];
> +     SaUint32T v_saLogStreamFixedLogRecordSize = 0;
> +     const int max_log_file_size = 1500, fixed_log_rec_size = 1000;
> +
> +     /* Get current value of the attribute */
> +     get_attr_value(&systemStreamName, "saLogStreamMaxLogFileSize",
> +                    &v_saLogStreamMaxLogFileSize);
> +
> +     get_attr_value(&systemStreamName, "saLogStreamFixedLogRecordSize",
> +                    &v_saLogStreamFixedLogRecordSize);
> +
> +     /* write to system log 500b*/
> +     memset(logRecord, 'A', 500);
> +
> +     sprintf(command, "saflogger -y \"%s\"", logRecord);
> +     rc = systemCall(command);
> +     if (rc != 0) {
> +             rc_validate(rc, 0);
> +             goto done;
> +     }
> +     /* Set saLogStreamMaxLogFileSize, saLogStreamFixedLogRecordSize*/
> +     sprintf(command,"immcfg safLgStrCfg=saLogSystem,safApp=safLogService"
> +                     " -a saLogStreamMaxLogFileSize=%d"
> +                     " -a saLogStreamFixedLogRecordSize=%d",
> +                     max_log_file_size, fixed_log_rec_size);
> +     rc = systemCall(command);
> +     if (rc != 0) {
> +             rc_validate(rc, 0);
> +             return;
> +     }
> +
> +     sprintf(command, "saflogger -y  \"%s\"", logRecord);
> +
> +     rc = systemCall(command);
> +     if (rc != 0) {
> +             rc_validate(rc, 0);
> +             goto done;
> +     }
> +
> +     sprintf(command,"find %s -type f -mmin -1 "
> +                     "| egrep \"%s_([0-9]{8}_[0-9]{6}\\.log$)\" "
> +                     "| xargs wc -c | awk '{printf $1}'",
> +                     log_root_path, "saLogSystem");
> +
> +     fp = popen(command, "r");
> +
> +     /* Get file size in chars */
> +     while (fgets(fileSize_c, sizeof(fileSize_c) - 1, fp) != NULL) {};
> +     pclose(fp);
> +
> +     /* Checking the file size of opening log file */
> +     fileSize = atoi(fileSize_c);
> +     if (fileSize == 0) {
> +             fprintf(stderr, "Log file is rotated when log file size (%d) 
> doesn't"
> +                             " reach  saLogStreamMaxLogFileSize (%d)\n",
> +                             fixed_log_rec_size, max_log_file_size);
> +             rc_validate(fileSize, fixed_log_rec_size);
> +             goto done;
> +     }
> +
> +     rc_validate(rc, 0);
> +
> +done:
> +     /* Restore the attribute to previous value */
> +     m_restoreData(systemStreamName, "saLogStreamMaxLogFileSize",
> +                    &v_saLogStreamMaxLogFileSize, SA_IMM_ATTR_SAUINT64T);
> +     m_restoreData(systemStreamName, "saLogStreamFixedLogRecordSize",
> +                    &v_saLogStreamFixedLogRecordSize, SA_IMM_ATTR_SAUINT32T);
> +}
> +
>   __attribute__ ((constructor)) static void saOiOperations_constructor(void)
>   {
>       /* Stream objects */
> @@ -5147,5 +5238,6 @@ done:
>       test_case_add(6, verMaxLogRecord_03, "CCB Object Create: Only line feed 
> is replaced to the final character position in case truncation");
>       test_case_add(6, verMaxLogRecord_04, "CCB Object Create: Double quote 
> is in first postition and line feed is in final postition");
>       test_case_add(6, verFormattoken, "CCB Object Create: Two double quotes 
> cover output of log records in log file");
> +     test_case_add(6, verLogFileRotate, "Verify that log file is not rotated 
> if file size doesn't reach max file size (ticket1439)");
>   
>   }
> diff --git a/src/log/logd/lgs_stream.cc b/src/log/logd/lgs_stream.cc
> --- a/src/log/logd/lgs_stream.cc
> +++ b/src/log/logd/lgs_stream.cc
> @@ -1532,6 +1532,9 @@ int log_stream_config_change(bool create
>       }
>     }
>   
> +  /* Reset file size for new log file */
> +  stream->curFileSize = 0;
> +
>     /* Creating the new config file */
>     if (create_files_f == LGS_STREAM_CREATE_FILES) {
>       if ((rc = lgs_create_config_file_h(root_path, stream)) != 0) {


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to