Merritt is the digital preservation repository for the University of California, available to libraries, academic departments, laboratories and other organizational units within UC.
- For the latest Merritt documentation, see the wiki.
- Manifest Validation Tool
- Manifest Validation Tool with Unit Tests
- Merritt Development Resources
- A system-specific dataflow diagram is available via each of the below code repository README files.
%%{init: {'theme': 'neutral', 'securityLevel': 'loose', 'themeVariables': {'fontFamily': 'arial'}}}%%
graph TD
accTitle: Merritt repository core microservices diagram
accDescr {
Flowchart displaying interactions and dataflow across all Merritt repository microservices.
This flowchart illustrates the dataflow of new content when it is submitted to the repository via its web-based user interface (UI).
Beginning with the UI, a user logs in to Merritt, a process that is managed by the LDAP service. When a submission is uploaded to a collection via the UI,
data flows to the Ingest microservice. At this time, Ingest communicates with the Zookeeper (ZK) service to generate batch data in the ZK queue.
It also talks to the EZID service to aquire an Archival Resource Key that will be used as the primary identifier for the resulting object in the system.
Ingest downloads the user's content to an intermediate staging volume, which is established with Amazon FSx for OpenZFS. The Storage microservice then tracks
the downloaded data using a manifest file. Storage uses the manifest to obtain the location of each content file and uploads files to cloud storage.
At this time, the file in cloud storage is checked for integrity. Finally, the Inventory microservice fetches data from the ZK queue and writes metadata to
Merritt's central inventory database. This completes the deposit workflow. If a user chooses to download an object or individual file from the repository,
a retrieval request is sent from the UI to Merritt's Access microservice. A package or file is then made available for download via a secure, AWS
presigned URL that is provided to the user's web browser. The download then commences.
}
RDS[(Inventory DB)]
UI("Merritt UI")
click UI href "https://github.com/CDLUC3/mrt-dashboard" "source code"
ING(Ingest)
click ING href "https://github.com/CDLUC3/mrt-ingest" "source code"
ST(Storage)
click ST href "https://github.com/CDLUC3/mrt-store" "source code"
STACC(Storage - Access)
click STACC href "https://github.com/CDLUC3/mrt-store" "source code"
INV(Inventory)
click INV href "https://github.com/CDLUC3/mrt-inventory" "source code"
CLOUD(("Cloud Storage"))
click CLOUD href "https://github.com/CDLUC3/mrt-cloud" "source code"
LDAP[/LDAP\]
ZFS[/ZFS Working Storage/]
ZOO>Zookeeper]
click ZOO href "https://github.com/CDLUC3/mrt-zoo" "source code"
EZID(EZID Service)
click EZID href "https://ezid.cdlib.org/" "service link"
BROWSER[[Browser]]
subgraph flowchart
BROWSER --> |ingest or retrieval| UI
UI --> |authorization| LDAP
RDS --> UI
UI --> |"file or ingest manifest"| ING
ING --> |queue job| ZOO
ING --> |check obj lock| ZOO
ZOO --> |start job| ING
ING -.-> |local id request| INV
ING --> EZID
ING --> |download content| ZFS
ING --> |"sync deposit"| ST
ST --> CLOUD
ZFS --> ST
ZOO --> INV
INV -.-> |retrieve storage manifest| ST
INV --> RDS
UI ---> |retrieval req| STACC
STACC --> |retrieval req| CLOUD
CLOUD -.-> |presigned URL| STACC
STACC -.-> |presigned URL| UI
CLOUD -.-> |presigned retrieval| BROWSER
end
style CLOUD fill:#77913C
style RDS fill:#F68D2F
style LDAP fill:cyan
style ZOO fill:cyan
style EZID fill:cyan
classDef FOCUS stroke:red,stroke-width:5px,fill:yellow
Code Repositories
- Ruby
- Java
- Java
- Java and Ruby
- Merritt ZK (created in 2024)
- Ruby
- SSM Gem - Shared with other UC3 services
- Merritt Atom - Nuxeo processing for ingest
- Uses Ruby Ingest
- Merritt Testing
- Java
- Ruby
- Docker
- Other
- Python
- Merritt Build System Design
- Merritt Tomcat Deploy
- Merritt Service Release Manifest
- Merritt Sceptre Scripts
- Deprecated?