[ 
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)

Reply via email to