···171819research bitcask
20+21+22+23+fetch: take current pack, remove dead objects/holes, filter objects
24+out, record offsets and adjust ofs_deltas since they always go
25+backwards, write the pack back; then stream written pack to client.
26+two-step necessary because pack header includes object count; could
27+have a custom new protocol that doesn't do so.