diff --git a/src/share/redolog/ob_log_file_store.cpp b/src/share/redolog/ob_log_file_store.cpp index e54ad60cb7..4af86111d7 100644 --- a/src/share/redolog/ob_log_file_store.cpp +++ b/src/share/redolog/ob_log_file_store.cpp @@ -389,7 +389,7 @@ int ObLogFileStore::write(void* buf, int64_t count, int64_t offset) } else if (OB_FAIL(prepare_write_info(buf, count, offset))) { COMMON_LOG(ERROR, "prepare io info fail", K(ret)); } else { - const int64_t write_begin_ts = common::ObTimeUtility::fast_current_time(); + int64_t write_begin_ts = common::ObTimeUtility::fast_current_time(); while (need_retry) { ret = OB_SUCCESS; new_req_cnt = 0; @@ -400,18 +400,17 @@ int ObLogFileStore::write(void* buf, int64_t count, int64_t offset) } else if (OB_FAIL(process_io_getevents(submitted, io_ctx_, io_events_))) { COMMON_LOG(ERROR, "process get events fail", K(ret), K(new_req_cnt), K(submitted), K(retry_cnt), K_(write_fd)); } + + const int64_t write_end_ts = common::ObTimeUtility::fast_current_time(); if (OB_SUCC(ret)) { if (is_disk_warning()) { set_disk_warning(false); } - } else if (!is_disk_warning()) { - const int64_t write_finish_ts = common::ObTimeUtility::fast_current_time(); - const int64_t log_write_timeout_us = GCONF.data_storage_warning_tolerance_time; - if (write_finish_ts - write_begin_ts > log_write_timeout_us) { - set_disk_warning(true); - } + } else { + check_disk_warning(write_begin_ts, write_end_ts); } need_retry = process_retry(ret, retry_cnt); + write_begin_ts = write_end_ts; } // whatever success or failure, reset write requests, check and mark bad disk @@ -990,24 +989,23 @@ int ObLogFileStore::process_io_getevents(int64_t& submitted, io_context_t ctx, s int gotten = 0; struct timespec timeout; + const int64_t begin_ts = common::ObTimeUtility::fast_current_time(); while (submitted > 0 && OB_SUCC(ret) && !partial_write) { - timeout.tv_sec = (OB_REDO_TYPE_CLOG == log_type_ ? CLOG_AIO_TIMEOUT_SECOND : AIO_TIMEOUT_SECOND); + timeout.tv_sec = AIO_TIMEOUT_SECOND; timeout.tv_nsec = 0; - if (0 >= (gotten = ob_io_getevents(ctx, 1, submitted, events, &timeout))) { - // timeout or io error - if (0 == gotten) { - COMMON_LOG(WARN, - "io_getevents timeout", - K(ret), - K(gotten), - K(submitted), - K(write_fd_.file_id_), - LITERAL_K(AIO_TIMEOUT_SECOND)); - } else { - ret = OB_IO_ERROR; - COMMON_LOG( - ERROR, "io_getevents fail", K(ret), K(gotten), K(submitted), K(write_fd_.file_id_), K(errno), KERRMSG); - } + gotten = ob_io_getevents(ctx, 1, submitted, events, &timeout); + if (0 == gotten) { + COMMON_LOG(WARN, + "io_getevents timeout", + K(ret), + K(gotten), + K(submitted), + K(write_fd_.file_id_), + K(timeout.tv_sec), + K(timeout.tv_nsec)); + } else if (gotten < 0) { + ret = OB_IO_ERROR; + COMMON_LOG(ERROR, "io_getevents fail", K(ret), K(gotten), K(submitted), K(write_fd_.file_id_), K(errno), KERRMSG); } else { submitted -= gotten; for (int32_t i = 0; i < gotten; i++) { @@ -1039,6 +1037,11 @@ int ObLogFileStore::process_io_getevents(int64_t& submitted, io_context_t ctx, s } } } + + if (OB_SUCC(ret)) { + const int64_t end_ts = common::ObTimeUtility::fast_current_time(); + check_disk_warning(begin_ts, end_ts); + } } return ret; @@ -1103,5 +1106,12 @@ int ObLogFileStore::process_failed_write() } return ret; } + +void ObLogFileStore::check_disk_warning(const int64_t begin_ts, const int64_t end_ts) +{ + if (!is_disk_warning() && end_ts - begin_ts > GCONF.data_storage_warning_tolerance_time) { + set_disk_warning(true); + } +} } // namespace common } // namespace oceanbase diff --git a/src/share/redolog/ob_log_file_store.h b/src/share/redolog/ob_log_file_store.h index 57d197c0c5..f72b455e39 100644 --- a/src/share/redolog/ob_log_file_store.h +++ b/src/share/redolog/ob_log_file_store.h @@ -182,7 +182,6 @@ public: protected: static const int MAX_IO_COUNT = 1024; static const int64_t AIO_TIMEOUT_SECOND = 30; - static const int64_t CLOG_AIO_TIMEOUT_SECOND = 300; static const int64_t AIO_RETRY_INTERVAL_US = 100 * 1000; // 100ms static const int64_t MAX_DISK_COUNT = ObLogDiskManager::MAX_DISK_COUNT; static const int64_t MAX_IO_RETRY = LLONG_MAX; @@ -283,6 +282,7 @@ private: bool process_retry(const int result, int64_t& retry); int process_failed_write(); int fstat(const int64_t file_id, struct stat* file_stat) const; + void check_disk_warning(const int64_t begin_ts, const int64_t end_ts); private: bool is_inited_;