v0.9.0
Major Changes
There are two major changes in this release, plus a lot of smaller changes and
bug fixes.
LPT Scheduling
The first big change is that Maelstrom now uses Longest-processing-time-first
(LPT)
scheduling. This brings narrows the theoretical upper bound on the difference
between our schedules and optimal schedules (which are NP-hard to compute). In
practice, this greatly helps situations where there are a few long-running
tests mixed in with a bunch of faster ones.
cargo-maelstrom
now remembers how long the last few runs of each test took.
It uses that information to predict how long the next run will take. Those
tests that are predicted to run the longest are run first.
Local Jobs
The second big change is that Maelstrom now has an "escape hatch" that one can
use to force a job to be run on the local machine, with access to the local
file system and/or network.
There is now a "local" network option, which means that a job will run on the
local machine, without being put in its own network namespace. In other words,
it will have all the same network access as any program on the local machine.
There is also now a "bind" mount type, which allows one to expose parts of the
local file system to the job. For example, the ./target
directory could be
provided to a job, mounted at /target
inside of the job's container.
Jobs that use either of these features are forced to run on the local worker,
even if all other jobs are going to a remote cluster.
cargo-maelstrom
- Added a new
container-image-depot-root
configuration value. The default is
$XDG_CACHE_HOME/maelstrom/container
, which is what was hard-coded before.
[248] - Cleaned up where various thing go in the Cargo target directory. Before, we
had a number of files and directories directly in the target directory. Now,
there aretarget/maelstrom/cache
andtarget/maelstrom/state
, which are
the equivalents to the "cache" and "state" directories in the XDG Base
Directories Specification. - Remove the following short command-line option aliases:
[277]-s
(--cache-size
)-I
(--inline-limit
)-S
(--slots
)
- Fixed a few race conditions in the outputting of tests results.
[279] - Fixed a bug with tar files with
/
entries (as demonstrated by the busybox
image).
[272] - Fixed two bugs related to
cargo-maelstrom
hanging instead of exiting when
there is a remote error. - Improved error messages when a container image or tag doesn't exist.
- Restored container image download progress bars.
- Swap order of "side" progress bars (artifact upload and container download)
so that they align on the right. - The format for mounts has now changed. The
fs_type
field has been renamed
type
, and a new"bind"
type has been added. - The
enable_loopback
field has been replaced with a newnetwork
field that
can have one of the three values:"disabled"
,"local"
, or"loopback"
.
The new"local"
option is used to give a job unfettered access to the local
machine's network. - Clarified that when running
--list-binaries
, the provided filters match
against the package and the binary. Previously, we would only match against
the package in these scenarios, which was confusing. - Added the
shm
device type.
maelstrom-run
- Added a new
container-image-depot-root
configuration value. The default is
$XDG_CACHE_HOME/maelstrom/container
, which is what was hard-coded before.
[248] - Added a new
cache-root
configuration value. The default is
$XDG_CACHE_HOME/maelstrom/run
, which is what was hard-coded before.
[191] - Added a new
state-root
configuration value. The default is
$XDG_STATE_HOME/maelstrom/run
.
[191] - Moved the
client-process.log
file into thestate-root
directory. It used
to live in the cache directory, which was incorrect according to the XDG Base
Directory Specification. - Remove the following short command-line option aliases:
[277]-s
(--cache-size
)-i
(--inline-limit
)-S
(--slots
)
- Fixed a bug where we weren't properly waiting for job callbacks.
- Improved error messages when a container image or tag doesn't exist.
- The
mounts
andenable_loopback
fields have been changed as in
cargo-maelstrom
. - The
environment
field now support multiple layers of substitution, just
like incargo-maelstrom
. - Added the
shm
device type.
Client Internals
- Changed the gRPC protobuf to remove cruft and make it easier to use.
- The client process now does environment variable substitution, so it's now
available to all clients, not just Rust.
maelstrom-worker
- Remove the following short command-line option aliases:
[277]-r
(--cache-root
)-s
(--cache-size
)-i
(--inline-limit
)-S
(--slots
)
maelstrom-broker
- Remove the following short command-line option aliases:
[277]-r
(--cache-root
)-s
(--cache-size
)