What this milestone writes outlives the process that wrote it and outlives the
version of the core that wrote it. Two cases follow from that and neither is
covered by #40, #42 or #43.
A core that has been upgraded meets bytes an older core wrote. If it reads them
as though it had written them itself, the failure is a misread field rather than
a missing file, so it shows a person the wrong thing instead of showing an error.
A write that did not finish. A device losing power, a process the platform killed
for using too much memory, and a storage implementation whose own write was
partial all leave an entry that exists and is not what it claims to be. On a
television the power case is the normal one.
The byte store in #40 belongs to the client, so the core cannot assume the write
was atomic. What it can do is refuse to believe an entry it cannot verify.
What this produces
A version stamped into whatever the core writes, and a stated rule for a stamp
that does not match. Discarding the entry is a legitimate answer and reading it
anyway is not, and whichever is chosen carries its reason.
A way to tell a complete entry from a truncated one that does not rely on the
storage implementation being atomic.
Recovery that is local and silent. An entry failing either check is dropped and
refetched on its own, rather than the whole cache being cleared because one entry
was bad, which turns a single truncated file into a cold start.
A named report through the diagnostics interface in #100 when entries are
dropped. A cache that quietly empties itself on every start is a performance
defect that presents as a slow network, and it can stay that way for a long time.
The same two rules considered against the offline queue in #47, where a dropped
entry is a person's action rather than a list that can be refetched. The rule
there may have to differ, and this issue says whether it does rather than leaving
the queue to inherit a rule written for something cheaper.
Done when
A test writes an entry carrying a previous version's stamp and proves the stated
rule. A test truncates an entry and proves it is dropped and refetched rather
than read. A test proves one bad entry does not take a good neighbour with it.
The queue case is answered in the same place, either way. Blocked on #40, #42
and #47.
What this milestone writes outlives the process that wrote it and outlives the
version of the core that wrote it. Two cases follow from that and neither is
covered by #40, #42 or #43.
A core that has been upgraded meets bytes an older core wrote. If it reads them
as though it had written them itself, the failure is a misread field rather than
a missing file, so it shows a person the wrong thing instead of showing an error.
A write that did not finish. A device losing power, a process the platform killed
for using too much memory, and a storage implementation whose own write was
partial all leave an entry that exists and is not what it claims to be. On a
television the power case is the normal one.
The byte store in #40 belongs to the client, so the core cannot assume the write
was atomic. What it can do is refuse to believe an entry it cannot verify.
What this produces
A version stamped into whatever the core writes, and a stated rule for a stamp
that does not match. Discarding the entry is a legitimate answer and reading it
anyway is not, and whichever is chosen carries its reason.
A way to tell a complete entry from a truncated one that does not rely on the
storage implementation being atomic.
Recovery that is local and silent. An entry failing either check is dropped and
refetched on its own, rather than the whole cache being cleared because one entry
was bad, which turns a single truncated file into a cold start.
A named report through the diagnostics interface in #100 when entries are
dropped. A cache that quietly empties itself on every start is a performance
defect that presents as a slow network, and it can stay that way for a long time.
The same two rules considered against the offline queue in #47, where a dropped
entry is a person's action rather than a list that can be refetched. The rule
there may have to differ, and this issue says whether it does rather than leaving
the queue to inherit a rule written for something cheaper.
Done when
A test writes an entry carrying a previous version's stamp and proves the stated
rule. A test truncates an entry and proves it is dropped and refetched rather
than read. A test proves one bad entry does not take a good neighbour with it.
The queue case is answered in the same place, either way. Blocked on #40, #42
and #47.