夜深了,困扰了我好几天的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相关推荐

  1. 关于VC++6.0中getline函数的一个bug

    关于VC++6.0中getline函数的一个bug 最近在调试程序时,发现getline函数在VC++6.0和其他编译器上运行结果不一样,比如有如下这段程序: #include <iostrea ...

  2. QQ超市模拟排配2D版1.13 (XNA4.0) (修正双格货架移动的一个bug和3-5地图)

    抱歉,更新了一个地图-- 下载地址:(版本过期了,请下新版) 1.13:更新日期:2012-3-22 更新3店5口地图错误问题.启动程序前请手动删除旧版地图数据. 地址:C:\(我的文档路径)\Sav ...

  3. 学习一下spring-cloud-function中官方修复的一个问题

    其实不难理解,为什么这么简单的漏洞为什么没有人更早的发现,因为大部分的项目的核心贡献者就是两三个人,剩下的人可能只是使用者,这里面一部分人应该是不会详细的看源码的,who cares. 我接触的信息流 ...

  4. 从AX4.0本地化SP2凭证系统的一个bug看UserConnection的使用

    去年写的一篇blog,当时忘记发布了,今天又遇到同样的问题,突然想起曾经写过这么一篇文章,今天发布一下. 问题描述:做N张销售订单,然后在应收账款->期间->销售更新->发票做开票动 ...

  5. MvcMusicStore学习中常出现的一个BUG

    BUG描述:var genreModel = storeDB.Genres.Include("Albums").Single(g => g.Name == genre); 前 ...

  6. 测试人员如何使用浏览器的f12_测试过程中如何快速定位一个bug

    作为测试人员,和我们最常打交道的,莫属bug.但是测试不只是负责发现问题,除了发现问题这种基本功外,定位问题,提出解决方案,提出预防方案也是要掌握的技能. 如何快速定位一个bug,就需要对功能.产品的 ...

  7. 测试过程中如何快速定位一个bug

    作为测试人员,和我们最常打交道的,莫属bug.但是测试不只是负责发现问题,除了发现问题这种基本功外,定位问题,提出解决方案,提出预防方案也是要掌握的技能. 如何快速定位一个bug,就需要对功能.产品的 ...

  8. lol8.18服务器不稳定,lol8月18日更新BUG修复一览 8月18日更新修复了哪些BUG

    lol8月18日更新BUG修复一览,8月18日更新修复了哪些BUG?lol英雄联盟在8月18日进行了版本的维护更新,同时也修复了部分的BUG,那么都有哪些BUG呢?下面就和小编一起来看看吧. 8月18 ...

  9. 设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 ...

最新文章

  1. Redis SLAVE过期键策略
  2. 在Ubuntu上通过命令行安装Elisa KDE音乐播放器
  3. ElasticSearch聚合aggs入门
  4. 的数据湖_一文读懂云原生数据湖体系
  5. linux cache 内核参数,Linux内核中drop_caches参数
  6. rabbitmq中消息的存储
  7. for each循环_Power Query — 循环初步
  8. Java SE 随机数生成器 Random
  9. 利用Jwing窗口写程序-----简单计算器(JAVA实用教程2-第五版 第九章 编程题 三(2)小题)
  10. 阿里 Lindorm 数据库联手 Hightopo ,开启工业物联超融合存储模式
  11. 【AJAX 教程】JS 原生 AJAX 请求
  12. php前台模板下载,thinkphp前台模板下载.doc
  13. RTSP协议与G711 AAC
  14. melogin.cn主页登录_melogin.cn登陆界面
  15. 凑微分公式_不定积分的计算凑微分法.ppt
  16. Openstack-nova(placement)组件部署流程
  17. Hybird App混合移动应用开发技术整体解决方案,速来围观!
  18. java中实现的十进制转换成二进制的简单代码
  19. Win系统 - WIN10 更新后蓝牙音箱无法连接成 Stereo 模式(立体声)
  20. 成都java培训要多少钱

热门文章

  1. Android Retrofit框架请求复杂json数据
  2. 想重装java jdk_jdk怎么重新安装
  3. vs mysql 环境安装教程_使用 VS 开发连接 MySQL 的 Web 项目的环境配置
  4. 【MyBatis框架】mapper配置文件-foreach标签
  5. Go Web编程--使用bcrpyt哈希用户密码
  6. JVM堆外内存的回收机制分析
  7. idea中查看maven信息
  8. 关于Kafka高性能的几个问题
  9. Educational Codeforces Round 53C(二分,思维|构造)
  10. maven创建父项目和子项目