Локальный файловый кеш s3fs версионных мух
Я хочу использовать s3fs на основе fsspec для доступа к файлам на S3. В основном из-за 2 приятных особенностей:
- локальное кэширование файлов на диск с проверкой изменения файлов, т.е. файл загружается повторно, если локальный и удаленный файлы различаются
- поддержка идентификатора версии файла для корзин S3 с версиями, т. е. возможность открывать разные версии одного и того же удаленного файла на основе идентификатора их версии.
Мне это не нужно для частого использования, и файлы не меняются часто. Это в основном для использования данных модульных/интеграционных тестов, хранящихся на S3, которые изменяются только в том случае, если тесты и связанные с ними тестовые данные обновляются (версии!).
У меня оба из вышеперечисленных работают отлично, но, похоже, я не могу заставить их работать вместе. То есть я хочу иметь возможность кэшировать разные версии одного и того же файла локально. Кажется, что как только вы используете файловый кеш, неоднозначность идентификатора версии теряется.
fs = fsspec.filesystem("filecache", target_protocol='s3', cache_storage='/tmp/aws', check_files=True, version_aware=True)
with fs.open("s3://my_bucket/my_file.txt", "r", version_id=version_id) as f:
text = f.read()
Не важно что
version_id
то есть я всегда получаю самый последний файл с S3, который также кэшируется локально.
Я ожидаю, что я всегда получаю правильную версию файла, а локальный кеш либо хранит отдельные файлы для каждой версии (предпочтительно), либо просто обновляет локальный файл всякий раз, когда я запрашиваю версию, отличную от кешированной.
Есть ли способ добиться этого с текущим состоянием библиотек или это в настоящее время невозможно? Я использую
s3fs==fsspec==2022.3.0
.
1 ответ
После проверки с разработчиками эта комбинация кажется невозможной с текущим состоянием библиотек, поскольку хэш целевого файла основан только на пути к файлу, игнорируя любые другие
kwargs
такие как
version_id
.