[
https://issues.apache.org/jira/browse/CAMEL-26337?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Parker Mauney updated CAMEL-26337:
----------------------------------
Description:
The {{readLock}} option on the ftp, ftps and sftp endpoints shares its metadata
with {{{}GenericFileEndpoint{}}}, so the published enum is the file
component's: {{{}none, markerFile, fileLock, rename, changed, idempotent,
idempotent-changed, idempotent-rename{}}}. The text marks the three
{{idempotent*}} values "(only for file component)", but
{{FtpProcessStrategyFactory}} and {{SftpProcessStrategyFactory}} only build a
lock for {{{}none{}}}, {{rename}} and {{changed}} and return {{null}} for
anything else, with no warning or validation error.
So an SFTP consumer with {{readLock=idempotent-changed}} runs with no read lock
at all and downloads files as soon as they are listed, including files still
being uploaded (truncated at a 16 KB boundary) and files that are still 0
bytes. Nothing in the logs says the lock is missing.
Reproducer (camel-4.23.0):
{code:java}
Map<String, Object> params = Map.of("readLock", "idempotent-changed");
GenericFileProcessStrategy<FTPFile> strategy =
new FtpProcessStrategyFactory().createGenericFileProcessStrategy(new
DefaultCamelContext(), params);
GenericFileExclusiveReadLockStrategy<FTPFile> lock =
((GenericFileProcessStrategySupport<FTPFile>)
strategy).getExclusiveReadLockStrategy();
assertNotNull(lock); // null; "changed" gives
FtpChangedExclusiveReadLockStrategy
{code}
Same for {{{}SftpProcessStrategyFactory{}}}, {{idempotent}} and
{{{}idempotent-rename{}}}.
Expected: endpoint creation fails (or at least warns) when {{readLock}} names a
strategy the remote component does not implement. It would also help to limit
the enum in the ftp/ftps/sftp metadata to {{none, rename, changed}} so the
docs, the endpoint DSL and {{camel validate}} stop advertising the file-only
values.
I know the idempotent locks are file-only by design (found in a users@ thread
from Nov 2020, and the CAMEL-25016 PR notes). This is concerned with the silent
acceptance and the component docs. Happy to send a PR for the validation if
that is the preferred fix.
was:
The {{readLock}} option on the ftp, ftps and sftp endpoints shares its metadata
with {{{}GenericFileEndpoint{}}}, so the published enum is the file
component's: {{{}none, markerFile, fileLock, rename, changed, idempotent,
idempotent-changed, idempotent-rename{}}}. The text marks the three
{{idempotent*}} values "(only for file component)", but
{{FtpProcessStrategyFactory}} and {{SftpProcessStrategyFactory}} only build a
lock for {{{}none{}}}, {{rename}} and {{changed}} and return {{null}} for
anything else, with no warning or validation error.
So an SFTP consumer with {{readLock=idempotent-changed}} (and, say,
{{{}readLockCheckInterval=100&readLockTimeout=5000{}}}) runs with no read lock
at all and downloads files as soon as they are listed, including files still
being uploaded (truncated at a 16 KB boundary) and files that are still 0
bytes. Nothing in the logs says the lock is missing.
Reproducer (camel-4.23.0):
{code:java}
Map<String, Object> params = Map.of("readLock", "idempotent-changed");
GenericFileProcessStrategy<FTPFile> strategy =
new FtpProcessStrategyFactory().createGenericFileProcessStrategy(new
DefaultCamelContext(), params);
GenericFileExclusiveReadLockStrategy<FTPFile> lock =
((GenericFileProcessStrategySupport<FTPFile>)
strategy).getExclusiveReadLockStrategy();
assertNotNull(lock); // null; "changed" gives
FtpChangedExclusiveReadLockStrategy
{code}
Same for {{{}SftpProcessStrategyFactory{}}}, {{idempotent}} and
{{{}idempotent-rename{}}}.
Expected: endpoint creation fails (or at least warns) when {{readLock}} names a
strategy the remote component does not implement. It would also help to limit
the enum in the ftp/ftps/sftp metadata to {{none, rename, changed}} so the
docs, the endpoint DSL and {{camel validate}} stop advertising the file-only
values.
I know the idempotent locks are file-only by design (found in a users@ thread
from Nov 2020, and the CAMEL-25016 PR notes). This is concerned with the silent
acceptance and the component docs. Happy to send a PR for the validation if
that is the preferred fix.
> camel-ftp - readLock=idempotent, idempotent-changed and idempotent-rename are
> accepted on FTP/FTPS/SFTP endpoints but produce no read lock
> ------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: CAMEL-26337
> URL: https://issues.apache.org/jira/browse/CAMEL-26337
> Project: Camel
> Issue Type: Bug
> Components: camel-ftp, camel-sftp
> Affects Versions: 4.22.2, 4.23.0
> Reporter: Parker Mauney
> Priority: Minor
>
> The {{readLock}} option on the ftp, ftps and sftp endpoints shares its
> metadata with {{{}GenericFileEndpoint{}}}, so the published enum is the file
> component's: {{{}none, markerFile, fileLock, rename, changed, idempotent,
> idempotent-changed, idempotent-rename{}}}. The text marks the three
> {{idempotent*}} values "(only for file component)", but
> {{FtpProcessStrategyFactory}} and {{SftpProcessStrategyFactory}} only build a
> lock for {{{}none{}}}, {{rename}} and {{changed}} and return {{null}} for
> anything else, with no warning or validation error.
> So an SFTP consumer with {{readLock=idempotent-changed}} runs with no read
> lock at all and downloads files as soon as they are listed, including files
> still being uploaded (truncated at a 16 KB boundary) and files that are still
> 0 bytes. Nothing in the logs says the lock is missing.
> Reproducer (camel-4.23.0):
> {code:java}
> Map<String, Object> params = Map.of("readLock", "idempotent-changed");
> GenericFileProcessStrategy<FTPFile> strategy =
> new FtpProcessStrategyFactory().createGenericFileProcessStrategy(new
> DefaultCamelContext(), params);
> GenericFileExclusiveReadLockStrategy<FTPFile> lock =
> ((GenericFileProcessStrategySupport<FTPFile>)
> strategy).getExclusiveReadLockStrategy();
> assertNotNull(lock); // null; "changed" gives
> FtpChangedExclusiveReadLockStrategy
> {code}
> Same for {{{}SftpProcessStrategyFactory{}}}, {{idempotent}} and
> {{{}idempotent-rename{}}}.
> Expected: endpoint creation fails (or at least warns) when {{readLock}} names
> a strategy the remote component does not implement. It would also help to
> limit the enum in the ftp/ftps/sftp metadata to {{none, rename, changed}} so
> the docs, the endpoint DSL and {{camel validate}} stop advertising the
> file-only values.
> I know the idempotent locks are file-only by design (found in a users@ thread
> from Nov 2020, and the CAMEL-25016 PR notes). This is concerned with the
> silent acceptance and the component docs. Happy to send a PR for the
> validation if that is the preferred fix.
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)