生产中的并发同步问题记录

背景:员工在开单时,会创建进行中服务(ins)记录,同时员工的轮牌(rotate)表会记录 ins_id,表示某员工服务这一单。
问题:员工轮牌(rotate)状态是服务中,但是查不到进行中服务的单据。
bug调查发现是换技师的操作导致该问题。
定位过程:

  1. 利用闪回查询数据库历史数据,发现员工 轮牌 rotate 表 中的 insId 字段记录了进行中服务的 id, 但是进行中服务记录已经被删除了(ins记录删除会移动到 ins_finish 表),

  2. 查看 ins 记录删除时间,为 当天的 20:30
    ins

  3. 由于换技师会发推送,查看推送历史:
    在这里插入图片描述

  4. 发现在20:24:38秒的时候,有不同的操作人同时操作了换技师的操作,怀疑是这里出现并发问题。

  5. 自己模拟bug复现场景,没能复现bug

  6. 查看代码换技师逻辑:发现主要分为两步:1. 旧轮牌 insId 改成0 ,2. 新轮牌0改成insId。

  7. bug 推断:
    18 号技师换 5 号技师,步骤1完成;
    18号技师换66号技师,步骤1完成
    18 号技师换 5 号技师,步骤2完成,5号技师记录了insId;
    18 号技师换 66 号技师,步骤2完成,66号技师记录了insId;
    5号技师退钟,ins记录被删除;
    66号的轮牌记录了insId, 但是 ins 记录已经被删除了,就会导致这个bug。

  8. 查看代码,发现同事的 version 版本控制存在问题,只做了校验,没有 version +1。
    至此,bug完整的查找过程已经结束。

bug虽然很简单,但是项目比较复杂,排查过程中走了许多弯路,这里简单记录下思路:

根据问题数据查找 bug 复现时间;
根据推送记录或者 log 日志查看用户在此具体做了什么操作;
尝试复现 bug;
查看代码逻辑,分析可能的问题。

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值