首批通过分布式安全可靠测评,为关键业务系统打造
根据 current log_task status 日志判断 clog task 的状态
更新时间:2026-06-12 04:01
根据 OBServer 日志中 current log_task status 日志判断当前 clog task 的状态。
[2023-08-14 09:10:23.011095] INFO [CLOG] ob_log_state_mgr.cpp:2477 [429503][0][Y0-0000000000000000-0-0] [lt=37] [dc=0] current log_task status(partition_key={tid:1124800395215031, partition_id:0, part_cnt:0}, role=1, state=4, start_id=374656, *log_task={log_type_:201, proposal_id_:{time_to_usec:1690944629912790, server:"10.116.176.65:2882"}, log_buf_len_:0, generation_timestamp:1691975422992721, submit_timestamp_:1691975422992681, next_replay_log_ts_:1691975422992681, data_checksum:3302480568, epoch_id_:1690944629912790, accum_checksum_:0, state_map:{val:8256}, ack_list:0, submit_cb:0xfff97ed7d5b8, majority_cnt:2, log_cursor:{file_id:4294967295, offset:0, size:0}})
操作步骤
日志中的 state_map 标识了该 log_task 的执行状态。本文以示例中 state_map:{val:8256} 来说明如何对其进行解读。
state_map是一个二进制的编码,首先将 8256 转为二进制码:0010 0000 0100 0000。对此二进制码从低位到高位(从右往左),按照下面的状态码进行比较。
MAJORITY_FINISHED = 0, LOCAL_FLUSHED = 1, IS_CONFIRMED = 2, NEED_REPLAY = 3, ON_SUCCESS_CB_CALLED = 4, ON_FINISHED_CB_CALLED = 5, SUBMIT_LOG_EXIST = 6, SUBMIT_LOG_BODY_EXIST = 7, INDEX_LOG_SUBMITTED = 8, CONFIRMED_INFO_EXIST = 9, PRE_INDEX_LOG_SUBMITTED = 10, BATCH_COMMITTED = 11, IS_PINNED = 12, IS_TRANS_LOG = 13, STANDBY_MAJORITY_FINISHED = 14, ALREADY_SEND_TO_STANDBY = 15, // 该条日志是否已经转发给备库下游
在本例中,8256 = 0010 0000 0100 0000,对应第 7、14 bit 位为 1,即 SUBMIT_LOG_EXIST=1、IS_TRANS_LOG=1,其他状态都是 0。由此,我们可以知道该日志:
- 未达到多数派(MAJORITY_FINISHED为0)。
- 未完成本地日志落盘(LOCAL_FLUSHED为0)。
- 也未完成回调(ON_SUCCESS_CB_CALLED为0)。
适用版本
OceanBase 数据库 V2.x 和 V3.x 版本。