2

在 Compute Engine 工作节点将文件写入gcsfuse安装的本地目录并关闭它们之后,我希望它在通知其他工作节点所有文件已准备好之前将数据同步刷新到 GCS 。这是为了确保工作人员之间的同步。

Q.如何让 gcsfuse 写入 GCS,然后等待完成?

想法:

  • 运行Linuxsync命令?
  • 卸载目录然后等待该fusermount命令返回?(除了写入时间之外,卸载然后重新挂载下一个工作任务是否需要一两秒以上的时间?)
  • 让这个任务中的所有程序调用fsync()它们的所有输出文件?那将是具有挑战性的。
  • 写一个额外的文件,然后flush()那个fsync()
4

1 回答 1

3

看看gcsfuse 语义

可以打开索引节点进行写入。修改会立即反映在使用相同文件系统的机器本地进程对相同 inode 的读取中。在成功 fsync 或成功关闭后,如果对象的世代和元世代编号仍然与 inode 的源世代相匹配,则保证 inode 的内容已写入具有匹配名称的 GCS 对象。(如果同时有来自其他参与者的修改,他们可能没有。)无法保证本地修改是否在写入之后但在同步或关闭之前反映在 GCS 中。

因此,如果您的工作人员在写入文件后关闭文件,则后续依赖项应该始终如一地看到它们。

于 2019-06-11T19:41:26.387 回答