blob: 158b4e3e1248442f68a7be02a769e899e65b0ac4 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
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
|