关于glusterfs-3.0.4中AFR修复的一个bug
夜深了,困扰了我好几天的bug今天终于让我揪出来了,有点如释重负的感觉。
问题描述:
在AFR冗余度为2的glusterfs3.0.4系统上,创建虚拟机(img文件),然后启动虚拟机,然后宕掉AFR一个子节点,在虚拟机用dd开始一直写数据,然后再启动刚才宕掉的AFR子节点进程,触发修复。带修复完毕后,把虚拟机关掉。计算AFR两个子节点img文件的md5值不一样(AFR为镜像冗余,两子节点上的文件应该是一样的才对)。
是边写边修复的加锁原因么?
模拟测试:
用dd在glusterfs上一直进行写操作,然后宕掉AFR一个子节点进程,然后再启动宕掉的子节点进程,触发修复。修复完毕后,kill掉dd进程,查看AFR后端的文件,md5值是一样的,排除了边写边修复的问题。
是多线程写导致的么?
通过打印log也排除了此种可能性。
再看修复后两个子节点上的img文件,ls -l 显示的size是一样的,用stat查看block数是不一样的,难道是空洞文件导致的?
找到afr修复部分的代码,呵呵,在进行差量修复时,若在源文件上需要修复的数据块为全0时,不再去写入目标文件(估计愿意是在目标文件上产生空洞文件)。这样就有问题了,因为在目标文件宕掉的时候,源文件一直再更新(虚拟机运行着且进行各种操作),有可能会将原来非全0的数据块更新为全0数据块,而宕掉的文件对应的区域仍为非全0数据块,此种情况下不去更新目标文件,必然导致修复后文件不一致。
所以,在修复时对空洞(全0)数据块的处理是错误的,在此应该去掉,而且代码中对全0的判断是一个大while循环,去掉后反而会提升一些代码的性能,呵呵,原来大牛们是咋想的呢?
夜深了,睡吧~
转载于:https://my.oschina.net/uvwxyz/blog/157610
关于glusterfs-3.0.4中AFR修复的一个bug相关推荐
- 关于VC++6.0中getline函数的一个bug
关于VC++6.0中getline函数的一个bug 最近在调试程序时,发现getline函数在VC++6.0和其他编译器上运行结果不一样,比如有如下这段程序: #include <iostrea ...
- QQ超市模拟排配2D版1.13 (XNA4.0) (修正双格货架移动的一个bug和3-5地图)
抱歉,更新了一个地图-- 下载地址:(版本过期了,请下新版) 1.13:更新日期:2012-3-22 更新3店5口地图错误问题.启动程序前请手动删除旧版地图数据. 地址:C:\(我的文档路径)\Sav ...
- 学习一下spring-cloud-function中官方修复的一个问题
其实不难理解,为什么这么简单的漏洞为什么没有人更早的发现,因为大部分的项目的核心贡献者就是两三个人,剩下的人可能只是使用者,这里面一部分人应该是不会详细的看源码的,who cares. 我接触的信息流 ...
- 从AX4.0本地化SP2凭证系统的一个bug看UserConnection的使用
去年写的一篇blog,当时忘记发布了,今天又遇到同样的问题,突然想起曾经写过这么一篇文章,今天发布一下. 问题描述:做N张销售订单,然后在应收账款->期间->销售更新->发票做开票动 ...
- MvcMusicStore学习中常出现的一个BUG
BUG描述:var genreModel = storeDB.Genres.Include("Albums").Single(g => g.Name == genre); 前 ...
- 测试人员如何使用浏览器的f12_测试过程中如何快速定位一个bug
作为测试人员,和我们最常打交道的,莫属bug.但是测试不只是负责发现问题,除了发现问题这种基本功外,定位问题,提出解决方案,提出预防方案也是要掌握的技能. 如何快速定位一个bug,就需要对功能.产品的 ...
- 测试过程中如何快速定位一个bug
作为测试人员,和我们最常打交道的,莫属bug.但是测试不只是负责发现问题,除了发现问题这种基本功外,定位问题,提出解决方案,提出预防方案也是要掌握的技能. 如何快速定位一个bug,就需要对功能.产品的 ...
- lol8.18服务器不稳定,lol8月18日更新BUG修复一览 8月18日更新修复了哪些BUG
lol8月18日更新BUG修复一览,8月18日更新修复了哪些BUG?lol英雄联盟在8月18日进行了版本的维护更新,同时也修复了部分的BUG,那么都有哪些BUG呢?下面就和小编一起来看看吧. 8月18 ...
- 设n个不同的整数排好序后存于T[1..n]中,若存在一个下标i(1≤ i ≤ n),使得T[i]=i。试设计一个有效算法找到这个下标,要求算法在最坏情形下的计算时间为O(log n)
转自http://zmp1123.blog.163.com/blog/static/1193291592013314581911/ 设n 个不同整数排好序后存于T[0:n-1]中,若存在一个下标i,0 ...
最新文章
- Redis SLAVE过期键策略
- 在Ubuntu上通过命令行安装Elisa KDE音乐播放器
- ElasticSearch聚合aggs入门
- 的数据湖_一文读懂云原生数据湖体系
- linux cache 内核参数,Linux内核中drop_caches参数
- rabbitmq中消息的存储
- for each循环_Power Query — 循环初步
- Java SE 随机数生成器 Random
- 利用Jwing窗口写程序-----简单计算器(JAVA实用教程2-第五版 第九章 编程题 三(2)小题)
- 阿里 Lindorm 数据库联手 Hightopo ,开启工业物联超融合存储模式
- 【AJAX 教程】JS 原生 AJAX 请求
- php前台模板下载,thinkphp前台模板下载.doc
- RTSP协议与G711 AAC
- melogin.cn主页登录_melogin.cn登陆界面
- 凑微分公式_不定积分的计算凑微分法.ppt
- Openstack-nova(placement)组件部署流程
- Hybird App混合移动应用开发技术整体解决方案,速来围观!
- java中实现的十进制转换成二进制的简单代码
- Win系统 - WIN10 更新后蓝牙音箱无法连接成 Stereo 模式(立体声)
- 成都java培训要多少钱