From 8c615943cbd25a6f7b8bdfd8677a13a21709a05e Mon Sep 17 00:00:00 2001 From: JiahuaChen Date: Tue, 19 Oct 2021 15:21:37 +0800 Subject: [PATCH] Skip reuse old file for slog open --- src/clog/ob_log_file_pool.h | 4 ++++ src/share/redolog/ob_log_disk_manager.cpp | 13 ++++++++++--- src/share/redolog/ob_log_disk_manager.h | 2 +- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/clog/ob_log_file_pool.h b/src/clog/ob_log_file_pool.h index 7f39777f3..1fb9a93d7 100644 --- a/src/clog/ob_log_file_pool.h +++ b/src/clog/ob_log_file_pool.h @@ -70,6 +70,10 @@ public: { return ATOMIC_LOAD(&min_using_file_id_); } + ObLogWritePoolType get_pool_type() const + { + return type_; + } void update_min_file_id(const file_id_t file_id); void update_max_file_id(const file_id_t file_id); void update_min_using_file_id(const file_id_t file_id); diff --git a/src/share/redolog/ob_log_disk_manager.cpp b/src/share/redolog/ob_log_disk_manager.cpp index c553ede32..262129fbc 100644 --- a/src/share/redolog/ob_log_disk_manager.cpp +++ b/src/share/redolog/ob_log_disk_manager.cpp @@ -308,9 +308,16 @@ int ObLogDiskManager::sync_system_fd(const int64_t file_id, const int64_t disk_i ret = OB_ERR_UNEXPECTED; COMMON_LOG(ERROR, "unexpected scenario", K(ret), K(disk_id), K(file_id), K(fd_info), K(disk_slots_[disk_id])); } - } else if (enable_write && !is_tmp) { // clog write, may reuse old log file - if (OB_FAIL(disk_slots_[disk_id].get_file_pool()->get_fd((uint32_t)file_id, tmp_fd))) { - COMMON_LOG(ERROR, "file pool get fd fail", K(ret), K(file_id)); + } else if (enable_write && !is_tmp) { + if (ObLogWritePoolType::CLOG_WRITE_POOL == disk_slots_[disk_id].get_file_pool()->get_pool_type()) { + // clog write, may reuse old log file + if (OB_FAIL(disk_slots_[disk_id].get_file_pool()->get_fd((uint32_t)file_id, tmp_fd))) { + COMMON_LOG(ERROR, "file pool get fd fail", K(ret), K(file_id)); + } + } else { + if (OB_FAIL(inner_open_fd(disk_id, file_id, OPEN_FLAG_WRITE, is_tmp, tmp_fd))) { + COMMON_LOG(ERROR, "open fd fail", K(ret), K(enable_write), K(is_tmp)); + } } } else if (enable_write && is_tmp) { // ilog write tmp file if (OB_FAIL(inner_open_fd(disk_id, file_id, OPEN_FLAG_WRITE, is_tmp, tmp_fd))) { diff --git a/src/share/redolog/ob_log_disk_manager.h b/src/share/redolog/ob_log_disk_manager.h index 039b22488..5c52886a7 100644 --- a/src/share/redolog/ob_log_disk_manager.h +++ b/src/share/redolog/ob_log_disk_manager.h @@ -501,7 +501,7 @@ private: int get_total_disk_space_(int64_t& total_space) const; static const int OPEN_FLAG_READ = O_RDONLY | O_DIRECT; - static const int OPEN_FLAG_WRITE = O_WRONLY | O_DIRECT | O_SYNC | O_CREAT; + static const int OPEN_FLAG_WRITE = O_RDWR | O_DIRECT | O_SYNC | O_CREAT; static const int OPEN_FLAG_WRITE_WITHOUT_CREATE = O_WRONLY | O_DIRECT | O_SYNC; static const int OPEN_MODE = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH; static const int64_t MONITOR_TASK_INTERVAL_US = 1000 * 1000; // 1 seconds -- GitLab