From 241a7c654e6155904360f01d77fe3ee9b0bde746 Mon Sep 17 00:00:00 2001 From: fengdeyiji <546976189@qq.com> Date: Sat, 7 Oct 2023 08:44:02 +0000 Subject: [PATCH] [MDS] commit merge dag ignore flushing_scn status --- .../multi_data_source/mds_table_impl.ipp | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/storage/multi_data_source/mds_table_impl.ipp b/src/storage/multi_data_source/mds_table_impl.ipp index 781b527210..4d6244b2e3 100644 --- a/src/storage/multi_data_source/mds_table_impl.ipp +++ b/src/storage/multi_data_source/mds_table_impl.ipp @@ -13,6 +13,8 @@ #ifndef STORAGE_MULTI_DATA_SOURCE_MDS_TABLE_IMPL_IPP #define STORAGE_MULTI_DATA_SOURCE_MDS_TABLE_IMPL_IPP +#include "lib/ob_errno.h" +#include "lib/utility/ob_macro_utils.h" #include "ob_clock_generator.h" #include "share/ob_errno.h" #include "storage/multi_data_source/mds_table_base.h" @@ -966,8 +968,6 @@ int MdsTableImpl::flush(share::SCN need_advanced_rec_scn_lower_lim if (!need_advanced_rec_scn_lower_limit.is_valid()) { ret = OB_INVALID_ARGUMENT; MDS_LOG_FLUSH(WARN, "invalid recycle scn"); - } else if (flushing_scn_.is_valid()) { - MDS_LOG_FLUSH(TRACE, "no need do flush cause another flush dag is running"); } else if (get_rec_scn().is_max()) { MDS_LOG_FLUSH(TRACE, "no need do flush cause rec_scn is MAX already"); } else if (need_advanced_rec_scn_lower_limit < get_rec_scn()) {// no need dump this mds table to advance rec_scn @@ -985,11 +985,22 @@ int MdsTableImpl::flush(share::SCN need_advanced_rec_scn_lower_lim } else { #ifndef UNITTEST_DEBUG if (MDS_FAIL(merge(construct_sequence_, do_flush_scn))) { - MDS_LOG_FLUSH(WARN, "failed to commit merge mds table dag"); + if (OB_EAGAIN == ret || OB_SIZE_OVERFLOW == ret) { + if (REACH_TIME_INTERVAL(100_ms)) { + MDS_LOG_FLUSH(WARN, "failed to commit merge mds table dag cause already exist or queue already full"); + ret = OB_SUCCESS; + } + } else { + MDS_LOG_FLUSH(WARN, "failed to commit merge mds table dag"); + } } else { + if (flushing_scn_.is_valid()) { + MDS_LOG_FLUSH(WARN, "flushing_scn is valid scn, that means last committed dag not scheduled, and dropped for some unknown reason"); + } flushing_scn_ = do_flush_scn; report_flush_event_("DO_FLUSH", flushing_scn_); - debug_info_.last_flush_ts_ = ObClockGenerator::getClock(); + // if commit dag success, there is no guarantee that dag will be executed finally + debug_info_.last_flush_ts_ = ObClockGenerator::getClock();// record commit dag ts to debug } #else flushing_scn_ = do_flush_scn;