Record the announced window, its order, and the fetch two tiles share - #143
Merged
Conversation
A decision record under docs/decisions/, and its line in the index. A client announces the artwork it expects to draw as an ordered window and withdraws a tile by cancelling it, so the order of the window is the whole of the priority the core accepts. 0050 already declines a client-supplied priority on its decode queue, and a number here would be a second ordering over the same work that disagrees with that one the first time a tile announced second carries the higher number. An announcement is advisory. A tile nobody announced is still fetched when it is asked for, which is what makes a bound on the window affordable and what makes cutting a window that exceeds it cost time rather than an image. Announcements resolving to one artwork entry under 0041 share one fetch, and it is abandoned when the last caller holding it has withdrawn. The failure this prevents is the natural implementation of the same rule: the first tile leaving the screen cancels the fetch the tile still on the screen is waiting for, which appears as one missing poster on items that share artwork, under scrolling, and every route by which a person would report it describes something else. The cap on outstanding requests is 0027's connection limit rather than a number added here. What this record fixes is that the tiles beyond it wait as data, since 0009 sizes the waiting lane once at core creation and two hundred announced tiles cannot each hold a waiter. 0064 places the duration of the lock a caller could wait on during prefetch on this issue. The shape of that bound is fixed here, which is that the core calls out to nothing while holding it, and the number stays owed to the harness in #65. Refs #53. It does not close: every condition on that issue is a test against the fake server in #21, and there is no language chosen and no suite in this tree to run one. Signed-off-by: Nils Lehnen <30603423+iderex@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The issue this belongs to
Refs #53. This does not meet its definition of done and the reason is under
"What this does not cover".
What changed
A decision record under
docs/decisions/, and its line in the index.A client announces the artwork it expects to draw as an ordered window, and
withdraws a tile by cancelling it. The order of the window is the whole of the
priority the core accepts, and no tile carries a number beside it. 0050 already
declines a client-supplied priority on its decode admission queue and gives the
reason; a number here would be a second ordering over the same work, and the two
disagree the first time a tile announced second carries the higher number.
An announcement is advisory. A tile nobody announced is still fetched at the
moment it is asked for, so announcing is a way of being early rather than the way
of being served. That is what makes a bound on the window affordable, and what
makes cutting a window that exceeds it cost time rather than an image.
Announcements that resolve to one artwork entry under 0041 share one fetch, and
that fetch is abandoned when the last caller holding it has withdrawn rather than
when the first has.
The cap on outstanding requests the issue asks for is 0027's connection limit
rather than a number added here. What the record fixes is where the rest of an
announced window sits while those connections are busy, which is as data in
announcement order, because 0009 sizes the waiting lane once at core creation and
two hundred announced tiles cannot each hold a waiter.
0064 places the duration of the lock a caller could wait on during prefetch on
this issue. The record fixes the shape of that bound, which is that the core
calls out to nothing while holding it and the work under it is proportional to
the window, and leaves the number owed to the harness in #65.
What failure it prevents
The withdrawal rule is the one that cannot be repaired quietly. The natural
implementation abandons a shared fetch as soon as any caller withdraws, and what
that produces is one missing poster, on items that share artwork, under
scrolling. #51 has already made a missing image a first-class answer, so the
client showing the hole is behaving correctly and there is nothing for anybody to
notice. Every route by which a person would report it describes something else.
The ordering surface is the half that cannot be added afterwards. A core whose
artwork calls have no announcement has clients that call in draw order and cancel
on scroll, and an order added later is one each of them decides separately
whether to use.
Neither has happened in this tree. There is no code here for it to happen in.
Evidence
The commit these were run at:
What it changes:
The document check this repository runs, in full rather than as a claim that it
passed:
The index carries a line per record. The first number counts the index itself,
so thirty-nine records and their index file answer thirty-nine index lines:
Every number inside the record is stated there as chosen rather than measured,
with #65 named as where a measured replacement comes from. That is the same
footing as the numbers in 0027, 0038, 0050 and 0054, and it is a claim rather
than a measurement because there is no code in this repository to measure.
What this does not cover
It does not meet the definition of done on #53. All three conditions there are
tests against the fake server in #21: two hundred tiles announced, a hundred and
eighty withdrawn mid-flight, the outstanding-request cap, and a duplicate
announcement causing one fetch. There is no language chosen, no build and no test
command in this tree, so none of the three can be asserted and the issue stays
open on all of them.
It decides nothing about how a requested size becomes an address or which sizes
share a cache entry. That is #49, and the coalescing rule here reads its answer
rather than anticipating it.
It does not decide whether a missing image is kept in the cache. The comment on
#51 sets out two readings of that issue's second-request condition. This record
is the narrower one, which is a second request answered without a network call
while the first is still in flight. Whether an absence is kept at all, and for
how long, reaches 0006 and 0043 and stays with #51.
It states no duration for the prefetch lock. The property is fixed and the number
is owed to #65.
Nothing here adds or edits a guard, so there is no proof that one bites.
Who has read it
Nobody but me. There is no second reader on this board tonight, and the evidence
above stands in place of one rather than the question being left open.