From 9e986cc0db42299d20278ab064b36671c55b9849 Mon Sep 17 00:00:00 2001 From: obdev Date: Sat, 28 Jan 2023 18:41:35 +0800 Subject: [PATCH] Add defensive check for log replay --- src/storage/tx/ob_tx_replay_executor.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/storage/tx/ob_tx_replay_executor.cpp b/src/storage/tx/ob_tx_replay_executor.cpp index c5629dca4e..9ec22204c2 100644 --- a/src/storage/tx/ob_tx_replay_executor.cpp +++ b/src/storage/tx/ob_tx_replay_executor.cpp @@ -56,6 +56,22 @@ int ObTxReplayExecutor::execute(storage::ObLS *ls, tenant_id))) { TRANS_LOG(WARN, "replay_executor.do_replay failed", K(replay_executor), K(buf), K(size), K(skip_pos), K(replay_hint), K(ls_id), K(tenant_id)); + } else { + if (log_timestamp <= ls->get_ls_wrs_handler()->get_ls_weak_read_ts()) { + SCN min_log_service_scn; + // check max decided scn + ls->get_max_decided_scn(min_log_service_scn); + int tmp_ret = OB_ERR_UNEXPECTED; + TRANS_LOG(ERROR, "unexpected log timestamp and weak read ts", "ret", tmp_ret, + K(replay_executor), + K(buf), + K(size), + K(skip_pos), + K(replay_hint), + K(min_log_service_scn), + K(ls_id), + K(tenant_id)); + } } return ret; }