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

news2024/9/21 20:49:03

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

       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亿,但是突破上限也只是理论上的可能了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/68063.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

求知 | 聊聊Android资源加载那些事 - Resource的初始化

Hi,你好 😃 引言 在上一篇,求知 | 聊聊Android资源加载的那些事 - 小试牛刀 中,我们通过探讨 Resource.getx() ,从而解释了相关方法的背后实现, 明白了那些我们日常调用方法的背后实现。 那么,不知道你有没有好奇 context.reso…

【蓝桥杯国赛真题07】python杨辉三角形 蓝桥杯青少年组python编程 蓝桥杯国赛真题解析

目录 python杨辉三角 一、题目要求 1、提示信息 2、编程实现 3、输入输出

蓝桥杯嵌入式Debug

文章目录前言一、Debug是什么二、如何调试1.重要调试按键介绍2.其他按键介绍三、监视变量窗口总结前言 这一篇文章是非常重要的,掌握了这篇文章有助于大家在比赛中快速找到错误。 一、Debug是什么 Debug是一种程序,一种调试工具,说白了就是…

Elasticsearch:如何在 Elastic Agents 中配置 Beats 来采集定制日志

在我之前的文章 “Observability:使用 Elastic Agent 来摄入日志及指标 - Elastic Stack 8.0”,我详细地描述了如何安装 Elasticsearch,Stack 及 Elastic Agents 来采集系统日志及指标。很多开发者可能会有疑问,在我们的实际使用中…

陈都灵《我们当打之年》热播《关索岭》上热搜,温州人爱望京卡牌

最近,电视连续剧《我们的当打之年》,正在各大卫视台热播,一起热起来的还有该剧主演陈都灵。说起主演陈都灵,她虽然不是正宗的电影学院科班出身,但是她的演技却透露着灵气,也给人以真实的感觉。 陈都灵无疑是…

[附源码]Python计算机毕业设计Django学习帮扶网站设计与实现

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

2023年哪些渲染器更好用?3D新手适合的渲染器汇总

现在很多人都使用3D软件来创作自己的作品,所以渲染器的使用必不可少。有许多流行的渲染器,包括 V-Ray、Octane、Arnold、Corona、RedShift。对于许多 3D 新手来说,哪种渲染器最好? 这些渲染器的原理基本相同,只是操作…

大学免费查题接口系统

大学免费查题接口系统 本平台优点: 多题库查题、独立后台、响应速度快、全网平台可查、功能最全! 1.想要给自己的公众号获得查题接口,只需要两步! 2.题库: 查题校园题库:查题校园题库后台(点…

地图信息,障碍判断以及寻路算法(A星算法,B星算法和蚁群算法等)

一、广度优先遍历和深度优先遍历 在学习寻路算法之前,我们先来了解一下广度优先遍历和深度优先遍历. 什么是广度优先遍历? 广度优先遍历(breadth first search)是一个万能的算法. 广度优先是从初始状态一层一层向下找,直到找到目标为止。 广度优先遍历&#x…

Elasticsearch入门(一)基本介绍与安装

介绍: Elaticsearch:简称为 ES,ES 是一个开源的高扩展的分布式全文搜索引擎,是整个 Elastic Stack 技术栈的核心。它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理…

STL-常用遍历算法

目录 1.for_each 功能描述 函数原型 2.transform 功能描述 函数原型 1.for_each 功能描述 实现容器遍历 函数原型 for_each(itertor beg,iterator end,_func); //遍历算法 遍历容器元素 //beg 开始迭代器 //end 结束迭代器 //_func函数或者函数对象 代码 #include <i…

磕磕绊绊的双非硕秋招之路小结

秋招&#xff0c;真的再见了。 ⭐️我叫恒心&#xff0c;一名喜欢书写博客的研究生在读生。 原创不易~转载麻烦注明出处&#xff0c;并告知作者&#xff0c;谢谢&#xff01;&#xff01;&#xff01; 这是一篇近期会不断更新的博客欧~~~ 有什么问题的小伙伴 欢迎留言提问欧 12…

Pr:导出设置之音频

H.264、HEVC&#xff08;H.265&#xff09;和 MPEG2-DVD 等格式支持多种音频格式。对于这些格式&#xff0c;我们可以通过导出设置中的音频 AUDIO模块导出为不同的音频格式。音频格式设置Audio Format Settings音频格式Audio FormatH.264 默认采用 AAC 音频格式。AAC&#xff0…

RFID固定资产定位管理系统-智慧资产人员可视化管理系统

概述 我司&#xff08;东识科技DONWIT&#xff09;RFID资产可视化管理系统是依托互3D技术、云计算、大数据、RFID技术、数据库技术、AI、视频分析技术对RFID固定资产进行统一管理、分析的信息化、智能化、规范化的系统。 1.1东识RFID资产管理系统原理 受控样品&#xff08;或…

微服务开发平台 Spring Cloud Blade 部署实践

本文介绍使用 Rainbond 快速部署 Spring Cloud Blade 微服务平台。Spring Cloud Blade 是一个由商业级项目升级优化而来的微服务架构&#xff0c;采用Spring Boot 2.7 、Spring Cloud 2021 等核心技术构建&#xff0c;完全遵循阿里巴巴编码规范。提供基于 React 和 Vue 的两个前…

自定义RBAC(2)

您好&#xff0c;我是湘王&#xff0c;这是我的CSDN博客&#xff0c;欢迎您来&#xff0c;欢迎您再来&#xff5e; 上一次把DAC、MAC、PBAC这三个都一口气介绍完了&#xff0c;本想一口气把RBAC也说完。想了想&#xff0c;饭还是要一口口吃&#xff0c;一次吃太多会消化不良&am…

Python | 今年世界杯哪个队最有可能夺冠?!

文章目录&#x1f3f3;️‍&#x1f308; 1. 数据&#x1f3f3;️‍&#x1f308; 2. 绘图2.1 绘制南丁格尔玫瑰图2.2 设置cloor_bar2.3 添加文字2.4 添加注释2.5 添加标题2.6 词云&#x1f3f3;️‍&#x1f308; 3. 更多可视化项目源码数据大家好&#xff0c;我是 &#x1f4…

Sqoop数据导出 第1关:Sqoop数据导出语法学习

为了完成本关任务&#xff0c;你需要掌握&#xff1a; 1、Sqoop 导出( export )的基本参数。 2、配置环境。 Sqoop 导出( export )的基本参数。 Sqoop 能够让 Hadoop 上的 HDFS 和 Hive 跟关系型数据库之间进行数据导入与导出&#xff0c;多亏了import和export这两个工具。本…

【Tensorflow+自然语言处理+RNN】实现中文译英文的智能聊天机器人实战(附源码和数据集 超详细)

需要源码和数据集请点赞关注收藏后评论区留言私信~~~ 一、序列-序列机制概述 Seq2Seq 是一个 Encoder-Decoder 结构的神经网络&#xff0c;它的输入是一个序列(Sequence)&#xff0c;输出也是一个序列(Sequence)。在 Encoder 中&#xff0c;将可变长度的序列转变为固定长度的向…

【RCNN系列】Fast RCNN论文总结

目标检测论文总结 【RCNN系列】 RCNN Fast RCNN 文章目录目标检测论文总结前言一、Pipeline二、模型设计1.改进点2.RoI pooling layer3.Backbone初始化4.采样策略5.损失函数6.其他小细节三、总结前言 一些经典论文的总结。 一、Pipeline 利用Selective Search&#xff08;比较…