Локальный файловый кеш s3fs версионных мух

Я хочу использовать s3fs на основе fsspec для доступа к файлам на S3. В основном из-за 2 приятных особенностей:

  1. локальное кэширование файлов на диск с проверкой изменения файлов, т.е. файл загружается повторно, если локальный и удаленный файлы различаются
  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.

Другие вопросы по тегам