Skip to content

Conversation

korydraughn
Copy link

@korydraughn korydraughn commented Aug 14, 2025

This PR updates support for iRODS by replacing Jargon (legacy iRODS library) with irods4j.

The foundational work was implemented by @MINGYJ, a recent iRODS intern. My commits are mainly polish and corrections around the use of the irods4j library.

Basic functionality is working - i.e. single stream uploads/downloads, renames, editing, etc.

The parallel transfer implementation doesn't appear to be working as intended. This is likely due to not having a full understanding of how the Cyberduck components fit together - i.e. Read/WriteFeature vs Upload/DownloadFeature.

Here are the steps for performing parallel transfer (i.e. multipart uploads) in iRODS.

Putting in draft for now. Feedback and guidance on how to implement proper support for parallel transfer would be greatly appreciated.

Resolves #14449.

Comment on lines +780 to +791
# iRODS configuration
# -------------------
irods.client_negotiation_policy=CS_NEG_REFUSE
# Local files exceeding the following size will trigger use of parallel transfer.
# Normally defaults to 32MB in iRODS clients.
irods.parallel_transfer.size_threshold=33554432
# The number of threads used for parallel transfer.
irods.parallel_transfer.thread_count=3
# The size of the buffer used for reading during parallel transfer.
irods.parallel_transfer.rbuffer_size=4194304
# The size of the buffer used for writing during parallel transfer.
irods.parallel_transfer.wbuffer_size=4194304
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Might drop these changes if there's a more appropriate location.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remove this file.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remove this file.

Comment on lines +46 to +48
// TODO If we're dealing with a collection, should existing data objects sharing
// the same name be overwritten? This should probably be a configurable option.
IRODSFilesystem.copy(conn.getRcComm(), from, to, IRODSFilesystem.CopyOptions.RECURSIVE);
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Handle TODO

Comment on lines +61 to 63
// TODO Shouldn't these be updated after the operation?
deleted.add(file);
callback.delete(file);
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Handle TODO

Comment on lines +93 to +94
// TODO Clamp the value so that users do not specify something ridiculous.
final int threadCount = 3; //preferences.getInteger("irods.parallel_transfer.thread_count");
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Handle TODO

Comment on lines +168 to +172
// TODO Make this configurable.
executor.awaitTermination(5, TimeUnit.SECONDS);

// TODO Make this configurable.
final String fingerprintValue = IRODSFilesystem.dataObjectChecksum(primaryConn, logicalPath);
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Handle TODO

Comment on lines +26 to +28
// assertTrue(new IRODSExceptionMappingService().map(new CatNoAccessException("no access")) instanceof AccessDeniedException);
// assertTrue(new IRODSExceptionMappingService().map(new FileNotFoundException("no file")) instanceof NotfoundException);
// assertTrue(new IRODSExceptionMappingService().map(new AuthenticationException("no user")) instanceof LoginFailureException);
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Restore once mapper is updated.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remove this file.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remove this file.

@CLAassistant
Copy link

CLA assistant check
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.
You have signed the CLA already but the status is still pending? Let us recheck it.


# iRODS configuration
# -------------------
irods.client_negotiation_policy=CS_NEG_REFUSE
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Expose iRODS options for secure communication and various other options.

@korydraughn
Copy link
Author

@dkocher Can you provide the Entity CLA?

@dkocher dkocher changed the title [#14449] Update support for iRODS Update support for iRODS Sep 1, 2025
@dkocher
Copy link
Contributor

dkocher commented Sep 1, 2025

Putting in draft for now. Feedback and guidance on how to implement proper support for parallel transfer would be greatly appreciated.

Discussed in #14449 (comment)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

PAM passwords not handled correctly
3 participants