Почему DefaultFileMonitor продолжает перечислять файлы в моем расположении FTP в цикле? - PullRequest
0 голосов
/ 07 июня 2010

Отредактированная версия кода Java:

FileSystemOptions opts = new FileSystemOptions();
DefaultFileSystemConfigBuilder.getInstance().setUserAuthenticator(opts, auth);

// fileToMonitor is the FTP folder.                  
LOG.debug("Trying to resolve file " + fileToMonitor + "...");
FileObject fo = fileSystemManager.resolveFile(fileToMonitor, opts);

LOG.debug("File resolved, attempting to add to DefaultFileMonitor...");
DefaultFileMonitor monitor = createFileMonitor(processor);

// This line causes PORT and LIST commnads to be sent to the FTP server
monitor.addFile(fo);
LOG.debug("File successfully, added to DefaultFileMonitor");

Я наблюдал за сетевым трафиком, и, похоже, что при добавлении местоположения FTP к монитору, он отправляет команды PORT и LIST в две папки на сервере. Проблема в том, что он продолжает это делать (предположительно, до тех пор, пока у него не закончатся клиентские порты для звонков?.

Вот выдержка из сетевого трафика FTP:

50         0.312500           {TCP:2, IPv4:0}  FTP      FTP:Request from Port 12620,'PORT xxx,xxx,xxx,xxx,49,114'
51         0.312500           {TCP:2, IPv4:0}  FTP      FTP:Response to Port 12620, '200  PORT command successful.'
52         0.312500           {TCP:2, IPv4:0}  FTP      FTP:Request from Port 12620,'LIST tmp/dump'
<snipped>
270       1.750000           {TCP:2, IPv4:0}  FTP      FTP:Request from Port 12620,'PORT xxx,xxx,xxx,xxx,49,115'
271       1.750000           {TCP:2, IPv4:0}  FTP      FTP:Response to Port 12620, '200  PORT command successful.'
272       1.750000           {TCP:2, IPv4:0}  FTP      FTP:Request from Port 12620,'LIST tmp'
<snipped>
343       2.296875           {TCP:2, IPv4:0}  FTP      FTP:Request from Port 12620,'PORT xxx,xxx,xxx,xxx,49,116'
344       2.312500           {TCP:2, IPv4:0}  FTP      FTP:Response to Port 12620, '200  PORT command successful.'
345       2.312500           {TCP:2, IPv4:0}  FTP      FTP:Request from Port 12620,'LIST tmp/dump'
<snipped>
560       3.687500           {TCP:2, IPv4:0}  FTP      FTP:Response to Port 12620, '226  Transfer complete.'
566       4.031250           {TCP:2, IPv4:0}  FTP      FTP:Request from Port 12620,'PORT xxx,xxx,xxx,xxx,49,118'
567       4.031250           {TCP:2, IPv4:0}  FTP      FTP:Response to Port 12620, '200  PORT command successful.'
568       4.031250           {TCP:2, IPv4:0}  FTP      FTP:Request from Port 12620,'LIST tmp'
<repeat>

Эта часть является ответом от команды LIST. Обратите внимание, что команды повторяются для одних и тех же папок, но порт меняется каждый раз. Это не происходит, если в этих местах нет файлов.

Чем вызвано такое поведение и как я могу изменить его, чтобы отправляющие извлекали данные только один раз?

Edit: Я сузил проблему до метода getChildren () в FileObject.

Это единственная интернет-ссылка, которую я смог найти: http://mail-archives.apache.org/mod_mbox/commons-user/201005.mbox/%3C4c03ed10.0d01df0a.53c3.059c@mx.google.com%3E

1 Ответ

0 голосов
/ 08 июня 2010

Я обнаружил, что это ошибка в FTPFileObject в VFS.

https://issues.apache.org/jira/browse/VFS-114?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel

Я собрал еще одну банку из последнего исходного кода, и проблема исчезла.

...