一、工作線程執(zhí)行Event
外部循環(huán)
slave_worker_exec_job_group
->pop_jobs_item 出隊 獲取event 但是不刪除
如果隊列為空則等待
stage_slave_waiting_event_from_coordinator
Waiting for an event from Coordinator
->進入循環(huán)
如果是GTID EVENT 標記事物開始
記錄讀取event時間
Slave_worker::slave_worker_exec_event 執(zhí)行event
-> 如果是XID
Xid_apply_log_event::do_apply_event_worker
-> Slave_worker::commit_positions
-> 設置各種變量 將會出現(xiàn)在worker info里面 這里也可以看到這些信息是group的checkpoint信息
當前執(zhí)行的位置:
strmake(group_relay_log_name, ptr_g->group_relay_log_name,sizeof(group_relay_log_name) - 1);
group_relay_log_pos= ev->future_event_relay_log_pos;
set_group_master_log_pos(ev->common_header->log_pos);
set_group_master_log_name(c_rli->get_group_master_log_name());
檢查信息:
strmake(checkpoint_relay_log_name, ptr_g->checkpoint_relay_log_name,sizeof(checkpoint_relay_log_name) - 1);
checkpoint_relay_log_pos= ptr_g->checkpoint_relay_log_pos;
strmake(checkpoint_master_log_name, ptr_g->checkpoint_log_name,sizeof(checkpoint_master_log_name) - 1);
checkpoint_master_log_pos= ptr_g->checkpoint_log_pos;
checkpoint_seqno= ptr_g->checkpoint_seqno;
for (uint pos= ptr_g->shifted; pos < c_rli->checkpoint_group; pos++) //重新設置位圖 因為checkpoint已經(jīng)
{ //ptr_g->shifted是GAQ中出隊的事務個數(shù)
if (bitmap_is_set(&group_shifted, pos)) //這里就需要偏移掉出隊的事務,恢復已經(jīng)不需要了
bitmap_set_bit(&group_executed, pos - ptr_g->shifted);
}
bitmap_set_bit(&group_executed, ptr_g->checkpoint_seqno);//在本次事務相應的位置設置為1
-> 進行flush_info(force)操作刷盤 將信息寫入到worker info 表中
-> error= do_commit(thd); //做提交操作
->remove_item_from_jobs 在隊列中刪除這個event
如果是XID event 則退出循環(huán) 代表整個 事物執(zhí)行完成
Slave_worker::slave_worker_ends_group
-> get_commit_order_manager()->report_commit(this);
->更新Slave_job_group信息
ptr_g->group_master_log_pos= get_group_master_log_pos(); //更新 job group信息
ptr_g->group_relay_log_pos= group_relay_log_pos;
my_atomic_store32(&ptr_g->done, 1);
last_group_done_index= gaq_index;
last_groups_assigned_index= ptr_g->total_seqno;
reset_gaq_index();
groups_done++; //更新GROUP信息 這里也可以看到GROUP的信息來自work的類
->
最后編輯于 :
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者