lock for read代码疑问

【 使用环境 】测试环境
【 OB 】OB3.1版本


在此函数中,退出for循环的条件为ret=OB_ERR_SHARED_LOCK_CONFLICT或者for循环中的break,那么退出循环的时候ret一定不为OB_SUCCESS啊,那读数据的话不就只能等锁释放或者超时后才可以退出了吗?
但是这个函数的作用不应该是让读操作可以读取正在进行修改的行中的旧版本,当读快照大于本地提交时间戳的事务进行等待吗?
代码源文件在这
image

“退出for循环的条件为ret=OB_ERR_SHARED_LOCK_CONFLICT或者for循环中的break”不对,ret == OB_ERR_SHARED_LOCK_CONFLICT 是继续循环的条件, ret != OB_ERR_SHARED_LOCK_CONFLICT 才会退出循环。如果 try_wait_row_lock_for_read 成功了,说明可读,然后就退出循环了。

但是try_wait_row_lock_for_read 成功的话,并不会对ret进行修改,只会跳过这个if判断,让i加1,此时的ret不还是OB_ERR_SHARED_LOCK_CONFLICT吗?还会进行循环

OB_FAIL这个宏会把返回值赋给ret:

哦哦,谢谢 :wink: