Pelican's notion of "recursive" transfers -- Does it make any sense? #1558
Replies: 1 comment 1 reply
-
A lot of use cases are going to involve copying files on a traditional POSIX filesystem to and from objects in a Pelican federation. So, any Pelican UI that works with a filesystem should have some mapping between paths on a filesystem and names of objects. What makes this is interesting is the fact that object names are more permissive that filesystem paths. I can have two distinct objects with names Inspired by Amazon S3's treatment of "folders", what this suggests (to me) is that such a UI:
Then, we can always treat a filesystem path |
Beta Was this translation helpful? Give feedback.
-
Recent conversation surrounding the Pelican plugin for HTCondor has me thinking about how we treat "recursive" transfers in our various clients. Consider the following:
If you run this command as is, Pelican throws the error:
ERROR[2024-08-14T17:11:38Z] Failure putting my-directory: failed upload to : read my-directory: is a directory (0s since start)
If Pelican already knows the object I'm trying to PUT from the local filesystem is not an object but a directory, why do we require
--recursive
to make it work? Perhaps we're protecting users by forcing them to recognize there's some internal expansion going on?On the other hand, a recursive GET might look like:
pelican object get --recursive pelican://osg-htc.org/some/prefix/path .
In this case, we're trying to convey to Pelican "Transfer everything under /some/prefix/path". If the origin hosting this prefix happens to be POSIX, there's an implicit assumption that
/some/prefix/path
is a directory with files, and potentially subdirectories. But we as Pelican developers claim we only understand objects, so this violates our principles. Even worse, if the origin exports a true object store, like S3 origins do, then "recursive" doesn't translate because there's nothing "beneath" the prefix -- to me it feels like the correct syntax for this is actually a glob pattern:pelican object get pelican://osg-htc.org/some/prefix/path/*
How can we clean some of this up in the client to present a cohesive picture of what Pelican does and what it doesn't do?
Beta Was this translation helpful? Give feedback.
All reactions