暂无图片
lock for read代码疑问
我来答
分享
暂无图片 匿名用户
lock for read代码疑问

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

image

image1196×861 58.3 KB


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

【 OB 】OB3.1版本


在此函数中,退出for循环的条件为ret=OB_ERR_SHARED_LOCK_CONFLICT或者for循环中的break,那么退出循环的时候ret一定不为OB_SUCCESS啊,那读数据的话不就只能等锁释放或者超时后才可以退出了吗?
但是这个函数的作用不应该是让读操作可以读取正在进行修改的行中的旧版本,当读快照大于本地提交时间戳的事务进行等待吗?
代码源文件在这
image
我来答
添加附件
收藏
分享
问题补充
1条回答
默认
最新
O
OceanBase社区传送门

“退出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 成功了,说明可读,然后就退出循环了。

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


暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏