swath run trace

§1

The guesses, and how they turned out

Before any worker starts, swath spends one delimiter=/ request asking S3 where the directories are, and turns the answer into starting ranges. A directory name says nothing about how many objects are behind it, so this is a guess — and it is the only free information the engine will ever get.

Seed ranges, by objects actually found behind them

Objects by top-level directory

Grouped by first path segment, with runs of six or more digits generalized so dated sibling directories collapse into one row — a grouping choice for this table only.

§2

What the run actually felt like

Objects listed per second, and live ranges, over the run

Owner-split gate decisions

Gate outcomeTimes

§3

Most of these keys do not exist

To split a range swath needs a boundary key, and it does not need one that exists — start-after accepts any byte string. The pivots below are verbatim from this run. The odd-looking ones are synthesized coordinates, not object names: a trailing : is one byte past 9, so it means "past every key ending in a digit here".

MechanismSplitsSample pivots, verbatim

How each thief attempt ended

§4

The whole run, on one map

Horizontal is the keyspace weighted by objects — equal width means an equal number of objects — and vertical is time running downward. Each rectangle is one range over the slice it owned and the time it owned it, coloured by which original seed guess it descends from. Because width is objects, a rectangle's area is roughly the work it did.

Wide and short is a big slice eaten fast. A tall thin column is a serial tail — a dense region that could not be divided, outliving everything around it.

§5

Watch it happen

The same events replayed in order, on the same axis. Bands are live ranges, filled to each worker's cursor; ticks are split pivots as they commit.

0s
§6

The ledger