...
- Minimize change to the user via the API
- Retain URLs of migrated Fedora resources
- Compliance with OCFL
- Do not allow OCFL-isms from bleeding into Fedora API
- Rebuildability
- Compliance with OCFL
- Retain URLs of migrated Fedora resources
- Performance Reduce complexity of implementation
- Performance
- Reduce complexity of implementation
Issues being addressed
Based on feedback from users of Fedora 4 and 5, the design for the next major release of Fedora will address the following issues:
Preservation persistence
The notions of "completeness" and "transparency" are important when it comes to how a preservation repository persists its resources (metadata and binaries) to storage. The resources in storage should be "complete" in the sense that Fedora should be able to rebuild its indexes based on what is stored on disk as files. The documented transparency of those persisted files also allows for other applications to consume those resources. See section below: OCFL Persistence.
Query service
The ability to query Fedora for basic information regarding the contents of the repository has been a missing feature in Fedora 4 and 5. This design will include a simple query service for inspecting all of the Fedora resources or resources based on specific attributes. See section below: Query service.
OCFL persistence
Architecture
...
- Provide new implementation of fcrepo-kernel-api that interacts with OCFL persistence
- Interactions with OCFL persistence should initially take advantage of the JHU OCFL client
- For pre-existing OCFL storage hierarchies, Fedora-imposes the following constraint:
- The OCFL storage hierarchy must have a single, consistent "ocfl_layout" (i.e. the storage path mapping algorithm must be determinant)
- Many members: performance should improve significantly since list of members will be supplied by a database index (which should support a degree of in-memory caching)
Deleting tombstone of OCFL Object purges the Object
Deleting tombstone of "constituent part" is not supported (405)
Prototyping proposal
- Expose JHU OCFL client functionality with minimal HTTP endpoints
- Such an endpoint should implement minimal LDP interactions
- Use HTTP over OCFL to test:
- Performance bottlenecks
- Scale viability (e.g. NLM migration)
- User expectations, ergonomics
...
- Requirements:
- Check fixity of binary resource(s) by comparing computed value with stored value
- Check fixity of binary resource(s) given a specific set of Fedora object rdf:types
- Persist results of fixity check
- In log file?
- In database?
- In Fedora?
- Scheduled fixity service:
- Probably not part of the core
- Run as a separate service (see: Riprap)
- Potentially implemented as a circular queue of Fedora resources, ordered by "last fixity check" date property on Fedora resource
- Retain "fedora:hasFixityService" triple or header
- At the OCFL-level, interest in providing fixity over an OCFL storage hierarchy
Query service
- Should also consider this "Query Service Specification"
- Proposal: Query service / endpoint should support the following queries:
- List all resources
- List resources by mimetype
- List resources by parent
- List resources by mimetype, parent, and modified date (<>=)
- List resources where modified <> x date
- Open questions around scope of resources to be searchable
- Fedora resources?
- Resources defined in RDF documents within the repository?
- Hash URIs?
- Open questions around properties to support
- Server-managed triples?
- All properties?
- Triplestore not necessarily required
...
- Proposal: no change to the Fedora API spec in 6
- We will either:
- align code with the (as-yet-to-be-ratified) side-car specification
- leave HTTP API unchanged while introducing the possibility of auto-versioning on transaction completion
- Potentially store updates within a transaction in a "txn/" directory at the sibling-level with OCFL version directories
- Support actions on multiple OCFL objects within a single transaction
Deleting tombstone of OCFL Object purges the Object
Deleting tombstone of "constituent part" is not supported (405)