diff options
| author | Stefan Boberg <[email protected]> | 2026-03-23 12:23:19 +0100 |
|---|---|---|
| committer | GitHub Enterprise <[email protected]> | 2026-03-23 12:23:19 +0100 |
| commit | 26aa50677403e4c5ad053b221bc7264fe1d249f2 (patch) | |
| tree | de196528390e8875b0551d52071038120d969f73 /docs/projects.md | |
| parent | Process management improvements (#881) (diff) | |
| download | zen-26aa50677403e4c5ad053b221bc7264fe1d249f2.tar.xz zen-26aa50677403e4c5ad053b221bc7264fe1d249f2.zip | |
Documentation updates (#882)
Restructured the docs folder in preparation for more docs. Improved the contents a bit.
Diffstat (limited to 'docs/projects.md')
| -rw-r--r-- | docs/projects.md | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/docs/projects.md b/docs/projects.md new file mode 100644 index 000000000..158b4e3e1 --- /dev/null +++ b/docs/projects.md @@ -0,0 +1,123 @@ +# Project Store + +The Project Store service provides per-project storage for asset metadata, +editor state, and other project-specific data. Unlike the cache, which stores +ephemeral derived data, the project store manages persistent data that tracks +the state of an Unreal Engine project. + +## Concepts + +### Project + +A project is a named container identified by an alphanumeric string (with +underscores and dots allowed). Each project holds one or more operation logs. + +One project typically corresponds to a project (`.uproject`) on disk, and +will generally hold one operation log per cooked platform. + +### OpLog (Operation Log) + +An operation log is a sequential transaction log associated with a build target +or variant within a project. Each oplog tracks changes as an ordered sequence of +operations, identified by a Log Sequence Number (LSN). The operation log is +append-only and entries are immutable once written. + +### Operation Log Entry (Op) + +An atomic unit in the oplog. Most operations correspond to a cooker package save +and will contain data associated with that asset. Each operation has: + +- **Key** — a unique OID identifier determined by the client. This is typically derived from the asset name associated with the entry. +- **LSN** — its position in the oplog sequence +- **Metadata** — free-form structured data used by the cooker/editor +- **Data** — the operation payload (structured or unstructured) +- **Attachments** — referenced binary chunks stored in CAS + +An oplog may have more than one oplog entry with the same Key. In this case the entry which the highest LSN (i.e the most recent entry) +will be considered "current" and will be served if a client requests data for a particular Key. + +### Chunk + +A binary data blob referenced by operation log entries. Chunks are stored in CAS and +identified by their content hash, providing automatic deduplication. + +## API + +**Base URI:** `/prj/` + +### Project Management + +``` +GET /prj/ # List all projects +POST /prj/{project} # Create a project +PUT /prj/{project} # Update project metadata +GET /prj/{project} # Get project info +DELETE /prj/{project} # Delete a project +``` + +### OpLog Management + +``` +GET /prj/{project}/oplog/{target} # Get oplog info (head LSN) +POST /prj/{project}/oplog/{target} # Create oplog +PUT /prj/{project}/oplog/{target} # Update oplog +DELETE /prj/{project}/oplog/{target} # Delete oplog +``` + +### Operations + +``` +GET /prj/{project}/oplog/{target}/entries # List operations with LSN +GET /prj/{project}/oplog/{target}/{lsn} # Get operation by LSN +POST /prj/{project}/oplog/{target}/new # Create new operation +POST /prj/{project}/oplog/{target}/batch # Batch create operations +``` + +### Chunks + +``` +POST /prj/{project}/oplog/{target}/prep # Prepare chunk uploads +GET /prj/{project}/oplog/{target}/{chunk} # Get chunk by ID +GET /prj/{project}/oplog/{target}/{chunk}/info # Get chunk metadata +GET /prj/{project}/oplog/{target}/chunkinfos # Batch chunk info +GET /prj/{project}/oplog/{target}/files # List files in oplog +``` + +### Import / Export + +``` +POST /prj/{project}/oplog/{target}/save # Export oplog +GET /prj/{project}/oplog/{target}/load # Import oplog +``` + +### Validation + +``` +POST /prj/{project}/oplog/{target}/validate # Validate oplog integrity +``` + +### Detailed Inventory + +``` +GET /prj/details$ # All projects +GET /prj/details$/{project} # Single project +GET /prj/details$/{project}/{target} # OpLog details +GET /prj/details$/{project}/{target}/{chunk} # Operation details +``` + +Add `?csv=true` for CSV output, `?details=true` for size information, or +`?attachmentdetails=true` for full attachment listings including CAS references. + +## Storage Lifecycle + +Project store entries have configurable expiration. Expired entries are removed +during garbage collection. The expiration duration is set globally via the +`MaxProjectStoreDuration` configuration parameter. + +## Web Dashboard + +The Projects page in the dashboard shows: + +- List of all registered projects +- Per-project oplog details and operation counts +- Storage usage per project |