记录一次预发布环境的 Bug

记录一次预发布环境的 Bug

背景

今天在跟测试进行仓店数据的验收的过程中,测试那边在预发布环境发现了一个很奇怪的 bug,提出来的异常是 non-transactional table。由于仓店数据的批量生成涉及到多张表的写入,因此使用了事务进行数据一致性的控制。在测试环境和开发环境的时候使用相同数据都没有出现问题,只有预发布环境出现了这个问题,因此开始进行排查

解决过程

首先考虑到是不是事务失效的问题,当时首先考虑到的是在开发环境里面模拟出一样的数据和条件进行复现,但是失败了,因为开发环境的数据生成一切正常。当时就很疑惑,而且这个异常信息在网上也鲜有资料,因此陷入到了一个怪圈。
后面跟同事进行了一下交流,表示也没有遇到过类似的问题,然后折腾了很久,包括尝试远程连接预发布环境进行调试,但是由于没有权限,最后还是失败。
最后兜兜转转还是回到了原点:查看报错信息。因为实在是没别的方法了。然后这次盯着 non-transactional table 的时候有了灵感。既然报错信息显示是 non-transactional table,也就意味着预发布环境的表是非事物的表。而最常见的不支持事务的执行引擎就是 MyISAM,而且由于这个环境很久没碰过了,之前的维护也是直接通过 sql 进行维护,因此找 leader 要了一下 staging 环境的数据库。这下好了,发现还真是!测试环境和开发环境的表执行引擎默认都是 Innodb,而 staging 环境却是 MyISAM,完全不支持事务。最后将 staging 环境的表执行引擎进行了修改,完成了测试。

思考

其实异常都在报错信息里,但是有时候因为英文或者是从未碰到过的原因,会使得自己不会主动去琢磨报错信息,而是直接谷歌,但是谷歌的效果也不会每次都尽如人意,因此说到底,还是要多研究报错信息,以后碰到类似的这么坑的问题才好入手,而不是反复考虑是不是自己的代码出错。

posted @ 2024-03-26 00:12  zengmark  阅读(35)  评论(0)    收藏  举报