记一次线上异常bug的定位与调试

相关方法

根据账号绑定的微信id进行登入;

异常原因

根据微信id查询出两条绑定同一微信id的账号,返回包装对象时异常;

可以直接看出来是在mybatis进行查询时,查询出了两条结果,但是dao方法的返回值只能包装一个对象引起的;

解决方法很简单,就是在其sql中添加一个 limit 0,1  即可避免这种错误的发生;

但是得明白为什么会有这种情况发生,怎么处理多查询出来的数据?

首先确定了一个微信id只能绑定一个账号,但是怎么会出现一个微信id绑定多个账号这种情况出现呢?

于是我通过对其重复绑定的数据进行分析,分析其账号创建时间与更改时间来判断与其相关调用的接口,确定大概的问题出现范围;如根据更新时间可以判断是否有通过“换绑”的形式导致重复绑定;根据重复绑定的账号的创建时间判断问题出现的时间点是否有关系;

在相关接口逻辑中判断会不会出现这种重复绑定的可能:

1、微信注册并登入接口逻辑:先判断该微信id是否绑定,再选择绑定或换绑操作;排除

2、绑定微信接口逻辑:先判断该微信id是否绑定账号,先解绑原来的绑定,再绑定新的账号;排除

3、新接入的微信绑定接口逻辑:先判断开放账号表中微信id是否绑定账号,先解绑原来的绑定,再绑定新的账号;待考虑

之前对数据库中数据的分析结果有了一定的收获,就是重复绑定的数据基本都是一个时间段的前后造成的,而新接入的接口则就在这个时间段中接入,再对该接口相关的表进行分析,发现是新接口接入时,线上数据库迁移数据时未迁移完全,导致在新表中进行微信id绑定判断为未绑定状态,造成了重复绑定的结果;

最终对重复绑定数据的解决方案是:对重复绑定数据进行数据清洗,将新表中与账号表中没有对应的记录的微信id进行置空解绑操作;

至此,完成了对一个线上bug的处理;

总结:

对一个bug的处理首先需要定位其发生的大概范围,再试着重现该bug并分析与其相关的数据和代码逻辑,最终定位到bug出现的位置,并选择相应的方案进行处理;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值