Как ждать gcsfuse для сквозной записи (очистки) в область памяти GCS? - PullRequest
0 голосов
/ 11 июня 2019

После того, как рабочий узел Compute Engine записывает файлы в смонтированный локальный каталог gcsfuse и закрывает их, я хочу, чтобы синхронно сбрасывал данные в GCS , прежде чем он уведомит другие рабочие узлы что все файлы готовы. Это необходимо для обеспечения синхронизации между рабочими.

Q. Как попросить gcsfuse выполнить сквозную запись в GCS, а затем дождаться завершения?

Идеи:

  • Запустить команду Linux sync?
  • Размонтировать каталог, затем дождаться возврата этой команды fusermount? (Помимо времени записи, потребуется ли для демонтажа более секунды или двух, а затем перемонтировать для следующей рабочей задачи?)
  • Заставить все программы в этой задаче вызвать fsync() для всех своих выходных файлов? Это было бы сложно.
  • Написать дополнительный файл, затем flush() и fsync() этот файл?

1 Ответ

2 голосов
/ 11 июня 2019

Взгляните на семантику gcsfuse :

Иноды могут быть открыты для записи.Изменения немедленно отражаются в чтениях одного и того же inode процессами, локальными для компьютера, использующими ту же файловую систему.После успешного выполнения fsync или успешного закрытия гарантируется, что содержимое inode будет записано в объект GCS с совпадающим именем, если номера генерации и мета-генерации объекта все еще соответствуют исходной генерации inode.(Они могут отсутствовать, если за это время были изменения от другого актера.) Нет никаких гарантий относительно того, отражаются ли локальные изменения в GCS после записи, но до синхронизации или закрытия.

Так что если вашработник закрывает файлы после записи их, последующие зависимости должны видеть их последовательно.

...