我正在編寫壓力測試套件來測試通過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,這不允許使用分叉進程。 –