门户网站建设工作情况,祥云县网站,西安网优项目公司,网站建设详细报价参考#xff1a;Is rename() atomic?我问的是类似的东西,但不完全相同,因为我想知道的是在使用NFS时依赖于rename()的原子性是否安全#xff1f;这是我正在处理的一个场景 – 我有一个必须始终存在的’索引’文件.所以#xff1a;客户端创建一个新文件客户端通过“…参考Is rename() atomic?我问的是类似的东西,但不完全相同,因为我想知道的是在使用NFS时依赖于rename()的原子性是否安全这是我正在处理的一个场景 – 我有一个必须始终存在的’索引’文件.所以客户端创建一个新文件客户端通过“旧”索引文件重命名新文件.独立客户读取索引文件指基于索引的磁盘结构.这假设rename()是原子意味着 – 总会有一个’索引’文件(尽管它可能是一个过时的版本,因为缓存和时间)但是我遇到的问题是 – 这发生在NFS上 – 并且正在工作 – 但我的几个NFS客户端偶尔会报告“ENOENT” – 没有这样的文件或目录. (例如,在每隔5米发生的数百次操作中,我们每隔几天就会收到此错误).所以我希望是否有人能够启发我 – 在这种情况下,实际上是否真的不可能获得’ENOENT’我问的原因是RFC 3530这个条目The RENAME operation must be atomic to the client.我想知道这是否只是发出重命名的客户端,而不是查看目录的客户端 (我对缓存/过时的目录结构没问题,但是这个操作的重点是这个文件总是以某种形式“存在”)操作顺序(来自执行写操作的客户端)是21401 14:58:11 open(fleeg.ext, O_RDWR|O_CREAT|O_EXCL, 0666) -1 EEXIST (File exists) 0.00044321401 14:58:11 open(fleeg.ext, O_RDWR) 3 0.00054721401 14:58:11 fstat(3, {st_modeS_IFREG|0600, st_size572, ...}) 0 0.00001221401 14:58:11 fadvise64(3, 0, 572, POSIX_FADV_RANDOM) 0 0.00000821401 14:58:11 fcntl(3, F_SETLKW, {typeF_WRLCK, whenceSEEK_SET, start1, len1}) 0 0.00199421401 14:58:11 open(fleeg.ext.i, O_RDWR|O_CREAT, 0666) 4 0.00053821401 14:58:11 fstat(4, {st_modeS_IFREG|0600, st_size42, ...}) 0 0.00000821401 14:58:11 fadvise64(4, 0, 42, POSIX_FADV_RANDOM) 0 0.00000621401 14:58:11 close(4) 0 0.00001121401 14:58:11 fstat(3, {st_modeS_IFREG|0600, st_size572, ...}) 0 0.00000721401 14:58:11 open(fleeg.ext.i, O_RDONLY) 4 0.00057721401 14:58:11 fstat(4, {st_modeS_IFREG|0600, st_size42, ...}) 0 0.00000721401 14:58:11 fadvise64(4, 0, 42, POSIX_FADV_RANDOM) 0 0.00000621401 14:58:11 fstat(4, {st_modeS_IFREG|0600, st_size42, ...}) 0 0.00000721401 14:58:11 fstat(4, {st_modeS_IFREG|0600, st_size42, ...}) 0 0.00000721401 14:58:11 read(4, \3PAX\1\0\0O}\270\370\206\20\225\24\22\t\2\0\203RD\0\0\0\0\17\r\0\2\0\n..., 42) 42 0.00055221401 14:58:11 close(4) 0 0.00001321401 14:58:11 fcntl(3, F_SETLKW, {typeF_RDLCK, whenceSEEK_SET, start466, len68}) 0 0.00141821401 14:58:11 pread(3, \21\203\244I\240\333\272\252d\316\261\3770\361#\222\200\313\224J\253\5\354\217-\256LA\345\253..., 38, 534) 38 0.00001021401 14:58:11 pread(3, \21\203\244I\240\333\272\252d\316\261\3770\361#\222\200\313\224J\253\5\354\217-\256LA\345\253..., 38, 534) 38 0.00001021401 14:58:11 pread(3, \21\\30\361\241\223\271\256\317\302\363\262F\276]\260\241-x\227b\377\205\356\252\236\211\37\17.\216\364..., 68, 466) 68 0.00001021401 14:58:11 pread(3, \21\302d\344\327O\207C]M\10xxM\377\2340\0319\206k\201N\372\332\265R\242\313S\24H..., 62, 300) 62 0.00001121401 14:58:11 pread(3, \21\362cv\37\204]\377q\362N\302/\212\255\255\370\200\236\350\22377i\346\271Cy\370..., 104, 362) 104 0.00001021401 14:58:11 pwrite(3, \21\302\3174\252\273.\17\v\247\313\324\267C\222P\303\n~\341F\24oh/\300a\315\n\321\31\256..., 127, 572) 127 0.00001221401 14:58:11 pwrite(3, \21\212Q\325\371\223\235\256\245\247\\WT$\4\227\375[\\\3263\222\0305\0\34\2049A;2U..., 68, 699) 68 0.00000921401 14:58:11 pwrite(3, \21\262\20Kc(!.\350\367i\253hkl~\254\335H\250.d\0036\r\342\v\242\7\255\214\31..., 38, 767) 38 0.00000921401 14:58:11 fsync(3) 0 0.00100721401 14:58:11 fstat(3, {st_modeS_IFREG|0600, st_size805, ...}) 0 0.00000921401 14:58:11 open(fleeg.ext.i.tmp, O_RDWR|O_CREAT|O_TRUNC, 0666) 4 0.00181321401 14:58:11 fstat(4, {st_modeS_IFREG|0600, st_size0, ...}) 0 0.00000721401 14:58:11 fadvise64(4, 0, 0, POSIX_FADV_RANDOM) 0 0.00000721401 14:58:11 write(4, \3PAX\1\0\0qT2\225\226\20\225\24\22\t\2\0\205;D\0\0\0\0\17\r\0\2\0\n..., 42) 42 0.00001221401 14:58:11 stat(fleeg.ext.i, {st_modeS_IFREG|0600, st_size42, ...}) 0 0.00001121401 14:58:11 fchmod(4, 0100600) 0 0.00251721401 14:58:11 fstat(4, {st_modeS_IFREG|0600, st_size42, ...}) 0 0.00000821401 14:58:11 close(4) 0 0.00001121401 14:58:11 rename(fleeg.ext.i.tmp, fleeg.pax.i) 0 0.00120121401 14:58:11 close(3) 0 0.00079521401 14:58:11 munmap(0x7f1475cce000, 4198400) 0 0.00017721401 14:58:11 munmap(0x7f14760cf000, 4198400) 0 0.00017321401 14:58:11 futex(0x7f147cbcb908, FUTEX_WAKE_PRIVATE, 2147483647) 0 0.00001021401 14:58:11 exit_group(0) ?21401 14:58:11 exited with 0 注意 – 上面重命名的路径和文件是为了保持一致性. fleeg.ext是数据文件,fleeg.ext.i是索引.在此过程中 – fleeg.ext.i文件被覆盖(由.tmp文件),这就是为什么相信该路径上应该始终存在一个文件(旧文件或刚被覆盖的新文件)它).在阅读客户端上,PCAP看起来像LOOKUP NFS调用是失败的124 1.375777 10.10.41.35 - 10.10.41.9 NFS 226 LOOKUP fleeg.ext.i V3 LOOKUP Call, DH: 0x6fbbff3a/fleeg.ext.i125 1.375951 10.10.41.9 - 10.10.41.35 NFS 186 5347 LOOKUP 0775 Directory V3 LOOKUP Reply (Call In 124) Error: NFS3ERR_NOENT126 1.375975 10.10.41.35 - 10.10.41.9 NFS 226 LOOKUP fleeg.ext.i V3 LOOKUP Call, DH: 0x6fbbff3a/fleeg.ext.i127 1.376142 10.10.41.9 - 10.10.41.35 NFS 186 5347 LOOKUP 0775 Directory V3 LOOKUP Reply (Call In 126) Error: NFS3ERR_NOENT