当前位置: 首页 > news >正文

阿里云的工程师又闯祸了,github上紧急修复

        最近不少用户使用阿里云提供的测试用例出现了被删除了用户目录下的所有文件,项目地址是:

       https://github.com/aliyun/aliyun-cli

aliyun-cli/cli/completion_installer_test.go

Lines 87 to 99 in 550ccb6


path := filepath.Join(u.HomeDir, ".bashrc")

err = createFile(path, "ecs")

assert.Nil(t, err)

i = completionInstallers()

if runtime.GOOS == "windows" {

assert.Len(t, i, 1)

}

path2 := filepath.Join(u.HomeDir, ".zshrc")

err = createFile(path2, "ecs")

assert.Nil(t, err)

i = completionInstallers()

assert.Len(t, i, 2)

os.Remove(path)

执行测试如果执行到这个用例,就会把本地的 ~/.bashrc 和 ~/.zshrc 给删了!

会删除 ~/.config 整个目录!

              outside_default.png

是的,你看到的是一个类似于rm * -rf的操作,目前该问题已经在6小时之前修复了,不过对于已经使用此脚本测试的技术而言已经造成了严重的线上事故。

从github上不小心看到了一些有意思的评论:

ea0d6f7a16d189f6f4c31eaa79745e7f.png

         目前了解到 这部分测试代码是在添加 autocompletion 功能的时候编写的。编写这段代码的同学自身的环境中没有 .bashrc、. zshrc 文件,没有意识到这个问题。而这部分代码除了在编写这段代码的同学环境中运行外,主要执行环境是 GitHub Actions 等 CI 环境中,因此一直没能发现问题。

          因为这部分是测试代码,并没有想到有人去亲自执行该代码。由于最终交付的是 binary 文件,这部分测试代码对最终用户并没有实际影响。当前相关 PR 已经合并解决该问题。从这个结果上我们看到code review的重要性。本文不再引出codereview重要性,如何codereview的话题,只聊聊本次事故的前因后果,以及历史上还有哪些比较著名的因计算机代码bug导致的严重事故:

1.海湾战争爱国者反导弹系统失效事故

82e27cfa50e6873f0c7bdadaeb41ec6b.png

第一次海湾战争,一枚伊拉克发射的飞毛腿导弹准确击中美帝的宰赫兰基地炸死28个美国士兵,炸伤100多人,美帝伤亡很大。
按理讲,美帝那时候有反导系统,不应该拦不住导弹,为啥没拦住呢?
后来经过仔细调查,由于一个简单的计算机bug,使基地的爱国者反导弹系统失效,未能在空中拦截飞毛腿导弹。
当时,负责防卫该基地的爱国者反导弹系统经连续工作了100个小时,每工作一个小时,系统内的时钟会有一个微小的毫秒级延迟,这就是这个失效悲剧的根源。爱国者反导弹系统的时钟寄存器设计为24位,因而时间的精度也只限于24位的精度。在长时间的工作后,这个微小的精度误差渐渐放大。在工作了100小时后,系统时间的延迟是三分之一秒。
对一般人人来说,0.33秒是微不足道的。但是对一个需要跟踪并摧毁一枚空中飞弹的雷达系统来说,这是灾难性的——侯赛因飞毛腿导弹空速达4.2马赫(每秒1.5公里),这个”微不足道的”0.33秒相当于大约600米的误差。
在宰赫兰导弹事件中,雷达在空中发现了导弹,但是由于时钟误差没有能够准确地跟踪它,因此基地的反导弹并没有发射。

2.欧洲Ariane5运载火箭爆炸事故

73fb8a17cc79d047418c6255b8bdbc61.png

1996年, 欧洲 Ariane 5运载火箭,在起飞37秒之后, 爆炸。事故的罪魁祸首是短短的一段代码。
在Ariane 5的软件中,有一部分代码是直接来自它的前辈Ariane 4。由于Ariane 4当时非常成功,所以大家觉得这样做没什么问题,根据新的参数稍微修改一下代码就好了。问题是,修改并不完全。有一行代码需要将64位浮点数转换成16位整数,他们认为不会出现什么问题,所以没有进行修改。也没有测试这段代码。
就是这行代码,因为Ariane 5比前辈Ariane 4强力得多,于是在Ariane 4上没有问题的这行代码,在Ariane 5上发生了溢出错误:那个64位的浮点数代表的数值超出了16位整数可以表达的范围。在出错后,备用代码系统被启动,其中包含着同样的一行代码。结果就是整个系统被锁死了。更为讽刺的是,这行代码所在的函数,对于Ariane 5来说是不必要的。

3.百事可乐420亿美元的bug

1992年5月,百事在菲律宾进行了一次促销活动。该公司告诉客户,如果他们买了一瓶百事可乐,并在瓶盖的底部发现了349号,那么,他们可以赢得100万比索(约等于100万美元)。不幸的是, 由于软件的错误,80万个瓶盖都被错刷成了349,相当于要多支付420亿美元的奖金。这导致一些人将百事公司告上法庭,控诉其支付奖金,而最终百事公司支付了数百万美元的赔偿金,但也使得公司损失惨重。
bug是互联网公司避之不及的事情,但如同墨菲法则一样,该发生的自然会发生。但凡是互联网公司没有经历过bug,是不可能的。
应对bug,要有预案和不定期演练,就像消防练习一样,不发生是好事,而一旦发生,必定会是一次大考。怎样能做到泰山崩于前而面不改色心不跳,迅速制定出合理有效的解决方案,是衡量公司负责人是否称职的一项标准。

4.神曲《江南style》的YouTube之殇

83cc1c7733272615afafc6ae372a615e.jpeg

2012年,一首来自韩国的神曲《江南style》火遍了全球,神曲一出,谁与争锋。在YouTube上,《江南style》同样也是异常的火爆,播放量蹭蹭的上涨,直接突破了YouTube最先设定的播放量上限阈值。
YouTube最初的播放量上限设定值为32位整数,也即21,4748,3647。的出现打破了这一数值,造成了YouTube上《江南style》的播放崩溃。针对这一问题,YouTube也及时的做出调整。将播放量的上限由32位整数改为了64位整数。
如今的《江南style》在YouTube上的播放量早已突破40亿,但是突破上限也只是理论上的可能了。

相关文章:

  • 微服务框架 SpringCloud微服务架构 22 DSL 查询语法 22.3 精确查询
  • 基于python环境的pip安装事项
  • Jenkins之Email配置与任务邮件发送实践与踩坑(转)
  • 我是如何开始能写python爬虫的?给零基础入门Python小白一条清晰的学习路线
  • 投屏电脑怎么操作?投屏电脑最常用的4种方式
  • Apache HTTPD 换行解析漏洞(CVE-2017-15715)
  • React核心工作原理
  • ABAP-SAP-整合事务码,整合平台,运维工具箱
  • 1.5.4 HDFS 客户端操作-hadoop-最全最完整的保姆级的java大数据学习资料
  • C++:关键字
  • WebRTC GCC 拥塞控制算法(TFB-GCC)
  • [附源码]计算机毕业设计考试系统Springboot程序
  • 转行编程语言该怎么选择?小扎给你安排上
  • Service (一) 启动/绑定服务
  • 效率倍增!5款超级好用的Python工具库!
  • 【QT开发笔记-基础篇】| 第五章 绘图QPainter | 5.2 界面布局
  • React组件设计模式-纯组件,函数组件,高阶组件
  • React的useLayoutEffect和useEffect执行时机有什么不同
  • 购物车服务-----技术点及亮点
  • 前端精准测试实践
  • 电加热油锅炉工作原理_电加热导油
  • 大型电蒸汽锅炉_工业电阻炉
  • 燃气蒸汽锅炉的分类_大连生物质蒸汽锅炉
  • 天津市维修锅炉_锅炉汽化处理方法
  • 蒸汽汽锅炉厂家_延安锅炉厂家
  • 山西热水锅炉厂家_酒店热水 锅炉
  • 蒸汽锅炉生产厂家_燃油蒸汽发生器
  • 燃煤锅炉烧热水_张家口 淘汰取缔燃煤锅炉
  • 生物质锅炉_炉
  • 锅炉天然气_天燃气热风炉