В хранилище S3 создаются пустые папки, если пайплайн ссылается на несуществующий файл #4

Open
opened 2025-03-16 15:39:55 +00:00 by gzhulikov · 3 comments
Owner

Описание ошибки

Если при запуске пайплайна в манифесте или в теле запроса на запуск указать путь к файлу, но не загрузить этот файл в S3 на момент запуска, то при монтировании будет создана пустая папка (файловая группа) в S3. Эта папка не видна разработчику модуля (через файловый API можно получить только список файлов, то есть нужно сделать запрос именно самой этой папки, а папка на уровень выше будет выглядеть пустой). Если разработчик осознаёт проблему и загружает файл, этот файл не монтируется к файловой системе контейнера - вместо него монтируется созданная папка (и теперь её невозможно увидеть, потому что даже файловый API просто будет показывать файл).

Совершаемые действия:

  1. Запустить пайплайн, где входной переменной является файл, но не загружать этот файл в S3.
  2. Загрузить файл в S3
  3. Запустить пайплайн снова

Получаемый результат

Пайплайн не отрабатывает оба раза

Ожидаемый результат

Пайплайн отрабатывает на втором запуске.

## Описание ошибки Если при запуске пайплайна в манифесте или в теле запроса на запуск указать путь к файлу, но не загрузить этот файл в S3 на момент запуска, то при монтировании будет создана пустая папка (файловая группа) в S3. Эта папка не видна разработчику модуля (через файловый API можно получить только список файлов, то есть нужно сделать запрос именно самой этой папки, а папка на уровень выше будет выглядеть пустой). Если разработчик осознаёт проблему и загружает файл, этот файл не монтируется к файловой системе контейнера - вместо него монтируется созданная папка (и теперь её невозможно увидеть, потому что даже файловый API просто будет показывать файл). ### Совершаемые действия: 1. Запустить пайплайн, где входной переменной является файл, но не загружать этот файл в S3. 2. Загрузить файл в S3 3. Запустить пайплайн снова ### Получаемый результат Пайплайн не отрабатывает оба раза ### Ожидаемый результат Пайплайн отрабатывает на втором запуске.
gzhulikov added the
bug
label 2025-03-16 15:39:55 +00:00

Если пользователь при запуске не передал файл, это считается пустым входом. При запросе через файловый API по названию и пути к файловой группе она должна быть видна при запрос содержимого папку на уровень выше и должна быть пуста.

Дозагрузка файлов после запуска пайплайна или вызова сервиса имеет неопределенный эффект.

Следует учесть, что в разных запусках пайплайна при использовании ящика, связанного с пайплайном и указанного разработчиком, папки с входными параметрами будут располагаться отдельно, поэтому загрузка данных в таком случае привязана к определенному запуску.

Если пользователь при запуске не передал файл, это считается пустым входом. При запросе через файловый API по названию и пути к файловой группе она должна быть видна при запрос содержимого папку на уровень выше и должна быть пуста. Дозагрузка файлов после запуска пайплайна или вызова сервиса имеет неопределенный эффект. > Следует учесть, что в разных запусках пайплайна при использовании ящика, связанного с пайплайном и указанного разработчиком, папки с входными параметрами будут располагаться отдельно, поэтому загрузка данных в таком случае привязана к определенному запуску.
Owner

Если пользователь при запуске не передал файл, это считается пустым входом. При запросе через файловый API по названию и пути к файловой группе она должна быть видна при запрос содержимого папку на уровень выше и должна быть пуста.

Дозагрузка файлов после запуска пайплайна или вызова сервиса имеет неопределенный эффект.

Следует учесть, что в разных запусках пайплайна при использовании ящика, связанного с пайплайном и указанного разработчиком, папки с входными параметрами будут располагаться отдельно, поэтому загрузка данных в таком случае привязана к определенному запуску.

В issue речь о том, что пользователь может указать путь к файлу при запуске пайплайна, но не загрузить его фактически. API Pipelines поддерживает передачу путей к файлам и файловым группам в качестве значений входных переменных. При этом эти пути должны существовать до запуска пайплайна.

Проблема в следующем - API Pipelines не проверяет, что переданный путь существует, а просто монтирует его.

  1. Если передан путь к файлу a\b, и файл a\b отсутствует, то смонтируется пустая папка a\b\ и драйвер S3 создаст в S3 пустую папку (файловую группу) a\b\ .
  2. Если передан путь к файловой группе a\b\ , и файловая группа a\b\ отсутствует, то смонтируется пустая папка a\b\ и драйвер S3 также создаст пустую папку (файловую группу) a\b\ .
  3. Если позже пользователь загрузит файл a\b в S3, то в S3 окажется и файл a\b, и пустая папка a\b\ . Вместо файла всегда будет монтироваться в будущих запусках пустая папка a\b\ , и Files API также не обрабатывает эту ситуацию корректно.
> Если пользователь при запуске не передал файл, это считается пустым входом. При запросе через файловый API по названию и пути к файловой группе она должна быть видна при запрос содержимого папку на уровень выше и должна быть пуста. > > Дозагрузка файлов после запуска пайплайна или вызова сервиса имеет неопределенный эффект. > > > Следует учесть, что в разных запусках пайплайна при использовании ящика, связанного с пайплайном и указанного разработчиком, папки с входными параметрами будут располагаться отдельно, поэтому загрузка данных в таком случае привязана к определенному запуску. В issue речь о том, что пользователь может указать путь к файлу при запуске пайплайна, но не загрузить его фактически. API Pipelines поддерживает передачу путей к файлам и файловым группам в качестве значений входных переменных. При этом эти пути должны существовать до запуска пайплайна. Проблема в следующем - API Pipelines не проверяет, что переданный путь существует, а просто монтирует его. 1. Если передан путь к файлу a\b, и файл a\b отсутствует, то смонтируется пустая папка a\b\ и драйвер S3 создаст в S3 пустую папку (файловую группу) a\b\ . 2. Если передан путь к файловой группе a\b\ , и файловая группа a\b\ отсутствует, то смонтируется пустая папка a\b\ и драйвер S3 также создаст пустую папку (файловую группу) a\b\ . 3. Если позже пользователь загрузит файл a\b в S3, то в S3 окажется и файл a\b, и пустая папка a\b\ . Вместо файла всегда будет монтироваться в будущих запусках пустая папка a\b\ , и Files API также не обрабатывает эту ситуацию корректно.
Owner

Один из вариантов решения - перед запуском проверять наличие файла или файловой группы.

Один из вариантов решения - перед запуском проверять наличие файла или файловой группы.
vpolezhaev added the
experiment-pipeline
label 2025-04-10 14:59:08 +00:00
Sign in to join this conversation.
No description provided.