我正在编写压力测试套件来测试通过NFS的分布式文件系统。“过时的文件句柄”错误,当进程尝试读取文件时,其他进程已经删除
在某些情况下,当一些进程删除文件,而另一些进程尝试从它读取,我得到“陈旧的文件句柄”错误(116)。
在这种情况下,这种错误是否可以接受?
测试工作如下:
- 启动客户机的x个
- 每台客户端计算机上运行Ÿ处理
- 每个进程都可以做任何文件操作STAT /读/删除/打开
- 提到的文件操作是标准的python方法 - os.stat/read/os.remove/open
- 所有文件都为空0字节数据
文件是存在,为成功stat
运行表明:
controller_debug.log.2:2016年10月26日15:02:30156; INFO - [LG-E27A-LNX:是0xA]:成品640522b4d94c453ea545cb86568320ca,结果: 成功| stat | 35 35 48 012 012 012 012 012 012数据:{} | 2016年10月26日15:02:30.156
过程0x1
在客户端完成CLIENT-A
成功删除:
controller_debug.log.2:2016年10月26日15:02:30164; INFO - [CLIENT-A:0x1]:已完成5f5dfe6a06de495f851745a78857eec1,结果: 成功|删除| 35 35 48 012 012 012 012 012 012数据:{} | 2016年10月26日15:02:30.161
3毫秒之后,在客户端CLIENT-B
过程0xb
失败 “读” OP因 “过时的文件句柄”
controller_debug.log.2 2016 -10-26 15:02:30,164; INFO - [CLIENT-B:0xb]:finished e84e2064ead042099310af1bd44821c0,result: failed |阅读| /mnt/DIRSPLIT-node0.b27-1/JUyw481MfvsBHOm1KQu7sHRB6ffAXKjwIATlsXmOgWh8XKQaIrPbxLgAo7sucdAM/o6V266xE8bTaUGzk8YDMfDAJp0YIfbT4fIK1oZ2R20tRX3xFCvjISj7WuMEwEV41 | [errno:116] |陈旧的文件句柄| 142 |数据:{} | 2016/10/26 15:02:30.160 controller_debug.log。2:2016年10月26日15:02:30164;错误 - 操作中读取上的文件 JUyw481MfvsBHOm1KQu7sHRB6ffAXKjwIATlsXmOgWh8XKQaIrPbxLgAo7sucdAM/o6V266xE8bTaUGzk8YDMfDAJp0YIfbT4fIK1oZ2R20tRX3xFCvjISj7WuMEwEV41 意外失败,由于过时的文件句柄
感谢
是的,这是一个可接受的错误代码给出的情况下(请参阅https://access.redhat.com/solutions/29626,条件2),但它可能不是唯一可能的回应。您必须阅读规格和来源才能确定。你能澄清一下,如果有什么,表明这可能不是一个合适的回应? –
@JakeMitchell感谢您的链接杰克。我确实知道ESTALE可以用于目录,但是可以在文件中找到关于ESTALE的任何信息,并且由于我正在开发测试文件系统,所以我不能相信它如何处理nfs错误。你是否也有源码和规格的链接? – Samuel
您正在使用哪种版本的Python,以及如何开始测试流程?它可能与'fork'的行为有关,因为文件描述符依赖于POSIX,这不允许使用分叉进程。 –