Merge branch 'next/dill' into m/drum-sessions

Also cleans up some remaining merge artefacts.
This commit is contained in:
fang 2023-01-03 19:08:41 +01:00
commit 36731f92e7
No known key found for this signature in database
GPG Key ID: EB035760C1BBA972
3 changed files with 1 additions and 590 deletions

View File

@ -513,590 +513,6 @@
[sync hash zest wic]
==
::
::REMOVEME
:: ++ vats
:: |_ [loc=desk rak=arak]
:: ++ ral (need rail.rak)
:: ++ vats .
:: ++ abet
:: ~| [%uninitialized-desk loc]
:: ?< =(%$ loc)
:: kiln(ark (~(put by ark) loc rak))
:: ++ abed
:: |= lac=desk
:: ~_ leaf/"kiln: {<lac>} not installed"
:: vats(loc lac, rak (~(got by ark) lac))
:: ::
:: ++ here ?~ rail.rak "{<loc>} (local)"
:: "{<loc>} from {<[ship desk]:ral>}"
:: ++ make-wire |=(step=@tas /kiln/vats/[loc]/[step])
:: ++ from-wire
:: |= =wire
:: ~| wire
:: ?> ?=([@ @ *] wire)
:: (abed i.wire)
:: ::
:: ++ emit |=(card:agent:gall vats(kiln (^emit +<)))
:: ++ emil |=((list card:agent:gall) vats(kiln (^emil +<)))
:: ++ give
:: |%
:: ++ snap [%give %fact ~[/kiln/vats] %kiln-vats-snap-0 !>(ark)]
:: ++ diff |=(d=^diff [%give %fact ~[/kiln/vats] %kiln-vats-diff-0 !>(d)])
:: --
:: ++ pass
:: |%
:: ++ pyre |=(=tang [%pass /kiln/vats %pyre tang])
:: ++ find (warp %find [%sing %y ud+1 /])
:: ++ sync-da (warp %sync [%sing %w da+now /])
:: ++ sync-ud (warp %sync [%sing %w ud+aeon:ral /])
:: ++ download (warp %download [%sing %v ud+aeon:ral /])
:: ++ gall-lyv
:: =/ paths=(set [care:clay path])
:: %- sy
:: :~ [%z /sys/hoon/hoon]
:: [%z /sys/arvo/hoon]
:: [%z /sys/lull/hoon]
:: [%z /sys/zuse/hoon]
:: [%z /sys/vane/gall/hoon]
:: ==
:: %+ clay-card %gall-lyv
:: [%warp our %base ~ %mult da+now paths]
:: ::
:: ++ warp
:: |= [s=term r=rave]
:: (clay-card s %warp ship:ral desk:ral `r)
:: ++ merge-main
:: =/ germ (get-germ loc)
:: =/ =aeon (dec aeon:ral)
:: %+ clay-card %merge-main
:: [%merg loc ship:ral desk:ral ud+aeon germ]
:: ++ merge-kids
:: =/ germ (get-germ %kids)
:: =/ =aeon (dec aeon:ral)
:: %+ clay-card %merge-kids
:: [%merg %kids ship:ral desk:ral ud+aeon germ]
:: ++ listen
:: (clay-card %listen %warp our loc `[%next %z da+now /])
:: ++ clay-card
:: |= [step=@tas =task:clay]
:: ^- card:agent:gall
:: [%pass (make-wire step) %arvo %c task]
:: ++ start-dude
:: |= =dude
:: ^- card:agent:gall
:: [%pass /kiln/vats/[loc]/jolt/[dude] %arvo %g %jolt loc dude]
:: ++ stop-dude
:: |= =dude
:: ^- card:agent:gall
:: [%pass /kiln/vats/[loc]/uninstall %arvo %g %idle dude]
:: --
:: :: +uninstall: stop tracking apps on desk, and suspend apps
:: ::
:: ++ uninstall
:: |= lac=desk
:: ^+ kiln
:: ?: =(%base lac)
:: =- (^emit (pyre:pass leaf/- ~))
:: "kiln: |uninstall: %base cannot be uninstalled"
:: ?. (~(has by ark) lac)
:: ~> %slog.(fmt "|uninstall: {<lac>} not installed, ignoring")
:: kiln
:: =. vats (abed lac)
:: ~> %slog.(fmt "uninstalling {here}")
:: =. vats stop-agents
:: kiln(ark (~(del by ark) lac))
:: :: +install: set up desk sync to .lac to install all apps from [her rem]
:: ::
:: ++ install
:: |= [lac=desk her=ship rem=desk]
:: ^+ vats
:: =. loc lac
:: ?: =([her rem] [our lac])
:: (install-local lac)
:: =/ got (~(get by ark) lac)
:: ?: =(`[her rem] got)
:: =. rak (need got)
:: ~> %slog.(fmt "already tracking {here:(abed lac)}, ignoring")
:: vats
:: =. rak [`[~ paused=| her rem *aeon next=~] rein:(fall got *arak)]
:: ~> %slog.(fmt "beginning install into {here}")
:: (emil find:pass listen:pass ~)
:: :: +install-local: install from a local desk, with no remote
:: ::
:: :: Also notify clients that the desk was installed.
:: ::
:: ++ install-local
:: |= lac=desk
:: ^+ vats
:: |^ ^+ vats
:: ?. (~(has by ark) lac)
:: go
:: =. vats (abed lac)
:: ?^ rail.rak
:: go
:: ~> %slog.(fmt "{<lac>} already installed locally, refreshing")
:: update-running-dudes
:: ::
:: ++ go
:: =. loc lac
:: =. rak *arak
:: ~> %slog.(fmt "installing {<loc>} locally")
:: =. vats update-running-dudes
:: (emil listen:pass (diff:give %commit lac rak) ~)
:: --
:: :: +reset: resync after failure
:: ::
:: :: TODO: instead of jumping all the way back to find:pass,
:: :: which will end up skipping all the way until the latest
:: :: remote commit, increment the aeon so we skip only the problematic
:: :: commit and try the commit immediately after it.
:: ::
:: ++ reset
:: ^+ vats
:: ~> %slog.(fmt "resetting tracking for {here}")
:: =/ cad (diff:give %reset loc rak)
:: =/ rel ral
:: =. rail.rak `rel(aeon 0, next ~)
:: (emil find:pass cad ~)
:: :: +pause: stop syncing from upstream
:: ::
:: ++ pause
:: |= lac=desk
:: ^+ vats
:: =. vats (abed lac)
:: ?. is-tracking
:: ~> %slog.(fmt "{<lac>} already paused, ignoring")
:: vats
:: ~> %slog.(fmt "{<lac>} pausing updates")
:: =/ rel ral
:: =. rail.rak `rel(paused &, aeon 0, next ~)
:: vats
:: ::
:: :: +gall-lyv: watch gall source for reloading
:: ++ gall-lyv
:: =. vats (abed %base)
:: (emit gall-lyv:pass)
:: :: +remove-upstream: stop listening to an upstream for changes
:: ::
:: ++ remove-upstream
:: |= lac=desk
:: ^+ vats
:: =. vats (abed lac)
:: =. rail.rak ~
:: vats
:: :: +resume: restart tracking from upstream
:: ::
:: :: TODO: check whether kelvin is legit
:: ::
:: ++ resume
:: |= lac=desk
:: ^+ vats
:: =. vats (abed lac)
:: ~> %slog. %- fmt
:: ?. paused:ral
:: "{<lac>} already tracking, ignoring"
:: "{<lac>} resuming updates"
:: =/ rel ral
:: =. rail.rak `rel(paused |)
:: reset
:: :: +suspend: shut down all agents, keep syncing
:: ::
:: ++ suspend
:: |= lac=desk
:: ^+ vats
:: =/ got (~(get by ark) lac)
:: ?: =(%base lac)
:: =- (emit (pyre:pass leaf/- ~))
:: "kiln: suspend: %base cannot be suspended"
:: ?. (~(has by ark) lac)
:: ~> %slog.(fmt "suspend: {<lac>} not installed, ignoring")
:: vats
:: =. vats (abed lac)
:: =. liv.rein.rak |
:: =. vats stop-agents
:: (emit (diff:give %suspend loc rak))
:: :: +revive: restart agents on a suspended desk
:: ::
:: ++ revive
:: |= lac=desk
:: ^+ vats
:: =. vats (abed lac)
:: =. liv.rein.rak &
:: =. vats update-running-dudes
:: (emit (diff:give %revive loc rak))
:: :: +set-rein: adjust which agents are forced on or off
:: ::
:: ++ set-rein
:: |= [lac=desk new=rein]
:: ^+ vats
:: =. vats (abed lac)
:: =^ old rein.rak [rein.rak new]
:: ?+ [liv.old liv.new] !!
:: [%| %|] vats
:: [%| %&] (revive lac)
:: [%& %|] (suspend lac)
:: [%& %&] update-running-dudes
:: ==
:: :: +bump: try to apply kernel kelvin upgrade
:: ::
:: :: Apply merges to revive faded agents on all desks.
:: :: If .force, suspends stale agents. Else, any stale desk
:: :: will cause a crash.
:: ::
:: ++ bump
:: |= [kel=weft except=(set desk) force=?]
:: ^+ kiln
:: =/ ded (find-blocked kel except)
:: =? kiln force (suspend-many ded)
:: ?: |(force =(~ ded))
:: ?: !=(zuse+zuse kel)
:: (bump-one kel %base)
:: (bump-many (all-desks-but (~(uni in except) ded)))
:: =- (^emit (pyre:pass leaf/- ~))
:: "kiln: desks blocked upgrade to {<zuse/zuse>}: {<ded>}"
:: ::
:: ++ all-desks-but |=(not=(set desk) (~(dif in ~(key by ark)) not))
:: ::
:: ++ find-blocked
:: |= [kel=weft except=(set desk)]
:: ^- (set desk)
:: (~(dif in (get-blockers kel)) (~(put in except) %base))
:: ::
:: ++ suspend-many
:: |= dead=(set desk)
:: ^+ kiln
:: =/ ded ~(tap in dead)
:: |- ^+ kiln
:: ?~ ded kiln
:: $(ded t.ded, kiln abet:(suspend i.ded))
:: ::
:: ++ bump-many
:: |= live=(set desk)
:: ^+ kiln
:: :: ensure %base is always reloaded first
:: ::
:: =/ liv
:: %+ sort ~(tap in live)
:: |= [a=desk b=desk]
:: ^- ?
:: ?: =(%base a) &
:: ?: =(%base b) |
:: (lte `@`a `@`b)
:: ::
:: |- ^+ kiln
:: ?~ liv kiln
:: $(liv t.liv, kiln (bump-one zuse+zuse i.liv))
:: ::
:: ++ bump-one
:: |= [kel=weft =desk]
:: ^+ kiln
:: ~> %slog.(fmt "bump {<desk>} to {<[lal num]:kel>}")
:: =< abet ^+ vats
:: =. vats (abed desk)
:: =/ kul (read-kelvin-local our desk now)
:: ?~ kul
:: ~> %slog.(fmt "{here} not yet installed")
:: vats
:: ?: =(kel u.kul)
:: ~> %slog.(fmt "{here} already at {<[lal num]:kel>}")
:: update-running-dudes
:: =^ tem rail.rak (crank-next kel)
:: ?^ tem
:: (emit merge-main:pass)
:: =- (emit (pyre:pass leaf/- ~))
:: "kiln: {here} killed upgrade to {<[lal num]:kel>}"
:: :: +stop-agents: internal helper to suspend agents on .loc
:: ::
:: :: Will not shut down %hood or %dojo.
:: ::
:: ++ stop-agents
:: ^+ vats
:: =/ ded (get-apps-live our loc now)
:: =. ded (skip ded |=(d=dude ?=(?(%hood %dojo) d)))
:: (stop-dudes ded)
:: ::
:: ++ take
:: |= [=wire syn=sign-arvo]
:: ^+ kiln
:: ?> ?=([@ @ *] wire)
:: ?: ?=(%jolt i.t.wire)
:: kiln
:: ?: ?=(%listen i.t.wire)
:: (take-listen wire syn)
:: =< abet
:: =. vats (from-wire wire)
:: ?+ i.t.wire
:: ~> %slog.(fmt "vats-bad-take {<wire>}")
:: vats
:: %find (take-find syn)
:: %sync (take-sync syn)
:: %download (take-download syn)
:: %merge-main (take-merge-main syn)
:: %merge-kids (take-merge-kids syn)
:: %gall-lyv (take-gall-lyv syn)
:: ==
:: ::
:: ++ take-find
:: |= syn=sign-arvo
:: ^+ vats
:: ?> ?=(%writ +<.syn)
:: ?. is-tracking
:: vats
:: ?~ p.syn
:: ~> %slog.(fmt "cancelled (1) install into {here}, aborting")
:: vats(ark (~(del by ark) loc))
:: ~> %slog.(fmt "activated install into {here}")
:: (emit sync-da:pass)
:: ::
:: ++ take-sync
:: |= syn=sign-arvo
:: ^+ vats
:: ?> ?=(%writ +<.syn)
:: =* rit u.p.syn
:: ?. is-tracking
:: vats
:: ?~ p.syn
:: ~> %slog.(fmt "cancelled (1) install into {here}, retrying")
:: reset
:: =? rail.rak ?=(%w p.p.rit) `%*(. ral aeon ud:;;(cass:clay q.q.r.rit))
:: ~> %slog.(fmt "downloading update for {here}")
:: (emit download:pass)
:: ::
:: ++ take-download
:: |= syn=sign-arvo
:: ^+ vats
:: ?> ?=(%writ +<.syn)
:: ?. is-tracking
:: vats
:: ?~ p.syn
:: ~> %slog.(fmt "cancelled (2) install into {here}, retrying")
:: reset
:: ~> %slog.(fmt "finished downloading update for {here}")
:: ?. (get-remote-diff our loc now [ship desk aeon]:ral)
:: ~> %slog.(fmt "remote is identical to {here}, skipping")
:: =. rail.rak `%*(. ral aeon +(aeon:ral))
:: =. vats update-running-dudes
:: (emil sync-ud:pass (diff:give %commit loc rak) ~)
:: =/ old-weft `weft`[%zuse zuse]
:: =/ new-weft
:: ?: =(our ship:ral)
:: (need (read-kelvin-local our desk:ral now)) :: TODO error handling
:: (read-kelvin-foreign [ship desk aeon]:ral)
:: :: don't try to read from the local desk's bill file if
:: :: there are no commits to the local desk (aeon 0)
:: ::
:: =/ yon =<(ud .^(cass cw+/(scot %p our)/[loc]/(scot %da now)))
:: =? vats &(liv.rein.rak !=(0 yon))
:: %- stop-dudes
:: =< idle
:: (adjust-dudes [our loc now] rein.rak)
:: =. rail.rak `%*(. ral aeon +(aeon:ral))
:: |^ ^+ vats
:: ?: =(%base loc)
:: do-base
:: ?: (gth num.new-weft num.old-weft)
:: kelvin-retreat
:: ?: =(num.new-weft num.old-weft)
:: kelvin-same
:: kelvin-advance
:: ::
:: ++ kelvin-retreat
:: ^+ vats
:: ~> %slog.(fmt "cannot install {here}, old kelvin {<new-weft>}")
:: ~> %slog.(fmt "will retry at foreign kelvin {<old-weft>}")
:: =/ =diff [%block loc rak new-weft blockers=(sy %base ~)]
:: (emil sync-ud:pass (diff:give diff) ~)
:: ::
:: ++ kelvin-advance
:: ^+ vats
:: ~> %slog.(fmt "future version {<new-weft>}, enqueueing")
:: :: retry upgrade if not blocked anymore
:: =. rail.rak `%*(. ral next (snoc next:ral [(dec aeon:ral) new-weft]))
:: =. ark (~(put by ark) loc rak)
:: =/ =diff [%block loc rak new-weft blockers=(sy %base ~)]
:: =. vats (emil sync-ud:pass (diff:give diff) ~)
:: =/ base=arak (~(got by ark) %base)
:: ?~ rail.base
:: vats
:: =/ rel u.rail.base
:: ?. &(?=(^ next.rel) =(~ (get-blockers weft.i.next.rel)))
:: vats
:: ~> %slog.(fmt "unblocked system update, updating")
:: =. kiln (bump-one weft.i.next.rel %base)
:: vats
:: ::
:: ++ kelvin-same
:: ^+ vats
:: ~> %slog.(fmt "merging into {here}")
:: ?> ?=(^ rail.rak)
:: =. next.u.rail.rak ~
:: (emil ~[merge-main sync-ud]:pass)
:: ::
:: ++ do-base
:: ^+ vats
:: =/ blockers
:: ?: =(new-weft old-weft)
:: ~
:: (get-blockers new-weft)
:: ::
:: ?. =(~ blockers)
:: ~> %slog.(fmt "OTA blocked on {<blockers>}")
:: =. rail.rak
:: `%*(. ral next (snoc next:ral [(dec aeon:ral) new-weft]))
:: =/ =diff [%block loc rak new-weft blockers]
:: (emil sync-ud:pass (diff:give diff) ~)
:: ~> %slog.(fmt "applying OTA to {here}, kelvin: {<new-weft>}")
:: ?> ?=(^ rail.rak)
:: =. next.u.rail.rak ~
:: =. wef
:: ?: =(old-weft new-weft) ~
:: `new-weft
:: (emil ~[merge-main sync-ud]:pass)
:: --
:: ::
:: ++ take-listen
:: |= [=wire syn=sign-arvo]
:: ^+ kiln
:: ?> ?=([@ %writ ~ *] syn)
:: =/ lac=desk (head wire)
:: :: ignore spurious updates from clay on desks we've uninstalled
:: ::
:: ?. (~(has by ark) lac)
:: kiln
:: =. vats (from-wire wire)
:: take-commit
:: ::
:: ++ take-commit
:: ^+ kiln
:: =. kiln
:: =< abet
:: ~> %slog.(fmt "commit detected at {here}")
:: =. rail.rak
:: ?~ rail.rak ~
:: `[(get-publisher our loc now) +.u.rail.rak]
:: =. vats (emil listen:pass (diff:give %commit loc rak) ~)
:: ?. liv.rein.rak
:: ~> %slog.(fmt "{<loc>} not running")
:: vats
:: update-running-dudes
:: ?. =(%base loc)
:: kiln
:: (bump-many (all-desks-but (get-unblockers ark)))
:: ::
:: ++ take-merge-main
:: |= syn=sign-arvo
:: ^+ vats
:: ?> ?=(%mere +<.syn)
:: ?: ?=([%| %ali-unavailable *] p.syn)
:: =+ "kiln: merge into {here} failed, maybe because sunk; restarting"
:: %- (slog leaf/- p.p.syn)
:: =. vats (emit (diff:give %merge-sunk loc rak p.p.syn))
:: reset
:: ?: ?=(%| -.p.syn)
:: =+ "kiln: merge into {here} failed, waiting for next revision"
:: %- (slog leaf/- p.p.syn)
:: =. vats (emit (diff:give %merge-fail loc rak p.p.syn))
:: vats
:: ~> %slog.(fmt "merge into {<loc>} succeeded")
:: ?. =(%base loc)
:: vats
:: ~> %slog.(fmt "merging %base into %kids")
:: (emit merge-kids:pass)
:: ::
:: ++ take-merge-kids
:: |= syn=sign-arvo
:: ^+ vats
:: ?> ?=(%mere +<.syn)
:: ?: ?=([%| %ali-unavailable *] p.syn)
:: ~> %slog.(fmt "OTA to %kids failed, maybe peer sunk; restarting")
:: =. vats (emit (diff:give %merge-sunk %kids rak p.p.syn))
:: reset
:: ?- -.p.syn
:: %& ~> %slog.(fmt "OTA to %kids succeeded")
:: (emit (diff:give %commit %kids rak))
:: %| ~> %slog.(fmt "OTA to %kids failed {<p.p.syn>}")
:: (emit (diff:give %merge-fail %kids rak p.p.syn))
:: ==
:: ::
:: ++ take-gall-lyv
:: |= syn=sign-arvo
:: ^+ vats
:: =. vats gall-lyv
:: =/ vets ~(tap in ~(key by ark))
:: |-
:: ?~ vets vats
:: =. vats (abed i.vets)
:: =. vats update-running-dudes
:: $(vets t.vets)
:: ::
:: ++ update-running-dudes
:: ^+ vats
:: =/ local [our loc now]
:: =/ dif (adjust-dudes local rein.rak)
:: =. vats (start-dudes jolt.dif)
:: =. vats (stop-dudes idle.dif)
:: vats
:: ::
:: ++ start-dudes
:: |= daz=(list dude)
:: (emil (turn daz start-dude:pass))
:: ::
:: ++ stop-dudes
:: |= daz=(list dude)
:: (emil (turn daz stop-dude:pass))
:: :: +crank-next: pop stale items from .next until one matches
:: ::
:: ++ crank-next
:: |= new=weft
:: ^+ [match=*(unit rung) rail.rak]
:: ?~ rail.rak
:: ~| [%no-rail-for desk=loc]
:: !!
:: =/ rog next.u.rail.rak
:: =- [match `u.rail.rak(next next)]
:: |- ^- [match=(unit rung) next=(list rung)]
:: ?~ rog [~ next.u.rail.rak]
:: ?: =(new weft.i.rog)
:: [`i.rog t.rog]
:: $(rog t.rog)
:: ::
:: ++ is-tracking
:: ^- ?
:: ?~ rail.rak |
:: !paused.u.rail.rak
:: --
:: :: +get-blockers: find desks that would block a kernel update
:: ::
:: ++ get-blockers
:: |= kel=weft
:: ^- (set desk)
:: %- ~(gas in *(set desk))
:: %+ murn ~(tap by ark)
:: |= [=desk =arak]
:: ?: =(%base desk)
:: ~
:: ?. liv.rein.arak
:: ~
:: ?: =(`kel (read-kelvin-local our desk now))
:: ~
:: ?~ rail.arak
:: `desk
:: ?: (lien next.u.rail.arak |=([* k=weft] =(k kel)))
:: ~
:: `desk
:: :: +get-unblockers: find desks which shouldn't block a kernel upgrade
:: ::
:: ++ get-unblockers
:: |= ark=(map desk arak)
:: =/ base=(set desk) (sy %base %kids ~)
:: %- ~(gas in base)
:: %+ murn ~(tap by ark)
:: |= [loc=desk ark=arak]
:: ^- (unit desk)
:: ?. liv.rein.ark `loc
:: ?~ rail.ark `loc
:: ?: paused.u.rail.ark `loc
:: ~
:: +get-germ: select merge strategy into local desk
::
:: If destination desk doesn't exist, need a %init merge. Otherwise,

View File

@ -1940,7 +1940,7 @@ u3m_init(size_t len_i)
u3l_log("boot: mapping %zuMB failed", len_i >> 20);
u3l_log("see urbit.org/using/install/#about-swap-space"
" for adding swap space\r\n");
" for adding swap space");
if ( -1 != (c3_ps)map_v ) {
u3l_log("if porting to a new platform, try U3_OS_LoomBase %p",
map_v);

View File

@ -1439,11 +1439,6 @@ u3_term_io_hija(void)
_term_it_send_csi(uty_u, 'r', 2, 1, uty_u->tat_u.siz.row_l - 1);
_term_it_send_csi(uty_u, 'S', 1, 1);
_term_it_send_csi(uty_u, 'H', 2, uty_u->tat_u.siz.row_l - 1, 1);
// c3_assert(c3_write(uty_u->fid_i, "\r", 1) == 1);
// {
// uv_buf_t* buf_u = &uty_u->ufo_u.out.el_u;
// c3_assert(c3_write(uty_u->fid_i, buf_u->base, buf_u->len) == buf_u->len);
// }
}
}
}