Proto commits in maelstrom-software/maelstrom

These 85 commits are when the Protocol Buffers files have changed:

Commit:c2a4b60
Author:Neal Fachan
Committer:Neal Fachan

Rename the `command` field to `program` in the CommandLayer.

The documentation is generated from this commit.

Commit:464976c
Author:Neal Fachan
Committer:Neal Fachan

Rename program layers to command layers.

Commit:df946a9
Author:Neal Fachan

Introduce new LayerSpec::Program and related types. Make sure we can parse them correctly. There is no template variable expansion for program layers.

Commit:6bdfe9f
Author:Neal Fachan
Committer:Neal Fachan

Change broker to use new github config values.

Commit:8728f3a
Author:Neal Fachan
Committer:Neal Fachan

Nix the MixedClusterCommunicationStrategy type. Now, the client will either go all-TCP or all-GitHub.

Commit:335f28a
Author:Neal Fachan
Committer:Neal Fachan

Send ClusterCommunicationStrategy with client's start rpc.

Commit:338cbd5
Author:Neal Fachan
Committer:Neal Fachan

Remove state_dir from client. As I was updating the documentation, I realized that we no longer use the state_dir in the client. It's now only used in the test runner to store the database of test runs.

Commit:f41014d
Author:Neal Fachan
Committer:Neal Fachan

Change Restart to Stop. This is now called implicitly when the Client is dropped. The idea behind doing this in the drop method is that we want to be able to immediately start another Client and know that the old one cleaned up.

Commit:8eb2b90
Author:Neal Fachan
Committer:Neal Fachan

Change how the client protocol specifies root-overlay. The base JobSpec has a single field called root_overlay. This can be one of None, Tmp, or Local. The latter contains two fields to indicate what directory the overlayfs should use. Before this change, the RootOverlay type, which is what the root_overlay field is, was propagated all the way up to the client's ContainerSpec. The problem was that this didn't really make much sense from the point of view of how clients wanted to specify this field. From a client's point of view, they really just want to have an `enable_writable_file_system` flag. The Local value is really a more hidden thing that will hopefully, eventually, go away or at least be specified differently. To that end, this patch changes the client's JobSpec to have a separate field called capture_file_system_changes. This is on the JobSpec, not on the ContainerSpec. The idea is that this will only be used by maelstrom-pytest to generate the container used to run tests in. When command layers are working, this will go away completely. This patch also changes the root_overlay field on the client's ContainerSpec to be an enable_writable_file_system bool field. This is how the clients actually think about things, so it matches well.

Commit:d662328
Author:Neal Fachan
Committer:Neal Fachan

Make network and root_overlay optional in ContainerSpec, CollapsedJobSpec, and TestMetadataContainer. We want to be able to distinguish between values that aren't set and values that are set to the default value so that we can stack containers properly.

Commit:0f99e28
Author:Neal Fachan
Committer:Neal Fachan

Rename ImageSpec to ImageRef.

Commit:1c4c147
Author:Remi Bernotavicius

protobuf: Make ArtifactTransferStrategy have correct variant naming

Commit:045c338
Author:Remi Bernotavicius
Committer:Remi Bernotavicius

Rename ArtifactUploadStrategy to ArtifactTransferStrategy I want to re-use this type in the worker

Commit:82c31d5
Author:Neal Fachan
Committer:Neal Fachan

Rename some enum variants and a "message" field in items.proto.

Commit:200facd
Author:Neal Fachan
Committer:Neal Fachan

Add container parents to containers.

Commit:12a18c1
Author:Neal Fachan
Committer:Neal Fachan

Use ImageSpec inside of ContainerParent::Image. This simplifies things.

Commit:8810d47
Author:Neal Fachan
Committer:Neal Fachan

Use an EnumSet of ImageUse in ContainerParent::Image and ImageSpec instead of three bools.

Commit:a2f833f
Author:Neal Fachan
Committer:Neal Fachan

Replace ImageSpec with ContainerParent. This plumbs through a change where every container can have a parent that is either another container or an image.

Commit:cbf7727
Author:Neal Fachan
Committer:Neal Fachan

Remove ContainerRef and instead always embed a ContainerSpec in a JobSpec. This is the first step of some changes. We're going to introduce a `parent` field to the ContainerSpec that will replace the `image` field. This will be either an image, a named container, or nothing.

Commit:e8c9089
Author:Remi Bernotavicius

Hook up github artifact upload in client-process to new start argument

Commit:272915c
Author:Remi Bernotavicius
Committer:Remi Bernotavicius

Remove clear_cached_layers RPC We are using "restart" instead

Commit:47366a5
Author:Remi Bernotavicius
Committer:Remi Bernotavicius

Add restart RPC to client-process and use in test-runner

Commit:711a6e4
Author:Remi Bernotavicius

Add a "clear_layer_cache" call the client can use It calls it when restarting in watch mode

Commit:bbe6831
Author:Neal Fachan
Committer:Neal Fachan

Add new priority field to JobSpec.

Commit:62307f9
Author:Remi Bernotavicius

Remove JobStateCounts from IntrospectResponse

Commit:148917b
Author:Remi Bernotavicius
Committer:Remi Bernotavicius

Stream JobStatus back from run_job in client

Commit:b8f59e9
Author:Remi Bernotavicius
Committer:Remi Bernotavicius

Rename cjid to client_job_id in JobCompletedStatus

Commit:10c9e67
Author:Remi Bernotavicius
Committer:Remi Bernotavicius

Add protobuf types for the job status stuff

Commit:a633336
Author:Remi Bernotavicius
Committer:Remi Bernotavicius

Rename Layer to LayerSpec to match JobSpec and ContainerSpec

Commit:63e018a
Author:Remi Bernotavicius
Committer:Remi Bernotavicius

Change JobSpec to be able to accept a named container

Commit:5b1ba6a
Author:Remi Bernotavicius
Committer:Remi Bernotavicius

Add add_container client RPC (unimplemented)

Commit:16176c1
Author:Remi Bernotavicius
Committer:Remi Bernotavicius

Remove some now unused protobuf things

Commit:4386663
Author:Remi Bernotavicius
Committer:Remi Bernotavicius

Name our protobuf enums variants correctly They follow C style name scoping rules, and are usually shouty-snake-case prost also is expecting this kind of naming

Commit:6b203dd
Author:Remi Bernotavicius

Forward client-process log messages to client via RPC

Commit:2cef3b6
Author:Remi Bernotavicius
Committer:Remi Bernotavicius

Split out ContainerSpec from JobSpec

Commit:cedd58d
Author:Remi Bernotavicius
Committer:Remi Bernotavicius

Remove add_layer client API Instead just pass what was being accepted in add_layer directly in the JobSpec. I don't try to parallelize the layer creation at all

Commit:7f7f6c4
Author:Remi Bernotavicius

Add `enum_type` feature proto-buf conversion macros This is only for enums containing fields and aids in wrapping them up in structs

Commit:84d5d11
Author:Remi Bernotavicius
Committer:Remi Bernotavicius

Add SharedLibraryDependencies layer type It just returns an error if used right now

Commit:4edcc30
Author:Neal Fachan
Committer:Neal Fachan

Make working_directory, user, and group optional in the JobSpec. Fixes #348.

Commit:c6cc135
Author:Neal Fachan
Committer:Neal Fachan

Remove old, deprecated devices stuff. Devices are now specified as mounts. Fixes #321.

Commit:0c540a2
Author:Remi Bernotavicius
Committer:Remi Bernotavicius

Add --accept-invalid-remote-container-tls-certs configuration option This will let us connect to a service using a self-signed certificate which is useful for locally-run registries

Commit:d0aef22
Author:Neal Fachan
Committer:Neal Fachan

Set the pty window size properly.

Commit:979c5df
Author:Remi Bernotavicius
Committer:Remi Bernotavicius

Move image tag parsing to inside maelstrom-container This removes the tag field from the various ImageSpecs, instead the image name will just include the tag and in a future change any of the other information. Doing this parsing inside maelstrom-container is very convenient since now the various front-ends to the client don't have to worry about parsing valid image names. This means that some validation is now happening later rather than earlier, but I think the convenience of it outweighs this concern. You have to try pretty hard to create an invalid image name.

Commit:f16acf9
Author:Neal Fachan
Committer:Neal Fachan

Remove ptmx device type. It turns out that bind mounting this into a container doesn't really work. It seems like what you're supposed to do for Linux containers is to use the ptmx in /dev/pts. Our maelstrom-test.toml now has an example of this.

Commit:10e16aa
Author:Neal Fachan
Committer:Neal Fachan

Add allocate_tty field to JobSpecs. Currently this is an Option<AbstractUnixDomainAddress>, where AbstractUnixDomainAddress is an array of 6 bytes. I chose this 6-byte array because that's what we'll get back from the autobind feature of the linux kernel for abstract unix domain sockets.

Commit:50d9ff2
Author:Neal Fachan
Committer:Neal Fachan

Do all mounts using the multi-step, new linux mount API.

Commit:78d30d4
Author:Neal Fachan
Committer:Neal Fachan

Add a JobRootOverlay. This replaces the enable_writeable_file_system field in the JobSpec. However, at this point, both clients continue to parse the enable_writable_file_system flag and convert it to a JobRootOverlay.

Commit:06e5360
Author:Neal Fachan
Committer:Neal Fachan

Remove overlay mount type. We're instead just going to provide overlay mounts for the root directory.

Commit:addeddd
Author:Neal Fachan
Committer:Neal Fachan

Add a new Overlay mount type. More to come.

Commit:511bce0
Author:Neal Fachan
Committer:Neal Fachan

Add `devices` mount type. This will replace the `devices` field of the `JobSpec`.

Commit:f4a1628
Author:Neal Fachan
Committer:Neal Fachan

Add support for /dev/ptmx.

Commit:ef08354
Author:Neal Fachan
Committer:Neal Fachan

Reorder some cases for JobMounts.

Commit:eafe593
Author:Neal Fachan
Committer:Neal Fachan

Add support for devpts and mqueue file system types.

Commit:3248613
Author:Neal Fachan
Committer:Neal Fachan

Re-order the JobSpec fields to be a little more logical.

Commit:e596ac7
Author:Remi Bernotavicius

Add /dev/shm device to maelstrom

Commit:103e372
Author:Neal Fachan
Committer:Neal Fachan

Replace bind mount flags with "read_only" boolean field.

Commit:aecc3e5
Author:Neal Fachan
Committer:Neal Fachan

Remove "recursive" flag for bind mounts. There is no point having this flag. We basically always force it to be set now. Here's the comment from the code: We always pass recursive here because non-recursive bind mounts don't make a lot of sense in this context. The reason is that, when a new mount namespace is created in Linux, all pre-existing mounts become locked. These locked mounts can't be unmounted or have their mount flags adjusted. In this context, we're always in a new mount namespace, hence all mounts on the system are locked. When you try to call open_tree without AT_RECURSIVE on a tree that has mounts under it, you get an error. The reason is that allowing the binding of this subtree would have the effect of revealing what was underneath those locked mounts -- in effect, unmounting them. If we allowed the user to specify the recursive flag, it would just mean that their mount would fail if there happened to be any mount at that point or lower in the tree. That's probably not what they want.

Commit:39a975a
Author:Neal Fachan
Committer:Neal Fachan

Replace BindMount::access with BindMount::flags. Flags are optional.

Commit:8aa37c3
Author:Neal Fachan
Committer:Neal Fachan

Add in new JobMount::Bind variant. This will panic in the executor if it is ever encountered. We'll add in actual support in the next few patches.

Commit:67d159c
Author:Neal Fachan
Committer:Neal Fachan

Change how JobMount is represented to prepare for adding in a new variant. This changes the representation, but keeps the TOML and JSON parsing the same. It does change the protobuf representation.

Commit:84ae264
Author:Neal Fachan
Committer:Neal Fachan

Change enable_loopback in maelstrom_client_base::spec::JobSpec to a new JobNetwork enum. This enum has three variant: disabled, enabled, and local. The local variant indicates that the job has to be run on the local runner, and it will be run in the enclosing network namespace.

Commit:3de5669
Author:Remi Bernotavicius

Remove the get_container_image client RPC

Commit:6cb82a9
Author:Remi Bernotavicius

Add estimated_duration field to client JobSpec

Commit:063a329
Author:Remi Bernotavicius
Committer:Remi Bernotavicius

Change proto-buf JobSpec to support upcoming image changes The way the environment is evaluated is going to change so that evaluation happens on the other side of the RPC. The structures have been changed to support that, but it doesn't evaluate anything yet. Similarly the image field is ignored right now.

Commit:6b8a5bc
Author:Remi Bernotavicius
Committer:Remi Bernotavicius

Change start field numbering to sequential We aren't worrying about backward compatibility here yet

Commit:fd5aa0f
Author:Remi Bernotavicius

Remove add_artifact RPC, it is unused

Commit:8f7c9af
Author:Remi Bernotavicius
Committer:Remi Bernotavicius

Add introspect client RPC to replace two existing ones

Commit:de0e3fd
Author:Remi Bernotavicius

Rename AddJob RPC to RunJob This makes more sense since the RPC returns when the job finishes.

Commit:1c03819
Author:Remi Bernotavicius

Remove wait_for_outstanding_jobs RPC This RPC is error-prone because it is easy to think it will wait for all your job RPCs to have completed, but it isn't able to do that. Furthermore, if you have threads waiting for jobs to complete, this call can't possibly wait for those to finish. It is better to encourage some kind of client-side synchronization instead.

Commit:9289a8d
Author:Neal Fachan
Committer:Neal Fachan

Plumb container_image_depot_dir out to clients.

Commit:43b768f
Author:Neal Fachan
Committer:Neal Fachan

Plumb in new StateDir.

Commit:1a9a53e
Author:Remi Bernotavicius
Committer:Remi Bernotavicius

Time tests being run and keep in JobEffects see #81

Commit:1fabb7d
Author:Neal Fachan
Committer:Neal Fachan

Pass the container_image_depot_cache_dir into the client process. We very quickly become root in our own namespace in the client process, so we can't use xdg to get the result when we need it. In theory, we could get the value before we go into our own namespace, but it seems cleaner to just have the start message contain in.

Commit:dbe3833
Author:Neal Fachan
Committer:Neal Fachan

Plumb the local worker config parmeters into the protobuf.

Commit:fe2e3a8
Author:Neal Fachan
Committer:Neal Fachan

Remove unused ProcessBrokerMsgSingleThreadedRequest.

Commit:b7e0320
Author:Neal Fachan

Get first cut of standalone working. If you don't provide a broker to cargo-maelstrom or maelstrom-run, you'll enter standalone mode.

Commit:18614fd
Author:Neal Fachan
Committer:Neal Fachan

Remove streaming response for GetContainerImage RPC. We'll add in something like GetArtifactUploadProgress later.

Commit:99e4097
Author:Neal Fachan
Committer:Neal Fachan

Convert ClientDriver into client_main.

Commit:23141f4
Author:Neal Fachan
Committer:Neal Fachan

Remove integration tests and the RPC messages they depend on. We're going to re-do these tests in a different way.

Commit:3305719
Author:Neal Fachan
Committer:Neal Fachan

Rename proto::JobOutcomeCompleted to JobCompleted.

Commit:5f4dca0
Author:Remi Bernotavicius
Committer:Remi Bernotavicius

Add fuse device to make new fuse tests pass on maelstrom

Commit:f1ceee1
Author:Remi Bernotavicius
Committer:Remi Bernotavicius

Add follow_symlinks flag to PrefixOptions

Commit:4119a8c
Author:Remi Bernotavicius
Committer:Remi Bernotavicius

cargo-maelstrom: progress bars for artifact upload

Commit:e50003a
Author:Remi Bernotavicius

Restore the progress bar for downloading containers

Commit:088a45a
Author:Remi Bernotavicius
Committer:Remi Bernotavicius

Replace client RPCs with tonic This breaks progress bar stuff with container images again I also accidentally added in updates to the cargo-maelstrom progress indicator messages