139 lines
2.1 KiB
Markdown
139 lines
2.1 KiB
Markdown
|
|
# ASL/STORE-LAYOUT/1 -- On-Disk Store Layout
|
||
|
|
|
||
|
|
Status: Draft
|
||
|
|
Owner: Architecture
|
||
|
|
Version: 0.1.0
|
||
|
|
SoT: No
|
||
|
|
Last Updated: 2026-01-17
|
||
|
|
Tags: [ops, store, layout, filesystem]
|
||
|
|
|
||
|
|
**Document ID:** `ASL/STORE-LAYOUT/1`
|
||
|
|
**Layer:** O2 -- Operational layout profile
|
||
|
|
|
||
|
|
**Depends on (normative):**
|
||
|
|
|
||
|
|
* `ASL-STORE-INDEX`
|
||
|
|
|
||
|
|
**Informative references:**
|
||
|
|
|
||
|
|
* `ASL/HOST/1`
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 0. Conventions
|
||
|
|
|
||
|
|
The key words **MUST**, **MUST NOT**, **REQUIRED**, **SHOULD**, and **MAY** are to be interpreted as in RFC 2119.
|
||
|
|
|
||
|
|
ASL/STORE-LAYOUT/1 defines a recommended filesystem layout for an ASL store. It does not define semantic behavior.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 1. Purpose
|
||
|
|
|
||
|
|
Provide a practical, POSIX-friendly on-disk layout that preserves ASL store semantics while remaining compatible with ZFS or other backends.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 2. Minimum Required Components (Informative)
|
||
|
|
|
||
|
|
An ASL store requires:
|
||
|
|
|
||
|
|
* Immutable blocks
|
||
|
|
* Append-only log
|
||
|
|
* Sealed snapshots
|
||
|
|
* Deterministic replay
|
||
|
|
|
||
|
|
Directory layout is an implementation choice. This document defines a recommended layout.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 3. Recommended Domain Layout
|
||
|
|
|
||
|
|
Per domain, use:
|
||
|
|
|
||
|
|
```
|
||
|
|
/asl/domains/<domain-id>/
|
||
|
|
meta/
|
||
|
|
blocks/
|
||
|
|
index/
|
||
|
|
log/
|
||
|
|
snapshots/
|
||
|
|
tmp/
|
||
|
|
```
|
||
|
|
|
||
|
|
All paths are domain-local.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 4. Blocks
|
||
|
|
|
||
|
|
```
|
||
|
|
blocks/
|
||
|
|
open/
|
||
|
|
blk_<uuid>.tmp
|
||
|
|
sealed/
|
||
|
|
00/
|
||
|
|
<blockid>.blk
|
||
|
|
ff/
|
||
|
|
<blockid>.blk
|
||
|
|
```
|
||
|
|
|
||
|
|
Rules:
|
||
|
|
|
||
|
|
* Open blocks are never visible.
|
||
|
|
* Sealed blocks are immutable.
|
||
|
|
* Sealed blocks are sharded by prefix for filesystem scalability.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 5. Index Segments
|
||
|
|
|
||
|
|
```
|
||
|
|
index/
|
||
|
|
shard-000/
|
||
|
|
segment-0001.idx
|
||
|
|
segment-0002.idx
|
||
|
|
bloom.bin
|
||
|
|
shard-001/
|
||
|
|
...
|
||
|
|
```
|
||
|
|
|
||
|
|
Rules:
|
||
|
|
|
||
|
|
* Segments are append-only while open.
|
||
|
|
* Sealed segments are immutable and log-visible.
|
||
|
|
* Shards are deterministic per snapshot.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 6. Log and Snapshots
|
||
|
|
|
||
|
|
```
|
||
|
|
log/
|
||
|
|
asl.log
|
||
|
|
snapshots/
|
||
|
|
<snapshot-id>/
|
||
|
|
```
|
||
|
|
|
||
|
|
Rules:
|
||
|
|
|
||
|
|
* Log is append-only.
|
||
|
|
* Snapshots pin index and block state for replay.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 7. Temporary and Metadata Paths
|
||
|
|
|
||
|
|
* `tmp/` is for transient files only.
|
||
|
|
* `meta/` contains domain metadata (DAM, policy, host state).
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 8. Non-Goals
|
||
|
|
|
||
|
|
ASL/STORE-LAYOUT/1 does not define:
|
||
|
|
|
||
|
|
* Device selection or mount options
|
||
|
|
* Snapshot mechanism (ZFS vs other)
|
||
|
|
* Encryption or key management
|