ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

翻车了,记一次线上事故

2021-03-04 21:01:40  阅读:204  来源: 互联网

标签:11 30 画外音 事故 配置 翻车 测试 gorm 线上


关键词:golang、go、gorm、零值、有担当的富人

翻车日期:2021.03.04

翻车现场

今天下午3:30有同事反馈,app冷启动出现了测试公告弹窗。

image-20210304201616977

画外音:半小时前刚更新一个服务,赶紧检查下配置吧。

事件回述

  • 10:27:代码发布sandbox环境
  • 10:27~11:30:测试配置导入(因为配置比较多)生产环境,并手动修改少量差异配置
  • 11:30~11:50:sandbox环境验收完成
  • 11:51: api开始灰度
  • 12:46: 灰度结束,api全量发布
  • 15:00: 优化配置解析,重新发布了config服务
  • 15:30: 同事反馈app冷启动有测试弹窗,立即检查并修正公告配置

蛛丝马迹

上午上线了一个需求,迁移了48条配置到业务配置中心(原来的配置是硬编码在项目里面的,每次改都要修改代码重新发布)。

上午上线之前明明验收过,没有问题才发生产的呀!

为了验证迁移之后接口一致性,我还特地安装了一个json-diff工具(官网),还特地从4.x5.x6.x验证了多个版本的配置,都没有问题。

image-20210304201103809

为啥现在有几条配置跟我验证时候的不一样了呢?

image-20210304201442816

等等,这些文案不是测试环境的文案么?

画外音:这个很可疑哦!

来龙去脉

因为配置文件比较多,一个个在生产环境加太麻烦了,我就直接把测试配置导入到生产环境中。然后手动修改下生产和测试不一致的几条配置,其中就包含了测试公告的几条配置。

画外音:但是为什么验收的时候是好的,然后下午重新发布了下服务就出问题了呢?

我打开数据库,看到数据库里面这几条配置记录还是测试的配置,并没有修改过来。。。我打开我的goland,翻看了下编辑接口代码,一下就发现了可疑之处:

err := tx.Table(p.tableName).Where("id=?", configID).Updates(t).Error

gormUpdates有个坑啊——如果你传的是一个structgorm默认是不更新“零值”字段的。这个坑我早就知道,无奈再一次重重的的踩进去了。git blame看了下作者——原来就是我自己,去年12月份写下的

标签:11,30,画外音,事故,配置,翻车,测试,gorm,线上
来源: https://blog.csdn.net/weixin_48058415/article/details/114377695

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有