ford: ignore spurious clay responses

Due to asynchronicity, Ford can receive responses from Clay to requests
that it has already attempted to cancel. This removes some overzealous
assertions that this wouldn't happen.
This commit is contained in:
Ted Blackman 2020-01-28 14:25:49 -08:00 committed by Jared Tobin
parent b6e32791d4
commit 7dc499d438
No known key found for this signature in database
GPG Key ID: 0E4647D58F8A69E4
2 changed files with 22 additions and 14 deletions

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:7281dac601ba3126e36da8766b7ad0424f283f6472c40b322e6e784e19aba33c
size 9651177
oid sha256:df629686e06b0c56db132076439b03d095bb235fc1a77668022d110559d9b840
size 9650987

View File

@ -838,7 +838,9 @@
|* [tracker=(request-tracker) request=*]
^- (list duct)
::
~(tap in waiting:(~(got by tracker) request))
?~ val=(~(get by tracker) request)
~
~(tap in waiting.u.val)
:: +put-request: associates a +duct with a request
::
++ put-request
@ -6263,22 +6265,29 @@
++ take-rebuilds
^- [(list move) ford-state]
::
~| [%ford-take-rebuilds wire=wire duct=duct]
?> ?=([@tas %wris *] sign)
=* case-sign p.sign
=* care-paths-sign q.sign
=+ [ship desk date]=(raid:wired t.wire ~[%p %tas %da])
=/ disc [ship desk]
:: ignore spurious clay updates
::
:: Due to asynchronicity of Clay notifications, we might get a
:: subscription update on an already-canceled duct. This is
:: normal; no-op.
::
?~ duct-status=(~(get by ducts.state.ax) duct)
[~ state.ax]
::
=/ =subscription
~| [%ford-take-bad-clay-sub wire=wire duct=duct]
=/ =duct-status (~(got by ducts.state.ax) duct)
?> ?=(%live -.live.duct-status)
?> ?=(^ last-sent.live.duct-status)
?> ?=(^ subscription.u.last-sent.live.duct-status)
u.subscription.u.last-sent.live.duct-status
?> ?=(%live -.live.u.duct-status)
(need subscription:(need last-sent.live.u.duct-status))
::
=/ ducts=(list ^duct)
~| [%ford-take-missing-subscription subscription]
:: sanity check; there must be at least one duct per subscription
::
=- ?<(=(~ -) -)
(get-request-ducts pending-subscriptions.state.ax subscription)
::
=| moves=(list move)
@ -6296,13 +6305,12 @@
++ take-unblocks
^- [(list move) ford-state]
::
~| [%ford-take-unblocks wire=wire duct=duct]
?> ?=([@tas %writ *] sign)
=* riot-sign p.sign
:: scry-request: the +scry-request we had previously blocked on
::
=/ =scry-request
~| [%ford-take-bad-scry-request wire=wire duct=duct]
(need (path-to-scry-request t.wire))
=/ =scry-request (need (path-to-scry-request t.wire))
:: scry-result: parse a (unit cage) from :sign
::
:: If the result is `~`, the requested resource was not available.
@ -6311,9 +6319,9 @@
?~ riot-sign
~
`r.u.riot-sign
:: if spurious Clay response, :ducts will be empty, causing no-op
::
=/ ducts=(list ^duct)
~| [%ford-take-missing-scry-request scry-request]
(get-request-ducts pending-scrys.state.ax scry-request)
::
=| moves=(list move)