When we receive a watch-nack on a versioned subscription, we attempt to
resubscribe on an unversioned path. However, if we receive an unversioned
subscription request for which we are not compatible, we hold the
subscription open and never send any facts on unversioned subscriptions.
As the check for unversioned compatiblility occurs before retrieving the
initial-watch, subscriptions which are supposed to nack never do. Fixed
by moving the conditional.
Fixesurbit/landscape#795
The varying timestamp in the %add-graph fact from graph-push-hook was
preventing deduplication of the jammed noun in ames. Prevents
unnecessary bail: memes upon sending many %add-graph facts
Pull-hook side of the previous change to push-hook
(479fbfd798). Noop on unsupported
unversioned marks, waiting for the publisher to upgrade and kick. Same
tradeoffs as previous change apply.
Mainnet is currently experiencing undue load due to a watch-kick loop.
If the watch is unsupported, it will be kicked due to a mark mismatch,
which will be interpreted by the unversioned hooks as a network pressure
kick, prompting a resub and continuing the loop. Instead, we now no-op
on unversioned, unsupported watches, waiting for the subscriber to
rewatch after it processes the versioning OTA. This will silently break
groups for the subscriber until the reach the latest OTA, but is
preferable to nacking, and kicking them permanently
This commit changes the type of update:graph-store and as such, a new
mark has been created. graph-store now consumes and produces
%graph-update-1. This new mark type is backwards incompatible with the
previous mark.
When we receive a notification, it might not affect our count because
it’ll get merged on the server side, but we unconditionally increment
our count on the client if the notification hasn’t been loaded yet.
Addresses this by storing a set of time, index so we can compute whether
or not the notification is merged or unloaded and change the count
accordingly.
Fixesurbit/landscape#276