请问异步计划驱动(ObAsyncPlanDriver)和同步计划驱动(ObSyncPlanDriver)有什么区别?

学习ob的执行器的时候,在ObMPQuery::response_resul方法中看到了异步计划驱动和同步计划驱动,他们是根据以下变量的true 或 false来决定走同步还是异步:

#ifndef OB_BUILD_SPM
bool need_trans_cb = result.need_end_trans_callback() && (!force_sync_resp);
#else
bool need_trans_cb = result.need_end_trans_callback() &&
(!force_sync_resp) &&
(!ctx_.spm_ctx_.check_execute_status_);
#endif

问题1:以上判断的含义是什么?
问题2:同步计划执行和异步计划执行有什么区别?可以举个例子来说明一下吗?
望内核大佬解答。

您好,已经咨询相关开发人员

1 个赞

好的,期待回复

你好,
for q1:
这个宏主要是判定是否开启spm的。如果开启了spm编译选项,那么回包部分有些差异。
for q2:
所谓异步执行计划,主要进行dml操作时。由于涉及到提交事务,那么当事务完成后,就异步回复一个ok包。
其他情况下,都是同步回包,即当这个请求回复完最后一个包后,就表示当前请求结束了。

1 个赞

好的,谢谢