WAL Replay
WAL Replay
A write-ahead log (WAL) records updates in the exact order they happened. To recover a key-value store after a crash, replay the log from the beginning.
Each log entry either:
- sets a key to a value, or
- deletes a key.
Return the final visible key-value state sorted by key ascending.
Input is the complete durable log prefix available after a crash. Torn records, filesystem synchronization, transaction commit, and table installation are outside this function. Do not mutate the input.
Types
type LogEntry struct {
Key string
Value string
Deleted bool
}
type KV struct {
Key string
Value string
}
Function signature
func ReplayWAL(entries []LogEntry) []KV
Exact semantics
- Replay entries in input order, left to right.
- For a set entry (
Deleted=false), writestate[Key] = Value. - For a delete entry (
Deleted=true), removeKeyfrom state. - Deleting a missing key is allowed and is a no-op.
- A key may be deleted and later re-created by a newer set.
- Final output must contain only existing keys, sorted by key.
Hint: represent replay state and build deterministic output
1. Create `state := map[string]string{}`. 2. Loop over `entries` in order. 3. If `entry.Deleted`, call `delete(state, entry.Key)`. 4. Else assign `state[entry.Key] = entry.Value`. 5. Collect keys from map into a slice. 6. Sort keys ascending. 7. Build result `[]KV` in sorted-key order.Examples
entries = [
{Key:"a", Value:"1"},
{Key:"b", Value:"2"},
{Key:"a", Deleted:true}
]
output = [{Key:"b", Value:"2"}]
entries = [
{Key:"x", Deleted:true},
{Key:"x", Value:"9"}
]
output = [{Key:"x", Value:"9"}]
entries = [
{Key:"k", Value:"1"},
{Key:"k", Value:"2"},
{Key:"k", Value:"3"}
]
output = [{Key:"k", Value:"3"}]
Complexity target
- Replay pass:
O(n) - Sorting output keys:
O(m log m), wheremis number of remaining keys - Extra space:
O(m)
Notes
- If a key is deleted, it should not appear in the output.
- Output must be sorted by key ascending.
Run tests to see results
No issues detected