问题现象
在 OceanBase Cloud 中,发起的降配流程在执行 Unit 迁移步骤时卡住,迁移任务长时间处于执行状态而未完成,且无具体报错信息。
查看 __all_rootservice_event_history 发现迁移任务已经发起,但是长时间没有结束和重试,像是被卡在 OBServer 端上没有推进。
使用 obstack 发现底层的 ADG 任务根本没有生成。
查看日志发现报错磁盘不足。
[2025-09-18 15:52:26.192616] EDIAG [STORAGE] check_disk_space_ (ob_ls_migration_handler.cpp:1273) [15180][T1002_HAService][T1002][xxxxx-xxxxx-xxxxx-xxxxx] [lt=22][errcode=-4551] failed to check_is_disk_full, cannot migrate in(ret=-4551, required_size=350044172195) BACKTRACE:0x22a5ba25 0x23380adc 0x22a21180 0x22a20c66 0x22a20b92 0x22a209f7 0x137a3106 0x22a02b4b 0x229fd236 0x229fc8f7 0x22faa2d1 0x22fa9287 0x7f8b330b03fb 0x7f8b32f06e83
[2025-09-18 15:52:26.192628] WDIAG [STORAGE] check_before_do_task_ (ob_ls_migration_handler.cpp:1240) [15180][T1002_HAService][T1002][xxxxx-xxxxx-xxxxx-xxxxx] [lt=12][errcode=-4551] failed to check_disk_space_(ret=-4551, task={arg:{ls_id:{id:1001}, type:"MIGRATE_LS_OP", cluster_id:230000226, priority:0, src:{server:"10.102.47.252:2882", timestamp:1, flag:0, replica_type:0, region:"default_region", memstore_percent:100}, dst:{server:"10.102.32.121:2882", timestamp:1758105101755931, flag:0, replica_type:0, region:"default_region", memstore_percent:100}, data_src:{server:"0.0.0.0:0", timestamp:-1, flag:0, replica_type:0, region:"default_region", memstore_percent:100}, paxos_replica_number:2, prioritize_same_zone_src:false, tablet_id_array:[]}, task_id:YB420A662FFC-00063959E66EC14F-0-0})
[2025-09-18 15:52:26.192644] WDIAG [STORAGE] do_init_status_ (ob_ls_migration_handler.cpp:686) [15180][T1002_HAService][T1002][xxxxx-xxxxx-xxxxx-xxxxx] [lt=16][errcode=-4551] failed to check before do task(ret=-4551, ls_={ls_meta:{tenant_id:1002, ls_id:{id:1001}, ls_create_status:1, clog_checkpoint_scn:{val:0, v:0}, clog_base_lsn:{lsn:0}, rebuild_seq:0, migration_status:3, gc_state_:1, offline_scn_:{val:18446744073709551615, v:3}, restore_status:{status:0}, replayable_point:{val:1758181944923413000, v:0}, tablet_change_checkpoint_scn:{val:0, v:0}, all_id_meta:{id_meta:[{limited_id:1, latest_log_ts:{val:18446744073709551615, v:3}}, {limited_id:1, latest_log_ts:{val:18446744073709551615, v:3}}, {limited_id:1, latest_log_ts:{val:18446744073709551615, v:3}}]}, transfer_scn:{val:0, v:0}, rebuild_info:{status:{status:0}, type:{type:0}, tablet_id_array:{id_array:[]}, src:[type = 0], [address = ]}, transfer_meta_info:{src_ls:{id:0}, src_scn:{val:1, v:0}, trans_status:0, tablet_id_array:{id_array:[]}, data_version:1(0, 0, 1)}}, switch_epoch:0, log_handler:{role:2, proposal_id:0, palf_env_:0x7f8aac7e8030, is_in_stop_state_:false, is_inited_:true, id_:1001}, restore_handler:{is_inited:true, is_in_stop_state:false, id:1001, proposal_id:9223372036854775807, role:2, parent:null, context:{issue_task_num:0, issue_version:-1, last_fetch_ts:-1, max_submit_lsn:{lsn:18446744073709551615}, max_fetch_lsn:{lsn:18446744073709551615}, max_fetch_scn:{val:18446744073709551615, v:3}, error_context:{ret_code:0, trace_id:Y0-0000000000000000-0-0, error_type:0, err_lsn:{lsn:18446744073709551615}}, task_count:0}, restore_context:{seek_done:false, lsn:{lsn:18446744073709551615}}}, is_inited:true, tablet_gc_handler:{tablet_persist_trigger:3, is_inited:true}, startup_transfer_info:{ls_id:{id:0}, transfer_start_scn:{val:18446744073709551615, v:3}}, need_delay_resource_recycle:false})
[2025-09-18 15:52:26.192681] WDIAG [STORAGE] process (ob_ls_migration_handler.cpp:561) [15180][T1002_HAService][T1002][xxxxx-xxxxx-xxxxx-xxxxx] [lt=36][errcode=-4551] failed to do init status(ret=-4551, status=0)
正常情况下,应该会退出然后向上汇报磁盘不足的问题(__all_rootservice_event_history 表中会有记录),但是在本场景下并没有向上汇报导致不容易做出诊断。
进行扩容后会跳出这个循环,Unit 迁移恢复正常。
所以我们可以诊断反推: 如果发现迁移迟迟不结束并且最新的 ls 迁移任务 __all_rootservice_event_history 表中只有开始没有结束和重试,可以先查查日志有没有迁移目的端的磁盘不足的报错。同步也排除一些其它错误码的干扰,如上面的 -4600。
关键信息
磁盘空间不足的错误代码:-4551。
迁移任务状态:仅有开始状态,无结束状态。
日志信息:
failed to check_is_disk_full, cannot migrate in(ret=-4551, required_size=350044172195)。
问题原因
此问题是由于迁移目的端的剩余磁盘容量不足以满足迁移需求导致的。在迁移过程中,当目标端磁盘空间不足时,在这个版本的迁移任务可能会陷入卡顿状态,无法自动推进和上报错误,导致不好诊断。
问题的风险及影响
Unit 迁移长时间不结束并且无法直接查看不结束的原因。
适用版本
OceanBase 数据库 V4.2.5 BP5(oceanbase-4.2.5.5-105000052025070822)之前版本。
解决方法
立即对目标端进行磁盘扩容,确保有足够的磁盘空间来完成 Unit 迁移任务。
监控迁移任务的状态,确保任务能够顺利推进至完成。
规避方式
在执行 Unit 迁移之前,预先评估并确保目标端有足够的磁盘空间。
定期监控磁盘使用情况,及时进行扩容以避免类似问题的发生。