Skip to content

feat: optional dedicated WAL volume for dataservers - #13

Merged
merlimat merged 1 commit into
mainfrom
server-wal-volume
Jul 10, 2026
Merged

feat: optional dedicated WAL volume for dataservers#13
merlimat merged 1 commit into
mainfrom
server-wal-volume

Conversation

@merlimat

Copy link
Copy Markdown
Contributor

Adds server.wal.storage (and optional server.wal.storageClassName) to the oxia-cluster chart: when set, dataservers get a second volumeClaimTemplate named wal, mounted at the configured server.config.storage.wal.dir (default /data/wal).

Why: separating the WAL from the database puts fsync-latency-critical writes on their own device — WAL appends stop competing with pebble compaction/read I/O, and on cloud block storage (e.g. EBS gp3) each volume brings its own IOPS/throughput budget. The storageClassName override also allows a faster class just for the WAL. This mirrors the standard deployment practice for ZooKeeper (dataLogDir) and etcd (--wal-dir).

Compatibility: server.wal unset renders byte-identical to 0.0.7 (single data volume) — existing installs unaffected. The WAL claim inherits server.storageClassName unless its own class is set. Mounting at the configured wal dir means the dataserver config needs no change.

Chart version bumped to 0.0.8.

Verification

helm lint clean; helm template checked in three modes:

  • knob off → single data claim, no wal mount (unchanged)
  • --set server.wal.storage=10Gi --set server.storageClassName=gp3wal claim (10Gi, gp3) mounted at /data/wal
  • --set server.wal.storageClassName=io2 → wal claim on io2 while data stays on gp3

Add server.wal.{storage,storageClassName} to give the WAL its own
volumeClaimTemplate, mounted at the configured storage.wal.dir
(default /data/wal), so WAL fsyncs don't compete with database I/O
for the same disk — and on cloud block storage each volume brings its
own IOPS budget. The WAL claim inherits server.storageClassName unless
its own storageClassName is set (e.g. a faster class just for the WAL).

When server.wal is unset the chart renders exactly as before (single
data volume), so existing installs are unaffected. Chart 0.0.8.

Signed-off-by: Matteo Merli <mmerli@apache.org>
@merlimat
merlimat merged commit 7e6aa56 into main Jul 10, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant