metashard同步
2019-10-25 14:52:30 0 举报
metashard同步逻辑
作者其他创作
大纲/内容
start里面主要网pending队列加入这个marker
yes
state=FullSync
初始化协程锁,对象meta.full-sync.index.shard
marker_tracker->start(l))
section == \"bucket.\"
RGWMetaStoreEntryCR
else
sync_status != -ENOENT
根据log_entries进行单一marker的同步
spawn RGWMetaSyncSingleEntryCR
返回mdlog_marker(即远端最新的marker)
初始化协程锁,对象mdlog.sync-status.shard
读取本地log pool的omapkey 到entries
sync_status=etcode
update marker
state_receive_rest_response
state_init
在meta pool存储相关的object,存储内容md_bl
state_read_shard_status_complete
state_read_shard_status
sync_status = retcode;
while循环
RGWReadRemoteMetadataCR 读取master端meta或者instance信息,结果返回到md_bl ,
最后在marker对象上标记为Incremental
mdlog_marker > max_marker
prepare marker tracker 初始化对象为mdlog.sync-status.shardid
执行kafka删除bucket逻辑
1.更新marker的条件记录的marker必须在pending队列第一位,第二个条件进这个函数(10次)或者,pengding队列为空。2.f每次进入pending队列,都会把marker从pengding中移除到finish_marker队列3.f更新marker 做flush(finish_marker中最大的marker 会flush到object中)。
sync_status = retcode
RGWMetaSyncShardCR
检测成功设置retcode 返回
执行kafka创建bucket逻辑
collect_children 收集这些marker是否结束
主要从远端拿mdlog并存取到本地
问题1:mdlog有残留问题原因:marker没有记录到最新mdlog,主要是向kafaka发送完的retcode不应该赋值给sync_status
over
state_store_mdlog_entries_complete
section == \"bucket.instance\"
set_cr_done
在meta pool删除相关的object,
collect_children 检测到有retry的问题
do while 开始
state_send_rest_request
sleep 20s
根据entries开始进行单一key的同步
mdlog_marker <= max_marker
op_status != MDLOG_STATUS_COMPLETE
state=IncrementalSync
RGWMetaRemoveEntryCR
state_store_mdlog_entries
sync_status == 0
收藏
0 条评论
下一页