New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Clarify whether and OCFL Object Root may contain other files/directories not specified #373
Comments
this issue also relates to discussion in #367 |
we decided that we would like to go with:
this is similar to decisions that BagIT has made https://tools.ietf.org/html/rfc8493#section-3
|
* updates object structure section. fixes #373 * line length * fix paragraph * pretty formatting
I'd like to revisit this ticket and discuss changing the language from
to
|
I wonder whether, if we make the change to allow additional directories, it might be better to allow a specific additional directory rather than any files or directories. If we wanted to avoid implying a suggested use then a generic name could be picked (e.g. |
var - because it can be variable? cf linux filesystem hierarchy too. It also sorts at the end of the version directories for mutable head peeps. |
...also abbreviation for version-at-risk :) |
|
Specifying "OCFL Objects MAY include a |
Hi. Pot stirrer here. What's the difference between var and log? In #320 there is discussion of using the log directory for this very purpose but then it's abandoned. I want to make sure that we don't end up back in this same loop of a conversation. |
I don't recall why we stopped talking about
One could, I suppose, generalize the description of |
My take is for |
I like this language
Because it is more general and I'm really not interested in adding more and more directories every time an implementation comes up with some new directory they need for whatever reason. That being said, I would like to talk about this in next week's meeting to make sure we are all on the same page because I recognize that @ahankinson and @julianmorley haven't weighed in yet. |
I'm not so keen on I'm less interested in what we call it than the mechanics of how it works. Logs is completely unstructured because we felt that it was important to keep a log of actions, but that those actions don't affect the content. This is specifically about the content, so if we are going to do it I think we MUST specify its behaviours. I think there are some bigger questions that we need to decide on:
|
My thinking on the mutable-head directory ( In other words, its contents would pass a run of a validator, with the exception that its I believe that also answers question (2.) above. |
I really don't want OCFL to have to specify behaviour, it is a location for out-of-band, implementation specific stuff. It's there so when migration/recovery needs to happen, we know there are some dangling bits there that will need resolving. That beign said, I've just posted some Implementation Notes that outline a not-completely-dumb thing to do with |
@awoods is there any danger that the |
and then what happens to resolve it? |
Why would it matter, @ahankinson? |
Situation:
|
...and version forking is something we need to consider for V2. |
But if we haven't specified behaviours, it's entirely within the spec to do this. Some clients SHOULD support it, others don't have to. It couldn't happen at any time now because versions are sequential and writing a new version writes a sequential number. Also the inventory.json is directly derived from the most immediately preceding version at time of accession. Yes, multiple clients can work on the content. This is the point of the "Folder structure as API" idea. |
If we're implementing "mutable head" then |
OCFL mandates no behaviours, just the eventual layout. The Implementation Notes are suggestions for rational behaviour. Mutable head is just one use for |
I am not saying that it mandates behaviours. OCFL as written, however, presents a structured way of managing change. This proposal throws those managed behaviours in disarray, since it injects a non-sequential method of producing versions -- basically a non-resolveable fork that may or may not resolve into some version. If we want that to be the next version, then we need to specify that, and we should not call it Otherwise we will end up with just a folder system that imposes spec overhead with no practical benefit. You can have an OCFL object with no versions, at which point there's not really much use in using OCFL, is there? |
Hmm, maybe we reduce this to no more than... If a standard OCFL client encounters |
I hear what @ahankinson is saying about the complications that are introduced with the forking. I think if I were implementing this, I might do something like the following:
To me, some of the issues @ahankinson has described that involve multiple clients mutating OCFL objects with different expectations are configuration issues. If you are using multiple different clients on the same OCLF repository that have different ways of doing things, of course you're going to run into problems. It's also a problem if they don't both map object ids to paths in the same way, for example. If you want your repository to support a mutable head, then you should only access the repository with clients that support it. |
That said, you are in a bad place if a new version is created while there is still unversioned content under |
Agreed, if you have multiple clients writing to your store and you don't know if they agree on how objects work you have far bigger problems. Even vanilla OCFL does not (can not) specify how simultaneous updates are managed between clients. Personally, I don't like the idea of mutable head or partially assembled versions in an OCFL object. However, |
A little late to the party, but this does seem like one plausible way forward among many:
As it stands now, any extension along these lines would violate the spec, due to an absolute prohibition on additional files directories in an object root, except those explicitly enumerated. Allowing a Altering the spec to say an object root |
Thanks @birkland for writing what I was just about to. The conversation in this thread has convinced me we should take the simplest approach -- switch the language from |
I would prefer to keep a named directory...just so a vanilla client/person coming to the object can easily tell if there are version extensions in use or not and act accordingly. |
There seems to be rough consensus on allowing additional files in the object. Like @neilsjefferies, I would prefer allowing just a named directory for tighter validation and easier client checks. I like language along the lines of @awoods suggestion "OCFL Objects MAY include a |
I am definitely NOT in favour of calling it |
How about |
Hmmm... I thought |
One outstanding question is whether we want this "yet-unnamed-directory" to be specific to the mutable-head use case, or open to any, potentially yet unforeseen use case? |
How about this?
|
@woods Not just mutable-head so I like @ahankinson's suggestion for a namespace below. However, we can't completely ignore it - if it exists then clients that are not compatible must not attempt to update an object. |
That leads us in to murkier waters, since it is possible that there can be non-content extensions. It might be possible, for example, to have an extension to store lossy derivatives of lossless content. (I'm thinking on the fly here). That would exist outside of the versioning flow, so clients could safely ignore it. |
...which would be why I suggested |
I don't think we can simultaneously propose a mechanism for extending the core functionality of the spec into non-core territory, while also specifying how clients should act when they see that. Either we're completely hands-off, including validation of extension components, or we specify the behaviours of the 'mutable head' in the core. |
I think there is possible middle ground along the lines of "implementations MAY use the ABC extension mechanism, clients that do not understand the specific extension MUST/MUST-NOT do XYZ" |
I don't know that we'll be able to pre-determine the value of "XYZ" beforehand. It could be about versioning, or it could be something that we have not anticipated. |
Yup, that is the tricky bit. For digests we say "Optional fixity algorithms that are not supported by a client must be ignored by that client." (https://ocfl.io/draft/spec/#digests) |
So since extensions are, by definition, not covered by the spec, I think we need to adopt a similar approach. "Extension behaviours not covered by the spec must be ignored by clients that do not implement those extension behaviours". |
Which means that non-extension aware clients can't assume any additional behaviours that are dependent on specific extensions being present. Especially since it's possible to have extensions in some OCFL objects in a storage root, but not in others. :-/ |
Related issue: "Add 'extensions' support to spec" - #403 |
Superseded by #403 |
By my reading of 3. OCFL Object it is not clear whether files or directories not specified in section 3 (conformance decl., version dirs, inventory, inventory checksum, logs dir) are permitted. I think we should add language to 3.1 Object Structure along the lines of either:
or:
(or one could allow just files, or just directories)
The text was updated successfully, but these errors were encountered: