glusterfs modify time(mime) 修改时间不一致问题分析
2014-08-11 11:15
411 查看
环境:版本 3.3git 分布-复制卷
现象:如果某个复制集合的某个文件的两个副本modify time 时间不一致。在客户端ls/stat 某个文件,返回的modify time不一致。根据设置不同,出现不一致的几率也有所不同。
分析:
一 复现方法:
去掉所有中间xl,即在fuse-bridge和afr中间的不必要的软件组件比如md-cache/quick-read等。在3.3git上复现 ,并探测分析。
保证两个相同文件mtime不同,drop内核缓存就保证了问题的必然重现。
模块层级关系:
stat 用户空间----syscall-----vfs----fuse module-----fuse 用户空间 fuse bridge--mdcache。。。。-dht ---afr
二 代码路径:
用户空间stat操作通过内核vfs_fstatat调用,其首先要lookup(vfs或者并fuse lookup(内核)) ,然后vfs_getattr(直接传递到fuse内核那)。
stat具体的路径分两种,我们不考虑内核缓存的影响。两种路径,都会出现mtime不一致的情况。
A,
首先要到内核fuselookup--afr-lookup,然后内核vfs_getattr---内核fuse_getattr---在这个函数内就直接使用了刚才lookup返回的某个好child(复制集合的里的好子卷)的inode的buf(iattr inode 属性)。
本质:是通过用户空间fuse_lookup直接返回给用户的。
B,
首先要到内核fuselookup--afr-lookup,然后内核vfs_getattr---内核fuse_getattr---在这个函数内要调用到用户空间,最终要调用afr_stat(在复制集合内,afr_stat只需向一个child发送,而lookup必须所有child)。
afr_stat用的是刚才lookup返回的的某个好child(复制集合的里的好子卷)id。并继续往下层发送去获取inode buf(iattr inode 属性),这与路径1的方法不同。
本质:通过lookup找到一些好的child,然后afr_stat就利用其中一个child,并往下发送去获取inode but,不需要原来lookup返回的buf。
三 问题解决
两种情况都得考虑。
具体略。
现象:如果某个复制集合的某个文件的两个副本modify time 时间不一致。在客户端ls/stat 某个文件,返回的modify time不一致。根据设置不同,出现不一致的几率也有所不同。
分析:
一 复现方法:
去掉所有中间xl,即在fuse-bridge和afr中间的不必要的软件组件比如md-cache/quick-read等。在3.3git上复现 ,并探测分析。
保证两个相同文件mtime不同,drop内核缓存就保证了问题的必然重现。
模块层级关系:
stat 用户空间----syscall-----vfs----fuse module-----fuse 用户空间 fuse bridge--mdcache。。。。-dht ---afr
二 代码路径:
用户空间stat操作通过内核vfs_fstatat调用,其首先要lookup(vfs或者并fuse lookup(内核)) ,然后vfs_getattr(直接传递到fuse内核那)。
stat具体的路径分两种,我们不考虑内核缓存的影响。两种路径,都会出现mtime不一致的情况。
A,
首先要到内核fuselookup--afr-lookup,然后内核vfs_getattr---内核fuse_getattr---在这个函数内就直接使用了刚才lookup返回的某个好child(复制集合的里的好子卷)的inode的buf(iattr inode 属性)。
本质:是通过用户空间fuse_lookup直接返回给用户的。
B,
首先要到内核fuselookup--afr-lookup,然后内核vfs_getattr---内核fuse_getattr---在这个函数内要调用到用户空间,最终要调用afr_stat(在复制集合内,afr_stat只需向一个child发送,而lookup必须所有child)。
afr_stat用的是刚才lookup返回的的某个好child(复制集合的里的好子卷)id。并继续往下层发送去获取inode buf(iattr inode 属性),这与路径1的方法不同。
本质:通过lookup找到一些好的child,然后afr_stat就利用其中一个child,并往下发送去获取inode but,不需要原来lookup返回的buf。
三 问题解决
两种情况都得考虑。
具体略。
相关文章推荐
- 转:LoadRunner响应时间与用户体验时间不一致问题的深入分析
- mysql5.7日志时间戳(log_timestmaps)与系统时间不一致问题以及日志报Got an error reading communication packets情况分析
- 详解win7中的文件属性“访问时间”和“修改时间”不一致的原因分析 【原来LastAccessTime早就没用了】
- 转:LoadRunner响应时间与用户体验时间不一致问题的深入分析
- mysql5.7.17日志时间戳(log_timestmaps)与系统时间不一致问题以及日志报Got an error reading communication packets情况分析
- Windows和Ubuntu双系统时间不一致的问题
- Windows/linux双系统的时间修改问题
- 关于php页面最大执行时间问题(set_time_limit函数在windows下不起作用的解决)
- Sharepoint计算列不能计算“修改时间”的问题
- 一个修改文件时间戳的工具TimeStomp
- 取指时间,分析时间,执行时间,求指令时间问题。
- 关于sharepoint 里面的时间和Moss对象模型取出来的时间不一致问题
- SQL Server 2005中Query(查询)Date Time(日期时间)时select不出record的问题
- QTP回放iFrame控件时间非常慢的问题分析
- 转帖:解决 Windows、Mac 和 Ubuntu 时间不一致的问题
- SetLocalTime(&sysTime);修改系统时间 /WinCE /
- 【转】关于eclipse和javac编译结果不一致的问题的分析与解决
- 不同国家时间格式不一致的问题
- 奇怪的问题:在IE6中显示FTP中的文件修改时间少一年
- 修改插入时间不匹配问题