diff --git a/deps/oblib/src/lib/oblog/ob_async_log_struct.h b/deps/oblib/src/lib/oblog/ob_async_log_struct.h index ddc5bd3022..98ea697f21 100644 --- a/deps/oblib/src/lib/oblog/ob_async_log_struct.h +++ b/deps/oblib/src/lib/oblog/ob_async_log_struct.h @@ -118,8 +118,6 @@ public: int64_t file_size_; struct stat stat_; struct stat wf_stat_; - std::deque file_list_;//to store the names of log-files - std::deque wf_file_list_;//to store the names of warning log-files }; } // common diff --git a/deps/oblib/src/lib/oblog/ob_log.cpp b/deps/oblib/src/lib/oblog/ob_log.cpp index 87ce50061b..e008822668 100644 --- a/deps/oblib/src/lib/oblog/ob_log.cpp +++ b/deps/oblib/src/lib/oblog/ob_log.cpp @@ -743,7 +743,7 @@ void ObLogger::rotate_log(const int64_t size, const bool redirect_flag, if (OB_LIKELY(size > 0) && max_file_size_ > 0 && log_struct.file_size_ >= max_file_size_) { if (OB_LIKELY(0 == pthread_mutex_trylock(&file_size_mutex_))) { rotate_log(log_struct.filename_, fd_type, redirect_flag, log_struct.fd_, - log_struct.wf_fd_, log_struct.file_list_, log_struct.wf_file_list_); + log_struct.wf_fd_, file_list_, wf_file_list_); (void)ATOMIC_SET(&log_struct.file_size_, 0); if (fd_type <= FD_ELEC_FILE) { (void)log_new_file_info(log_struct); @@ -1255,17 +1255,17 @@ int ObLogger::record_old_log_file() int ret = OB_SUCCESS; if (max_file_index_ <= 0 || !rec_old_file_flag_) { } else { + int tmp_ret = OB_SUCCESS; + ObSEArray files; + ObSEArray wf_files; for (int type = FD_SVR_FILE; type < FD_AUDIT_FILE; ++type) { - ObSEArray files; - ObSEArray wf_files; - if (OB_FAIL(get_log_files_in_dir(log_file_[type].filename_, &files, &wf_files))) { + if (OB_TMP_FAIL(get_log_files_in_dir(log_file_[type].filename_, &files, &wf_files))) { OB_LOG(WARN, "Get log files in log dir error", K(ret)); - } else if (OB_FAIL(add_files_to_list(&files, &wf_files, log_file_[type].file_list_, log_file_[type].wf_file_list_))) { - OB_LOG(WARN, "Add files to list error", K(ret)); - } else { - // do nothing } } + if (OB_FAIL(add_files_to_list(&files, &wf_files, file_list_, wf_file_list_))) { + OB_LOG(WARN, "Add files to list error", K(ret)); + } } return ret; } @@ -1348,6 +1348,28 @@ int ObLogger::get_log_files_in_dir(const char *filename, void *files, void *wf_f return ret; } +int compare_log_filename_by_date_suffix(const void *v1, const void *v2) +{ + int ret = 0; + if (NULL == v1) { + ret = -1; + } else if (NULL == v2) { + ret = 1; + } else { + const int DATE_LENGTH = 17; + const char *str1 = static_cast(v1); + const char *str2 = static_cast(v2); + if (strlen(str1) < DATE_LENGTH) { + ret = -1; + } else if (strlen(str2) < DATE_LENGTH) { + ret = 1; + } else { + ret = str_cmp(str1 + strlen(str1) - DATE_LENGTH, str2 + strlen(str2) - DATE_LENGTH); + } + } + return ret; +} + int ObLogger::add_files_to_list(void *files, void *wf_files, std::deque &file_list, @@ -1362,10 +1384,10 @@ int ObLogger::add_files_to_list(void *files, ObIArray *wf_files_arr = static_cast *>(wf_files); //sort files if (files_arr->count() > 0) { - qsort(&files_arr->at(0), files_arr->count(), sizeof(FileName), str_cmp); + qsort(&files_arr->at(0), files_arr->count(), sizeof(FileName), compare_log_filename_by_date_suffix); } if (wf_files_arr->count() > 0) { - qsort(&wf_files_arr->at(0), wf_files_arr->count(), sizeof(FileName), str_cmp); + qsort(&wf_files_arr->at(0), wf_files_arr->count(), sizeof(FileName), compare_log_filename_by_date_suffix); } //Add to file_list diff --git a/deps/oblib/src/lib/oblog/ob_log.h b/deps/oblib/src/lib/oblog/ob_log.h index b4ec2dc24c..424a3f0a7c 100644 --- a/deps/oblib/src/lib/oblog/ob_log.h +++ b/deps/oblib/src/lib/oblog/ob_log.h @@ -865,6 +865,8 @@ private: // This info will be logged when log file created. const char *new_file_info_; bool info_as_wdiag_; + std::deque file_list_;//to store the names of log-files + std::deque wf_file_list_;//to store the names of warning log-files }; inline ObLogger& ObLogger::get_logger()