Posts

Posts

Field notes from porting etcd's storage engine from bbolt (B+ tree) to Pebble (LSM-tree). Read in order.

  • 01

    The case for a second storage engine

    Why etcd is getting a Pebble (LSM-tree) backend alongside bbolt — what hurts at Kubernetes scale, and what we explicitly are not changing.

  • 02

    Sealing the bbolt leaks

    Before any Pebble code can land, four bbolt-typed APIs have to leave the public Backend interface. Boring work, load-bearing outcome.

  • 03

    How bbolt and Pebble differ

    A short primer on B+ trees and LSM-trees, and why the difference between them shows up at exactly the operational seams etcd operators care about.

  • 04

    Disabling Pebble's WAL

    etcd already has a Raft write-ahead log. Running Pebble's WAL on top is wasted fsyncs. The trade-off is that we have to be exactly right about a single integer.

  • 05

    What the chaos gate surfaced

    We ran the kill -9 gate. It surfaced three bugs in code we hadn't touched. Two were structural; one cascaded from another.

  • 06

    What we're explicitly not doing

    Big migrations succeed by what they refuse to take on. A list of things this milestone deliberately punts — and why each refusal earns its keep.