mirror of
https://github.com/ilyakooo0/urbit.git
synced 2024-12-23 06:42:09 +03:00
clay: scry when doing file requests outside %sing
In +work, we simply want to fetch file data, regardless of what the overarching request is. (In fact, %sing would likely never hit this path anyway.) In order to be able to make the scry request, we track the timestamp of the commit that contains a blob we're missing, and scry for that %da revision. There's two edge cases where we cannot immediately know the timestamp that are currently assumed broken. Fix soon.
This commit is contained in:
parent
dd4a115e51
commit
3473033492
@ -236,7 +236,7 @@
|
|||||||
=rave
|
=rave
|
||||||
scry=(unit @da) :: timeout timer if scry
|
scry=(unit @da) :: timeout timer if scry
|
||||||
have=(map lobe blob)
|
have=(map lobe blob)
|
||||||
need=(list [=path =lobe])
|
need=(list [when=@da =path =lobe])
|
||||||
nako=(qeu (unit nako))
|
nako=(qeu (unit nako))
|
||||||
busy=_|
|
busy=_|
|
||||||
==
|
==
|
||||||
@ -3159,21 +3159,27 @@
|
|||||||
::
|
::
|
||||||
++ missing-blobs
|
++ missing-blobs
|
||||||
|= =nako
|
|= =nako
|
||||||
^- (list [path lobe])
|
=| miss=(set lobe)
|
||||||
|
^- (list [@da path lobe])
|
||||||
|
::REVIEW should this get sorted so that we prefer getting files
|
||||||
|
:: from the latest commit, if there are duplicates?
|
||||||
=/ yakis ~(tap in lar.nako)
|
=/ yakis ~(tap in lar.nako)
|
||||||
|- ^- (list [path lobe])
|
|- ^- (list [@da path lobe])
|
||||||
=* yaki-loop $
|
=* yaki-loop $
|
||||||
?~ yakis
|
?~ yakis
|
||||||
~
|
~
|
||||||
=/ lobes=(list [=path =lobe]) ~(tap by q.i.yakis)
|
=/ lobes=(list [=path =lobe]) ~(tap by q.i.yakis)
|
||||||
|- ^- (list [path lobe])
|
|- ^- (list [@da path lobe])
|
||||||
=* blob-loop $
|
=* blob-loop $
|
||||||
?~ lobes
|
?~ lobes
|
||||||
yaki-loop(yakis t.yakis)
|
yaki-loop(yakis t.yakis)
|
||||||
?: (~(has by lat.ran) lobe.i.lobes)
|
=* lobe lobe.i.lobes
|
||||||
blob-loop(lobes t.lobes)
|
?: ?| (~(has by lat.ran) lobe)
|
||||||
:- i.lobes
|
(~(has in miss) lobe)
|
||||||
|
==
|
||||||
blob-loop(lobes t.lobes)
|
blob-loop(lobes t.lobes)
|
||||||
|
:- [t.i.yakis i.lobes]
|
||||||
|
blob-loop(lobes t.lobes, miss (~(put in miss) lobe))
|
||||||
::
|
::
|
||||||
:: Receive backfill response
|
:: Receive backfill response
|
||||||
::
|
::
|
||||||
@ -3187,9 +3193,12 @@
|
|||||||
!(~(has by have.sat) q.q.blob)
|
!(~(has by have.sat) q.q.blob)
|
||||||
==
|
==
|
||||||
::NOTE we have already fallen back to the ames case,
|
::NOTE we have already fallen back to the ames case,
|
||||||
|
:: (scry responses always come in as %direct blobs)
|
||||||
:: so we do not need the real path here anymore.
|
:: so we do not need the real path here anymore.
|
||||||
::REVIEW right? or is this considered too fragile?
|
::REVIEW right? or is this considered too fragile?
|
||||||
[[/ q.q.blob] need.sat]
|
:: actually yeah, we might retry scry later...
|
||||||
|
::TODO also wouldn't this want to check if lobe was already in need?
|
||||||
|
[[*@da / q.q.blob] need.sat]
|
||||||
:: We can't put a blob in lat.ran if its parent isn't already
|
:: We can't put a blob in lat.ran if its parent isn't already
|
||||||
:: there. Unions are in reverse order so we don't overwrite
|
:: there. Unions are in reverse order so we don't overwrite
|
||||||
:: existing blobs.
|
:: existing blobs.
|
||||||
@ -3243,13 +3252,13 @@
|
|||||||
:: :ship's remote scry isn't known to be broken,
|
:: :ship's remote scry isn't known to be broken,
|
||||||
:: or we learned it was broken more than an hour ago,
|
:: or we learned it was broken more than an hour ago,
|
||||||
::
|
::
|
||||||
?: ?& ?=(%sing -.rave.sat)
|
?: ?| !(~(has by sad) her)
|
||||||
?| !(~(has by sad) her)
|
(lth now (add scry-retry-time (~(got by sad) her)))
|
||||||
(lth now (add ~h1 (~(got by sad) her)))
|
==
|
||||||
== ==
|
|
||||||
:: make the request over remote scry
|
:: make the request over remote scry
|
||||||
::
|
::
|
||||||
=/ =mood [%x case.mood.rave.sat path.i.need.sat]
|
=/ =mood
|
||||||
|
[%x da+when path]:i.need.sat
|
||||||
[`- +]:(send-over-scry %back-index hen her inx syd mood)
|
[`- +]:(send-over-scry %back-index hen her inx syd mood)
|
||||||
:: otherwise, request over ames
|
:: otherwise, request over ames
|
||||||
::
|
::
|
||||||
@ -4846,7 +4855,9 @@
|
|||||||
^- update-state
|
^- update-state
|
||||||
::NOTE putting / paths is fine, the path is only used
|
::NOTE putting / paths is fine, the path is only used
|
||||||
:: when dealing with scry responses
|
:: when dealing with scry responses
|
||||||
[duct rave ~ have (turn need (lead /)) nako busy]
|
::TODO but that isn't actually true, is it? we might fall back to
|
||||||
|
:: scry in the middle, right?
|
||||||
|
[duct rave ~ have (turn need (corl (lead *@da) (lead /))) nako busy]
|
||||||
--
|
--
|
||||||
::
|
::
|
||||||
++ scry :: inspect
|
++ scry :: inspect
|
||||||
|
Loading…
Reference in New Issue
Block a user