diff --git a/src/clog/ob_log_file_pool.h b/src/clog/ob_log_file_pool.h index 7f39777f35b16c89d1b4d15c66328054803c17e5..1fb9a93d7e57b756fb43089e7422a203322058c8 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 c553ede321b68a62656313406957127a75c9ef3e..262129fbc589281f62a1d53658404bfb52d4d63e 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 039b22488e4130d174da45730f67e1dd690cd9c0..5c52886a7a7de8236ec6cb0a91e7f500addfd10d 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