Почему входящий SFTP (развернутый на Cloudhub) не удаляет файлы после завершения передачи

Этот вопрос очень тесно связан с this и это. С помощью коннектора SFTP потоковая передача включена по умолчанию и не может быть отключена (версия 3.5.2). Если у меня есть поток, подобный приведенному ниже

1) Входящий SFTP-коннектор с большой частотой опроса (например, в часах)

2) Исходящий файл для сохранения потока в файл в локальном хранилище

Здесь я ожидаю, что входящий SFTP удалит исходный файл после завершения передачи. (Но этого не происходит)

Читая документацию, я нахожу следующее

Автоудаление (применимо только к конечной точке входящего SFTP). Щелкните это поле, чтобы удалить файл после его прочтения. Примечание. Если при записи Mule в исходящую конечную точку возникает ошибка, файл не удаляется. Автоудаление работает только в том случае, если и входящие, и исходящие конечные точки используют транспорт SFTP.

Есть ли обходной путь для этого? В основном, как я могу удалить исходный файл после того, как я загрузил его с сервера SFTP?

Вышеупомянутое в основном связано с документацией, автоматическое удаление SFTP работает, даже если исходящий трафик не является соединителем SFTP. Я зарегистрировал JIRA об этом здесь

Обновление:

Я определил основную причину проблемы: выходные данные коннектора SFTP при развертывании в облачном хабе возвращают экземпляр класса java.io.ByteArrayInputStream, однако, когда приложение развертывается через Anypoint studio, выходными данными является экземпляр класса org.mule.transport.sftp.SftpInputStream.

Для воспроизведения убедитесь, что размер файла меньше 2 МБ.

Это приводит к тому, что файл не удаляется при развертывании в Cloudhub.

Журналы из CloudHub

Журналы Cloudhub

Журналы локального развертывания

2015-04-28 15:37:50 DEBUG SftpConnectionFactory:118 - Successfully connected to: sftp://decision_1:####@XXXXXXX:22/To_DI_Local
2015-04-28 15:37:50 DEBUG SftpClient:121 - Attempting to cwd to: /To_DI_Local
2015-04-28 15:37:50 DEBUG SftpConnector:121 - Successfully changed working directory to: /To_DI_Local
2015-04-28 15:37:50 DEBUG SftpMessageReceiver:121 - Routing file: ZCCR_EXTRACT_FINAL.CSV
**2015-04-28 15:37:50 INFO  LoggerMessageProcessor:193 - InputSFTPEndpoint org.mule.transport.sftp.SftpInputStream**
2015-04-28 15:37:50 DEBUG SftpMessageReceiver:121 - Routed file: ZCCR_EXTRACT_FINAL.CSV
2015-04-28 15:37:50 DEBUG SftpMessageReceiver:121 - Polling. Routed all 1 files found at sftp://decision_1:####@XXXXXX:22/To_DI_Local

2015-04-28 15:37:50 INFO LoggerMessageProcessor: 193 - InputSFTPEndpoint org.mule.transport.sftp.SftpInputStream

Мой поток выглядит так, как показано ниже

Тестовый поток

Обновление 2:

Однако, если файл большой, я думаю, что что-то около 10 МБ, тогда тип возврата - com.google.common.io.MultiInputStream, и файл удаляется.

Есть идеи, почему Cloudhub так себя ведет?


person Sudarshan    schedule 21.04.2015    source источник
comment
Использует ли исходящая конечная точка транспорт SFTP?   -  person vikingsteve    schedule 22.04.2015
comment
Нет, мне нужно обработать файл, не нужно загружать его на ftp-сервер   -  person Sudarshan    schedule 22.04.2015
comment
Хорошо, документы говорят, что автоудаление работает только в том случае, если входящие and исходящие конечные точки используют SFTP.   -  person vikingsteve    schedule 22.04.2015
comment
Да, это так, я предполагаю, что это часто не вариант использования, и, следовательно, может быть работа   -  person Sudarshan    schedule 22.04.2015
comment
Вы правы, это не кажется логичным вариантом использования.   -  person vikingsteve    schedule 22.04.2015
comment
Это действительно странно, теперь он удаляет исходный файл, я не знаю, как, и я ничего не менял (знаю, я звучу здесь глупо), как документация вводит в заблуждение !! Необязательно, чтобы исходящий трафик был конечной точкой SFTP ... Я удалю этот вопрос завтра и подниму заявку JIRA на форумах Mule.   -  person Sudarshan    schedule 22.04.2015
comment
Возможно, поток не закрывается. Можете ли вы разместить трансформатор сразу после входящего, чтобы просто использовать строку и проверить, удален ли файл?   -  person clare    schedule 22.04.2015
comment
У меня есть файл JIRA здесь mulesoft.org/jira/browse/MULE-8532   -  person Sudarshan    schedule 27.04.2015
comment
Есть новости по этому поводу? Почему файлы большего размера не удаляются при развертывании в Cloudhub? Любой обходной путь?   -  person Vatsal Mehta    schedule 27.08.2020


Ответы (1)


Я новичок в Mulesoft и столкнулся с той же проблемой. Я обнаружил, что Mulesoft блокирует файл, который он читает. В моем конкретном сценарии я читал файл, а затем загружал его в Fusion (облако). Mulesoft не удалял файл автоматически. Когда он снова запросит путь к папке, он увидит там тот же файл и попытается прочитать его снова. Что нам нужно было сделать, чтобы принудительно освободить файл, так это добавить массив байтов в строку. Похоже, это заставило Mulesoft полностью прочитать файл и преобразовать полезную нагрузку, которая сняла блокировку с файла.

person smcdonald    schedule 20.03.2017
comment
Это решение не будет масштабироваться для больших файлов, так как для чтения в память требуется весь файл. - person Sudarshan; 20.03.2017