Проблемная реализация staging в Globus (WS)GRAM
Глобус не умеет создавать отсутствующие директории в процессе stagein/stageout автоматически. Это приводит, например, к тому, что если у задачи указан, например,
STDOUT_FILE="gsiftp://host.com/path/to/file.txt"
и при этом на сервере существует директория /path, но не существует директории /path/to, то задача слетит внутри GRAM.
Аналогичная проблема есть и со stagein: если указать что-то вроде
INPUT_FILES="some/file.txt gsiftp://host.com/path/to/file.txt"
то задача слетит, так как локальной директории some/ в момент stagein не будет.
При этом возможно автоматическое создание директорий, если перекачивать директорию целиком. Например, если указать
INPUT_FILES="some/ gsiftp://host.com/path/to/"
то в результате в рабочей директории окажется директория some, являющаяся полной копией директории /path/to
Частным случаем этой проблемы является создание начальной директории. "Родной" globus-job-submit(-ws) решает эту проблему создавая специальную пустую директорию "$HOME/.globus/empty", которую указывает в stagein задачи. В пилоте как временное обходное решение рабочая директория делается непустой, и является копией /etc/profile.d той машины, на которую производится запуск задачи.
Одно из очевидных решений - сделать директории заранее, инициировав процесс со стороны pilot, используя gsiftp клиент. Это решение использовать не хотелось бы, т.к. не хочется таскать за собой весь глобус за пилотом. Впрочем, возможно, gsiftp клиент, способный только на создание директорий можно будет реализовать самостоятельно. Правда, поверхностный анализ ситуации показывает, что в gridftp используется не просто авторизация по сертификатам, а авторизация по сертификатам через GSSAPI, и нормальных биндингов для этого в питон, не тянующих за собой глобус, похоже, просто не существует. Вариант реализации подмножества GSSAPI чисто на питоне скорее всего можно даже не рассматривать в силу его сложности.
Другое более-менее очевидное, но более топорное решение - потребовать от всех GRAM'ов держать у себя специальную пустую директорию в известном месте, которая будет "копироваться" через стандартный stagein "целиком" для создания пустых директорий.
