13. When something goes wrong
The executor is not running
The most common mistake: you run a sequence and forgot to start the executor in the other terminal. Anvil retries the connection for a few seconds, in case the executor is still starting, and then ends with:
$ anvil sequences/first.yseq 2>&1 | tail -n 2
waiting for the step executors (executor 'bench' at 127.0.0.1:9201: WASI socket error: ErrorCode { code: 14, name: "connection-refused", message: "The TCP connection was forcefully rejected" })…
could not connect to the step executors: executor 'bench' at 127.0.0.1:9201: WASI socket error: ErrorCode { code: 14, name: "connection-refused", message: "The TCP connection was forcefully rejected" }
The message names the executor that refused and where it was looked for:
bench, on 9201. When you see connection-refused, check first that every
grpc executor in the sequence is running:
$ ss -ltn | grep 9201
prints a line when something is listening on that port, and nothing when not.
An old executor is still running
The opposite problem is worse, because nothing fails. If an executor from an earlier session is still listening on the port — started in a terminal you closed, or left behind by a crash — Anvil talks to it, and it answers with whatever code it was built from. You change a step, run the sequence, and see the old behaviour.
Before chasing a result that makes no sense, see who owns the port:
$ ss -ltnp | grep 9201
The process name and number are at the end of the line; stop it and start your executor again.
If you start a C# executor while another one holds the port, it prints its
usual anvil C# executor: … on 127.0.0.1:9201 line and then stops with
Unhandled exception. System.IO.IOException: Failed to bind to address http://127.0.0.1:9201: address already in use. and a stack trace. Believe the
exception, not the first line
(#79).
I changed a step and nothing changed
The executor serves the code it was started with. Stop it and start it again;
dotnet run rebuilds. The same goes for the Python executor. Rust modules are
read when Anvil starts the executor, so rebuild and copy the .wasm again.
The sequence does not match the executors
la secuencia no casa con lo que ofrecen los ejecutores is Anvil refusing to
run because the sequence asks for something an executor does not offer. The
lines below it are in English and say exactly what: a step the executor does
not serve (chapter 4), an input it does not take or a required one missing
(chapter 7), an output it does not return (chapter 7). Nothing ran.
Messages that name Spanish keys
Some load errors in 0.5.0 still name the Spanish spelling of a key — for
instance, a subsequence with its own executors: section is told to refer to
executors “by name with ejecutor:”. The key is executor:. The sequence
format itself is English only (#59).
The AppImage does not start
dlopen(): error loading libfuse.so.2 means FUSE 2 is not installed; see the
end of chapter 2.