Yes, there is a global timer for closing flows, but all that does is
enqueue a cork message. +on-stir needs to set _pump_ timers for all
flows that might still have messages to send, which includes closing
flows.
When ames notifies us that our subscription has been kicked, we enqueue
a cork to clean up the flow. Unlike the %leave case, however, we were
not registering the cork in the queue of outstanding comms. We would
eventually get an ack, but not know what for, and erroneously inject
%poke-acks and %watch-acks.
Here we simply add a %cork entry to the queue before sending it.
This is sufficient to bring the normal (non-prerelease-bugged) cases
into the new world.
For the prerelease ships that ran a buggier version of the new gall
subscription logic, we note that the conditional may trigger for the
nonce=1 case where it had already triggered for their
(shouldn't-be-possible) nonce=0 case. This results in a %leave on a wire
that wasn't in use. This no-ops on the publisher side though, and the
flow gets corked right away, so this is considered harmless.
In response to clog notification from remote ames, we were sending a
%cork to clean up the flow. However, the wire we were using had the /sys
prefix already stripped off. Here, we put it back in.
Start by killing subscription nonce 0, then work our way up instead of
down. We enhance the printf with a "total nonces" indicator so we can
still easily see the progress being made.
Previous +ap-doff kicked the agent repeatedly. We needed to kick
it only once. Now publisher agents clear their incoming subscription
state without the subscriber making lots of new subscriptions because
of repeated kicking.
+on-plea gets called in two very different ways:
1) handling request from local vane to send %plea to peer
2) handling %cork request from another ship, which our local ames has %pass'ed
to ourselves
In the second case, we shouldn't print misleadingly, or bind a duct in the ossuary.
+ap-nuke was not including the nonce, but should.
+ap-handle-peers was potentially including a zero nonce.
(The latter shouldn't have been possible, but there's a bug in +load
where sub-nonce.yoke gets initialized as 0 instead of 1.)
Gall tells ames to %cork flows for subscriptions it has closed.
Receiving a kick also closes a subscription, but gall wasn't issuing a
%cork in that case. We correct that here.
Inlines +mo-handle-ames-response's logic at its only callsite.
seems that this structure has been unused since
e75ab631a4 and confuses
newbies trying to figure out exactly what the commit
structure is (which is how I came across this)
Without this, a ship would send a cork on a max of one flow per
recork timer, which could take years to clear for some ships.
This starts a hot loop of trying the next cork once one gets
positively acked.
The previous recork timer queued up %cork messages without sending them.
It also relied on making sure pump timers didn't get set for recork bones.
This was fragile.
The new design enqueues up to one new %cork message per ship during each
recork timer, based on the state of the flow. If the flow is closing but
there are no outstanding messages in it, then it needs to be recorked.
Flows will be recorked in ascending numerical order by bone.
The condition got butchered during refactor: instead of avoiding the creation
of pump timers during recork wake, it was setting them _exclusively_ during
recork wake.
Currently when creating a fake ship, if an invalid ship name is given,
then the program exits without ever cleaning up the terminal. This
results in a bugged termianal that requires closing and repopening
or using the `reset` cmd.
This commits adds a call to `u3_term_log_exit()` and `fflush(stdout)`
before calling `exit(1)` to ensure proper cleanup.
Address issue #5914
* next/vere: (49 commits)
vere: bumps version
vere: bumps version
ci: enable release version mgmt
Revert "ci: reenable release mgmt"
ci: reenable release mgmt
ames: track/log bad ciphertext crashes separately
u3: %evil leaves no trace
vere: drop bail:evil events without error notifications
jets: bail:evil in ae-siv decryption jets
vere: make uv_cancel return code check explicit
u3: check for overflow in interpreter if guard page not present
build: default to using guard page
u3: return 0 from u3e_fault() if guard page cannot be protected
u3: control presence of guard page using macro
Revert "u3: check for road stack overflow on every nock %2 and %9"
build: make bench is phony
u3: failure to mprotect() the new guard page is fatal
u3: removes/disables obsolete road stack overflow checks
u3: account for guard page in cellblock allocation conditional
u3: bump road heap offset before allocating cellblock
...
This test started failing presumably somewhere during #5886. Testing
with a comet on the network, the test seems inaccurate: the comet can
communicate and be communicated to just fine.
Before this change, `term/lib` was importing the Poke type from the `http-api` package. This was causing the rollup build output to place the `term` exported types in a separate path (`dist/api/term`). By switching to the relative import, it is now exported at the expected path (`dist/term`). This fixes imports in consuming projects (e.g., `import { Belt, pokeTask, pokeBelt } from '@urbit/api/term';`).
Also, remove the extraneous `Scry` import.
When the first byte is greater or equal to 0xfd, (bex len) bytes are consumed to
form the csiz atom, but only one byte is dropped from the 'rest' of the input.
The parser should consume all bytes of the CompactSize.
In reconnect scenarios (or wonky network situations) we may receive
events we had already heard. Here we make sure to drop those.
Also simplifies the getEventId() logic.
- Fixes an issue where behn would fail to report the next timer to vere
correctly, resulting in timers only firing once every ten minutes.
- Updates |rein to be additive instead of fully replacing existing
configuration. Specifying a single agent to start will no longer stop
other explicitly-started agents.
- Various QoL improvements to dojo.
- Updates DNS requests to go to ~deg instead of ~zod. The Foundation
will take over DNS request handling.
Contributions:
David Farrell (5):
dojo: have dojo check =dir exists before switching
dojo: simplify dir not exist error message build
dojo: setting eny/now/our shouldn't crash dojo
dojo: say how to beat the %dy-edit-busy escape room
dojo: remove unnecessary debug output
Joe Bryan (8):
behn: adds (failing) tests
behn: unconditionally clear runtime timer state on %wake
behn: don't compare pending timers to now
behn: refactor to use +abet pattern
behn: emit %doze on any rescheduling of the next timer
behn: cleans up comments
Merge pull request #5858 from urbit/jb/behn-fix2
test: removes debugging comments from %behn unit tests
Sidnym Ladrut (1):
hood: fix issue w/ rein diff application
Yaseen (1):
eyre: Modify landing title from "OS1" to "Urbit"
fang (16):
clay: render syntax errors at end of file
Merge pull request #5811 from ynx0/patch-1
Merge pull request #5812 from urbit/m/eof-syntax-error
Merge pull request #5837 from dnmfarrell/dnmfarrell/arvo-dy-edit-press-bksp-to-abort
Merge pull request #5840 from dnmfarrell/dnmfarrell/arvo-dojo-check-dir-exists-before-switch
Merge branch 'master' into next/arvo
gall: exclude from traces
Merge pull request #5841 from dnmfarrell/dnmfarrell/arvo-dojo-dont-crash-set-beak
Merge pull request #5863 from sidnym-ladrut/sl/fix-rein-toggle-behaviori
Merge pull request #5868 from urbit/pkova/dns
Merge branch 'master' into next/arvo
Merge pull request #5857 from urbit/jb/behn-fix1
Merge pull request #5855 from urbit/m/gall-quieter
hood: re-patch |rein
Revert "clay: render syntax errors at end of file"
Revert "gall: exclude from traces"
pkova (1):
dns: transfer ship.arvo.network domains from ~zod to ~deg
-----BEGIN PGP SIGNATURE-----
iQIzBAABCAAdFiEEB0bRQARxix0iuhs56wNXYMG7qXIFAmLPF9wACgkQ6wNXYMG7
qXLO5w/7BSc5aajTaA/o8ma4SoySX/PXH1dnnoJO9A2fiYR3sIpcdY12xNmnCA/e
y0OyQeSqmRzO90bVJI3AVxN0qEDcz0fR9ZoC8YeYWRrAWy7xRTm808NRW1rovAEN
LIlOemUpJODlqkkiD0x8hwxNSix9+tkcr6ehilzIuORaBcTI586rekT+FfXGuD9Z
IURbKkKS443M3kIyL9MUXu8lopMpfwZg9VYwo3a8fnUvUmVRleHBpUI71GXd41w4
eQv63197mcwMq/od9JUXBdX1yek/QyVV0SqZhPCksUOipdCbH0oJpzBmh/4i0CGb
Ij2gyGlth4iErXx+TBBpHk0FKQysHoPQyBI3/ljtZG4xpVToKHyuw7hODHR4STUL
hYV+iWbOJ+reh0Zkrk/SjZHZMYBKcuBonIXwNXDE5cC50q+dqqaj8+0oPOmdjhDy
rbzN377Ijags+ivLagpra1KE+lVLtKbOae16FqzBZJqs7xuj9ZsoabG+OxoXDH7j
i1oXIskYuIzHfbSbDk2eaCPKONFs19Oi8ULg5/zxaJsQLks9WMuckBPFr4paCrdo
eBFe139f87xBi8WBZ7rzYyrUFtGhTLo1Bzapdbvh18WhYfK95sTo+PCUJNHB29+H
qmkE3bMZ+v2VOPLFtRfrb1bolpsoR/m5Z6SWElMB2Ig2WKkDqvE=
=CxGA
-----END PGP SIGNATURE-----
gpgsig -----BEGIN PGP SIGNATURE-----
iQIzBAABCAAdFiEEB0bRQARxix0iuhs56wNXYMG7qXIFAmLPJAQACgkQ6wNXYMG7
qXLiyxAAmOlm72h+UC34dnmtiIKjRyuq+XXl8MdyPu0XZPKS1XzewFAP+iQE1uVG
X5HJ04xl6SI/npa99p95K7f2T69OkXWvwax8fhu/+hhIVq8bQAOfzMIW5jk2Bfzl
j1wMjcjzDZquqNVaYHsYAmnUZFl2Tp3mv3j3VgxsyUfdXFKQLz9g7lhBellIZ1F+
HTfK8YBWGhzfUoJ/3pfXp7Q/6w60pW4AC/6dbfbmKW5rcZpyATWhIbYWullPsJWC
pjf5KYjwiiOVQU/0cZ5alXZX0ofV4Tf9er5I4Np0fF3j/5O1vdmBJ9E4RGJXJMrR
sQ6xt7yuX5wrpbUTqgvxA7sSjEB4+lk8sZJvC5KpLIvNF6s4o1aUnHYSODeIr0r3
vkx7YYfhbDv84xHA3lIejh7vcM5182dq0cNhHD1uLGt81IeE+YCl0G1cvUV5QxrQ
WGt3uLanIpBAJjseMc4N3mUcG343G0vs8058gZtwqsGXy7byF3tFKmt1kHPh2pjP
W9HJ0+MN7VSGqNidMv74r4ZpsDPdERkUqdhzb30tvBBp6xraXflVjvUT5Ln+501p
m2PO5aLbeVclIViwsC7wFLYooHDz5O7hZx5Sf1uUjNsaGYSPotPGH8UsXSiyKZ5/
p067gSrcyqHuLRYR/7izDCe7xTHImpP3doL6xmW4br2gl5wKX1s=
=BGu/
-----END PGP SIGNATURE-----
Merge tag 'urbit-os-v2.124'
urbit-os-v2.124
- Fixes an issue where behn would fail to report the next timer to vere
correctly, resulting in timers only firing once every ten minutes.
- Updates |rein to be additive instead of fully replacing existing
configuration. Specifying a single agent to start will no longer stop
other explicitly-started agents.
- Various QoL improvements to dojo.
- Updates DNS requests to go to ~deg instead of ~zod. The Foundation
will take over DNS request handling.
Contributions:
David Farrell (5):
dojo: have dojo check =dir exists before switching
dojo: simplify dir not exist error message build
dojo: setting eny/now/our shouldn't crash dojo
dojo: say how to beat the %dy-edit-busy escape room
dojo: remove unnecessary debug output
Joe Bryan (8):
behn: adds (failing) tests
behn: unconditionally clear runtime timer state on %wake
behn: don't compare pending timers to now
behn: refactor to use +abet pattern
behn: emit %doze on any rescheduling of the next timer
behn: cleans up comments
Merge pull request #5858 from urbit/jb/behn-fix2
test: removes debugging comments from %behn unit tests
Sidnym Ladrut (1):
hood: fix issue w/ rein diff application
Yaseen (1):
eyre: Modify landing title from "OS1" to "Urbit"
fang (16):
clay: render syntax errors at end of file
Merge pull request #5811 from ynx0/patch-1
Merge pull request #5812 from urbit/m/eof-syntax-error
Merge pull request #5837 from dnmfarrell/dnmfarrell/arvo-dy-edit-press-bksp-to-abort
Merge pull request #5840 from dnmfarrell/dnmfarrell/arvo-dojo-check-dir-exists-before-switch
Merge branch 'master' into next/arvo
gall: exclude from traces
Merge pull request #5841 from dnmfarrell/dnmfarrell/arvo-dojo-dont-crash-set-beak
Merge pull request #5863 from sidnym-ladrut/sl/fix-rein-toggle-behaviori
Merge pull request #5868 from urbit/pkova/dns
Merge branch 'master' into next/arvo
Merge pull request #5857 from urbit/jb/behn-fix1
Merge pull request #5855 from urbit/m/gall-quieter
hood: re-patch |rein
Revert "clay: render syntax errors at end of file"
Revert "gall: exclude from traces"
pkova (1):
dns: transfer ship.arvo.network domains from ~zod to ~deg
Problem:
by-channel has its own copy of server-state from line 2182. discard-channel returns an altered state, with one channel removed from the state of by-channel.
but the state of by-channel isn't changing with each iteration, so |trim is only removing one channel per invocation.
Solution:
update by-channel on each iteration.
%histogram, %block-headers, %tx-from-pos, %fee, %psbt are now all callable from the btc-provider agent. These actions are necessary in order to get the lightning network working within Urbit.
This is a temporary fix, and first part of the gall-request-queue-fix
release in two stages. This gives a publisher ship the ability to
understand a %cork and handle it properly, but no subscriber will
be sending %corks at this stage when leaving a subscription.
We still add a nonce to all subscription wires but it doesn't
increment it when resubscribing, allowing flows to be reused.
Tested locally with toy pub/sub agents and Group join/leaving
* master: (61 commits)
rich-text: removing broken plugin, reverting react-md to 5.0.3 for compat
graphcontent: blockquotes now correctly break paragraphs off
md-editor: fixing background in darkmode
landscape: [skip actions] update glob (0v5.kgrq2.gp725.bo5bk.dmr7d.h41qk)
ops: fixing build
meta: version bump for new changes from next/landscape
meta: package bump:
eventsource: prevent resetting event id counter
interface: fixing react-codemirror2 dep
groups: add webp to list of image types to check links for in chat
groups: fix issue where URL would be shown along with image in chat
groups: fix issue with chanel perms caused by use of Set()
groups: update glob (0v4.2se6m.fvv67.nn5e8.vfrv9.mmi88)[skip actions]
groups: updating package lock
groups: updating nvmrc
Fix webpack, build dependency issues
compat: fixing react-codemirror2 deps
compat: updating to latest sigil-js for react
compat: updating indigo, and removing unused deps
meta: fixing react version issue
...
Previously, the initial Azimuth snapshot was stored in Clay and shipped
in the pill. This causes several problems:
- It bloats the pill
- Updating the snapshot added large blobs to Clay's state. Even now
that tombstoning is possible, you don't want to have to do that
regularly.
- As a result, the snapshot was never updated.
- Even if you did tombstone those files, it could only be updated as
often as the pill
- And those updates would be sent over the network to people who didn't
need them
This moves the snapshot out of the pill and refactors Azimuth's
initialization process. On boot, when app/azimuth starts up, it first
downloads a snapshot from bootstrap.urbit.org and uses that to
initialize its state. As before, updates after this initial snapshot
come from an Ethereum node directly and are verified locally.
Relevant commands are:
- `-azimuth-snap-state %filename` creates a snapshot file
- `-azimuth-load "url"` downloads and inits from a snapshot, with url
defaulting to https://bootstrap.urbit.org/mainnet.azimuth-snapshot
- `:azimuth &azimuth-poke-data %load snap-state` takes a snap-state any
way you have it
Note the snapshot is downloaded from the same place as the pill, so this
doesn't introduce additional trust beyond what was already required.
When remote scry is released, we should consider allowing downloading
the snapshot in that way.
Because the publisher will send the cork plea back to the subscriber on
the next bone, we are not able to know the bone for the original cork.
To handle it, we add the cork bone to the plea path
still wip: it keeps resending the cork plea faster than its ~h1 timer
Removes the !: at the top of gall, so that it no longer gets included in traces about agent builds or crashes.
We also refine intentional crashes with ~_s, so that we still see a crash reason even if we don't get a full trace.
Lastly, flops the trace for +on-load crashes, which were getting printed bottom-first.
It's too easy to get trapped in the dojo %dy-edit-busy escape room. Just
type something like:
-build-file /=base/gen/ls/hoon
This modifies the dojo output to tell the user how to get out.
Fixes#1462.
Incorporates @Fang- suggested changes (thanks!).
Drops the path serialization as it will print on two separate lines,
and it is already displayed in dojo immediately above the error message:
> =dir /=base=/ge
dojo: dir does not exist
Sets the mapsize for AAarch64 Linux in `pkg/urbit/vere/disk.c` to the largest size I can get to work with musl, 500 MiB.
Leaves the Windows mapsize untouched at the old default of 60 GiB because I haven't done any testing to see what the limit is there.
If a desk already existed, we would crash the generator, embedding a
message in the resulting stack trace.
To improve legibility, we turn this into an %ask generator, prompting
only if we are about to overwrite an existing desk.
We also update the =force argument to be =hard instead, to match |nuke.
Stale lanes may cause forwarding loops. Imagine the following:
1) Planet A is live. Galaxy B, its indirect sponsor, learns of its route.
2) A goes offline. Another ship, C, is started in its place, at the same route.
3) B receives a packet for A, forwards it to the known route.
4) C received the packet, forwards it to B.
5) Repeat from 3.
Here, we update the forward lane(s) scry used by the runtime to not produce a
peer's lane if they haven't communicated with us in the last hour. Everyone's
supposed to ping their sponsorship chain every 30 seconds. If those aren't
going through, you shouldn't expect to be reachable anyway.
We may or may not want to update +send-blob to match.
* jb/next:
vere: disable printfs on failed requests to $version/next
vere: create $pier/.bin/pace automatically
build: factor out reusable workflow, call on push and tag creation
vere: trim trailing whitespace from pace file
build: use gh action artifact to propagate version string
build: fix version path for windows pre-release
build: fix bash conditional in pre-release upload check
build: run on appropriate tags
build: cut pre-releases on appropriate tags
Previously, if the pointer for a syntax error pointed to the end of the file
(and the file ended in a newline) the code snippet rendering would try to
display a line _beyond_ the end of the file, causing a crash.
Here, we detect that case, and display `<<end of file>>` instead.
Changes the test command to check if args contains a single path and
wraps it in a list. Now a test thread can be started without providing
a list:
-test %/tests/lib
And passing a list still works:
test %/tests/lib ~
One nit in this change is the lark expression to reach into args: if
args is ~ then instead of getting a useful need/have error, the test
ends in a "false-start". Perhaps this could be fixed by detecting ~
and setting it to %/tests.
* next/arvo: (435 commits)
vere: backs out overly zealous path canonicalization assertions
clay: update tests
vere: bump version to 1.9-rc3
vere: bump version to 1.9-rc1
clay: add logging commands
ames: fix comet communication with breached ship
pill: multi-brass
clay: don't add lobe to wire to avoid flow leak
ames: handle +call moves if re-evolving from larva
clay: add tomb scry
clay: make trim clear ford cache
clay: progress download when receiving tombstone
clay: fetch entire latest foreign commit
clay: don't require head of foreign desks
clay: fixes
clay: tweaks from walkthrough
ames: indent
ames: start drainage timer if regressed from adult
clay: re-export page to not break apps
clay: fix stack while building directories
...
* next/vere:
urcrypt: correct parameter ordering in urcrypt_ed_veri()
u3: comment use of X macro in interpreter
u3: unify interpreter opcode information using X macro