From ccb5ff3a605b4ecaba29c86ff7c57e70dd0daf41 Mon Sep 17 00:00:00 2001 From: Julian Gutierrez Oschmann Date: Tue, 4 Aug 2026 13:46:25 -0400 Subject: [PATCH] Wrap worker pod metadata into a `WorkerAssignment` message. This change formalizes the invariant that all these fields are either all set or not. This simplifies some client code that was just checking random worker metadata fields to see if the actor has an assignment or not. It also fixes a bug in `{Pause,Suspend}Actor` where we were not cleaning up the worker pod UID field. --- benchmarking/locust/common/ateapi_pb2.py | 198 ++--- .../internal/actoridentity/actoridentity.go | 11 +- .../actoridentity/actoridentity_test.go | 11 +- cmd/ateapi/internal/controlapi/crash.go | 17 +- cmd/ateapi/internal/controlapi/crash_test.go | 28 +- .../internal/controlapi/functional_test.go | 60 +- cmd/ateapi/internal/controlapi/metrics.go | 2 +- .../internal/controlapi/metrics_test.go | 2 +- cmd/ateapi/internal/controlapi/syncer.go | 9 +- cmd/ateapi/internal/controlapi/syncer_test.go | 31 +- cmd/ateapi/internal/controlapi/volumes.go | 5 +- .../internal/controlapi/workflow_pause.go | 33 +- .../controlapi/workflow_pause_test.go | 28 +- .../internal/controlapi/workflow_resume.go | 47 +- .../controlapi/workflow_resume_test.go | 38 +- .../internal/controlapi/workflow_suspend.go | 27 +- .../controlapi/workflow_suspend_test.go | 26 +- cmd/atenet/internal/router/extproc.go | 2 +- cmd/atenet/internal/router/extproc_test.go | 8 +- cmd/atenet/internal/router/resumer_test.go | 48 +- cmd/kubectl-ate/internal/cmd/logs_actors.go | 10 +- .../internal/cmd/logs_actors_test.go | 60 +- cmd/kubectl-ate/internal/printer/printer.go | 7 +- .../internal/printer/printer_test.go | 8 +- docs/api-guide.md | 2 +- internal/e2e/suites/demo/demo_test.go | 4 +- .../e2e/suites/networking/networking_test.go | 10 +- pkg/proto/ateapipb/ateapi.pb.go | 699 ++++++++++-------- pkg/proto/ateapipb/ateapi.proto | 47 +- 29 files changed, 777 insertions(+), 701 deletions(-) diff --git a/benchmarking/locust/common/ateapi_pb2.py b/benchmarking/locust/common/ateapi_pb2.py index 3aac0460e..9c3b2853c 100644 --- a/benchmarking/locust/common/ateapi_pb2.py +++ b/benchmarking/locust/common/ateapi_pb2.py @@ -39,7 +39,7 @@ from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0c\x61teapi.proto\x12\x06\x61teapi\x1a\x1fgoogle/protobuf/timestamp.proto\"S\n\x11LocalSnapshotInfo\x12\x17\n\x0fsnapshot_prefix\x18\x01 \x01(\t\x12%\n\x1dnode_vms_with_local_snapshots\x18\x02 \x03(\t\"w\n\x08Selector\x12\x37\n\x0cmatch_labels\x18\x01 \x03(\x0b\x32!.ateapi.Selector.MatchLabelsEntry\x1a\x32\n\x10MatchLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xb2\x01\n\x10ResourceMetadata\x12\x10\n\x08\x61tespace\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0b\n\x03uid\x18\x03 \x01(\t\x12\x0f\n\x07version\x18\x04 \x01(\x03\x12/\n\x0b\x63reate_time\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12/\n\x0bupdate_time\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"\xe3\x01\n\x0e\x45xternalVolume\x12\x13\n\x0bvolume_name\x18\x01 \x01(\t\x12\x19\n\x11storage_volume_id\x18\x02 \x01(\t\x12\x13\n\x0bvolume_type\x18\x03 \x01(\t\x12-\n\x06status\x18\x04 \x01(\x0e\x32\x1d.ateapi.ExternalVolume.Status\"]\n\x06Status\x12\x16\n\x12STATUS_UNSPECIFIED\x10\x00\x12\x12\n\x0eSTATUS_PENDING\x10\x01\x12\x12\n\x0eSTATUS_CREATED\x10\x02\x12\x13\n\x0fSTATUS_DELETING\x10\x03\"\x88\x06\n\x05\x41\x63tor\x12*\n\x08metadata\x18\x01 \x01(\x0b\x32\x18.ateapi.ResourceMetadata\x12 \n\x18\x61\x63tor_template_namespace\x18\x02 \x01(\t\x12\x1b\n\x13\x61\x63tor_template_name\x18\x03 \x01(\t\x12$\n\x06status\x18\x04 \x01(\x0e\x32\x14.ateapi.Actor.Status\x12\x1b\n\x13\x61teom_pod_namespace\x18\x05 \x01(\t\x12\x16\n\x0e\x61teom_pod_name\x18\x06 \x01(\t\x12\x14\n\x0c\x61teom_pod_ip\x18\x07 \x01(\t\x12\x1c\n\x14in_progress_snapshot\x18\x08 \x01(\t\x12\x15\n\rateom_pod_uid\x18\t \x01(\t\x12)\n\x0fworker_selector\x18\x0b \x01(\x0b\x32\x10.ateapi.Selector\x12\x18\n\x10worker_pool_name\x18\x0c \x01(\t\x12*\n\x0flatest_snapshot\x18\x0e \x01(\x0b\x32\x11.ateapi.ObjectRef\x12\x36\n\x13local_snapshot_info\x18\x0f \x01(\x0b\x32\x19.ateapi.LocalSnapshotInfo\x12\x31\n)in_progress_snapshot_source_actor_version\x18\x10 \x01(\x03\x12-\n\ractor_volumes\x18\r \x03(\x0b\x32\x16.ateapi.ExternalVolume\"\xc6\x01\n\x06Status\x12\x16\n\x12STATUS_UNSPECIFIED\x10\x00\x12\x13\n\x0fSTATUS_RESUMING\x10\x01\x12\x12\n\x0eSTATUS_RUNNING\x10\x02\x12\x15\n\x11STATUS_SUSPENDING\x10\x03\x12\x14\n\x10STATUS_SUSPENDED\x10\x04\x12\x12\n\x0eSTATUS_PAUSING\x10\x05\x12\x11\n\rSTATUS_PAUSED\x10\x06\x12\x12\n\x0eSTATUS_CRASHED\x10\x07\x12\x13\n\x0fSTATUS_DELETING\x10\x08J\x04\x08\n\x10\x0bR\x14latest_snapshot_info\"\xac\x02\n\rActorSnapshot\x12*\n\x08metadata\x18\x01 \x01(\x0b\x32\x18.ateapi.ResourceMetadata\x12\'\n\x0csource_actor\x18\x02 \x01(\x0b\x32\x11.ateapi.ObjectRef\x12\x18\n\x10source_actor_uid\x18\x03 \x01(\t\x12\x1c\n\x14source_actor_version\x18\x04 \x01(\x03\x12 \n\x18\x61\x63tor_template_namespace\x18\x05 \x01(\t\x12\x1b\n\x13\x61\x63tor_template_name\x18\x06 \x01(\t\x12\x1a\n\x12\x61\x63tor_template_uid\x18\x07 \x01(\t\x12\x33\n\rcontent_scope\x18\x08 \x01(\x0e\x32\x1c.ateapi.SnapshotContentScope\"\x91\x01\n\x10\x41\x63torSnapshotTag\x12*\n\x08metadata\x18\x01 \x01(\x0b\x32\x18.ateapi.ResourceMetadata\x12#\n\x08snapshot\x18\x02 \x01(\x0b\x32\x11.ateapi.ObjectRef\x12,\n\x05scope\x18\x03 \x01(\x0e\x32\x1d.ateapi.ActorSnapshotTagScope\"6\n\x08\x41tespace\x12*\n\x08metadata\x18\x01 \x01(\x0b\x32\x18.ateapi.ResourceMetadata\"+\n\tObjectRef\x12\x10\n\x08\x61tespace\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\"h\n\x10\x41\x63torSnapshotRef\x12%\n\x08snapshot\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRefH\x00\x12 \n\x03tag\x18\x02 \x01(\x0b\x32\x11.ateapi.ObjectRefH\x00\x42\x0b\n\treference\";\n\x15\x43reateAtespaceRequest\x12\"\n\x08\x61tespace\x18\x01 \x01(\x0b\x32\x10.ateapi.Atespace\"9\n\x12GetAtespaceRequest\x12#\n\x08\x61tespace\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\"=\n\x14ListAtespacesRequest\x12\x11\n\tpage_size\x18\x01 \x01(\x05\x12\x12\n\npage_token\x18\x02 \x01(\t\"U\n\x15ListAtespacesResponse\x12#\n\tatespaces\x18\x01 \x03(\x0b\x32\x10.ateapi.Atespace\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\"<\n\x15\x44\x65leteAtespaceRequest\x12#\n\x08\x61tespace\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\"3\n\x0fGetActorRequest\x12 \n\x05\x61\x63tor\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\"e\n\x12\x43reateActorRequest\x12\x1c\n\x05\x61\x63tor\x18\x01 \x01(\x0b\x32\r.ateapi.Actor\x12\x31\n\x0fsource_snapshot\x18\x02 \x01(\x0b\x32\x18.ateapi.ActorSnapshotRef\"a\n\x12UpdateActorRequest\x12 \n\x05\x61\x63tor\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\x12)\n\x0fworker_selector\x18\x02 \x01(\x0b\x32\x10.ateapi.Selector\"3\n\x13UpdateActorResponse\x12\x1c\n\x05\x61\x63tor\x18\x01 \x01(\x0b\x32\r.ateapi.Actor\"7\n\x13SuspendActorRequest\x12 \n\x05\x61\x63tor\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\"4\n\x14SuspendActorResponse\x12\x1c\n\x05\x61\x63tor\x18\x01 \x01(\x0b\x32\r.ateapi.Actor\"5\n\x11PauseActorRequest\x12 \n\x05\x61\x63tor\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\"2\n\x12PauseActorResponse\x12\x1c\n\x05\x61\x63tor\x18\x01 \x01(\x0b\x32\r.ateapi.Actor\"D\n\x12ResumeActorRequest\x12 \n\x05\x61\x63tor\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\x12\x0c\n\x04\x62oot\x18\x02 \x01(\x08\"D\n\x13ResumeActorResponse\x12\x1c\n\x05\x61\x63tor\x18\x01 \x01(\x0b\x32\r.ateapi.Actor\x12\x0f\n\x07resumed\x18\x02 \x01(\x08\"6\n\x12\x44\x65leteActorRequest\x12 \n\x05\x61\x63tor\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\"E\n\x17GetActorSnapshotRequest\x12*\n\x08snapshot\x18\x01 \x01(\x0b\x32\x18.ateapi.ActorSnapshotRef\"T\n\x19ListActorSnapshotsRequest\x12\x10\n\x08\x61tespace\x18\x01 \x01(\t\x12\x11\n\tpage_size\x18\x02 \x01(\x05\x12\x12\n\npage_token\x18\x03 \x01(\t\"_\n\x1aListActorSnapshotsResponse\x12(\n\tsnapshots\x18\x01 \x03(\x0b\x32\x15.ateapi.ActorSnapshot\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\"l\n\x17TagActorSnapshotRequest\x12*\n\x08snapshot\x18\x01 \x01(\x0b\x32\x18.ateapi.ActorSnapshotRef\x12%\n\x03tag\x18\x02 \x01(\x0b\x32\x18.ateapi.ActorSnapshotTag\"m\n\x1dUpdateActorSnapshotTagRequest\x12\x1e\n\x03tag\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\x12,\n\x05scope\x18\x02 \x01(\x0e\x32\x1d.ateapi.ActorSnapshotTagScope\"?\n\x1d\x44\x65leteActorSnapshotTagRequest\x12\x1e\n\x03tag\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\";\n\x12ListWorkersRequest\x12\x11\n\tpage_size\x18\x01 \x01(\x05\x12\x12\n\npage_token\x18\x02 \x01(\t\"O\n\x13ListWorkersResponse\x12\x1f\n\x07workers\x18\x01 \x03(\x0b\x32\x0e.ateapi.Worker\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\"L\n\x11ListActorsRequest\x12\x10\n\x08\x61tespace\x18\x01 \x01(\t\x12\x11\n\tpage_size\x18\x02 \x01(\x05\x12\x12\n\npage_token\x18\x03 \x01(\t\"L\n\x12ListActorsResponse\x12\x1d\n\x06\x61\x63tors\x18\x01 \x03(\x0b\x32\r.ateapi.Actor\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\"\x98\x03\n\x06Worker\x12\x18\n\x10worker_namespace\x18\x01 \x01(\t\x12\x13\n\x0bworker_pool\x18\x02 \x01(\t\x12\x12\n\nworker_pod\x18\x03 \x01(\t\x12&\n\nassignment\x18\x04 \x01(\x0b\x32\x12.ateapi.Assignment\x12\n\n\x02ip\x18\x05 \x01(\t\x12\x0f\n\x07version\x18\x06 \x01(\x03\x12\x16\n\x0eworker_pod_uid\x18\x07 \x01(\t\x12\x11\n\tnode_name\x18\x08 \x01(\t\x12\x15\n\rsandbox_class\x18\t \x01(\t\x12*\n\x06labels\x18\n \x03(\x0b\x32\x1a.ateapi.Worker.LabelsEntry\x12#\n\x05state\x18\x0b \x01(\x0e\x32\x14.ateapi.Worker.State\x1a-\n\x0bLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"D\n\x05State\x12\x15\n\x11STATE_UNSPECIFIED\x10\x00\x12\x10\n\x0cSTATE_ACTIVE\x10\x01\x12\x12\n\x0eSTATE_DRAINING\x10\x02\"g\n\nAssignment\x12\x37\n\x0e\x61\x63tor_template\x18\x01 \x01(\x0b\x32\x1f.ateapi.KubeNamespacedObjectRef\x12 \n\x05\x61\x63tor\x18\x02 \x01(\x0b\x32\x11.ateapi.ObjectRef\":\n\x17KubeNamespacedObjectRef\x12\x11\n\tnamespace\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\"\x13\n\x11\x44\x65\x62ugClearRequest\"\x14\n\x12\x44\x65\x62ugClearResponse\"[\n\x0eMintJWTRequest\x12\x10\n\x08\x61udience\x18\x01 \x03(\t\x12\x10\n\x08\x61tespace\x18\x02 \x01(\t\x12\x12\n\nactor_name\x18\x03 \x01(\t\x12\x11\n\tactor_uid\x18\x04 \x01(\t\"$\n\x0fMintJWTResponse\x12\x11\n\tactor_jwt\x18\x01 \x01(\t\"o\n\x0fMintCertRequest\x12\x10\n\x08\x61tespace\x18\x01 \x01(\t\x12\x12\n\nactor_name\x18\x02 \x01(\t\x12\x11\n\tactor_uid\x18\x03 \x01(\t\x12#\n\x1b\x63\x65rtificate_signing_request\x18\x04 \x01(\x0c\".\n\x10MintCertResponse\x12\x1a\n\x12\x61\x63tor_certificates\x18\x01 \x03(\x0c*\x80\x01\n\x14SnapshotContentScope\x12&\n\"SNAPSHOT_CONTENT_SCOPE_UNSPECIFIED\x10\x00\x12\x1f\n\x1bSNAPSHOT_CONTENT_SCOPE_FULL\x10\x01\x12\x1f\n\x1bSNAPSHOT_CONTENT_SCOPE_DATA\x10\x02*f\n\x15\x41\x63torSnapshotTagScope\x12%\n!ACTOR_SNAPSHOT_TAG_SCOPE_ATESPACE\x10\x00\x12&\n\"ACTOR_SNAPSHOT_TAG_SCOPE_PUBLISHED\x10\x01\x32\xc1\n\n\x07\x43ontrol\x12\x34\n\x08GetActor\x12\x17.ateapi.GetActorRequest\x1a\r.ateapi.Actor\"\x00\x12:\n\x0b\x43reateActor\x12\x1a.ateapi.CreateActorRequest\x1a\r.ateapi.Actor\"\x00\x12H\n\x0bUpdateActor\x12\x1a.ateapi.UpdateActorRequest\x1a\x1b.ateapi.UpdateActorResponse\"\x00\x12K\n\x0cSuspendActor\x12\x1b.ateapi.SuspendActorRequest\x1a\x1c.ateapi.SuspendActorResponse\"\x00\x12\x45\n\nPauseActor\x12\x19.ateapi.PauseActorRequest\x1a\x1a.ateapi.PauseActorResponse\"\x00\x12H\n\x0bResumeActor\x12\x1a.ateapi.ResumeActorRequest\x1a\x1b.ateapi.ResumeActorResponse\"\x00\x12:\n\x0b\x44\x65leteActor\x12\x1a.ateapi.DeleteActorRequest\x1a\r.ateapi.Actor\"\x00\x12L\n\x10GetActorSnapshot\x12\x1f.ateapi.GetActorSnapshotRequest\x1a\x15.ateapi.ActorSnapshot\"\x00\x12]\n\x12ListActorSnapshots\x12!.ateapi.ListActorSnapshotsRequest\x1a\".ateapi.ListActorSnapshotsResponse\"\x00\x12O\n\x10TagActorSnapshot\x12\x1f.ateapi.TagActorSnapshotRequest\x1a\x18.ateapi.ActorSnapshotTag\"\x00\x12[\n\x16UpdateActorSnapshotTag\x12%.ateapi.UpdateActorSnapshotTagRequest\x1a\x18.ateapi.ActorSnapshotTag\"\x00\x12[\n\x16\x44\x65leteActorSnapshotTag\x12%.ateapi.DeleteActorSnapshotTagRequest\x1a\x18.ateapi.ActorSnapshotTag\"\x00\x12H\n\x0bListWorkers\x12\x1a.ateapi.ListWorkersRequest\x1a\x1b.ateapi.ListWorkersResponse\"\x00\x12\x45\n\nListActors\x12\x19.ateapi.ListActorsRequest\x1a\x1a.ateapi.ListActorsResponse\"\x00\x12\x43\n\x0e\x43reateAtespace\x12\x1d.ateapi.CreateAtespaceRequest\x1a\x10.ateapi.Atespace\"\x00\x12=\n\x0bGetAtespace\x12\x1a.ateapi.GetAtespaceRequest\x1a\x10.ateapi.Atespace\"\x00\x12N\n\rListAtespaces\x12\x1c.ateapi.ListAtespacesRequest\x1a\x1d.ateapi.ListAtespacesResponse\"\x00\x12\x43\n\x0e\x44\x65leteAtespace\x12\x1d.ateapi.DeleteAtespaceRequest\x1a\x10.ateapi.Atespace\"\x00\x32N\n\x05\x44\x65\x62ug\x12\x45\n\nDebugClear\x12\x19.ateapi.DebugClearRequest\x1a\x1a.ateapi.DebugClearResponse\"\x00\x32\x8a\x01\n\rActorIdentity\x12:\n\x07MintJWT\x12\x16.ateapi.MintJWTRequest\x1a\x17.ateapi.MintJWTResponse\x12=\n\x08MintCert\x12\x17.ateapi.MintCertRequest\x1a\x18.ateapi.MintCertResponseB9Z7github.com/agent-substrate/substrate/pkg/proto/ateapipbb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0c\x61teapi.proto\x12\x06\x61teapi\x1a\x1fgoogle/protobuf/timestamp.proto\"S\n\x11LocalSnapshotInfo\x12\x17\n\x0fsnapshot_prefix\x18\x01 \x01(\t\x12%\n\x1dnode_vms_with_local_snapshots\x18\x02 \x03(\t\"w\n\x08Selector\x12\x37\n\x0cmatch_labels\x18\x01 \x03(\x0b\x32!.ateapi.Selector.MatchLabelsEntry\x1a\x32\n\x10MatchLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xb2\x01\n\x10ResourceMetadata\x12\x10\n\x08\x61tespace\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0b\n\x03uid\x18\x03 \x01(\t\x12\x0f\n\x07version\x18\x04 \x01(\x03\x12/\n\x0b\x63reate_time\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12/\n\x0bupdate_time\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"\xe3\x01\n\x0e\x45xternalVolume\x12\x13\n\x0bvolume_name\x18\x01 \x01(\t\x12\x19\n\x11storage_volume_id\x18\x02 \x01(\t\x12\x13\n\x0bvolume_type\x18\x03 \x01(\t\x12-\n\x06status\x18\x04 \x01(\x0e\x32\x1d.ateapi.ExternalVolume.Status\"]\n\x06Status\x12\x16\n\x12STATUS_UNSPECIFIED\x10\x00\x12\x12\n\x0eSTATUS_PENDING\x10\x01\x12\x12\n\x0eSTATUS_CREATED\x10\x02\x12\x13\n\x0fSTATUS_DELETING\x10\x03\"\xa5\x05\n\x05\x41\x63tor\x12*\n\x08metadata\x18\x01 \x01(\x0b\x32\x18.ateapi.ResourceMetadata\x12 \n\x18\x61\x63tor_template_namespace\x18\x02 \x01(\t\x12\x1b\n\x13\x61\x63tor_template_name\x18\x03 \x01(\t\x12$\n\x06status\x18\x04 \x01(\x0e\x32\x14.ateapi.Actor.Status\x12\x33\n\x11worker_assignment\x18\x05 \x01(\x0b\x32\x18.ateapi.WorkerAssignment\x12\x1c\n\x14in_progress_snapshot\x18\x06 \x01(\t\x12)\n\x0fworker_selector\x18\x07 \x01(\x0b\x32\x10.ateapi.Selector\x12*\n\x0flatest_snapshot\x18\x08 \x01(\x0b\x32\x11.ateapi.ObjectRef\x12\x36\n\x13local_snapshot_info\x18\t \x01(\x0b\x32\x19.ateapi.LocalSnapshotInfo\x12\x31\n)in_progress_snapshot_source_actor_version\x18\n \x01(\x03\x12-\n\ractor_volumes\x18\x0b \x03(\x0b\x32\x16.ateapi.ExternalVolume\"\xc6\x01\n\x06Status\x12\x16\n\x12STATUS_UNSPECIFIED\x10\x00\x12\x13\n\x0fSTATUS_RESUMING\x10\x01\x12\x12\n\x0eSTATUS_RUNNING\x10\x02\x12\x15\n\x11STATUS_SUSPENDING\x10\x03\x12\x14\n\x10STATUS_SUSPENDED\x10\x04\x12\x12\n\x0eSTATUS_PAUSING\x10\x05\x12\x11\n\rSTATUS_PAUSED\x10\x06\x12\x12\n\x0eSTATUS_CRASHED\x10\x07\x12\x13\n\x0fSTATUS_DELETING\x10\x08\"\x84\x01\n\x10WorkerAssignment\x12\x18\n\x10worker_namespace\x18\x01 \x01(\t\x12\x13\n\x0bworker_pool\x18\x02 \x01(\t\x12\x12\n\nworker_pod\x18\x03 \x01(\t\x12\x16\n\x0eworker_pod_uid\x18\x04 \x01(\t\x12\x15\n\rworker_pod_ip\x18\x05 \x01(\t\"\xac\x02\n\rActorSnapshot\x12*\n\x08metadata\x18\x01 \x01(\x0b\x32\x18.ateapi.ResourceMetadata\x12\'\n\x0csource_actor\x18\x02 \x01(\x0b\x32\x11.ateapi.ObjectRef\x12\x18\n\x10source_actor_uid\x18\x03 \x01(\t\x12\x1c\n\x14source_actor_version\x18\x04 \x01(\x03\x12 \n\x18\x61\x63tor_template_namespace\x18\x05 \x01(\t\x12\x1b\n\x13\x61\x63tor_template_name\x18\x06 \x01(\t\x12\x1a\n\x12\x61\x63tor_template_uid\x18\x07 \x01(\t\x12\x33\n\rcontent_scope\x18\x08 \x01(\x0e\x32\x1c.ateapi.SnapshotContentScope\"\x91\x01\n\x10\x41\x63torSnapshotTag\x12*\n\x08metadata\x18\x01 \x01(\x0b\x32\x18.ateapi.ResourceMetadata\x12#\n\x08snapshot\x18\x02 \x01(\x0b\x32\x11.ateapi.ObjectRef\x12,\n\x05scope\x18\x03 \x01(\x0e\x32\x1d.ateapi.ActorSnapshotTagScope\"6\n\x08\x41tespace\x12*\n\x08metadata\x18\x01 \x01(\x0b\x32\x18.ateapi.ResourceMetadata\"+\n\tObjectRef\x12\x10\n\x08\x61tespace\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\"h\n\x10\x41\x63torSnapshotRef\x12%\n\x08snapshot\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRefH\x00\x12 \n\x03tag\x18\x02 \x01(\x0b\x32\x11.ateapi.ObjectRefH\x00\x42\x0b\n\treference\";\n\x15\x43reateAtespaceRequest\x12\"\n\x08\x61tespace\x18\x01 \x01(\x0b\x32\x10.ateapi.Atespace\"9\n\x12GetAtespaceRequest\x12#\n\x08\x61tespace\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\"=\n\x14ListAtespacesRequest\x12\x11\n\tpage_size\x18\x01 \x01(\x05\x12\x12\n\npage_token\x18\x02 \x01(\t\"U\n\x15ListAtespacesResponse\x12#\n\tatespaces\x18\x01 \x03(\x0b\x32\x10.ateapi.Atespace\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\"<\n\x15\x44\x65leteAtespaceRequest\x12#\n\x08\x61tespace\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\"3\n\x0fGetActorRequest\x12 \n\x05\x61\x63tor\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\"e\n\x12\x43reateActorRequest\x12\x1c\n\x05\x61\x63tor\x18\x01 \x01(\x0b\x32\r.ateapi.Actor\x12\x31\n\x0fsource_snapshot\x18\x02 \x01(\x0b\x32\x18.ateapi.ActorSnapshotRef\"a\n\x12UpdateActorRequest\x12 \n\x05\x61\x63tor\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\x12)\n\x0fworker_selector\x18\x02 \x01(\x0b\x32\x10.ateapi.Selector\"3\n\x13UpdateActorResponse\x12\x1c\n\x05\x61\x63tor\x18\x01 \x01(\x0b\x32\r.ateapi.Actor\"7\n\x13SuspendActorRequest\x12 \n\x05\x61\x63tor\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\"4\n\x14SuspendActorResponse\x12\x1c\n\x05\x61\x63tor\x18\x01 \x01(\x0b\x32\r.ateapi.Actor\"5\n\x11PauseActorRequest\x12 \n\x05\x61\x63tor\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\"2\n\x12PauseActorResponse\x12\x1c\n\x05\x61\x63tor\x18\x01 \x01(\x0b\x32\r.ateapi.Actor\"D\n\x12ResumeActorRequest\x12 \n\x05\x61\x63tor\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\x12\x0c\n\x04\x62oot\x18\x02 \x01(\x08\"D\n\x13ResumeActorResponse\x12\x1c\n\x05\x61\x63tor\x18\x01 \x01(\x0b\x32\r.ateapi.Actor\x12\x0f\n\x07resumed\x18\x02 \x01(\x08\"6\n\x12\x44\x65leteActorRequest\x12 \n\x05\x61\x63tor\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\"E\n\x17GetActorSnapshotRequest\x12*\n\x08snapshot\x18\x01 \x01(\x0b\x32\x18.ateapi.ActorSnapshotRef\"T\n\x19ListActorSnapshotsRequest\x12\x10\n\x08\x61tespace\x18\x01 \x01(\t\x12\x11\n\tpage_size\x18\x02 \x01(\x05\x12\x12\n\npage_token\x18\x03 \x01(\t\"_\n\x1aListActorSnapshotsResponse\x12(\n\tsnapshots\x18\x01 \x03(\x0b\x32\x15.ateapi.ActorSnapshot\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\"l\n\x17TagActorSnapshotRequest\x12*\n\x08snapshot\x18\x01 \x01(\x0b\x32\x18.ateapi.ActorSnapshotRef\x12%\n\x03tag\x18\x02 \x01(\x0b\x32\x18.ateapi.ActorSnapshotTag\"m\n\x1dUpdateActorSnapshotTagRequest\x12\x1e\n\x03tag\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\x12,\n\x05scope\x18\x02 \x01(\x0e\x32\x1d.ateapi.ActorSnapshotTagScope\"?\n\x1d\x44\x65leteActorSnapshotTagRequest\x12\x1e\n\x03tag\x18\x01 \x01(\x0b\x32\x11.ateapi.ObjectRef\";\n\x12ListWorkersRequest\x12\x11\n\tpage_size\x18\x01 \x01(\x05\x12\x12\n\npage_token\x18\x02 \x01(\t\"O\n\x13ListWorkersResponse\x12\x1f\n\x07workers\x18\x01 \x03(\x0b\x32\x0e.ateapi.Worker\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\"L\n\x11ListActorsRequest\x12\x10\n\x08\x61tespace\x18\x01 \x01(\t\x12\x11\n\tpage_size\x18\x02 \x01(\x05\x12\x12\n\npage_token\x18\x03 \x01(\t\"L\n\x12ListActorsResponse\x12\x1d\n\x06\x61\x63tors\x18\x01 \x03(\x0b\x32\r.ateapi.Actor\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t\"\x98\x03\n\x06Worker\x12\x18\n\x10worker_namespace\x18\x01 \x01(\t\x12\x13\n\x0bworker_pool\x18\x02 \x01(\t\x12\x12\n\nworker_pod\x18\x03 \x01(\t\x12&\n\nassignment\x18\x04 \x01(\x0b\x32\x12.ateapi.Assignment\x12\n\n\x02ip\x18\x05 \x01(\t\x12\x0f\n\x07version\x18\x06 \x01(\x03\x12\x16\n\x0eworker_pod_uid\x18\x07 \x01(\t\x12\x11\n\tnode_name\x18\x08 \x01(\t\x12\x15\n\rsandbox_class\x18\t \x01(\t\x12*\n\x06labels\x18\n \x03(\x0b\x32\x1a.ateapi.Worker.LabelsEntry\x12#\n\x05state\x18\x0b \x01(\x0e\x32\x14.ateapi.Worker.State\x1a-\n\x0bLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"D\n\x05State\x12\x15\n\x11STATE_UNSPECIFIED\x10\x00\x12\x10\n\x0cSTATE_ACTIVE\x10\x01\x12\x12\n\x0eSTATE_DRAINING\x10\x02\"g\n\nAssignment\x12\x37\n\x0e\x61\x63tor_template\x18\x01 \x01(\x0b\x32\x1f.ateapi.KubeNamespacedObjectRef\x12 \n\x05\x61\x63tor\x18\x02 \x01(\x0b\x32\x11.ateapi.ObjectRef\":\n\x17KubeNamespacedObjectRef\x12\x11\n\tnamespace\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\"\x13\n\x11\x44\x65\x62ugClearRequest\"\x14\n\x12\x44\x65\x62ugClearResponse\"[\n\x0eMintJWTRequest\x12\x10\n\x08\x61udience\x18\x01 \x03(\t\x12\x10\n\x08\x61tespace\x18\x02 \x01(\t\x12\x12\n\nactor_name\x18\x03 \x01(\t\x12\x11\n\tactor_uid\x18\x04 \x01(\t\"$\n\x0fMintJWTResponse\x12\x11\n\tactor_jwt\x18\x01 \x01(\t\"o\n\x0fMintCertRequest\x12\x10\n\x08\x61tespace\x18\x01 \x01(\t\x12\x12\n\nactor_name\x18\x02 \x01(\t\x12\x11\n\tactor_uid\x18\x03 \x01(\t\x12#\n\x1b\x63\x65rtificate_signing_request\x18\x04 \x01(\x0c\".\n\x10MintCertResponse\x12\x1a\n\x12\x61\x63tor_certificates\x18\x01 \x03(\x0c*\x80\x01\n\x14SnapshotContentScope\x12&\n\"SNAPSHOT_CONTENT_SCOPE_UNSPECIFIED\x10\x00\x12\x1f\n\x1bSNAPSHOT_CONTENT_SCOPE_FULL\x10\x01\x12\x1f\n\x1bSNAPSHOT_CONTENT_SCOPE_DATA\x10\x02*f\n\x15\x41\x63torSnapshotTagScope\x12%\n!ACTOR_SNAPSHOT_TAG_SCOPE_ATESPACE\x10\x00\x12&\n\"ACTOR_SNAPSHOT_TAG_SCOPE_PUBLISHED\x10\x01\x32\xc1\n\n\x07\x43ontrol\x12\x34\n\x08GetActor\x12\x17.ateapi.GetActorRequest\x1a\r.ateapi.Actor\"\x00\x12:\n\x0b\x43reateActor\x12\x1a.ateapi.CreateActorRequest\x1a\r.ateapi.Actor\"\x00\x12H\n\x0bUpdateActor\x12\x1a.ateapi.UpdateActorRequest\x1a\x1b.ateapi.UpdateActorResponse\"\x00\x12K\n\x0cSuspendActor\x12\x1b.ateapi.SuspendActorRequest\x1a\x1c.ateapi.SuspendActorResponse\"\x00\x12\x45\n\nPauseActor\x12\x19.ateapi.PauseActorRequest\x1a\x1a.ateapi.PauseActorResponse\"\x00\x12H\n\x0bResumeActor\x12\x1a.ateapi.ResumeActorRequest\x1a\x1b.ateapi.ResumeActorResponse\"\x00\x12:\n\x0b\x44\x65leteActor\x12\x1a.ateapi.DeleteActorRequest\x1a\r.ateapi.Actor\"\x00\x12L\n\x10GetActorSnapshot\x12\x1f.ateapi.GetActorSnapshotRequest\x1a\x15.ateapi.ActorSnapshot\"\x00\x12]\n\x12ListActorSnapshots\x12!.ateapi.ListActorSnapshotsRequest\x1a\".ateapi.ListActorSnapshotsResponse\"\x00\x12O\n\x10TagActorSnapshot\x12\x1f.ateapi.TagActorSnapshotRequest\x1a\x18.ateapi.ActorSnapshotTag\"\x00\x12[\n\x16UpdateActorSnapshotTag\x12%.ateapi.UpdateActorSnapshotTagRequest\x1a\x18.ateapi.ActorSnapshotTag\"\x00\x12[\n\x16\x44\x65leteActorSnapshotTag\x12%.ateapi.DeleteActorSnapshotTagRequest\x1a\x18.ateapi.ActorSnapshotTag\"\x00\x12H\n\x0bListWorkers\x12\x1a.ateapi.ListWorkersRequest\x1a\x1b.ateapi.ListWorkersResponse\"\x00\x12\x45\n\nListActors\x12\x19.ateapi.ListActorsRequest\x1a\x1a.ateapi.ListActorsResponse\"\x00\x12\x43\n\x0e\x43reateAtespace\x12\x1d.ateapi.CreateAtespaceRequest\x1a\x10.ateapi.Atespace\"\x00\x12=\n\x0bGetAtespace\x12\x1a.ateapi.GetAtespaceRequest\x1a\x10.ateapi.Atespace\"\x00\x12N\n\rListAtespaces\x12\x1c.ateapi.ListAtespacesRequest\x1a\x1d.ateapi.ListAtespacesResponse\"\x00\x12\x43\n\x0e\x44\x65leteAtespace\x12\x1d.ateapi.DeleteAtespaceRequest\x1a\x10.ateapi.Atespace\"\x00\x32N\n\x05\x44\x65\x62ug\x12\x45\n\nDebugClear\x12\x19.ateapi.DebugClearRequest\x1a\x1a.ateapi.DebugClearResponse\"\x00\x32\x8a\x01\n\rActorIdentity\x12:\n\x07MintJWT\x12\x16.ateapi.MintJWTRequest\x1a\x17.ateapi.MintJWTResponse\x12=\n\x08MintCert\x12\x17.ateapi.MintCertRequest\x1a\x18.ateapi.MintCertResponseB9Z7github.com/agent-substrate/substrate/pkg/proto/ateapipbb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -51,10 +51,10 @@ _globals['_SELECTOR_MATCHLABELSENTRY']._serialized_options = b'8\001' _globals['_WORKER_LABELSENTRY']._loaded_options = None _globals['_WORKER_LABELSENTRY']._serialized_options = b'8\001' - _globals['_SNAPSHOTCONTENTSCOPE']._serialized_start=4915 - _globals['_SNAPSHOTCONTENTSCOPE']._serialized_end=5043 - _globals['_ACTORSNAPSHOTTAGSCOPE']._serialized_start=5045 - _globals['_ACTORSNAPSHOTTAGSCOPE']._serialized_end=5147 + _globals['_SNAPSHOTCONTENTSCOPE']._serialized_start=4951 + _globals['_SNAPSHOTCONTENTSCOPE']._serialized_end=5079 + _globals['_ACTORSNAPSHOTTAGSCOPE']._serialized_start=5081 + _globals['_ACTORSNAPSHOTTAGSCOPE']._serialized_end=5183 _globals['_LOCALSNAPSHOTINFO']._serialized_start=57 _globals['_LOCALSNAPSHOTINFO']._serialized_end=140 _globals['_SELECTOR']._serialized_start=142 @@ -68,97 +68,99 @@ _globals['_EXTERNALVOLUME_STATUS']._serialized_start=579 _globals['_EXTERNALVOLUME_STATUS']._serialized_end=672 _globals['_ACTOR']._serialized_start=675 - _globals['_ACTOR']._serialized_end=1451 - _globals['_ACTOR_STATUS']._serialized_start=1225 - _globals['_ACTOR_STATUS']._serialized_end=1423 - _globals['_ACTORSNAPSHOT']._serialized_start=1454 - _globals['_ACTORSNAPSHOT']._serialized_end=1754 - _globals['_ACTORSNAPSHOTTAG']._serialized_start=1757 - _globals['_ACTORSNAPSHOTTAG']._serialized_end=1902 - _globals['_ATESPACE']._serialized_start=1904 - _globals['_ATESPACE']._serialized_end=1958 - _globals['_OBJECTREF']._serialized_start=1960 - _globals['_OBJECTREF']._serialized_end=2003 - _globals['_ACTORSNAPSHOTREF']._serialized_start=2005 - _globals['_ACTORSNAPSHOTREF']._serialized_end=2109 - _globals['_CREATEATESPACEREQUEST']._serialized_start=2111 - _globals['_CREATEATESPACEREQUEST']._serialized_end=2170 - _globals['_GETATESPACEREQUEST']._serialized_start=2172 - _globals['_GETATESPACEREQUEST']._serialized_end=2229 - _globals['_LISTATESPACESREQUEST']._serialized_start=2231 - _globals['_LISTATESPACESREQUEST']._serialized_end=2292 - _globals['_LISTATESPACESRESPONSE']._serialized_start=2294 - _globals['_LISTATESPACESRESPONSE']._serialized_end=2379 - _globals['_DELETEATESPACEREQUEST']._serialized_start=2381 - _globals['_DELETEATESPACEREQUEST']._serialized_end=2441 - _globals['_GETACTORREQUEST']._serialized_start=2443 - _globals['_GETACTORREQUEST']._serialized_end=2494 - _globals['_CREATEACTORREQUEST']._serialized_start=2496 - _globals['_CREATEACTORREQUEST']._serialized_end=2597 - _globals['_UPDATEACTORREQUEST']._serialized_start=2599 - _globals['_UPDATEACTORREQUEST']._serialized_end=2696 - _globals['_UPDATEACTORRESPONSE']._serialized_start=2698 - _globals['_UPDATEACTORRESPONSE']._serialized_end=2749 - _globals['_SUSPENDACTORREQUEST']._serialized_start=2751 - _globals['_SUSPENDACTORREQUEST']._serialized_end=2806 - _globals['_SUSPENDACTORRESPONSE']._serialized_start=2808 - _globals['_SUSPENDACTORRESPONSE']._serialized_end=2860 - _globals['_PAUSEACTORREQUEST']._serialized_start=2862 - _globals['_PAUSEACTORREQUEST']._serialized_end=2915 - _globals['_PAUSEACTORRESPONSE']._serialized_start=2917 - _globals['_PAUSEACTORRESPONSE']._serialized_end=2967 - _globals['_RESUMEACTORREQUEST']._serialized_start=2969 - _globals['_RESUMEACTORREQUEST']._serialized_end=3037 - _globals['_RESUMEACTORRESPONSE']._serialized_start=3039 - _globals['_RESUMEACTORRESPONSE']._serialized_end=3107 - _globals['_DELETEACTORREQUEST']._serialized_start=3109 - _globals['_DELETEACTORREQUEST']._serialized_end=3163 - _globals['_GETACTORSNAPSHOTREQUEST']._serialized_start=3165 - _globals['_GETACTORSNAPSHOTREQUEST']._serialized_end=3234 - _globals['_LISTACTORSNAPSHOTSREQUEST']._serialized_start=3236 - _globals['_LISTACTORSNAPSHOTSREQUEST']._serialized_end=3320 - _globals['_LISTACTORSNAPSHOTSRESPONSE']._serialized_start=3322 - _globals['_LISTACTORSNAPSHOTSRESPONSE']._serialized_end=3417 - _globals['_TAGACTORSNAPSHOTREQUEST']._serialized_start=3419 - _globals['_TAGACTORSNAPSHOTREQUEST']._serialized_end=3527 - _globals['_UPDATEACTORSNAPSHOTTAGREQUEST']._serialized_start=3529 - _globals['_UPDATEACTORSNAPSHOTTAGREQUEST']._serialized_end=3638 - _globals['_DELETEACTORSNAPSHOTTAGREQUEST']._serialized_start=3640 - _globals['_DELETEACTORSNAPSHOTTAGREQUEST']._serialized_end=3703 - _globals['_LISTWORKERSREQUEST']._serialized_start=3705 - _globals['_LISTWORKERSREQUEST']._serialized_end=3764 - _globals['_LISTWORKERSRESPONSE']._serialized_start=3766 - _globals['_LISTWORKERSRESPONSE']._serialized_end=3845 - _globals['_LISTACTORSREQUEST']._serialized_start=3847 - _globals['_LISTACTORSREQUEST']._serialized_end=3923 - _globals['_LISTACTORSRESPONSE']._serialized_start=3925 - _globals['_LISTACTORSRESPONSE']._serialized_end=4001 - _globals['_WORKER']._serialized_start=4004 - _globals['_WORKER']._serialized_end=4412 - _globals['_WORKER_LABELSENTRY']._serialized_start=4297 - _globals['_WORKER_LABELSENTRY']._serialized_end=4342 - _globals['_WORKER_STATE']._serialized_start=4344 - _globals['_WORKER_STATE']._serialized_end=4412 - _globals['_ASSIGNMENT']._serialized_start=4414 - _globals['_ASSIGNMENT']._serialized_end=4517 - _globals['_KUBENAMESPACEDOBJECTREF']._serialized_start=4519 - _globals['_KUBENAMESPACEDOBJECTREF']._serialized_end=4577 - _globals['_DEBUGCLEARREQUEST']._serialized_start=4579 - _globals['_DEBUGCLEARREQUEST']._serialized_end=4598 - _globals['_DEBUGCLEARRESPONSE']._serialized_start=4600 - _globals['_DEBUGCLEARRESPONSE']._serialized_end=4620 - _globals['_MINTJWTREQUEST']._serialized_start=4622 - _globals['_MINTJWTREQUEST']._serialized_end=4713 - _globals['_MINTJWTRESPONSE']._serialized_start=4715 - _globals['_MINTJWTRESPONSE']._serialized_end=4751 - _globals['_MINTCERTREQUEST']._serialized_start=4753 - _globals['_MINTCERTREQUEST']._serialized_end=4864 - _globals['_MINTCERTRESPONSE']._serialized_start=4866 - _globals['_MINTCERTRESPONSE']._serialized_end=4912 - _globals['_CONTROL']._serialized_start=5150 - _globals['_CONTROL']._serialized_end=6495 - _globals['_DEBUG']._serialized_start=6497 - _globals['_DEBUG']._serialized_end=6575 - _globals['_ACTORIDENTITY']._serialized_start=6578 - _globals['_ACTORIDENTITY']._serialized_end=6716 + _globals['_ACTOR']._serialized_end=1352 + _globals['_ACTOR_STATUS']._serialized_start=1154 + _globals['_ACTOR_STATUS']._serialized_end=1352 + _globals['_WORKERASSIGNMENT']._serialized_start=1355 + _globals['_WORKERASSIGNMENT']._serialized_end=1487 + _globals['_ACTORSNAPSHOT']._serialized_start=1490 + _globals['_ACTORSNAPSHOT']._serialized_end=1790 + _globals['_ACTORSNAPSHOTTAG']._serialized_start=1793 + _globals['_ACTORSNAPSHOTTAG']._serialized_end=1938 + _globals['_ATESPACE']._serialized_start=1940 + _globals['_ATESPACE']._serialized_end=1994 + _globals['_OBJECTREF']._serialized_start=1996 + _globals['_OBJECTREF']._serialized_end=2039 + _globals['_ACTORSNAPSHOTREF']._serialized_start=2041 + _globals['_ACTORSNAPSHOTREF']._serialized_end=2145 + _globals['_CREATEATESPACEREQUEST']._serialized_start=2147 + _globals['_CREATEATESPACEREQUEST']._serialized_end=2206 + _globals['_GETATESPACEREQUEST']._serialized_start=2208 + _globals['_GETATESPACEREQUEST']._serialized_end=2265 + _globals['_LISTATESPACESREQUEST']._serialized_start=2267 + _globals['_LISTATESPACESREQUEST']._serialized_end=2328 + _globals['_LISTATESPACESRESPONSE']._serialized_start=2330 + _globals['_LISTATESPACESRESPONSE']._serialized_end=2415 + _globals['_DELETEATESPACEREQUEST']._serialized_start=2417 + _globals['_DELETEATESPACEREQUEST']._serialized_end=2477 + _globals['_GETACTORREQUEST']._serialized_start=2479 + _globals['_GETACTORREQUEST']._serialized_end=2530 + _globals['_CREATEACTORREQUEST']._serialized_start=2532 + _globals['_CREATEACTORREQUEST']._serialized_end=2633 + _globals['_UPDATEACTORREQUEST']._serialized_start=2635 + _globals['_UPDATEACTORREQUEST']._serialized_end=2732 + _globals['_UPDATEACTORRESPONSE']._serialized_start=2734 + _globals['_UPDATEACTORRESPONSE']._serialized_end=2785 + _globals['_SUSPENDACTORREQUEST']._serialized_start=2787 + _globals['_SUSPENDACTORREQUEST']._serialized_end=2842 + _globals['_SUSPENDACTORRESPONSE']._serialized_start=2844 + _globals['_SUSPENDACTORRESPONSE']._serialized_end=2896 + _globals['_PAUSEACTORREQUEST']._serialized_start=2898 + _globals['_PAUSEACTORREQUEST']._serialized_end=2951 + _globals['_PAUSEACTORRESPONSE']._serialized_start=2953 + _globals['_PAUSEACTORRESPONSE']._serialized_end=3003 + _globals['_RESUMEACTORREQUEST']._serialized_start=3005 + _globals['_RESUMEACTORREQUEST']._serialized_end=3073 + _globals['_RESUMEACTORRESPONSE']._serialized_start=3075 + _globals['_RESUMEACTORRESPONSE']._serialized_end=3143 + _globals['_DELETEACTORREQUEST']._serialized_start=3145 + _globals['_DELETEACTORREQUEST']._serialized_end=3199 + _globals['_GETACTORSNAPSHOTREQUEST']._serialized_start=3201 + _globals['_GETACTORSNAPSHOTREQUEST']._serialized_end=3270 + _globals['_LISTACTORSNAPSHOTSREQUEST']._serialized_start=3272 + _globals['_LISTACTORSNAPSHOTSREQUEST']._serialized_end=3356 + _globals['_LISTACTORSNAPSHOTSRESPONSE']._serialized_start=3358 + _globals['_LISTACTORSNAPSHOTSRESPONSE']._serialized_end=3453 + _globals['_TAGACTORSNAPSHOTREQUEST']._serialized_start=3455 + _globals['_TAGACTORSNAPSHOTREQUEST']._serialized_end=3563 + _globals['_UPDATEACTORSNAPSHOTTAGREQUEST']._serialized_start=3565 + _globals['_UPDATEACTORSNAPSHOTTAGREQUEST']._serialized_end=3674 + _globals['_DELETEACTORSNAPSHOTTAGREQUEST']._serialized_start=3676 + _globals['_DELETEACTORSNAPSHOTTAGREQUEST']._serialized_end=3739 + _globals['_LISTWORKERSREQUEST']._serialized_start=3741 + _globals['_LISTWORKERSREQUEST']._serialized_end=3800 + _globals['_LISTWORKERSRESPONSE']._serialized_start=3802 + _globals['_LISTWORKERSRESPONSE']._serialized_end=3881 + _globals['_LISTACTORSREQUEST']._serialized_start=3883 + _globals['_LISTACTORSREQUEST']._serialized_end=3959 + _globals['_LISTACTORSRESPONSE']._serialized_start=3961 + _globals['_LISTACTORSRESPONSE']._serialized_end=4037 + _globals['_WORKER']._serialized_start=4040 + _globals['_WORKER']._serialized_end=4448 + _globals['_WORKER_LABELSENTRY']._serialized_start=4333 + _globals['_WORKER_LABELSENTRY']._serialized_end=4378 + _globals['_WORKER_STATE']._serialized_start=4380 + _globals['_WORKER_STATE']._serialized_end=4448 + _globals['_ASSIGNMENT']._serialized_start=4450 + _globals['_ASSIGNMENT']._serialized_end=4553 + _globals['_KUBENAMESPACEDOBJECTREF']._serialized_start=4555 + _globals['_KUBENAMESPACEDOBJECTREF']._serialized_end=4613 + _globals['_DEBUGCLEARREQUEST']._serialized_start=4615 + _globals['_DEBUGCLEARREQUEST']._serialized_end=4634 + _globals['_DEBUGCLEARRESPONSE']._serialized_start=4636 + _globals['_DEBUGCLEARRESPONSE']._serialized_end=4656 + _globals['_MINTJWTREQUEST']._serialized_start=4658 + _globals['_MINTJWTREQUEST']._serialized_end=4749 + _globals['_MINTJWTRESPONSE']._serialized_start=4751 + _globals['_MINTJWTRESPONSE']._serialized_end=4787 + _globals['_MINTCERTREQUEST']._serialized_start=4789 + _globals['_MINTCERTREQUEST']._serialized_end=4900 + _globals['_MINTCERTRESPONSE']._serialized_start=4902 + _globals['_MINTCERTRESPONSE']._serialized_end=4948 + _globals['_CONTROL']._serialized_start=5186 + _globals['_CONTROL']._serialized_end=6531 + _globals['_DEBUG']._serialized_start=6533 + _globals['_DEBUG']._serialized_end=6611 + _globals['_ACTORIDENTITY']._serialized_start=6614 + _globals['_ACTORIDENTITY']._serialized_end=6752 # @@protoc_insertion_point(module_scope) diff --git a/cmd/ateapi/internal/actoridentity/actoridentity.go b/cmd/ateapi/internal/actoridentity/actoridentity.go index 6fc47c5de..963c2e807 100644 --- a/cmd/ateapi/internal/actoridentity/actoridentity.go +++ b/cmd/ateapi/internal/actoridentity/actoridentity.go @@ -363,15 +363,14 @@ func (s *Server) authorizeActor(ctx context.Context, caller *ateletCaller, actor // An actor placed on a worker always carries its placement fields. Missing // placement is a control-plane bug rather than a client error, so it is not // folded into deny(). - podNamespace, podName, pool := actor.GetAteomPodNamespace(), actor.GetAteomPodName(), actor.GetWorkerPoolName() - if podNamespace == "" || podName == "" || pool == "" { - slog.ErrorContext(ctx, "MintCert: running actor has incomplete placement", - slog.Any("actor", actorRef), slog.String("podNamespace", podNamespace), - slog.String("podName", podName), slog.String("workerPool", pool)) + assignment := actor.GetWorkerAssignment() + if assignment == nil { + slog.ErrorContext(ctx, "MintCert: running actor has no worker assignment", slog.Any("actor", actorRef)) return nil, status.Errorf(codes.FailedPrecondition, "actor has no worker assigned") } + podNamespace, podName := assignment.GetWorkerNamespace(), assignment.GetWorkerPod() - worker, err := s.store.GetWorker(ctx, podNamespace, pool, podName) + worker, err := s.store.GetWorker(ctx, podNamespace, assignment.GetWorkerPool(), podName) if err != nil { if errors.Is(err, store.ErrNotFound) { return nil, deny("worker hosting the actor not found", slog.String("workerPod", podNamespace+"/"+podName)) diff --git a/cmd/ateapi/internal/actoridentity/actoridentity_test.go b/cmd/ateapi/internal/actoridentity/actoridentity_test.go index 0385a1a58..68796a2e9 100644 --- a/cmd/ateapi/internal/actoridentity/actoridentity_test.go +++ b/cmd/ateapi/internal/actoridentity/actoridentity_test.go @@ -176,7 +176,7 @@ type actorFixture struct { // unassigned seeds the worker with no assignment at all, as pause, suspend // and crash leave it once they have released it. unassigned bool - // noPlacement seeds the actor with none of its worker fields set. + // noPlacement seeds the actor with no worker assignment. noPlacement bool // noWorker skips seeding the worker record entirely. noWorker bool @@ -194,9 +194,12 @@ func seedActor(t *testing.T, ctx context.Context, st store.Interface, f actorFix ActorTemplateName: "counter", } if !f.noPlacement { - actor.AteomPodNamespace = testPodNS - actor.AteomPodName = testWorkerPod - actor.WorkerPoolName = testPool + actor.WorkerAssignment = &ateapipb.WorkerAssignment{ + WorkerNamespace: testPodNS, + WorkerPool: testPool, + WorkerPod: testWorkerPod, + WorkerPodUid: "worker-uid", + } } if _, err := st.CreateActor(ctx, actor); err != nil { t.Fatalf("seed actor: %v", err) diff --git a/cmd/ateapi/internal/controlapi/crash.go b/cmd/ateapi/internal/controlapi/crash.go index 1c371eb69..b459ada46 100644 --- a/cmd/ateapi/internal/controlapi/crash.go +++ b/cmd/ateapi/internal/controlapi/crash.go @@ -63,11 +63,7 @@ func crashActor(ctx context.Context, st store.Interface, actorRef resources.Acto // InProgressSnapshot is kept for debugging; failed workflow // steps must never promote it to an ActorSnapshot. - actor.AteomPodNamespace = "" - actor.AteomPodName = "" - actor.AteomPodIp = "" - actor.AteomPodUid = "" - actor.WorkerPoolName = "" + actor.WorkerAssignment = nil if _, err := st.UpdateActor(ctx, actor, actor.GetMetadata().GetVersion()); err != nil { errCollected = append(errCollected, fmt.Errorf("while marking actor crashed: %w", err)) @@ -78,17 +74,14 @@ func crashActor(ctx context.Context, st store.Interface, actorRef resources.Acto // releaseWorker clears the worker's assignment if it still points at the given // actor. A missing worker or an already-cleared assignment is not an error. func releaseWorker(ctx context.Context, st store.Interface, actor *ateapipb.Actor) error { - podNamespace := actor.GetAteomPodNamespace() - podName := actor.GetAteomPodName() - podUid := actor.GetAteomPodUid() - poolName := actor.GetWorkerPoolName() - - if podNamespace == "" || podName == "" || poolName == "" { + assignment := actor.GetWorkerAssignment() + if assignment == nil { slog.WarnContext(ctx, "Actor's worker assignment is already cleared") return nil } + podUid := assignment.GetWorkerPodUid() - worker, err := st.GetWorker(ctx, podNamespace, poolName, podName) + worker, err := st.GetWorker(ctx, assignment.GetWorkerNamespace(), assignment.GetWorkerPool(), assignment.GetWorkerPod()) if errors.Is(err, store.ErrNotFound) { // No need to release if the worker is not found. slog.WarnContext(ctx, "Worker already gone while crashing actor, skipping release", slog.String("worker", podUid)) diff --git a/cmd/ateapi/internal/controlapi/crash_test.go b/cmd/ateapi/internal/controlapi/crash_test.go index 641e11df2..0857cea08 100644 --- a/cmd/ateapi/internal/controlapi/crash_test.go +++ b/cmd/ateapi/internal/controlapi/crash_test.go @@ -34,13 +34,15 @@ import ( func seedActor(t *testing.T, ctx context.Context, st store.Interface, actorRef resources.ActorRef) { t.Helper() if _, err := st.CreateActor(ctx, &ateapipb.Actor{ - Metadata: &ateapipb.ResourceMetadata{Name: actorRef.Name, Atespace: actorRef.Atespace}, - Status: ateapipb.Actor_STATUS_RUNNING, - AteomPodNamespace: "ns", - AteomPodName: "pod", - AteomPodIp: "1.2.3.4", - AteomPodUid: "uid", - WorkerPoolName: "pool", + Metadata: &ateapipb.ResourceMetadata{Name: actorRef.Name, Atespace: actorRef.Atespace}, + Status: ateapipb.Actor_STATUS_RUNNING, + WorkerAssignment: &ateapipb.WorkerAssignment{ + WorkerNamespace: "ns", + WorkerPool: "pool", + WorkerPod: "pod", + WorkerPodUid: "uid", + WorkerPodIp: "1.2.3.4", + }, InProgressSnapshot: "gs://snapshots/actor-1/reserved", }); err != nil { t.Fatalf("seed actor: %v", err) @@ -94,16 +96,8 @@ func assertCrashed(t *testing.T, ctx context.Context, st store.Interface, actorR if got.GetInProgressSnapshot() == "" { t.Error(`InProgressSnapshot = "", want preserved`) } - for field, val := range map[string]string{ - "AteomPodNamespace": got.GetAteomPodNamespace(), - "AteomPodName": got.GetAteomPodName(), - "AteomPodIp": got.GetAteomPodIp(), - "AteomPodUid": got.GetAteomPodUid(), - "WorkerPoolName": got.GetWorkerPoolName(), - } { - if val != "" { - t.Errorf("%s = %q, want cleared", field, val) - } + if got.GetWorkerAssignment() != nil { + t.Errorf("WorkerAssignment = %v, want cleared", got.GetWorkerAssignment()) } } diff --git a/cmd/ateapi/internal/controlapi/functional_test.go b/cmd/ateapi/internal/controlapi/functional_test.go index 635196778..c5239c57c 100644 --- a/cmd/ateapi/internal/controlapi/functional_test.go +++ b/cmd/ateapi/internal/controlapi/functional_test.go @@ -761,9 +761,6 @@ func TestCreateActor_Success(t *testing.T) { ActorTemplateName: "tmpl1", WorkerSelector: &ateapipb.Selector{MatchLabels: map[string]string{"tier": "free"}}, Status: ateapipb.Actor_STATUS_RUNNING, - AteomPodNamespace: "caller-ns", - AteomPodName: "caller-pod", - WorkerPoolName: "caller-pool", }}) if err != nil { t.Fatalf("CreateActor failed: %v", err) @@ -1672,12 +1669,14 @@ func TestResumeActor(t *testing.T) { ActorTemplateNamespace: ns, ActorTemplateName: "tmpl1", Status: ateapipb.Actor_STATUS_RUNNING, - AteomPodNamespace: ns, - AteomPodName: "worker-1", - AteomPodIp: "127.0.0.1", - WorkerPoolName: "pool1", + WorkerAssignment: &ateapipb.WorkerAssignment{ + WorkerNamespace: ns, + WorkerPool: "pool1", + WorkerPod: "worker-1", + WorkerPodIp: "127.0.0.1", + }, } - if diff := cmp.Diff(want, getResp, protocmp.Transform(), ignoreUID, ignoreVersion, ignoreTimestamps, protocmp.IgnoreFields(&ateapipb.Actor{}, "ateom_pod_uid")); diff != "" { + if diff := cmp.Diff(want, getResp, protocmp.Transform(), ignoreUID, ignoreVersion, ignoreTimestamps, protocmp.IgnoreFields(&ateapipb.WorkerAssignment{}, "worker_pod_uid")); diff != "" { t.Errorf("GetActor response mismatch (-want +got):\n%s", diff) } @@ -1874,11 +1873,11 @@ func TestResumeActor_MultiPoolSelector(t *testing.T) { if err != nil { t.Fatalf("GetActor failed: %v", err) } - if got := getResp.GetAteomPodName(); got != "worker-b" { + if got := getResp.GetWorkerAssignment().GetWorkerPod(); got != "worker-b" { t.Errorf("expected actor to be assigned to worker-b (pool-b, matching narrowed selector), got %q", got) } - if got := getResp.GetWorkerPoolName(); got != "pool-b" { - t.Errorf("expected actor's worker_pool_name to be pool-b, got %q", got) + if got := getResp.GetWorkerAssignment().GetWorkerPool(); got != "pool-b" { + t.Errorf("expected actor's worker_assignment.worker_pool to be pool-b, got %q", got) } } @@ -1924,8 +1923,8 @@ func TestResumeActor_RequiresBothSelectorsToMatch(t *testing.T) { if err != nil { t.Fatalf("GetActor failed: %v", err) } - if got := getResp.GetWorkerPoolName(); got != "pool-both" { - t.Errorf("expected actor to be assigned to pool-both (the only pool matching both selectors), got worker_pool_name=%q", got) + if got := getResp.GetWorkerAssignment().GetWorkerPool(); got != "pool-both" { + t.Errorf("expected actor to be assigned to pool-both (the only pool matching both selectors), got worker_assignment.worker_pool=%q", got) } } @@ -2180,7 +2179,7 @@ func TestSuspendActor(t *testing.T) { ignoreUID, ignoreVersion, ignoreTimestamps, - protocmp.IgnoreFields(&ateapipb.Actor{}, "ateom_pod_uid", "latest_snapshot"), + protocmp.IgnoreFields(&ateapipb.Actor{}, "latest_snapshot"), ); diff != "" { t.Errorf("GetActor response mismatch (-want +got):\n%s", diff) } @@ -2272,7 +2271,6 @@ func TestPauseActor(t *testing.T) { ignoreUID, ignoreVersion, ignoreTimestamps, - protocmp.IgnoreFields(&ateapipb.Actor{}, "ateom_pod_uid"), protocmp.FilterField(&ateapipb.LocalSnapshotInfo{}, "snapshot_prefix", cmp.Comparer(func(x, y string) bool { return strings.HasPrefix(y, x) })), @@ -2483,7 +2481,7 @@ func TestResumeActor_CrashesIfAssignedWorkerIsDraining(t *testing.T) { if err != nil { t.Fatalf("GetActor failed: %v", err) } - assignedPod := getResp.GetAteomPodName() + assignedPod := getResp.GetWorkerAssignment().GetWorkerPod() if assignedPod == "" { t.Fatalf("expected actor to be bound to a worker after the failed attempt") } @@ -2530,7 +2528,7 @@ func TestResumeActor_CrashesIfAssignedWorkerIsDraining(t *testing.T) { if got := getResp.GetStatus(); got != ateapipb.Actor_STATUS_CRASHED { t.Errorf("expected actor status CRASHED, got %v", got) } - if got := getResp.GetAteomPodName(); got != "" { + if got := getResp.GetWorkerAssignment().GetWorkerPod(); got != "" { t.Errorf("expected actor pod name to be empty, got %q", got) } @@ -2599,11 +2597,11 @@ func TestUpdateActor_ReassignsPoolAcrossSuspendResume(t *testing.T) { if err != nil { t.Fatalf("GetActor failed: %v", err) } - if got := getResp.GetWorkerPoolName(); got != "pool-a" { - t.Fatalf("expected actor to first resume onto pool-a, got worker_pool_name=%q", got) + if got := getResp.GetWorkerAssignment().GetWorkerPool(); got != "pool-a" { + t.Fatalf("expected actor to first resume onto pool-a, got worker_assignment.worker_pool=%q", got) } - if got := getResp.GetAteomPodName(); got != "worker-a" { - t.Fatalf("expected actor to first resume onto worker-a, got ateom_pod_name=%q", got) + if got := getResp.GetWorkerAssignment().GetWorkerPod(); got != "worker-a" { + t.Fatalf("expected actor to first resume onto worker-a, got worker_assignment.worker_pod=%q", got) } if _, err := tc.client.UpdateActor(context.Background(), &ateapipb.UpdateActorRequest{ @@ -2626,11 +2624,11 @@ func TestUpdateActor_ReassignsPoolAcrossSuspendResume(t *testing.T) { if err != nil { t.Fatalf("GetActor failed: %v", err) } - if got := getResp.GetWorkerPoolName(); got != "pool-b" { - t.Errorf("expected actor to resume onto pool-b after selector update, got worker_pool_name=%q", got) + if got := getResp.GetWorkerAssignment().GetWorkerPool(); got != "pool-b" { + t.Errorf("expected actor to resume onto pool-b after selector update, got worker_assignment.worker_pool=%q", got) } - if got := getResp.GetAteomPodName(); got != "worker-b" { - t.Errorf("expected actor to resume onto worker-b after selector update, got ateom_pod_name=%q", got) + if got := getResp.GetWorkerAssignment().GetWorkerPod(); got != "worker-b" { + t.Errorf("expected actor to resume onto worker-b after selector update, got worker_assignment.worker_pod=%q", got) } if got := getResp.GetStatus(); got != ateapipb.Actor_STATUS_RUNNING { t.Errorf("expected actor status RUNNING after second resume, got %v", got) @@ -2796,8 +2794,8 @@ func TestResumeActor_DanglingWorker(t *testing.T) { if actor.GetStatus() != ateapipb.Actor_STATUS_RESUMING { t.Fatalf("expected status RESUMING, got %v", actor.GetStatus()) } - if actor.GetAteomPodName() != "worker-a" { - t.Fatalf("expected worker-a assigned, got %v", actor.GetAteomPodName()) + if actor.GetWorkerAssignment().GetWorkerPod() != "worker-a" { + t.Fatalf("expected worker-a assigned, got %v", actor.GetWorkerAssignment().GetWorkerPod()) } deleteWorkerPod(t, tc, ns, "worker-a") @@ -2828,8 +2826,8 @@ func TestResumeActor_DanglingWorker(t *testing.T) { if actor.GetStatus() != ateapipb.Actor_STATUS_CRASHED { t.Errorf("expected status CRASHED, got %v", actor.GetStatus()) } - if actor.GetAteomPodName() != "" { - t.Errorf("expected worker to be unassigned, got %v", actor.GetAteomPodName()) + if actor.GetWorkerAssignment().GetWorkerPod() != "" { + t.Errorf("expected worker to be unassigned, got %v", actor.GetWorkerAssignment().GetWorkerPod()) } } @@ -2884,8 +2882,8 @@ func TestSuspendActor_DanglingWorker(t *testing.T) { if getResp.GetStatus() != ateapipb.Actor_STATUS_CRASHED { t.Errorf("expected status CRASHED, got %v", getResp.GetStatus()) } - if getResp.GetAteomPodNamespace() != "" { - t.Errorf("expected ateom_pod_namespace to be empty, got %v", getResp.GetAteomPodNamespace()) + if getResp.GetWorkerAssignment() != nil { + t.Errorf("expected worker_assignment to be cleared, got %v", getResp.GetWorkerAssignment()) } } diff --git a/cmd/ateapi/internal/controlapi/metrics.go b/cmd/ateapi/internal/controlapi/metrics.go index 320738c97..8bbf07a87 100644 --- a/cmd/ateapi/internal/controlapi/metrics.go +++ b/cmd/ateapi/internal/controlapi/metrics.go @@ -158,7 +158,7 @@ func lifecycleOpAttrs(actor *ateapipb.Actor, template *atev1alpha1.ActorTemplate ateattr.TemplateNameKey.String(actor.GetActorTemplateName()), ateattr.TemplateNamespaceKey.String(actor.GetActorTemplateNamespace()), } - if pool := actor.GetWorkerPoolName(); pool != "" { + if pool := actor.GetWorkerAssignment().GetWorkerPool(); pool != "" { attrs = append(attrs, ateattr.WorkerPoolNameKey.String(pool)) } if template != nil { diff --git a/cmd/ateapi/internal/controlapi/metrics_test.go b/cmd/ateapi/internal/controlapi/metrics_test.go index 968371832..ed0779c9e 100644 --- a/cmd/ateapi/internal/controlapi/metrics_test.go +++ b/cmd/ateapi/internal/controlapi/metrics_test.go @@ -210,7 +210,7 @@ func TestLifecycleOpDurationShape(t *testing.T) { actor := &ateapipb.Actor{ ActorTemplateName: "support-agent", ActorTemplateNamespace: "ate-agents", - WorkerPoolName: "pool-a", + WorkerAssignment: &ateapipb.WorkerAssignment{WorkerPool: "pool-a"}, } template := &atev1alpha1.ActorTemplate{ Spec: atev1alpha1.ActorTemplateSpec{SandboxClass: atev1alpha1.SandboxClassGvisor}, diff --git a/cmd/ateapi/internal/controlapi/syncer.go b/cmd/ateapi/internal/controlapi/syncer.go index 5e1d58961..1bee2371a 100644 --- a/cmd/ateapi/internal/controlapi/syncer.go +++ b/cmd/ateapi/internal/controlapi/syncer.go @@ -301,7 +301,8 @@ func (s *WorkerPoolSyncer) releaseActorOnDeadWorker(ctx context.Context, namespa return err } // Skip if a concurrent SuspendActor already cleared the pointer. - if actor.GetAteomPodNamespace() != namespace || actor.GetAteomPodName() != podName { + assignment := actor.GetWorkerAssignment() + if assignment.GetWorkerNamespace() != namespace || assignment.GetWorkerPod() != podName { return nil } // If the actor is suspended, it's already been released. @@ -310,12 +311,8 @@ func (s *WorkerPoolSyncer) releaseActorOnDeadWorker(ctx context.Context, namespa } actor.Status = ateapipb.Actor_STATUS_CRASHED - actor.AteomPodNamespace = "" - actor.AteomPodName = "" - actor.AteomPodIp = "" - actor.AteomPodUid = "" + actor.WorkerAssignment = nil actor.InProgressSnapshot = "" - actor.WorkerPoolName = "" _, err = s.persistence.UpdateActor(ctx, actor, actor.GetMetadata().GetVersion()) return err diff --git a/cmd/ateapi/internal/controlapi/syncer_test.go b/cmd/ateapi/internal/controlapi/syncer_test.go index f2050ae4a..21cd8608e 100644 --- a/cmd/ateapi/internal/controlapi/syncer_test.go +++ b/cmd/ateapi/internal/controlapi/syncer_test.go @@ -245,8 +245,10 @@ func TestSyncer_DeleteBoundWorker_ClearsActor(t *testing.T) { actorName := "actor-orphan" if _, err := persistence.CreateActor(ctx, &ateapipb.Actor{ Metadata: &ateapipb.ResourceMetadata{Name: actorName, Atespace: "team-orphan"}, ActorTemplateNamespace: ns, ActorTemplateName: "tmpl", - Status: ateapipb.Actor_STATUS_RUNNING, - AteomPodNamespace: ns, AteomPodName: pod, AteomPodIp: ip, + Status: ateapipb.Actor_STATUS_RUNNING, + WorkerAssignment: &ateapipb.WorkerAssignment{ + WorkerNamespace: ns, WorkerPool: pool, WorkerPod: pod, WorkerPodIp: ip, + }, InProgressSnapshot: "gs://snapshots/partial", LatestSnapshot: &ateapipb.ObjectRef{Atespace: "team-orphan", Name: "last"}, }); err != nil { @@ -283,7 +285,7 @@ func TestSyncer_DeleteBoundWorker_ClearsActor(t *testing.T) { }); err != nil { t.Fatalf("actor not reset to CRASHED: %v", err) } - if got.AteomPodName != "" || got.AteomPodNamespace != "" || got.AteomPodIp != "" || got.InProgressSnapshot != "" { + if got.GetWorkerAssignment() != nil || got.InProgressSnapshot != "" { t.Errorf("bind fields not cleared: %+v", got) } if got.GetLatestSnapshot().GetName() == "" { @@ -513,7 +515,10 @@ func TestReconcileDeadWorker(t *testing.T) { atespace, actorID := "team-rdw", "actor-rdw" if _, err := persistence.CreateActor(ctx, &ateapipb.Actor{ Metadata: &ateapipb.ResourceMetadata{Name: actorID, Atespace: atespace}, ActorTemplateNamespace: ns, ActorTemplateName: "tmpl", - Status: ateapipb.Actor_STATUS_RUNNING, AteomPodNamespace: ns, AteomPodName: pod, AteomPodIp: "10.0.0.5", + Status: ateapipb.Actor_STATUS_RUNNING, + WorkerAssignment: &ateapipb.WorkerAssignment{ + WorkerNamespace: ns, WorkerPool: pool, WorkerPod: pod, WorkerPodIp: "10.0.0.5", + }, }); err != nil { t.Fatalf("create actor: %v", err) } @@ -592,8 +597,10 @@ func TestSyncer_ReconcileOrphanedWorkers(t *testing.T) { atespace, actorID := "team-recon", "actor-recon" if _, err := persistence.CreateActor(ctx, &ateapipb.Actor{ Metadata: &ateapipb.ResourceMetadata{Name: actorID, Atespace: atespace}, ActorTemplateNamespace: ns, ActorTemplateName: "tmpl", - Status: ateapipb.Actor_STATUS_RUNNING, - AteomPodNamespace: ns, AteomPodName: "worker-orphan", AteomPodIp: "10.0.0.10", + Status: ateapipb.Actor_STATUS_RUNNING, + WorkerAssignment: &ateapipb.WorkerAssignment{ + WorkerNamespace: ns, WorkerPool: pool, WorkerPod: "worker-orphan", WorkerPodIp: "10.0.0.10", + }, }); err != nil { t.Fatalf("create actor: %v", err) } @@ -624,7 +631,7 @@ func TestSyncer_ReconcileOrphanedWorkers(t *testing.T) { if got.GetStatus() != ateapipb.Actor_STATUS_CRASHED { t.Errorf("orphaned actor status = %v, want CRASHED", got.GetStatus()) } - if got.GetAteomPodName() != "" || got.GetAteomPodNamespace() != "" { + if got.GetWorkerAssignment() != nil { t.Errorf("orphaned actor pod pointer not cleared: %+v", got) } } @@ -652,8 +659,10 @@ func TestReleaseActorOnDeadWorker_StatusTransitions(t *testing.T) { atespace, actorID := "team-status", "actor-status" if _, err := persistence.CreateActor(ctx, &ateapipb.Actor{ Metadata: &ateapipb.ResourceMetadata{Name: actorID, Atespace: atespace}, ActorTemplateNamespace: ns, ActorTemplateName: "tmpl", - Status: tc.start, - AteomPodNamespace: ns, AteomPodName: pod, AteomPodIp: ip, AteomPodUid: "uid", + Status: tc.start, + WorkerAssignment: &ateapipb.WorkerAssignment{ + WorkerNamespace: ns, WorkerPool: pool, WorkerPod: pod, WorkerPodIp: ip, WorkerPodUid: "uid", + }, }); err != nil { t.Fatalf("create actor: %v", err) } @@ -680,8 +689,8 @@ func TestReleaseActorOnDeadWorker_StatusTransitions(t *testing.T) { if got.GetStatus() != tc.want { t.Errorf("actor status = %v, want %v", got.GetStatus(), tc.want) } - if tc.want == ateapipb.Actor_STATUS_CRASHED && got.GetAteomPodUid() != "" { - t.Errorf("crashed actor AteomPodUid = %q, want cleared", got.GetAteomPodUid()) + if tc.want == ateapipb.Actor_STATUS_CRASHED && got.GetWorkerAssignment() != nil { + t.Errorf("crashed actor WorkerAssignment = %v, want cleared", got.GetWorkerAssignment()) } }) } diff --git a/cmd/ateapi/internal/controlapi/volumes.go b/cmd/ateapi/internal/controlapi/volumes.go index c14b87996..38ad6dcbb 100644 --- a/cmd/ateapi/internal/controlapi/volumes.go +++ b/cmd/ateapi/internal/controlapi/volumes.go @@ -169,12 +169,13 @@ func actorVolumeID(actorUID string, volumeName string) string { // detachActorVolumes detaches all mounted external volumes for an actor from its worker node. func detachActorVolumes(ctx context.Context, st store.Interface, actor *ateapipb.Actor, template *atev1alpha1.ActorTemplate, action string) error { - if actor.GetAteomPodNamespace() == "" { + assignment := actor.GetWorkerAssignment() + if assignment == nil { slog.WarnContext(ctx, fmt.Sprintf("Actor has no assigned worker pod during %s, skipping detach volumes", action), slog.String("actor_id", actor.GetMetadata().GetName())) return nil } - worker, err := st.GetWorker(ctx, actor.GetAteomPodNamespace(), actor.GetWorkerPoolName(), actor.GetAteomPodName()) + worker, err := st.GetWorker(ctx, assignment.GetWorkerNamespace(), assignment.GetWorkerPool(), assignment.GetWorkerPod()) if err != nil { if errors.Is(err, store.ErrNotFound) { slog.WarnContext(ctx, fmt.Sprintf("Worker not found in store during %s, skipping detach volumes", action), slog.String("actor_id", actor.GetMetadata().GetName())) diff --git a/cmd/ateapi/internal/controlapi/workflow_pause.go b/cmd/ateapi/internal/controlapi/workflow_pause.go index c162117f5..dbca80240 100644 --- a/cmd/ateapi/internal/controlapi/workflow_pause.go +++ b/cmd/ateapi/internal/controlapi/workflow_pause.go @@ -118,20 +118,21 @@ func (s *CallAteletPauseStep) CheckPrerequisite(ctx context.Context, input *Paus if state.Actor.GetStatus() != ateapipb.Actor_STATUS_PAUSING { return status.Errorf(codes.FailedPrecondition, "CallAteletPauseStep prerequisite not met for Actor: %s (got: %v, want %s)", input.ActorRef, state.Actor.GetStatus(), ateapipb.Actor_STATUS_PAUSING) } - if state.Actor.GetAteomPodNamespace() == "" || state.Actor.GetAteomPodName() == "" { + if state.Actor.GetWorkerAssignment() == nil { if err := crashActor(ctx, s.store, input.ActorRef); err != nil { slog.ErrorContext(ctx, "Failed to crash actor", slog.String("err", err.Error())) } - return status.Errorf(codes.FailedPrecondition, "CallAteletPauseStep prerequisite not met for Actor: %s. AteomPodNamespace: %s, GetAteomPodName %s", input.ActorRef, state.Actor.GetAteomPodNamespace(), state.Actor.GetAteomPodName()) + return status.Errorf(codes.FailedPrecondition, "CallAteletPauseStep prerequisite not met for Actor: %s. No worker assignment", input.ActorRef) } return nil } func (s *CallAteletPauseStep) Execute(ctx context.Context, input *PauseInput, state *PauseState) error { - ateletConn, err := s.dialer.DialForWorker(state.Actor.GetAteomPodNamespace(), state.Actor.GetAteomPodName()) + assignment := state.Actor.GetWorkerAssignment() + ateletConn, err := s.dialer.DialForWorker(assignment.GetWorkerNamespace(), assignment.GetWorkerPod()) if err != nil { if errors.Is(err, ErrWorkerPodNotFound) { - slog.ErrorContext(ctx, "Worker pod gone before checkpoint, crashing actor", "namespace", state.Actor.GetAteomPodNamespace(), "pod", state.Actor.GetAteomPodName(), "in_progress_snapshot", state.Actor.GetInProgressSnapshot()) + slog.ErrorContext(ctx, "Worker pod gone before checkpoint, crashing actor", "namespace", assignment.GetWorkerNamespace(), "pod", assignment.GetWorkerPod(), "in_progress_snapshot", state.Actor.GetInProgressSnapshot()) if err := crashActor(ctx, s.store, input.ActorRef); err != nil { slog.ErrorContext(ctx, "Failed to crash actor", slog.String("err", err.Error())) } @@ -150,7 +151,7 @@ func (s *CallAteletPauseStep) Execute(ctx context.Context, input *PauseInput, st // actor is currently running (recorded on-node at Run/Restore) and pins it // into the snapshot manifest. req := &ateletpb.CheckpointRequest{ - TargetAteomUid: state.Actor.GetAteomPodUid(), + TargetAteomUid: assignment.GetWorkerPodUid(), Atespace: state.Actor.GetMetadata().GetAtespace(), ActorName: state.Actor.GetMetadata().GetName(), ActorTemplateNamespace: state.Actor.GetActorTemplateNamespace(), @@ -182,7 +183,7 @@ func (s *DetachVolumesForPauseStep) Name() string { return "DetachVolumesForPaus func (s *DetachVolumesForPauseStep) IsComplete(ctx context.Context, input *PauseInput, state *PauseState) (bool, error) { // TODO replace with a proper check on the volumes. - return state.Actor.GetStatus() == ateapipb.Actor_STATUS_PAUSED && state.Actor.GetAteomPodNamespace() == "", nil + return state.Actor.GetStatus() == ateapipb.Actor_STATUS_PAUSED && state.Actor.GetWorkerAssignment() == nil, nil } func (s *DetachVolumesForPauseStep) CheckPrerequisite(ctx context.Context, input *PauseInput, state *PauseState) error { @@ -205,7 +206,7 @@ func (s *FinalizePausedStep) IsComplete(ctx context.Context, input *PauseInput, // or CRASHED (node name was lost, so it can never be safely resumed). status := state.Actor.GetStatus() terminal := status == ateapipb.Actor_STATUS_PAUSED || status == ateapipb.Actor_STATUS_CRASHED - return terminal && state.Actor.GetAteomPodNamespace() == "", nil + return terminal && state.Actor.GetWorkerAssignment() == nil, nil } func (s *FinalizePausedStep) CheckPrerequisite(ctx context.Context, input *PauseInput, state *PauseState) error { @@ -221,19 +222,14 @@ func (s *FinalizePausedStep) Execute(ctx context.Context, input *PauseInput, sta } // 1. Free the worker (if it hasn't been freed yet) - if latestActor.GetAteomPodNamespace() != "" { - workerNs := latestActor.GetAteomPodNamespace() - workerPod := latestActor.GetAteomPodName() - - workerPool := latestActor.GetWorkerPoolName() - - worker, err := s.store.GetWorker(ctx, workerNs, workerPool, workerPod) + if assignment := latestActor.GetWorkerAssignment(); assignment != nil { + worker, err := s.store.GetWorker(ctx, assignment.GetWorkerNamespace(), assignment.GetWorkerPool(), assignment.GetWorkerPod()) nodeName := "" if err != nil { if !errors.Is(err, store.ErrNotFound) { return fmt.Errorf("while getting worker for release: %w", err) } - slog.Warn("Worker already gone during finalize pause, skipping release", "worker", workerPod) + slog.Warn("Worker already gone during finalize pause, skipping release", "worker", assignment.GetWorkerPod()) } else { // TODO(dberkov) - what if worker does not belong to this actor? nodeName = worker.GetNodeName() @@ -250,7 +246,7 @@ func (s *FinalizePausedStep) Execute(ctx context.Context, input *PauseInput, sta } } - // 2. Safely clear ActiveWorker now that the worker object in DB is freed + // 2. Clear the actor's assignment, now that the worker is freed latestActor, err = s.store.GetActor(ctx, input.ActorRef) if err != nil { return err @@ -275,10 +271,7 @@ func (s *FinalizePausedStep) Execute(ctx context.Context, input *PauseInput, sta latestActor.LocalSnapshotInfo = localInfo latestActor.InProgressSnapshot = "" } - latestActor.AteomPodNamespace = "" - latestActor.AteomPodName = "" - latestActor.AteomPodIp = "" - latestActor.WorkerPoolName = "" + latestActor.WorkerAssignment = nil updatedActor, err := s.store.UpdateActor(ctx, latestActor, latestActor.GetMetadata().GetVersion()) if err != nil { return err diff --git a/cmd/ateapi/internal/controlapi/workflow_pause_test.go b/cmd/ateapi/internal/controlapi/workflow_pause_test.go index 637adb5e7..59f5474db 100644 --- a/cmd/ateapi/internal/controlapi/workflow_pause_test.go +++ b/cmd/ateapi/internal/controlapi/workflow_pause_test.go @@ -44,11 +44,13 @@ func TestFinalizePausedStep_WorkerGone(t *testing.T) { actorRef := resources.ActorRef{Atespace: "team-a", Name: "actor-1"} actor := &ateapipb.Actor{ - Metadata: &ateapipb.ResourceMetadata{Atespace: actorRef.Atespace, Name: actorRef.Name}, - Status: ateapipb.Actor_STATUS_PAUSING, - AteomPodNamespace: "default", - AteomPodName: "worker-pod-1", - WorkerPoolName: "pool1", + Metadata: &ateapipb.ResourceMetadata{Atespace: actorRef.Atespace, Name: actorRef.Name}, + Status: ateapipb.Actor_STATUS_PAUSING, + WorkerAssignment: &ateapipb.WorkerAssignment{ + WorkerNamespace: "default", + WorkerPool: "pool1", + WorkerPod: "worker-pod-1", + }, InProgressSnapshot: "snap-prefix", } if _, err := st.CreateActor(ctx, actor); err != nil { @@ -198,10 +200,10 @@ func TestPauseSteps_CheckPrerequisite(t *testing.T) { t.Run(tc.name, func(t *testing.T) { ctx := context.Background() for _, st := range allActorStatuses { - // Worker pod fields are populated so CallAteletPauseStep's + // The worker assignment is populated so CallAteletPauseStep's // missing-worker crash branch is not taken; this test only // verifies status gating. - err := tc.step.CheckPrerequisite(ctx, &PauseInput{ActorRef: resources.ActorRef{Name: "id1"}}, &PauseState{Actor: &ateapipb.Actor{Status: st, AteomPodNamespace: "ns", AteomPodName: "worker-1"}}) + err := tc.step.CheckPrerequisite(ctx, &PauseInput{ActorRef: resources.ActorRef{Name: "id1"}}, &PauseState{Actor: &ateapipb.Actor{Status: st, WorkerAssignment: &ateapipb.WorkerAssignment{WorkerNamespace: "ns", WorkerPool: "pool", WorkerPod: "worker-1"}}}) assertPrerequisiteResult(t, st, err, tc.allowed == nil || tc.allowed[st]) } }) @@ -229,11 +231,13 @@ func TestCallAteletPauseStep_DanglingWorkerDoesNotRecordPhantomSnapshot(t *testi persistence := newTestPersistence(t) actor := &ateapipb.Actor{ - Metadata: &ateapipb.ResourceMetadata{Atespace: "team-a", Name: "actor-1"}, - Status: ateapipb.Actor_STATUS_PAUSING, - AteomPodNamespace: "worker-ns", - AteomPodName: "pod-gone", - WorkerPoolName: "pool", + Metadata: &ateapipb.ResourceMetadata{Atespace: "team-a", Name: "actor-1"}, + Status: ateapipb.Actor_STATUS_PAUSING, + WorkerAssignment: &ateapipb.WorkerAssignment{ + WorkerNamespace: "worker-ns", + WorkerPool: "pool", + WorkerPod: "pod-gone", + }, InProgressSnapshot: "actor-1-never-written", LatestSnapshot: tt.prevSnapshot, } diff --git a/cmd/ateapi/internal/controlapi/workflow_resume.go b/cmd/ateapi/internal/controlapi/workflow_resume.go index 840a347b7..72414d88a 100644 --- a/cmd/ateapi/internal/controlapi/workflow_resume.go +++ b/cmd/ateapi/internal/controlapi/workflow_resume.go @@ -169,21 +169,18 @@ func (s *LoadActorForResumeStep) Execute(ctx context.Context, input *ResumeInput // If the Actor is in Resuming state, it means a previous attempt crashed after AssignWorkerStep. // We don't need to repeat the AssignWorkerStep, load the Worker now. if actor.Status == ateapipb.Actor_STATUS_RESUMING { - allPopulated := actor.AteomPodUid != "" && actor.WorkerPoolName != "" && actor.AteomPodName != "" - if !allPopulated { - slog.ErrorContext(ctx, "expected all of AteomPodUid, WorkerPoolName and AteomPodName to be populated, found", - slog.String("AteomPodUid", actor.AteomPodUid), - slog.String("WorkerPoolName", actor.WorkerPoolName), - slog.String("AteomPodName", actor.AteomPodName)) - - // Crash the actor if its worker assignment is corrupted. We should never be in this state. + assignment := actor.GetWorkerAssignment() + if assignment == nil { + slog.ErrorContext(ctx, "expected a worker assignment on a RESUMING actor, found none") + + // Crash the actor if its worker assignment is missing. We should never be in this state. if cerr := crashActor(ctx, s.store, input.ActorRef); cerr != nil { return cerr } return status.Errorf(codes.Aborted, "actor %s crashed", input.ActorRef) } - wk, err := s.store.GetWorker(ctx, actor.AteomPodNamespace, actor.WorkerPoolName, actor.AteomPodName) + wk, err := s.store.GetWorker(ctx, assignment.GetWorkerNamespace(), assignment.GetWorkerPool(), assignment.GetWorkerPod()) if err != nil { // Crash the actor if it was assigned to a deleted pod. if errors.Is(err, store.ErrNotFound) { @@ -376,11 +373,7 @@ func (s *AssignWorkerStep) Execute(ctx context.Context, input *ResumeInput, stat } state.Actor.Status = ateapipb.Actor_STATUS_RESUMING - state.Actor.AteomPodNamespace = assignedWorker.GetWorkerNamespace() - state.Actor.AteomPodName = assignedWorker.GetWorkerPod() - state.Actor.AteomPodIp = assignedWorker.GetIp() - state.Actor.AteomPodUid = assignedWorker.GetWorkerPodUid() - state.Actor.WorkerPoolName = assignedWorker.GetWorkerPool() + state.Actor.WorkerAssignment = workerAssignmentFrom(assignedWorker) updatedActor, err := s.store.UpdateActor(ctx, state.Actor, state.Actor.GetMetadata().GetVersion()) if err != nil { @@ -409,6 +402,16 @@ func (s *AssignWorkerStep) Execute(ctx context.Context, input *ResumeInput, stat return nil } +func workerAssignmentFrom(w *ateapipb.Worker) *ateapipb.WorkerAssignment { + return &ateapipb.WorkerAssignment{ + WorkerNamespace: w.GetWorkerNamespace(), + WorkerPool: w.GetWorkerPool(), + WorkerPod: w.GetWorkerPod(), + WorkerPodUid: w.GetWorkerPodUid(), + WorkerPodIp: w.GetIp(), + } +} + func schedulingConstraints(actor *ateapipb.Actor, tmpl *atev1alpha1.ActorTemplate) (scheduling.Constraints, error) { c := scheduling.Constraints{ SandboxClass: string(tmpl.Spec.SandboxClass), @@ -450,11 +453,12 @@ func (s *AttachVolumesStep) CheckPrerequisite(ctx context.Context, input *Resume } func (s *AttachVolumesStep) Execute(ctx context.Context, input *ResumeInput, state *ResumeState) error { - if state.Actor.GetAteomPodNamespace() == "" { + assignment := state.Actor.GetWorkerAssignment() + if assignment == nil { return fmt.Errorf("actor has no assigned worker pod") } - worker, err := s.store.GetWorker(ctx, state.Actor.GetAteomPodNamespace(), state.Actor.GetWorkerPoolName(), state.Actor.GetAteomPodName()) + worker, err := s.store.GetWorker(ctx, assignment.GetWorkerNamespace(), assignment.GetWorkerPool(), assignment.GetWorkerPod()) if err != nil { return fmt.Errorf("failed to get worker for volume attachment: %w", err) } @@ -532,7 +536,8 @@ func (s *CallAteletRestoreStep) CheckPrerequisite(ctx context.Context, input *Re return nil } func (s *CallAteletRestoreStep) Execute(ctx context.Context, input *ResumeInput, state *ResumeState) error { - ateletConn, err := s.dialer.DialForWorker(state.Actor.GetAteomPodNamespace(), state.Actor.GetAteomPodName()) + assignment := state.Actor.GetWorkerAssignment() + ateletConn, err := s.dialer.DialForWorker(assignment.GetWorkerNamespace(), assignment.GetWorkerPod()) if err != nil { return err } @@ -548,7 +553,7 @@ func (s *CallAteletRestoreStep) Execute(ctx context.Context, input *ResumeInput, state.SnapshotKind = ateattr.SnapshotKindLocal req := &ateletpb.RestoreRequest{ - TargetAteomUid: state.Actor.GetAteomPodUid(), + TargetAteomUid: assignment.GetWorkerPodUid(), Atespace: state.Actor.GetMetadata().GetAtespace(), ActorName: state.Actor.GetMetadata().GetName(), ActorTemplateNamespace: state.Actor.GetActorTemplateNamespace(), @@ -591,7 +596,7 @@ func (s *CallAteletRestoreStep) Execute(ctx context.Context, input *ResumeInput, scope = ateletpb.SnapshotScope_SNAPSHOT_SCOPE_DATA_ON_GOLDEN } req := &ateletpb.RestoreRequest{ - TargetAteomUid: state.Actor.GetAteomPodUid(), + TargetAteomUid: assignment.GetWorkerPodUid(), Atespace: state.Actor.GetMetadata().GetAtespace(), ActorName: state.Actor.GetMetadata().GetName(), ActorTemplateNamespace: state.Actor.GetActorTemplateNamespace(), @@ -617,13 +622,13 @@ func (s *CallAteletRestoreStep) Execute(ctx context.Context, input *ResumeInput, // Booting from scratch: resolve the sandbox binaries from the pool's // SandboxConfig and send them so atelet can fetch and record them. // (Restores above are self-describing via the snapshot manifest.) - sandboxAssets, err := resolveSandboxAssets(s.workerPoolLister, s.sandboxConfigLister, state.Actor.GetAteomPodNamespace(), state.Actor.GetWorkerPoolName()) + sandboxAssets, err := resolveSandboxAssets(s.workerPoolLister, s.sandboxConfigLister, assignment.GetWorkerNamespace(), assignment.GetWorkerPool()) if err != nil { return fmt.Errorf("while resolving sandbox assets: %w", err) } req := &ateletpb.RunRequest{ - TargetAteomUid: state.Actor.GetAteomPodUid(), + TargetAteomUid: assignment.GetWorkerPodUid(), Atespace: state.Actor.GetMetadata().GetAtespace(), ActorName: state.Actor.GetMetadata().GetName(), ActorTemplateNamespace: state.Actor.GetActorTemplateNamespace(), diff --git a/cmd/ateapi/internal/controlapi/workflow_resume_test.go b/cmd/ateapi/internal/controlapi/workflow_resume_test.go index ed25f5895..c4c2d26d7 100644 --- a/cmd/ateapi/internal/controlapi/workflow_resume_test.go +++ b/cmd/ateapi/internal/controlapi/workflow_resume_test.go @@ -295,8 +295,8 @@ func TestAssignWorkerStep_RetryAfterConflictPicksFreshWorker(t *testing.T) { if storedActor.GetStatus() != ateapipb.Actor_STATUS_RESUMING { t.Errorf("stored actor status = %v, want %v", storedActor.GetStatus(), ateapipb.Actor_STATUS_RESUMING) } - if got := storedActor.GetAteomPodName(); got != "fallback-pod" { - t.Errorf("stored actor AteomPodName = %q, want %q", got, "fallback-pod") + if got := storedActor.GetWorkerAssignment().GetWorkerPod(); got != "fallback-pod" { + t.Errorf("stored actor WorkerAssignment.WorkerPod = %q, want %q", got, "fallback-pod") } } @@ -469,11 +469,13 @@ func TestResumeActorWorkflow_RejectedAndIdempotentPaths(t *testing.T) { w := newTestActorWorkflow(t, st, "ns", "tmpl1") seedWorkflowActor(t, ctx, st, resources.ActorRef{Atespace: "team-a", Name: "id1"}, "ns", "tmpl1", tc.seedStatus, func(a *ateapipb.Actor) { - a.AteomPodNamespace = "wns" - a.AteomPodName = "wpod" - a.AteomPodIp = "1.2.3.4" - a.AteomPodUid = "uid" - a.WorkerPoolName = "pool1" + a.WorkerAssignment = &ateapipb.WorkerAssignment{ + WorkerNamespace: "wns", + WorkerPool: "pool1", + WorkerPod: "wpod", + WorkerPodUid: "uid", + WorkerPodIp: "1.2.3.4", + } }) actor, resumed, err := w.ResumeActor(ctx, resources.ActorRef{Atespace: "team-a", Name: "id1"}, false) @@ -601,10 +603,12 @@ func TestResumeActor_MetricSkipsAlreadyRunningNoop(t *testing.T) { w.instruments = inst seedWorkflowActor(t, ctx, st, resources.ActorRef{Atespace: "team-a", Name: "id1"}, "ns", "tmpl1", tt.seedStatus, func(a *ateapipb.Actor) { - a.AteomPodNamespace = "wns" - a.AteomPodName = "wpod" - a.AteomPodUid = "uid" - a.WorkerPoolName = "pool1" + a.WorkerAssignment = &ateapipb.WorkerAssignment{ + WorkerNamespace: "wns", + WorkerPool: "pool1", + WorkerPod: "wpod", + WorkerPodUid: "uid", + } }) _, _, err := w.ResumeActor(ctx, resources.ActorRef{Atespace: "team-a", Name: "id1"}, false) @@ -623,17 +627,19 @@ func TestResumeActor_MetricSkipsAlreadyRunningNoop(t *testing.T) { } } -// TestResumeActor_CrashesOnCorruptWorkerAssignment verifies that a RESUMING -// actor with only some of its worker assignment fields populated is moved to -// CRASHED by LoadActorForResumeStep and the resume fails with Aborted. -func TestResumeActor_CrashesOnCorruptWorkerAssignment(t *testing.T) { +// TestResumeActor_CrashesOnMissingWorkerAssignment verifies that a RESUMING +// actor with no worker assignment is moved to CRASHED by +// LoadActorForResumeStep and the resume fails with Aborted. A RESUMING actor +// always has a worker assigned, so reaching this state means the record is +// corrupt and the actor cannot be recovered. +func TestResumeActor_CrashesOnMissingWorkerAssignment(t *testing.T) { ctx := context.Background() st, cleanup := storetest.SetupTestStore(t) defer cleanup() w := newTestActorWorkflow(t, st, "ns", "tmpl1") seedWorkflowActor(t, ctx, st, resources.ActorRef{Atespace: "team-a", Name: "id1"}, "ns", "tmpl1", ateapipb.Actor_STATUS_RESUMING, func(a *ateapipb.Actor) { - a.AteomPodName = "worker-1" // AteomPodUid and WorkerPoolName left empty + a.WorkerAssignment = nil // RESUMING without a worker: corrupt record }) _, _, err := w.ResumeActor(ctx, resources.ActorRef{Atespace: "team-a", Name: "id1"}, false) diff --git a/cmd/ateapi/internal/controlapi/workflow_suspend.go b/cmd/ateapi/internal/controlapi/workflow_suspend.go index 54d31d68b..42d84eabc 100644 --- a/cmd/ateapi/internal/controlapi/workflow_suspend.go +++ b/cmd/ateapi/internal/controlapi/workflow_suspend.go @@ -137,7 +137,7 @@ func (s *CallAteletSuspendStep) CheckPrerequisite(ctx context.Context, input *Su if state.Actor.GetStatus() != ateapipb.Actor_STATUS_SUSPENDING { return status.Errorf(codes.FailedPrecondition, "CallAteletSuspendStep prerequisite not met for Actor: %s (got: %v, want %s)", input.ActorRef, state.Actor.GetStatus(), ateapipb.Actor_STATUS_SUSPENDING) } - if state.Actor.GetAteomPodNamespace() == "" || state.Actor.GetAteomPodName() == "" { + if state.Actor.GetWorkerAssignment() == nil { if err := crashActor(ctx, s.store, input.ActorRef); err != nil { slog.ErrorContext(ctx, "Failed to crash actor", slog.String("err", err.Error())) } @@ -146,10 +146,11 @@ func (s *CallAteletSuspendStep) CheckPrerequisite(ctx context.Context, input *Su return nil } func (s *CallAteletSuspendStep) Execute(ctx context.Context, input *SuspendInput, state *SuspendState) error { - ateletConn, err := s.dialer.DialForWorker(state.Actor.GetAteomPodNamespace(), state.Actor.GetAteomPodName()) + assignment := state.Actor.GetWorkerAssignment() + ateletConn, err := s.dialer.DialForWorker(assignment.GetWorkerNamespace(), assignment.GetWorkerPod()) if err != nil { if errors.Is(err, ErrWorkerPodNotFound) { - slog.ErrorContext(ctx, "Worker pod gone before checkpoint, crashing actor", "namespace", state.Actor.GetAteomPodNamespace(), "pod", state.Actor.GetAteomPodName(), "in_progress_snapshot", state.Actor.GetInProgressSnapshot()) + slog.ErrorContext(ctx, "Worker pod gone before checkpoint, crashing actor", "namespace", assignment.GetWorkerNamespace(), "pod", assignment.GetWorkerPod(), "in_progress_snapshot", state.Actor.GetInProgressSnapshot()) if err := crashActor(ctx, s.store, input.ActorRef); err != nil { slog.ErrorContext(ctx, "Failed to crash actor", slog.String("err", err.Error())) } @@ -168,7 +169,7 @@ func (s *CallAteletSuspendStep) Execute(ctx context.Context, input *SuspendInput // actor is currently running (recorded on-node at Run/Restore) and pins it // into the snapshot manifest. req := &ateletpb.CheckpointRequest{ - TargetAteomUid: state.Actor.GetAteomPodUid(), + TargetAteomUid: assignment.GetWorkerPodUid(), Atespace: state.Actor.GetMetadata().GetAtespace(), ActorName: state.Actor.GetMetadata().GetName(), ActorTemplateNamespace: state.Actor.GetActorTemplateNamespace(), @@ -198,7 +199,7 @@ func (s *DetachVolumesStep) Name() string { return "DetachVolumes" } func (s *DetachVolumesStep) IsComplete(ctx context.Context, input *SuspendInput, state *SuspendState) (bool, error) { // TODO replace with a proper check on the volumes. - return state.Actor.GetStatus() == ateapipb.Actor_STATUS_SUSPENDED && state.Actor.GetAteomPodNamespace() == "", nil + return state.Actor.GetStatus() == ateapipb.Actor_STATUS_SUSPENDED && state.Actor.GetWorkerAssignment() == nil, nil } func (s *DetachVolumesStep) CheckPrerequisite(ctx context.Context, input *SuspendInput, state *SuspendState) error { @@ -232,13 +233,10 @@ func (s *FinalizeSuspendedStep) Execute(ctx context.Context, input *SuspendInput } // 1. Free the worker (if it hasn't been freed yet) - if latestActor.GetAteomPodNamespace() != "" { - workerNs := latestActor.GetAteomPodNamespace() - workerPod := latestActor.GetAteomPodName() + if assignment := latestActor.GetWorkerAssignment(); assignment != nil { + workerPod := assignment.GetWorkerPod() - workerPool := latestActor.GetWorkerPoolName() - - worker, err := s.store.GetWorker(ctx, workerNs, workerPool, workerPod) + worker, err := s.store.GetWorker(ctx, assignment.GetWorkerNamespace(), assignment.GetWorkerPool(), workerPod) if err != nil { if !errors.Is(err, store.ErrNotFound) { return fmt.Errorf("while getting worker for release: %w", err) @@ -257,7 +255,7 @@ func (s *FinalizeSuspendedStep) Execute(ctx context.Context, input *SuspendInput } } - // 2. Safely clear ActiveWorker now that the worker object in DB is freed + // 2. Clear the actor's assignment, now that the worker is freed latestActor, err = s.store.GetActor(ctx, input.ActorRef) if err != nil { return err @@ -284,10 +282,7 @@ func (s *FinalizeSuspendedStep) Execute(ctx context.Context, input *SuspendInput latestActor.InProgressSnapshot = "" latestActor.InProgressSnapshotSourceActorVersion = 0 } - latestActor.AteomPodNamespace = "" - latestActor.AteomPodName = "" - latestActor.AteomPodIp = "" - latestActor.WorkerPoolName = "" + latestActor.WorkerAssignment = nil latestActor.LocalSnapshotInfo = nil updatedActor, err := s.store.UpdateActor(ctx, latestActor, latestActor.GetMetadata().GetVersion()) if err != nil { diff --git a/cmd/ateapi/internal/controlapi/workflow_suspend_test.go b/cmd/ateapi/internal/controlapi/workflow_suspend_test.go index ef887f0e3..e035606f6 100644 --- a/cmd/ateapi/internal/controlapi/workflow_suspend_test.go +++ b/cmd/ateapi/internal/controlapi/workflow_suspend_test.go @@ -178,7 +178,7 @@ func TestSuspendSteps_CheckPrerequisite(t *testing.T) { // Worker pod fields are populated so CallAteletSuspendStep's // missing-worker crash branch is not taken; this test only // verifies status gating. - err := tc.step.CheckPrerequisite(ctx, &SuspendInput{ActorRef: resources.ActorRef{Name: "id1"}}, &SuspendState{Actor: &ateapipb.Actor{Status: st, AteomPodNamespace: "ns", AteomPodName: "worker-1"}}) + err := tc.step.CheckPrerequisite(ctx, &SuspendInput{ActorRef: resources.ActorRef{Name: "id1"}}, &SuspendState{Actor: &ateapipb.Actor{Status: st, WorkerAssignment: &ateapipb.WorkerAssignment{WorkerNamespace: "ns", WorkerPool: "pool", WorkerPod: "worker-1"}}}) assertPrerequisiteResult(t, st, err, tc.allowed == nil || tc.allowed[st]) } }) @@ -252,11 +252,13 @@ func TestCallAteletSuspendStep_DanglingWorkerDoesNotRecordPhantomSnapshot(t *tes persistence := newTestPersistence(t) actor := &ateapipb.Actor{ - Metadata: &ateapipb.ResourceMetadata{Atespace: "team-a", Name: "actor-1"}, - Status: ateapipb.Actor_STATUS_SUSPENDING, - AteomPodNamespace: "worker-ns", - AteomPodName: "pod-gone", - WorkerPoolName: "pool", + Metadata: &ateapipb.ResourceMetadata{Atespace: "team-a", Name: "actor-1"}, + Status: ateapipb.Actor_STATUS_SUSPENDING, + WorkerAssignment: &ateapipb.WorkerAssignment{ + WorkerNamespace: "worker-ns", + WorkerPool: "pool", + WorkerPod: "pod-gone", + }, InProgressSnapshot: "gs://snapshots/actor-1/never-written", LatestSnapshot: tt.prevSnapshot, } @@ -328,11 +330,13 @@ func TestFinalizeSuspendedStep_ReleasesOnlyOwnWorker(t *testing.T) { } actor := &ateapipb.Actor{ - Metadata: &ateapipb.ResourceMetadata{Atespace: "team-a", Name: "shared"}, - Status: ateapipb.Actor_STATUS_SUSPENDING, - AteomPodNamespace: "worker-ns", - AteomPodName: "pod-1", - WorkerPoolName: "pool", + Metadata: &ateapipb.ResourceMetadata{Atespace: "team-a", Name: "shared"}, + Status: ateapipb.Actor_STATUS_SUSPENDING, + WorkerAssignment: &ateapipb.WorkerAssignment{ + WorkerNamespace: "worker-ns", + WorkerPool: "pool", + WorkerPod: "pod-1", + }, InProgressSnapshot: "snapshot-1", } if _, err := persistence.CreateActor(ctx, actor); err != nil { diff --git a/cmd/atenet/internal/router/extproc.go b/cmd/atenet/internal/router/extproc.go index 96cc22238..df57426d1 100644 --- a/cmd/atenet/internal/router/extproc.go +++ b/cmd/atenet/internal/router/extproc.go @@ -178,7 +178,7 @@ func (s *ExtProcServer) handleRequestHeaders( tmplNs := actor.GetActorTemplateNamespace() tmplName := actor.GetActorTemplateName() - workerIP := actor.GetAteomPodIp() + workerIP := actor.GetWorkerAssignment().GetWorkerPodIp() slog.InfoContext(ctx, "ResumeActor result", slog.Any("actor", actorRef), slog.String("status", actor.GetStatus().String()), diff --git a/cmd/atenet/internal/router/extproc_test.go b/cmd/atenet/internal/router/extproc_test.go index 4c9f12466..5173b40db 100644 --- a/cmd/atenet/internal/router/extproc_test.go +++ b/cmd/atenet/internal/router/extproc_test.go @@ -57,7 +57,7 @@ func TestHandleRequestHeadersDoesNotLogSensitiveData(t *testing.T) { s := NewExtProcServer(50051, &mockClient{ resumeFn: func(ctx context.Context, in *ateapipb.ResumeActorRequest, opts ...grpc.CallOption) (*ateapipb.ResumeActorResponse, error) { - return &ateapipb.ResumeActorResponse{Actor: &ateapipb.Actor{AteomPodIp: "10.0.0.52"}}, nil + return &ateapipb.ResumeActorResponse{Actor: &ateapipb.Actor{WorkerAssignment: &ateapipb.WorkerAssignment{WorkerPodIp: "10.0.0.52"}}}, nil }, }, nil, ParkedRequestConfig{}, nil, false) @@ -159,7 +159,7 @@ func TestExtProcHeadersEvaluation(t *testing.T) { authority: testUUID + ".team-a.actors.resources.substrate.ate.dev", resumeResp: &ateapipb.ResumeActorResponse{ Actor: &ateapipb.Actor{ - AteomPodIp: "invalid-ip", + WorkerAssignment: &ateapipb.WorkerAssignment{WorkerPodIp: "invalid-ip"}, }, }, expectErr: true, @@ -171,7 +171,7 @@ func TestExtProcHeadersEvaluation(t *testing.T) { authority: testUUID + ".team-a.actors.resources.substrate.ate.dev", resumeResp: &ateapipb.ResumeActorResponse{ Actor: &ateapipb.Actor{ - AteomPodIp: "10.0.0.52", + WorkerAssignment: &ateapipb.WorkerAssignment{WorkerPodIp: "10.0.0.52"}, }, }, expectErr: false, @@ -271,7 +271,7 @@ func TestExtProc_ParkingLotFull(t *testing.T) { clientMock := &mockClient{ resumeFn: func(ctx context.Context, in *ateapipb.ResumeActorRequest, opts ...grpc.CallOption) (*ateapipb.ResumeActorResponse, error) { resumeCalled = true - return &ateapipb.ResumeActorResponse{Actor: &ateapipb.Actor{AteomPodIp: "10.0.0.1"}}, nil + return &ateapipb.ResumeActorResponse{Actor: &ateapipb.Actor{WorkerAssignment: &ateapipb.WorkerAssignment{WorkerPodIp: "10.0.0.1"}}}, nil }, } diff --git a/cmd/atenet/internal/router/resumer_test.go b/cmd/atenet/internal/router/resumer_test.go index 9e358b9c5..ed3e0e663 100644 --- a/cmd/atenet/internal/router/resumer_test.go +++ b/cmd/atenet/internal/router/resumer_test.go @@ -54,8 +54,8 @@ func TestActorResumer_ResumeActor(t *testing.T) { resumeCalled++ return &ateapipb.ResumeActorResponse{ Actor: &ateapipb.Actor{ - Status: ateapipb.Actor_STATUS_RUNNING, - AteomPodIp: expectedIP, + Status: ateapipb.Actor_STATUS_RUNNING, + WorkerAssignment: &ateapipb.WorkerAssignment{WorkerPodIp: expectedIP}, }, Resumed: true, }, nil @@ -67,8 +67,8 @@ func TestActorResumer_ResumeActor(t *testing.T) { if err != nil { t.Fatalf("unexpected error: %v", err) } - if actor.GetAteomPodIp() != expectedIP { - t.Errorf("expected IP %q, got %q", expectedIP, actor.GetAteomPodIp()) + if actor.GetWorkerAssignment().GetWorkerPodIp() != expectedIP { + t.Errorf("expected IP %q, got %q", expectedIP, actor.GetWorkerAssignment().GetWorkerPodIp()) } if outcome != ResumeOutcomeTriggered { t.Errorf("expected outcome %q, got %q", ResumeOutcomeTriggered, outcome) @@ -83,9 +83,9 @@ func TestActorResumer_ResumeActor(t *testing.T) { resumeFn: func(ctx context.Context, in *ateapipb.ResumeActorRequest, opts ...grpc.CallOption) (*ateapipb.ResumeActorResponse, error) { return &ateapipb.ResumeActorResponse{ Actor: &ateapipb.Actor{ - Metadata: &ateapipb.ResourceMetadata{Name: testActorName}, - Status: ateapipb.Actor_STATUS_RUNNING, - AteomPodIp: expectedIP, + Metadata: &ateapipb.ResourceMetadata{Name: testActorName}, + Status: ateapipb.Actor_STATUS_RUNNING, + WorkerAssignment: &ateapipb.WorkerAssignment{WorkerPodIp: expectedIP}, }, Resumed: false, }, nil @@ -112,8 +112,8 @@ func TestActorResumer_ResumeActor(t *testing.T) { } return &ateapipb.ResumeActorResponse{ Actor: &ateapipb.Actor{ - Status: ateapipb.Actor_STATUS_RUNNING, - AteomPodIp: expectedIP, + Status: ateapipb.Actor_STATUS_RUNNING, + WorkerAssignment: &ateapipb.WorkerAssignment{WorkerPodIp: expectedIP}, }, Resumed: true, }, nil @@ -125,8 +125,8 @@ func TestActorResumer_ResumeActor(t *testing.T) { if err != nil { t.Fatalf("unexpected error: %v", err) } - if actor.GetAteomPodIp() != expectedIP { - t.Errorf("expected IP %q, got %q", expectedIP, actor.GetAteomPodIp()) + if actor.GetWorkerAssignment().GetWorkerPodIp() != expectedIP { + t.Errorf("expected IP %q, got %q", expectedIP, actor.GetWorkerAssignment().GetWorkerPodIp()) } if outcome != ResumeOutcomeTriggered { t.Errorf("expected outcome %q, got %q", ResumeOutcomeTriggered, outcome) @@ -165,8 +165,8 @@ func TestActorResumer_ResumeActor(t *testing.T) { time.Sleep(20 * time.Millisecond) return &ateapipb.ResumeActorResponse{ Actor: &ateapipb.Actor{ - Status: ateapipb.Actor_STATUS_RUNNING, - AteomPodIp: expectedIP, + Status: ateapipb.Actor_STATUS_RUNNING, + WorkerAssignment: &ateapipb.WorkerAssignment{WorkerPodIp: expectedIP}, }, Resumed: true, }, nil @@ -195,8 +195,8 @@ func TestActorResumer_ResumeActor(t *testing.T) { if errs[i] != nil { t.Fatalf("request %d failed: %v", i, errs[i]) } - if results[i].GetAteomPodIp() != expectedIP { - t.Errorf("request %d expected IP %q, got %q", i, expectedIP, results[i].GetAteomPodIp()) + if results[i].GetWorkerAssignment().GetWorkerPodIp() != expectedIP { + t.Errorf("request %d expected IP %q, got %q", i, expectedIP, results[i].GetWorkerAssignment().GetWorkerPodIp()) } switch outcomes[i] { case ResumeOutcomeTriggered: @@ -243,7 +243,7 @@ func TestActorResumer_Parking(t *testing.T) { return nil, status.Error(codes.FailedPrecondition, "no free workers available") } return &ateapipb.ResumeActorResponse{ - Actor: &ateapipb.Actor{Metadata: &ateapipb.ResourceMetadata{Name: testActorName}, Status: ateapipb.Actor_STATUS_RUNNING, AteomPodIp: expectedIP}, + Actor: &ateapipb.Actor{Metadata: &ateapipb.ResourceMetadata{Name: testActorName}, Status: ateapipb.Actor_STATUS_RUNNING, WorkerAssignment: &ateapipb.WorkerAssignment{WorkerPodIp: expectedIP}}, }, nil }, } @@ -253,8 +253,8 @@ func TestActorResumer_Parking(t *testing.T) { if err != nil { t.Fatalf("unexpected error: %v", err) } - if actor.GetAteomPodIp() != expectedIP { - t.Errorf("expected IP %q, got %q", expectedIP, actor.GetAteomPodIp()) + if actor.GetWorkerAssignment().GetWorkerPodIp() != expectedIP { + t.Errorf("expected IP %q, got %q", expectedIP, actor.GetWorkerAssignment().GetWorkerPodIp()) } mu.Lock() defer mu.Unlock() @@ -309,7 +309,7 @@ func TestActorResumer_Parking(t *testing.T) { return nil, status.Error(codes.Unavailable, "connection refused") } return &ateapipb.ResumeActorResponse{ - Actor: &ateapipb.Actor{Metadata: &ateapipb.ResourceMetadata{Name: testActorName}, Status: ateapipb.Actor_STATUS_RUNNING, AteomPodIp: expectedIP}, + Actor: &ateapipb.Actor{Metadata: &ateapipb.ResourceMetadata{Name: testActorName}, Status: ateapipb.Actor_STATUS_RUNNING, WorkerAssignment: &ateapipb.WorkerAssignment{WorkerPodIp: expectedIP}}, }, nil }, } @@ -319,8 +319,8 @@ func TestActorResumer_Parking(t *testing.T) { if err != nil { t.Fatalf("unexpected error: %v", err) } - if actor.GetAteomPodIp() != expectedIP { - t.Errorf("expected IP %q, got %q", expectedIP, actor.GetAteomPodIp()) + if actor.GetWorkerAssignment().GetWorkerPodIp() != expectedIP { + t.Errorf("expected IP %q, got %q", expectedIP, actor.GetWorkerAssignment().GetWorkerPodIp()) } mu.Lock() defer mu.Unlock() @@ -442,7 +442,7 @@ func TestActorResumer_CallerCancelDoesNotAbortFlight(t *testing.T) { // Hold the flight open until the test releases it. <-proceed return &ateapipb.ResumeActorResponse{ - Actor: &ateapipb.Actor{Metadata: &ateapipb.ResourceMetadata{Name: testActorName}, Status: ateapipb.Actor_STATUS_RUNNING, AteomPodIp: expectedIP}, + Actor: &ateapipb.Actor{Metadata: &ateapipb.ResourceMetadata{Name: testActorName}, Status: ateapipb.Actor_STATUS_RUNNING, WorkerAssignment: &ateapipb.WorkerAssignment{WorkerPodIp: expectedIP}}, }, nil }, } @@ -488,8 +488,8 @@ func TestActorResumer_CallerCancelDoesNotAbortFlight(t *testing.T) { if res.err != nil { t.Fatalf("second caller: unexpected error: %v", res.err) } - if res.actor.GetAteomPodIp() != expectedIP { - t.Errorf("second caller IP = %q, want %q", res.actor.GetAteomPodIp(), expectedIP) + if res.actor.GetWorkerAssignment().GetWorkerPodIp() != expectedIP { + t.Errorf("second caller IP = %q, want %q", res.actor.GetWorkerAssignment().GetWorkerPodIp(), expectedIP) } mu.Lock() defer mu.Unlock() diff --git a/cmd/kubectl-ate/internal/cmd/logs_actors.go b/cmd/kubectl-ate/internal/cmd/logs_actors.go index baadcf775..4b485e2d4 100644 --- a/cmd/kubectl-ate/internal/cmd/logs_actors.go +++ b/cmd/kubectl-ate/internal/cmd/logs_actors.go @@ -115,8 +115,8 @@ func (r *LogsActorRunner) runOneShot(ctx context.Context) error { return fmt.Errorf("failed to get actor: %w", err) } - podName := actor.GetAteomPodName() - namespace := actor.GetAteomPodNamespace() + podName := actor.GetWorkerAssignment().GetWorkerPod() + namespace := actor.GetWorkerAssignment().GetWorkerNamespace() if podName == "" || namespace == "" || actor.GetStatus() != ateapipb.Actor_STATUS_RUNNING { return fmt.Errorf("actor %s is not currently running on any worker pod", r.actorRef) @@ -169,8 +169,8 @@ func (r *LogsActorRunner) runFollow(ctx context.Context) error { } } - podName := actor.GetAteomPodName() - namespace := actor.GetAteomPodNamespace() + podName := actor.GetWorkerAssignment().GetWorkerPod() + namespace := actor.GetWorkerAssignment().GetWorkerNamespace() if podName == "" || namespace == "" || actor.GetStatus() != ateapipb.Actor_STATUS_RUNNING { select { @@ -265,7 +265,7 @@ func (r *LogsActorRunner) startMigrationMonitor( resp, err := r.apiClient.GetActor(ctx, &ateapipb.GetActorRequest{Actor: r.actorRef.ToObjectRef()}) if err == nil { act := resp - if act.GetStatus() != ateapipb.Actor_STATUS_RUNNING || act.GetAteomPodName() != currentPod { + if act.GetStatus() != ateapipb.Actor_STATUS_RUNNING || act.GetWorkerAssignment().GetWorkerPod() != currentPod { // Actor suspended or migrated! Cancel stream context to reconnect. cancel() return diff --git a/cmd/kubectl-ate/internal/cmd/logs_actors_test.go b/cmd/kubectl-ate/internal/cmd/logs_actors_test.go index 75f488396..9bd7acd69 100644 --- a/cmd/kubectl-ate/internal/cmd/logs_actors_test.go +++ b/cmd/kubectl-ate/internal/cmd/logs_actors_test.go @@ -224,10 +224,12 @@ func TestLogsActorRunner_Run_OneShotSuccess(t *testing.T) { return nil, fmt.Errorf("unexpected actor name: %s", in.GetActor().GetName()) } return &ateapipb.Actor{ - Metadata: &ateapipb.ResourceMetadata{Name: actorName}, - AteomPodName: podName, - AteomPodNamespace: namespace, - Status: ateapipb.Actor_STATUS_RUNNING, + Metadata: &ateapipb.ResourceMetadata{Name: actorName}, + WorkerAssignment: &ateapipb.WorkerAssignment{ + WorkerPod: podName, + WorkerNamespace: namespace, + }, + Status: ateapipb.Actor_STATUS_RUNNING, }, nil }, } @@ -338,10 +340,12 @@ func TestLogsActorRunner_Run_Follow_SuspendedToRunning(t *testing.T) { // Subsequent calls: running return &ateapipb.Actor{ - Metadata: &ateapipb.ResourceMetadata{Name: actorName}, - AteomPodName: podName, - AteomPodNamespace: namespace, - Status: ateapipb.Actor_STATUS_RUNNING, + Metadata: &ateapipb.ResourceMetadata{Name: actorName}, + WorkerAssignment: &ateapipb.WorkerAssignment{ + WorkerPod: podName, + WorkerNamespace: namespace, + }, + Status: ateapipb.Actor_STATUS_RUNNING, }, nil }, } @@ -465,10 +469,12 @@ func TestLogsActorRunner_Run_Follow_ActorMigration(t *testing.T) { if getActorCalls == 1 { // 1. Initial call for stream 1: pod-1 return &ateapipb.Actor{ - Metadata: &ateapipb.ResourceMetadata{Name: actorName}, - AteomPodName: "pod-1", - AteomPodNamespace: "ns", - Status: ateapipb.Actor_STATUS_RUNNING, + Metadata: &ateapipb.ResourceMetadata{Name: actorName}, + WorkerAssignment: &ateapipb.WorkerAssignment{ + WorkerPod: "pod-1", + WorkerNamespace: "ns", + }, + Status: ateapipb.Actor_STATUS_RUNNING, }, nil } @@ -481,10 +487,12 @@ func TestLogsActorRunner_Run_Follow_ActorMigration(t *testing.T) { } return &ateapipb.Actor{ - Metadata: &ateapipb.ResourceMetadata{Name: actorName}, - AteomPodName: "pod-2", - AteomPodNamespace: "ns", - Status: ateapipb.Actor_STATUS_RUNNING, + Metadata: &ateapipb.ResourceMetadata{Name: actorName}, + WorkerAssignment: &ateapipb.WorkerAssignment{ + WorkerPod: "pod-2", + WorkerNamespace: "ns", + }, + Status: ateapipb.Actor_STATUS_RUNNING, }, nil }, } @@ -575,10 +583,12 @@ func TestLogsActorRunner_Run_Follow_ActorSuspendedMidStream(t *testing.T) { // 1. Initial call: running on pod-1 if getActorCalls == 1 { return &ateapipb.Actor{ - Metadata: &ateapipb.ResourceMetadata{Name: actorName}, - AteomPodName: "pod-1", - AteomPodNamespace: "ns", - Status: ateapipb.Actor_STATUS_RUNNING, + Metadata: &ateapipb.ResourceMetadata{Name: actorName}, + WorkerAssignment: &ateapipb.WorkerAssignment{ + WorkerPod: "pod-1", + WorkerNamespace: "ns", + }, + Status: ateapipb.Actor_STATUS_RUNNING, }, nil } @@ -606,10 +616,12 @@ func TestLogsActorRunner_Run_Follow_ActorSuspendedMidStream(t *testing.T) { // 4. Subsequent loop reconnection call: running again on pod-1 return &ateapipb.Actor{ - Metadata: &ateapipb.ResourceMetadata{Name: actorName}, - AteomPodName: "pod-1", - AteomPodNamespace: "ns", - Status: ateapipb.Actor_STATUS_RUNNING, + Metadata: &ateapipb.ResourceMetadata{Name: actorName}, + WorkerAssignment: &ateapipb.WorkerAssignment{ + WorkerPod: "pod-1", + WorkerNamespace: "ns", + }, + Status: ateapipb.Actor_STATUS_RUNNING, }, nil }, } diff --git a/cmd/kubectl-ate/internal/printer/printer.go b/cmd/kubectl-ate/internal/printer/printer.go index 6c728e2e8..8a5fb7a12 100644 --- a/cmd/kubectl-ate/internal/printer/printer.go +++ b/cmd/kubectl-ate/internal/printer/printer.go @@ -77,14 +77,15 @@ func PrintActorsTo(out io.Writer, actors []*ateapipb.Actor, format string) error template := actor.GetActorTemplateNamespace() + "/" + actor.GetActorTemplateName() status := actor.GetStatus().String() + assignment := actor.GetWorkerAssignment() worker := "" - if actor.GetAteomPodNamespace() != "" { - worker = actor.GetAteomPodNamespace() + "/" + actor.GetAteomPodName() + if assignment != nil { + worker = assignment.GetWorkerNamespace() + "/" + assignment.GetWorkerPod() } version := actor.GetMetadata().GetVersion() age := formatAge(actor.GetMetadata().GetCreateTime()) - fmt.Fprintf(w, "%s\t%s\t%s\t%s\t%s\t%s\t%d\t%s\n", atespace, name, template, status, worker, actor.GetAteomPodIp(), version, age) + fmt.Fprintf(w, "%s\t%s\t%s\t%s\t%s\t%s\t%d\t%s\n", atespace, name, template, status, worker, assignment.GetWorkerPodIp(), version, age) } return w.Flush() default: diff --git a/cmd/kubectl-ate/internal/printer/printer_test.go b/cmd/kubectl-ate/internal/printer/printer_test.go index 936fbe716..173f6eb68 100644 --- a/cmd/kubectl-ate/internal/printer/printer_test.go +++ b/cmd/kubectl-ate/internal/printer/printer_test.go @@ -69,9 +69,11 @@ func TestPrintActorsTo_Table(t *testing.T) { ActorTemplateNamespace: "default", ActorTemplateName: "template-1", Status: ateapipb.Actor_STATUS_RUNNING, - AteomPodNamespace: "worker-ns", - AteomPodName: "pod-1", - AteomPodIp: "1.2.3.4", + WorkerAssignment: &ateapipb.WorkerAssignment{ + WorkerNamespace: "worker-ns", + WorkerPod: "pod-1", + WorkerPodIp: "1.2.3.4", + }, }, } diff --git a/docs/api-guide.md b/docs/api-guide.md index aadd944a2..19089e06c 100644 --- a/docs/api-guide.md +++ b/docs/api-guide.md @@ -269,7 +269,7 @@ Activates a suspended actor by restoring it onto a physical worker. * **Request:** `ResumeActorRequest` * `actor`: `ObjectRef` of the actor to resume. * `boot`: (Optional) If `true`, bypasses snapshots and performs a cold boot. -* **Response:** `ResumeActorResponse` containing the updated `Actor` object (including the physical `ateom_pod_ip`). +* **Response:** `ResumeActorResponse` containing the updated `Actor` object (including the physical worker placement in `worker_assignment`). #### `SuspendActor` Hibernate a running actor, capturing its current RAM and disk state into a snapshot. diff --git a/internal/e2e/suites/demo/demo_test.go b/internal/e2e/suites/demo/demo_test.go index d707eb485..dcb910688 100644 --- a/internal/e2e/suites/demo/demo_test.go +++ b/internal/e2e/suites/demo/demo_test.go @@ -1183,8 +1183,8 @@ func TestWorkerPodDeletion(t *testing.T) { t.Fatalf("failed to get Actor: %v", err) } - podName := actor.GetAteomPodName() - podNamespace := actor.GetAteomPodNamespace() + podName := actor.GetWorkerAssignment().GetWorkerPod() + podNamespace := actor.GetWorkerAssignment().GetWorkerNamespace() if podName == "" || podNamespace == "" { t.Fatalf("actor is running but pod details are missing: podName=%q, podNamespace=%q", podName, podNamespace) } diff --git a/internal/e2e/suites/networking/networking_test.go b/internal/e2e/suites/networking/networking_test.go index 5f3c16866..f80b4a250 100644 --- a/internal/e2e/suites/networking/networking_test.go +++ b/internal/e2e/suites/networking/networking_test.go @@ -97,7 +97,7 @@ func mustRouterClient(t *testing.T, ctx context.Context) *e2e.RouterClient { func assertDirectActorAccess(t *testing.T, ctx context.Context, clients *e2e.Clients, actor *ateapipb.Actor) { t.Helper() - if actor.GetAteomPodNamespace() == "" || actor.GetAteomPodName() == "" { + if actor.GetWorkerAssignment().GetWorkerNamespace() == "" || actor.GetWorkerAssignment().GetWorkerPod() == "" { t.Fatalf("resumed Actor has no worker pod assignment: %+v", actor) } @@ -106,16 +106,16 @@ func assertDirectActorAccess(t *testing.T, ctx context.Context, clients *e2e.Cli // verifies that the old direct path remains unavailable without relying on // the test runner having a route to the pod CIDR. result := clients.K8s.CoreV1().RESTClient().Get(). - Namespace(actor.GetAteomPodNamespace()). + Namespace(actor.GetWorkerAssignment().GetWorkerNamespace()). Resource("pods"). - Name(actor.GetAteomPodName() + ":80"). + Name(actor.GetWorkerAssignment().GetWorkerPod() + ":80"). SubResource("proxy"). Suffix("readyz"). Do(ctx) body, err := result.Raw() if err == nil { - t.Fatalf("direct Actor access through %s/%s:80 unexpectedly succeeded; body: %s", actor.GetAteomPodNamespace(), actor.GetAteomPodName(), body) + t.Fatalf("direct Actor access through %s/%s:80 unexpectedly succeeded; body: %s", actor.GetWorkerAssignment().GetWorkerNamespace(), actor.GetWorkerAssignment().GetWorkerPod(), body) } - t.Logf("direct Actor access through %s/%s:80 was blocked as expected: %v", actor.GetAteomPodNamespace(), actor.GetAteomPodName(), err) + t.Logf("direct Actor access through %s/%s:80 was blocked as expected: %v", actor.GetWorkerAssignment().GetWorkerNamespace(), actor.GetWorkerAssignment().GetWorkerPod(), err) } diff --git a/pkg/proto/ateapipb/ateapi.pb.go b/pkg/proto/ateapipb/ateapi.pb.go index 557dad7da..19798b220 100644 --- a/pkg/proto/ateapipb/ateapi.pb.go +++ b/pkg/proto/ateapipb/ateapi.pb.go @@ -305,7 +305,7 @@ func (x Worker_State) Number() protoreflect.EnumNumber { // Deprecated: Use Worker_State.Descriptor instead. func (Worker_State) EnumDescriptor() ([]byte, []int) { - return file_ateapi_proto_rawDescGZIP(), []int{36, 0} + return file_ateapi_proto_rawDescGZIP(), []int{37, 0} } type LocalSnapshotInfo struct { @@ -580,32 +580,24 @@ type Actor struct { ActorTemplateNamespace string `protobuf:"bytes,2,opt,name=actor_template_namespace,json=actorTemplateNamespace,proto3" json:"actor_template_namespace,omitempty"` ActorTemplateName string `protobuf:"bytes,3,opt,name=actor_template_name,json=actorTemplateName,proto3" json:"actor_template_name,omitempty"` Status Actor_Status `protobuf:"varint,4,opt,name=status,proto3,enum=ateapi.Actor_Status" json:"status,omitempty"` - AteomPodNamespace string `protobuf:"bytes,5,opt,name=ateom_pod_namespace,json=ateomPodNamespace,proto3" json:"ateom_pod_namespace,omitempty"` - AteomPodName string `protobuf:"bytes,6,opt,name=ateom_pod_name,json=ateomPodName,proto3" json:"ateom_pod_name,omitempty"` - AteomPodIp string `protobuf:"bytes,7,opt,name=ateom_pod_ip,json=ateomPodIp,proto3" json:"ateom_pod_ip,omitempty"` - InProgressSnapshot string `protobuf:"bytes,8,opt,name=in_progress_snapshot,json=inProgressSnapshot,proto3" json:"in_progress_snapshot,omitempty"` - AteomPodUid string `protobuf:"bytes,9,opt,name=ateom_pod_uid,json=ateomPodUid,proto3" json:"ateom_pod_uid,omitempty"` + // worker_assignment points at the worker currently hosting this Actor. + // Unset whenever the Actor has no worker (SUSPENDED, PAUSED, CRASHED). + WorkerAssignment *WorkerAssignment `protobuf:"bytes,5,opt,name=worker_assignment,json=workerAssignment,proto3" json:"worker_assignment,omitempty"` + InProgressSnapshot string `protobuf:"bytes,6,opt,name=in_progress_snapshot,json=inProgressSnapshot,proto3" json:"in_progress_snapshot,omitempty"` // worker_selector is the per-actor placement constraint. The scheduler // evaluates the AND of this selector and the template's workerSelector to // find eligible pools. Set at CreateActor; may be updated at any time via // UpdateActor. Changes take effect on the next ResumeActor call. - WorkerSelector *Selector `protobuf:"bytes,11,opt,name=worker_selector,json=workerSelector,proto3" json:"worker_selector,omitempty"` - // worker_pool_name is the name of the WorkerPool that owns the currently - // assigned worker, in the same namespace as ateom_pod_namespace (pool and - // pod namespaces always match). Set by the scheduler at assignment time - // and cleared when the worker is freed. Needed to release the worker on - // suspend/pause since eligibility is no longer a single fixed pool - // reference on the ActorTemplate. - WorkerPoolName string `protobuf:"bytes,12,opt,name=worker_pool_name,json=workerPoolName,proto3" json:"worker_pool_name,omitempty"` + WorkerSelector *Selector `protobuf:"bytes,7,opt,name=worker_selector,json=workerSelector,proto3" json:"worker_selector,omitempty"` // The latest durable snapshot created for this Actor. - LatestSnapshot *ObjectRef `protobuf:"bytes,14,opt,name=latest_snapshot,json=latestSnapshot,proto3" json:"latest_snapshot,omitempty"` + LatestSnapshot *ObjectRef `protobuf:"bytes,8,opt,name=latest_snapshot,json=latestSnapshot,proto3" json:"latest_snapshot,omitempty"` // Node-local state used only while the Actor is paused. - LocalSnapshotInfo *LocalSnapshotInfo `protobuf:"bytes,15,opt,name=local_snapshot_info,json=localSnapshotInfo,proto3" json:"local_snapshot_info,omitempty"` + LocalSnapshotInfo *LocalSnapshotInfo `protobuf:"bytes,9,opt,name=local_snapshot_info,json=localSnapshotInfo,proto3" json:"local_snapshot_info,omitempty"` // Actor version captured when the current durable snapshot began. - InProgressSnapshotSourceActorVersion int64 `protobuf:"varint,16,opt,name=in_progress_snapshot_source_actor_version,json=inProgressSnapshotSourceActorVersion,proto3" json:"in_progress_snapshot_source_actor_version,omitempty"` + InProgressSnapshotSourceActorVersion int64 `protobuf:"varint,10,opt,name=in_progress_snapshot_source_actor_version,json=inProgressSnapshotSourceActorVersion,proto3" json:"in_progress_snapshot_source_actor_version,omitempty"` // Volumes attached to the actor. These volumes only live as long as the actor. // They are deleted when the actor is deleted. - ActorVolumes []*ExternalVolume `protobuf:"bytes,13,rep,name=actor_volumes,json=actorVolumes,proto3" json:"actor_volumes,omitempty"` + ActorVolumes []*ExternalVolume `protobuf:"bytes,11,rep,name=actor_volumes,json=actorVolumes,proto3" json:"actor_volumes,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -668,81 +660,135 @@ func (x *Actor) GetStatus() Actor_Status { return Actor_STATUS_UNSPECIFIED } -func (x *Actor) GetAteomPodNamespace() string { +func (x *Actor) GetWorkerAssignment() *WorkerAssignment { if x != nil { - return x.AteomPodNamespace + return x.WorkerAssignment } - return "" + return nil } -func (x *Actor) GetAteomPodName() string { +func (x *Actor) GetInProgressSnapshot() string { if x != nil { - return x.AteomPodName + return x.InProgressSnapshot } return "" } -func (x *Actor) GetAteomPodIp() string { +func (x *Actor) GetWorkerSelector() *Selector { if x != nil { - return x.AteomPodIp + return x.WorkerSelector } - return "" + return nil } -func (x *Actor) GetInProgressSnapshot() string { +func (x *Actor) GetLatestSnapshot() *ObjectRef { if x != nil { - return x.InProgressSnapshot + return x.LatestSnapshot } - return "" + return nil } -func (x *Actor) GetAteomPodUid() string { +func (x *Actor) GetLocalSnapshotInfo() *LocalSnapshotInfo { if x != nil { - return x.AteomPodUid + return x.LocalSnapshotInfo } - return "" + return nil } -func (x *Actor) GetWorkerSelector() *Selector { +func (x *Actor) GetInProgressSnapshotSourceActorVersion() int64 { if x != nil { - return x.WorkerSelector + return x.InProgressSnapshotSourceActorVersion + } + return 0 +} + +func (x *Actor) GetActorVolumes() []*ExternalVolume { + if x != nil { + return x.ActorVolumes } return nil } -func (x *Actor) GetWorkerPoolName() string { +// WorkerAssignment identifies the Worker currently hosting an Actor. +type WorkerAssignment struct { + state protoimpl.MessageState `protogen:"open.v1"` + // worker_namespace is the Kubernetes namespace of the WorkerPool and worker Pod. + WorkerNamespace string `protobuf:"bytes,1,opt,name=worker_namespace,json=workerNamespace,proto3" json:"worker_namespace,omitempty"` + // worker_pool is the name of the WorkerPool the worker belongs to. + WorkerPool string `protobuf:"bytes,2,opt,name=worker_pool,json=workerPool,proto3" json:"worker_pool,omitempty"` + // worker_pod is the name of the Kubernetes pod hosting the Actor. + WorkerPod string `protobuf:"bytes,3,opt,name=worker_pod,json=workerPod,proto3" json:"worker_pod,omitempty"` + // worker_pod_uid is the Kubernetes UID of worker_pod. + WorkerPodUid string `protobuf:"bytes,4,opt,name=worker_pod_uid,json=workerPodUid,proto3" json:"worker_pod_uid,omitempty"` + // worker_pod_ip is the IP of worker_pod. + WorkerPodIp string `protobuf:"bytes,5,opt,name=worker_pod_ip,json=workerPodIp,proto3" json:"worker_pod_ip,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *WorkerAssignment) Reset() { + *x = WorkerAssignment{} + mi := &file_ateapi_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *WorkerAssignment) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WorkerAssignment) ProtoMessage() {} + +func (x *WorkerAssignment) ProtoReflect() protoreflect.Message { + mi := &file_ateapi_proto_msgTypes[5] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WorkerAssignment.ProtoReflect.Descriptor instead. +func (*WorkerAssignment) Descriptor() ([]byte, []int) { + return file_ateapi_proto_rawDescGZIP(), []int{5} +} + +func (x *WorkerAssignment) GetWorkerNamespace() string { if x != nil { - return x.WorkerPoolName + return x.WorkerNamespace } return "" } -func (x *Actor) GetLatestSnapshot() *ObjectRef { +func (x *WorkerAssignment) GetWorkerPool() string { if x != nil { - return x.LatestSnapshot + return x.WorkerPool } - return nil + return "" } -func (x *Actor) GetLocalSnapshotInfo() *LocalSnapshotInfo { +func (x *WorkerAssignment) GetWorkerPod() string { if x != nil { - return x.LocalSnapshotInfo + return x.WorkerPod } - return nil + return "" } -func (x *Actor) GetInProgressSnapshotSourceActorVersion() int64 { +func (x *WorkerAssignment) GetWorkerPodUid() string { if x != nil { - return x.InProgressSnapshotSourceActorVersion + return x.WorkerPodUid } - return 0 + return "" } -func (x *Actor) GetActorVolumes() []*ExternalVolume { +func (x *WorkerAssignment) GetWorkerPodIp() string { if x != nil { - return x.ActorVolumes + return x.WorkerPodIp } - return nil + return "" } // ActorSnapshot is an independently addressable durable Actor snapshot. Its @@ -764,7 +810,7 @@ type ActorSnapshot struct { func (x *ActorSnapshot) Reset() { *x = ActorSnapshot{} - mi := &file_ateapi_proto_msgTypes[5] + mi := &file_ateapi_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -776,7 +822,7 @@ func (x *ActorSnapshot) String() string { func (*ActorSnapshot) ProtoMessage() {} func (x *ActorSnapshot) ProtoReflect() protoreflect.Message { - mi := &file_ateapi_proto_msgTypes[5] + mi := &file_ateapi_proto_msgTypes[6] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -789,7 +835,7 @@ func (x *ActorSnapshot) ProtoReflect() protoreflect.Message { // Deprecated: Use ActorSnapshot.ProtoReflect.Descriptor instead. func (*ActorSnapshot) Descriptor() ([]byte, []int) { - return file_ateapi_proto_rawDescGZIP(), []int{5} + return file_ateapi_proto_rawDescGZIP(), []int{6} } func (x *ActorSnapshot) GetMetadata() *ResourceMetadata { @@ -861,7 +907,7 @@ type ActorSnapshotTag struct { func (x *ActorSnapshotTag) Reset() { *x = ActorSnapshotTag{} - mi := &file_ateapi_proto_msgTypes[6] + mi := &file_ateapi_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -873,7 +919,7 @@ func (x *ActorSnapshotTag) String() string { func (*ActorSnapshotTag) ProtoMessage() {} func (x *ActorSnapshotTag) ProtoReflect() protoreflect.Message { - mi := &file_ateapi_proto_msgTypes[6] + mi := &file_ateapi_proto_msgTypes[7] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -886,7 +932,7 @@ func (x *ActorSnapshotTag) ProtoReflect() protoreflect.Message { // Deprecated: Use ActorSnapshotTag.ProtoReflect.Descriptor instead. func (*ActorSnapshotTag) Descriptor() ([]byte, []int) { - return file_ateapi_proto_rawDescGZIP(), []int{6} + return file_ateapi_proto_rawDescGZIP(), []int{7} } func (x *ActorSnapshotTag) GetMetadata() *ResourceMetadata { @@ -922,7 +968,7 @@ type Atespace struct { func (x *Atespace) Reset() { *x = Atespace{} - mi := &file_ateapi_proto_msgTypes[7] + mi := &file_ateapi_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -934,7 +980,7 @@ func (x *Atespace) String() string { func (*Atespace) ProtoMessage() {} func (x *Atespace) ProtoReflect() protoreflect.Message { - mi := &file_ateapi_proto_msgTypes[7] + mi := &file_ateapi_proto_msgTypes[8] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -947,7 +993,7 @@ func (x *Atespace) ProtoReflect() protoreflect.Message { // Deprecated: Use Atespace.ProtoReflect.Descriptor instead. func (*Atespace) Descriptor() ([]byte, []int) { - return file_ateapi_proto_rawDescGZIP(), []int{7} + return file_ateapi_proto_rawDescGZIP(), []int{8} } func (x *Atespace) GetMetadata() *ResourceMetadata { @@ -971,7 +1017,7 @@ type ObjectRef struct { func (x *ObjectRef) Reset() { *x = ObjectRef{} - mi := &file_ateapi_proto_msgTypes[8] + mi := &file_ateapi_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -983,7 +1029,7 @@ func (x *ObjectRef) String() string { func (*ObjectRef) ProtoMessage() {} func (x *ObjectRef) ProtoReflect() protoreflect.Message { - mi := &file_ateapi_proto_msgTypes[8] + mi := &file_ateapi_proto_msgTypes[9] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -996,7 +1042,7 @@ func (x *ObjectRef) ProtoReflect() protoreflect.Message { // Deprecated: Use ObjectRef.ProtoReflect.Descriptor instead. func (*ObjectRef) Descriptor() ([]byte, []int) { - return file_ateapi_proto_rawDescGZIP(), []int{8} + return file_ateapi_proto_rawDescGZIP(), []int{9} } func (x *ObjectRef) GetAtespace() string { @@ -1028,7 +1074,7 @@ type ActorSnapshotRef struct { func (x *ActorSnapshotRef) Reset() { *x = ActorSnapshotRef{} - mi := &file_ateapi_proto_msgTypes[9] + mi := &file_ateapi_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1040,7 +1086,7 @@ func (x *ActorSnapshotRef) String() string { func (*ActorSnapshotRef) ProtoMessage() {} func (x *ActorSnapshotRef) ProtoReflect() protoreflect.Message { - mi := &file_ateapi_proto_msgTypes[9] + mi := &file_ateapi_proto_msgTypes[10] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1053,7 +1099,7 @@ func (x *ActorSnapshotRef) ProtoReflect() protoreflect.Message { // Deprecated: Use ActorSnapshotRef.ProtoReflect.Descriptor instead. func (*ActorSnapshotRef) Descriptor() ([]byte, []int) { - return file_ateapi_proto_rawDescGZIP(), []int{9} + return file_ateapi_proto_rawDescGZIP(), []int{10} } func (x *ActorSnapshotRef) GetReference() isActorSnapshotRef_Reference { @@ -1107,7 +1153,7 @@ type CreateAtespaceRequest struct { func (x *CreateAtespaceRequest) Reset() { *x = CreateAtespaceRequest{} - mi := &file_ateapi_proto_msgTypes[10] + mi := &file_ateapi_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1119,7 +1165,7 @@ func (x *CreateAtespaceRequest) String() string { func (*CreateAtespaceRequest) ProtoMessage() {} func (x *CreateAtespaceRequest) ProtoReflect() protoreflect.Message { - mi := &file_ateapi_proto_msgTypes[10] + mi := &file_ateapi_proto_msgTypes[11] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1132,7 +1178,7 @@ func (x *CreateAtespaceRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateAtespaceRequest.ProtoReflect.Descriptor instead. func (*CreateAtespaceRequest) Descriptor() ([]byte, []int) { - return file_ateapi_proto_rawDescGZIP(), []int{10} + return file_ateapi_proto_rawDescGZIP(), []int{11} } func (x *CreateAtespaceRequest) GetAtespace() *Atespace { @@ -1151,7 +1197,7 @@ type GetAtespaceRequest struct { func (x *GetAtespaceRequest) Reset() { *x = GetAtespaceRequest{} - mi := &file_ateapi_proto_msgTypes[11] + mi := &file_ateapi_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1163,7 +1209,7 @@ func (x *GetAtespaceRequest) String() string { func (*GetAtespaceRequest) ProtoMessage() {} func (x *GetAtespaceRequest) ProtoReflect() protoreflect.Message { - mi := &file_ateapi_proto_msgTypes[11] + mi := &file_ateapi_proto_msgTypes[12] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1176,7 +1222,7 @@ func (x *GetAtespaceRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetAtespaceRequest.ProtoReflect.Descriptor instead. func (*GetAtespaceRequest) Descriptor() ([]byte, []int) { - return file_ateapi_proto_rawDescGZIP(), []int{11} + return file_ateapi_proto_rawDescGZIP(), []int{12} } func (x *GetAtespaceRequest) GetAtespace() *ObjectRef { @@ -1201,7 +1247,7 @@ type ListAtespacesRequest struct { func (x *ListAtespacesRequest) Reset() { *x = ListAtespacesRequest{} - mi := &file_ateapi_proto_msgTypes[12] + mi := &file_ateapi_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1213,7 +1259,7 @@ func (x *ListAtespacesRequest) String() string { func (*ListAtespacesRequest) ProtoMessage() {} func (x *ListAtespacesRequest) ProtoReflect() protoreflect.Message { - mi := &file_ateapi_proto_msgTypes[12] + mi := &file_ateapi_proto_msgTypes[13] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1226,7 +1272,7 @@ func (x *ListAtespacesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListAtespacesRequest.ProtoReflect.Descriptor instead. func (*ListAtespacesRequest) Descriptor() ([]byte, []int) { - return file_ateapi_proto_rawDescGZIP(), []int{12} + return file_ateapi_proto_rawDescGZIP(), []int{13} } func (x *ListAtespacesRequest) GetPageSize() int32 { @@ -1255,7 +1301,7 @@ type ListAtespacesResponse struct { func (x *ListAtespacesResponse) Reset() { *x = ListAtespacesResponse{} - mi := &file_ateapi_proto_msgTypes[13] + mi := &file_ateapi_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1267,7 +1313,7 @@ func (x *ListAtespacesResponse) String() string { func (*ListAtespacesResponse) ProtoMessage() {} func (x *ListAtespacesResponse) ProtoReflect() protoreflect.Message { - mi := &file_ateapi_proto_msgTypes[13] + mi := &file_ateapi_proto_msgTypes[14] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1280,7 +1326,7 @@ func (x *ListAtespacesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListAtespacesResponse.ProtoReflect.Descriptor instead. func (*ListAtespacesResponse) Descriptor() ([]byte, []int) { - return file_ateapi_proto_rawDescGZIP(), []int{13} + return file_ateapi_proto_rawDescGZIP(), []int{14} } func (x *ListAtespacesResponse) GetAtespaces() []*Atespace { @@ -1306,7 +1352,7 @@ type DeleteAtespaceRequest struct { func (x *DeleteAtespaceRequest) Reset() { *x = DeleteAtespaceRequest{} - mi := &file_ateapi_proto_msgTypes[14] + mi := &file_ateapi_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1318,7 +1364,7 @@ func (x *DeleteAtespaceRequest) String() string { func (*DeleteAtespaceRequest) ProtoMessage() {} func (x *DeleteAtespaceRequest) ProtoReflect() protoreflect.Message { - mi := &file_ateapi_proto_msgTypes[14] + mi := &file_ateapi_proto_msgTypes[15] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1331,7 +1377,7 @@ func (x *DeleteAtespaceRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteAtespaceRequest.ProtoReflect.Descriptor instead. func (*DeleteAtespaceRequest) Descriptor() ([]byte, []int) { - return file_ateapi_proto_rawDescGZIP(), []int{14} + return file_ateapi_proto_rawDescGZIP(), []int{15} } func (x *DeleteAtespaceRequest) GetAtespace() *ObjectRef { @@ -1350,7 +1396,7 @@ type GetActorRequest struct { func (x *GetActorRequest) Reset() { *x = GetActorRequest{} - mi := &file_ateapi_proto_msgTypes[15] + mi := &file_ateapi_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1362,7 +1408,7 @@ func (x *GetActorRequest) String() string { func (*GetActorRequest) ProtoMessage() {} func (x *GetActorRequest) ProtoReflect() protoreflect.Message { - mi := &file_ateapi_proto_msgTypes[15] + mi := &file_ateapi_proto_msgTypes[16] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1375,7 +1421,7 @@ func (x *GetActorRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetActorRequest.ProtoReflect.Descriptor instead. func (*GetActorRequest) Descriptor() ([]byte, []int) { - return file_ateapi_proto_rawDescGZIP(), []int{15} + return file_ateapi_proto_rawDescGZIP(), []int{16} } func (x *GetActorRequest) GetActor() *ObjectRef { @@ -1398,7 +1444,7 @@ type CreateActorRequest struct { func (x *CreateActorRequest) Reset() { *x = CreateActorRequest{} - mi := &file_ateapi_proto_msgTypes[16] + mi := &file_ateapi_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1410,7 +1456,7 @@ func (x *CreateActorRequest) String() string { func (*CreateActorRequest) ProtoMessage() {} func (x *CreateActorRequest) ProtoReflect() protoreflect.Message { - mi := &file_ateapi_proto_msgTypes[16] + mi := &file_ateapi_proto_msgTypes[17] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1423,7 +1469,7 @@ func (x *CreateActorRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateActorRequest.ProtoReflect.Descriptor instead. func (*CreateActorRequest) Descriptor() ([]byte, []int) { - return file_ateapi_proto_rawDescGZIP(), []int{16} + return file_ateapi_proto_rawDescGZIP(), []int{17} } func (x *CreateActorRequest) GetActor() *Actor { @@ -1455,7 +1501,7 @@ type UpdateActorRequest struct { func (x *UpdateActorRequest) Reset() { *x = UpdateActorRequest{} - mi := &file_ateapi_proto_msgTypes[17] + mi := &file_ateapi_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1467,7 +1513,7 @@ func (x *UpdateActorRequest) String() string { func (*UpdateActorRequest) ProtoMessage() {} func (x *UpdateActorRequest) ProtoReflect() protoreflect.Message { - mi := &file_ateapi_proto_msgTypes[17] + mi := &file_ateapi_proto_msgTypes[18] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1480,7 +1526,7 @@ func (x *UpdateActorRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateActorRequest.ProtoReflect.Descriptor instead. func (*UpdateActorRequest) Descriptor() ([]byte, []int) { - return file_ateapi_proto_rawDescGZIP(), []int{17} + return file_ateapi_proto_rawDescGZIP(), []int{18} } func (x *UpdateActorRequest) GetActor() *ObjectRef { @@ -1506,7 +1552,7 @@ type UpdateActorResponse struct { func (x *UpdateActorResponse) Reset() { *x = UpdateActorResponse{} - mi := &file_ateapi_proto_msgTypes[18] + mi := &file_ateapi_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1518,7 +1564,7 @@ func (x *UpdateActorResponse) String() string { func (*UpdateActorResponse) ProtoMessage() {} func (x *UpdateActorResponse) ProtoReflect() protoreflect.Message { - mi := &file_ateapi_proto_msgTypes[18] + mi := &file_ateapi_proto_msgTypes[19] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1531,7 +1577,7 @@ func (x *UpdateActorResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateActorResponse.ProtoReflect.Descriptor instead. func (*UpdateActorResponse) Descriptor() ([]byte, []int) { - return file_ateapi_proto_rawDescGZIP(), []int{18} + return file_ateapi_proto_rawDescGZIP(), []int{19} } func (x *UpdateActorResponse) GetActor() *Actor { @@ -1550,7 +1596,7 @@ type SuspendActorRequest struct { func (x *SuspendActorRequest) Reset() { *x = SuspendActorRequest{} - mi := &file_ateapi_proto_msgTypes[19] + mi := &file_ateapi_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1562,7 +1608,7 @@ func (x *SuspendActorRequest) String() string { func (*SuspendActorRequest) ProtoMessage() {} func (x *SuspendActorRequest) ProtoReflect() protoreflect.Message { - mi := &file_ateapi_proto_msgTypes[19] + mi := &file_ateapi_proto_msgTypes[20] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1575,7 +1621,7 @@ func (x *SuspendActorRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SuspendActorRequest.ProtoReflect.Descriptor instead. func (*SuspendActorRequest) Descriptor() ([]byte, []int) { - return file_ateapi_proto_rawDescGZIP(), []int{19} + return file_ateapi_proto_rawDescGZIP(), []int{20} } func (x *SuspendActorRequest) GetActor() *ObjectRef { @@ -1594,7 +1640,7 @@ type SuspendActorResponse struct { func (x *SuspendActorResponse) Reset() { *x = SuspendActorResponse{} - mi := &file_ateapi_proto_msgTypes[20] + mi := &file_ateapi_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1606,7 +1652,7 @@ func (x *SuspendActorResponse) String() string { func (*SuspendActorResponse) ProtoMessage() {} func (x *SuspendActorResponse) ProtoReflect() protoreflect.Message { - mi := &file_ateapi_proto_msgTypes[20] + mi := &file_ateapi_proto_msgTypes[21] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1619,7 +1665,7 @@ func (x *SuspendActorResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SuspendActorResponse.ProtoReflect.Descriptor instead. func (*SuspendActorResponse) Descriptor() ([]byte, []int) { - return file_ateapi_proto_rawDescGZIP(), []int{20} + return file_ateapi_proto_rawDescGZIP(), []int{21} } func (x *SuspendActorResponse) GetActor() *Actor { @@ -1638,7 +1684,7 @@ type PauseActorRequest struct { func (x *PauseActorRequest) Reset() { *x = PauseActorRequest{} - mi := &file_ateapi_proto_msgTypes[21] + mi := &file_ateapi_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1650,7 +1696,7 @@ func (x *PauseActorRequest) String() string { func (*PauseActorRequest) ProtoMessage() {} func (x *PauseActorRequest) ProtoReflect() protoreflect.Message { - mi := &file_ateapi_proto_msgTypes[21] + mi := &file_ateapi_proto_msgTypes[22] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1663,7 +1709,7 @@ func (x *PauseActorRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use PauseActorRequest.ProtoReflect.Descriptor instead. func (*PauseActorRequest) Descriptor() ([]byte, []int) { - return file_ateapi_proto_rawDescGZIP(), []int{21} + return file_ateapi_proto_rawDescGZIP(), []int{22} } func (x *PauseActorRequest) GetActor() *ObjectRef { @@ -1682,7 +1728,7 @@ type PauseActorResponse struct { func (x *PauseActorResponse) Reset() { *x = PauseActorResponse{} - mi := &file_ateapi_proto_msgTypes[22] + mi := &file_ateapi_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1694,7 +1740,7 @@ func (x *PauseActorResponse) String() string { func (*PauseActorResponse) ProtoMessage() {} func (x *PauseActorResponse) ProtoReflect() protoreflect.Message { - mi := &file_ateapi_proto_msgTypes[22] + mi := &file_ateapi_proto_msgTypes[23] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1707,7 +1753,7 @@ func (x *PauseActorResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use PauseActorResponse.ProtoReflect.Descriptor instead. func (*PauseActorResponse) Descriptor() ([]byte, []int) { - return file_ateapi_proto_rawDescGZIP(), []int{22} + return file_ateapi_proto_rawDescGZIP(), []int{23} } func (x *PauseActorResponse) GetActor() *Actor { @@ -1728,7 +1774,7 @@ type ResumeActorRequest struct { func (x *ResumeActorRequest) Reset() { *x = ResumeActorRequest{} - mi := &file_ateapi_proto_msgTypes[23] + mi := &file_ateapi_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1740,7 +1786,7 @@ func (x *ResumeActorRequest) String() string { func (*ResumeActorRequest) ProtoMessage() {} func (x *ResumeActorRequest) ProtoReflect() protoreflect.Message { - mi := &file_ateapi_proto_msgTypes[23] + mi := &file_ateapi_proto_msgTypes[24] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1753,7 +1799,7 @@ func (x *ResumeActorRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ResumeActorRequest.ProtoReflect.Descriptor instead. func (*ResumeActorRequest) Descriptor() ([]byte, []int) { - return file_ateapi_proto_rawDescGZIP(), []int{23} + return file_ateapi_proto_rawDescGZIP(), []int{24} } func (x *ResumeActorRequest) GetActor() *ObjectRef { @@ -1782,7 +1828,7 @@ type ResumeActorResponse struct { func (x *ResumeActorResponse) Reset() { *x = ResumeActorResponse{} - mi := &file_ateapi_proto_msgTypes[24] + mi := &file_ateapi_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1794,7 +1840,7 @@ func (x *ResumeActorResponse) String() string { func (*ResumeActorResponse) ProtoMessage() {} func (x *ResumeActorResponse) ProtoReflect() protoreflect.Message { - mi := &file_ateapi_proto_msgTypes[24] + mi := &file_ateapi_proto_msgTypes[25] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1807,7 +1853,7 @@ func (x *ResumeActorResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ResumeActorResponse.ProtoReflect.Descriptor instead. func (*ResumeActorResponse) Descriptor() ([]byte, []int) { - return file_ateapi_proto_rawDescGZIP(), []int{24} + return file_ateapi_proto_rawDescGZIP(), []int{25} } func (x *ResumeActorResponse) GetActor() *Actor { @@ -1833,7 +1879,7 @@ type DeleteActorRequest struct { func (x *DeleteActorRequest) Reset() { *x = DeleteActorRequest{} - mi := &file_ateapi_proto_msgTypes[25] + mi := &file_ateapi_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1845,7 +1891,7 @@ func (x *DeleteActorRequest) String() string { func (*DeleteActorRequest) ProtoMessage() {} func (x *DeleteActorRequest) ProtoReflect() protoreflect.Message { - mi := &file_ateapi_proto_msgTypes[25] + mi := &file_ateapi_proto_msgTypes[26] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1858,7 +1904,7 @@ func (x *DeleteActorRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteActorRequest.ProtoReflect.Descriptor instead. func (*DeleteActorRequest) Descriptor() ([]byte, []int) { - return file_ateapi_proto_rawDescGZIP(), []int{25} + return file_ateapi_proto_rawDescGZIP(), []int{26} } func (x *DeleteActorRequest) GetActor() *ObjectRef { @@ -1877,7 +1923,7 @@ type GetActorSnapshotRequest struct { func (x *GetActorSnapshotRequest) Reset() { *x = GetActorSnapshotRequest{} - mi := &file_ateapi_proto_msgTypes[26] + mi := &file_ateapi_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1889,7 +1935,7 @@ func (x *GetActorSnapshotRequest) String() string { func (*GetActorSnapshotRequest) ProtoMessage() {} func (x *GetActorSnapshotRequest) ProtoReflect() protoreflect.Message { - mi := &file_ateapi_proto_msgTypes[26] + mi := &file_ateapi_proto_msgTypes[27] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1902,7 +1948,7 @@ func (x *GetActorSnapshotRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetActorSnapshotRequest.ProtoReflect.Descriptor instead. func (*GetActorSnapshotRequest) Descriptor() ([]byte, []int) { - return file_ateapi_proto_rawDescGZIP(), []int{26} + return file_ateapi_proto_rawDescGZIP(), []int{27} } func (x *GetActorSnapshotRequest) GetSnapshot() *ActorSnapshotRef { @@ -1923,7 +1969,7 @@ type ListActorSnapshotsRequest struct { func (x *ListActorSnapshotsRequest) Reset() { *x = ListActorSnapshotsRequest{} - mi := &file_ateapi_proto_msgTypes[27] + mi := &file_ateapi_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1935,7 +1981,7 @@ func (x *ListActorSnapshotsRequest) String() string { func (*ListActorSnapshotsRequest) ProtoMessage() {} func (x *ListActorSnapshotsRequest) ProtoReflect() protoreflect.Message { - mi := &file_ateapi_proto_msgTypes[27] + mi := &file_ateapi_proto_msgTypes[28] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1948,7 +1994,7 @@ func (x *ListActorSnapshotsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListActorSnapshotsRequest.ProtoReflect.Descriptor instead. func (*ListActorSnapshotsRequest) Descriptor() ([]byte, []int) { - return file_ateapi_proto_rawDescGZIP(), []int{27} + return file_ateapi_proto_rawDescGZIP(), []int{28} } func (x *ListActorSnapshotsRequest) GetAtespace() string { @@ -1982,7 +2028,7 @@ type ListActorSnapshotsResponse struct { func (x *ListActorSnapshotsResponse) Reset() { *x = ListActorSnapshotsResponse{} - mi := &file_ateapi_proto_msgTypes[28] + mi := &file_ateapi_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1994,7 +2040,7 @@ func (x *ListActorSnapshotsResponse) String() string { func (*ListActorSnapshotsResponse) ProtoMessage() {} func (x *ListActorSnapshotsResponse) ProtoReflect() protoreflect.Message { - mi := &file_ateapi_proto_msgTypes[28] + mi := &file_ateapi_proto_msgTypes[29] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2007,7 +2053,7 @@ func (x *ListActorSnapshotsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListActorSnapshotsResponse.ProtoReflect.Descriptor instead. func (*ListActorSnapshotsResponse) Descriptor() ([]byte, []int) { - return file_ateapi_proto_rawDescGZIP(), []int{28} + return file_ateapi_proto_rawDescGZIP(), []int{29} } func (x *ListActorSnapshotsResponse) GetSnapshots() []*ActorSnapshot { @@ -2034,7 +2080,7 @@ type TagActorSnapshotRequest struct { func (x *TagActorSnapshotRequest) Reset() { *x = TagActorSnapshotRequest{} - mi := &file_ateapi_proto_msgTypes[29] + mi := &file_ateapi_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2046,7 +2092,7 @@ func (x *TagActorSnapshotRequest) String() string { func (*TagActorSnapshotRequest) ProtoMessage() {} func (x *TagActorSnapshotRequest) ProtoReflect() protoreflect.Message { - mi := &file_ateapi_proto_msgTypes[29] + mi := &file_ateapi_proto_msgTypes[30] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2059,7 +2105,7 @@ func (x *TagActorSnapshotRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TagActorSnapshotRequest.ProtoReflect.Descriptor instead. func (*TagActorSnapshotRequest) Descriptor() ([]byte, []int) { - return file_ateapi_proto_rawDescGZIP(), []int{29} + return file_ateapi_proto_rawDescGZIP(), []int{30} } func (x *TagActorSnapshotRequest) GetSnapshot() *ActorSnapshotRef { @@ -2086,7 +2132,7 @@ type UpdateActorSnapshotTagRequest struct { func (x *UpdateActorSnapshotTagRequest) Reset() { *x = UpdateActorSnapshotTagRequest{} - mi := &file_ateapi_proto_msgTypes[30] + mi := &file_ateapi_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2098,7 +2144,7 @@ func (x *UpdateActorSnapshotTagRequest) String() string { func (*UpdateActorSnapshotTagRequest) ProtoMessage() {} func (x *UpdateActorSnapshotTagRequest) ProtoReflect() protoreflect.Message { - mi := &file_ateapi_proto_msgTypes[30] + mi := &file_ateapi_proto_msgTypes[31] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2111,7 +2157,7 @@ func (x *UpdateActorSnapshotTagRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateActorSnapshotTagRequest.ProtoReflect.Descriptor instead. func (*UpdateActorSnapshotTagRequest) Descriptor() ([]byte, []int) { - return file_ateapi_proto_rawDescGZIP(), []int{30} + return file_ateapi_proto_rawDescGZIP(), []int{31} } func (x *UpdateActorSnapshotTagRequest) GetTag() *ObjectRef { @@ -2137,7 +2183,7 @@ type DeleteActorSnapshotTagRequest struct { func (x *DeleteActorSnapshotTagRequest) Reset() { *x = DeleteActorSnapshotTagRequest{} - mi := &file_ateapi_proto_msgTypes[31] + mi := &file_ateapi_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2149,7 +2195,7 @@ func (x *DeleteActorSnapshotTagRequest) String() string { func (*DeleteActorSnapshotTagRequest) ProtoMessage() {} func (x *DeleteActorSnapshotTagRequest) ProtoReflect() protoreflect.Message { - mi := &file_ateapi_proto_msgTypes[31] + mi := &file_ateapi_proto_msgTypes[32] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2162,7 +2208,7 @@ func (x *DeleteActorSnapshotTagRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteActorSnapshotTagRequest.ProtoReflect.Descriptor instead. func (*DeleteActorSnapshotTagRequest) Descriptor() ([]byte, []int) { - return file_ateapi_proto_rawDescGZIP(), []int{31} + return file_ateapi_proto_rawDescGZIP(), []int{32} } func (x *DeleteActorSnapshotTagRequest) GetTag() *ObjectRef { @@ -2187,7 +2233,7 @@ type ListWorkersRequest struct { func (x *ListWorkersRequest) Reset() { *x = ListWorkersRequest{} - mi := &file_ateapi_proto_msgTypes[32] + mi := &file_ateapi_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2199,7 +2245,7 @@ func (x *ListWorkersRequest) String() string { func (*ListWorkersRequest) ProtoMessage() {} func (x *ListWorkersRequest) ProtoReflect() protoreflect.Message { - mi := &file_ateapi_proto_msgTypes[32] + mi := &file_ateapi_proto_msgTypes[33] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2212,7 +2258,7 @@ func (x *ListWorkersRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListWorkersRequest.ProtoReflect.Descriptor instead. func (*ListWorkersRequest) Descriptor() ([]byte, []int) { - return file_ateapi_proto_rawDescGZIP(), []int{32} + return file_ateapi_proto_rawDescGZIP(), []int{33} } func (x *ListWorkersRequest) GetPageSize() int32 { @@ -2241,7 +2287,7 @@ type ListWorkersResponse struct { func (x *ListWorkersResponse) Reset() { *x = ListWorkersResponse{} - mi := &file_ateapi_proto_msgTypes[33] + mi := &file_ateapi_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2253,7 +2299,7 @@ func (x *ListWorkersResponse) String() string { func (*ListWorkersResponse) ProtoMessage() {} func (x *ListWorkersResponse) ProtoReflect() protoreflect.Message { - mi := &file_ateapi_proto_msgTypes[33] + mi := &file_ateapi_proto_msgTypes[34] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2266,7 +2312,7 @@ func (x *ListWorkersResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListWorkersResponse.ProtoReflect.Descriptor instead. func (*ListWorkersResponse) Descriptor() ([]byte, []int) { - return file_ateapi_proto_rawDescGZIP(), []int{33} + return file_ateapi_proto_rawDescGZIP(), []int{34} } func (x *ListWorkersResponse) GetWorkers() []*Worker { @@ -2302,7 +2348,7 @@ type ListActorsRequest struct { func (x *ListActorsRequest) Reset() { *x = ListActorsRequest{} - mi := &file_ateapi_proto_msgTypes[34] + mi := &file_ateapi_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2314,7 +2360,7 @@ func (x *ListActorsRequest) String() string { func (*ListActorsRequest) ProtoMessage() {} func (x *ListActorsRequest) ProtoReflect() protoreflect.Message { - mi := &file_ateapi_proto_msgTypes[34] + mi := &file_ateapi_proto_msgTypes[35] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2327,7 +2373,7 @@ func (x *ListActorsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListActorsRequest.ProtoReflect.Descriptor instead. func (*ListActorsRequest) Descriptor() ([]byte, []int) { - return file_ateapi_proto_rawDescGZIP(), []int{34} + return file_ateapi_proto_rawDescGZIP(), []int{35} } func (x *ListActorsRequest) GetAtespace() string { @@ -2363,7 +2409,7 @@ type ListActorsResponse struct { func (x *ListActorsResponse) Reset() { *x = ListActorsResponse{} - mi := &file_ateapi_proto_msgTypes[35] + mi := &file_ateapi_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2375,7 +2421,7 @@ func (x *ListActorsResponse) String() string { func (*ListActorsResponse) ProtoMessage() {} func (x *ListActorsResponse) ProtoReflect() protoreflect.Message { - mi := &file_ateapi_proto_msgTypes[35] + mi := &file_ateapi_proto_msgTypes[36] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2388,7 +2434,7 @@ func (x *ListActorsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListActorsResponse.ProtoReflect.Descriptor instead. func (*ListActorsResponse) Descriptor() ([]byte, []int) { - return file_ateapi_proto_rawDescGZIP(), []int{35} + return file_ateapi_proto_rawDescGZIP(), []int{36} } func (x *ListActorsResponse) GetActors() []*Actor { @@ -2424,7 +2470,7 @@ type Worker struct { func (x *Worker) Reset() { *x = Worker{} - mi := &file_ateapi_proto_msgTypes[36] + mi := &file_ateapi_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2436,7 +2482,7 @@ func (x *Worker) String() string { func (*Worker) ProtoMessage() {} func (x *Worker) ProtoReflect() protoreflect.Message { - mi := &file_ateapi_proto_msgTypes[36] + mi := &file_ateapi_proto_msgTypes[37] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2449,7 +2495,7 @@ func (x *Worker) ProtoReflect() protoreflect.Message { // Deprecated: Use Worker.ProtoReflect.Descriptor instead. func (*Worker) Descriptor() ([]byte, []int) { - return file_ateapi_proto_rawDescGZIP(), []int{36} + return file_ateapi_proto_rawDescGZIP(), []int{37} } func (x *Worker) GetWorkerNamespace() string { @@ -2539,7 +2585,7 @@ type Assignment struct { func (x *Assignment) Reset() { *x = Assignment{} - mi := &file_ateapi_proto_msgTypes[37] + mi := &file_ateapi_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2551,7 +2597,7 @@ func (x *Assignment) String() string { func (*Assignment) ProtoMessage() {} func (x *Assignment) ProtoReflect() protoreflect.Message { - mi := &file_ateapi_proto_msgTypes[37] + mi := &file_ateapi_proto_msgTypes[38] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2564,7 +2610,7 @@ func (x *Assignment) ProtoReflect() protoreflect.Message { // Deprecated: Use Assignment.ProtoReflect.Descriptor instead. func (*Assignment) Descriptor() ([]byte, []int) { - return file_ateapi_proto_rawDescGZIP(), []int{37} + return file_ateapi_proto_rawDescGZIP(), []int{38} } func (x *Assignment) GetActorTemplate() *KubeNamespacedObjectRef { @@ -2591,7 +2637,7 @@ type KubeNamespacedObjectRef struct { func (x *KubeNamespacedObjectRef) Reset() { *x = KubeNamespacedObjectRef{} - mi := &file_ateapi_proto_msgTypes[38] + mi := &file_ateapi_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2603,7 +2649,7 @@ func (x *KubeNamespacedObjectRef) String() string { func (*KubeNamespacedObjectRef) ProtoMessage() {} func (x *KubeNamespacedObjectRef) ProtoReflect() protoreflect.Message { - mi := &file_ateapi_proto_msgTypes[38] + mi := &file_ateapi_proto_msgTypes[39] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2616,7 +2662,7 @@ func (x *KubeNamespacedObjectRef) ProtoReflect() protoreflect.Message { // Deprecated: Use KubeNamespacedObjectRef.ProtoReflect.Descriptor instead. func (*KubeNamespacedObjectRef) Descriptor() ([]byte, []int) { - return file_ateapi_proto_rawDescGZIP(), []int{38} + return file_ateapi_proto_rawDescGZIP(), []int{39} } func (x *KubeNamespacedObjectRef) GetNamespace() string { @@ -2641,7 +2687,7 @@ type DebugClearRequest struct { func (x *DebugClearRequest) Reset() { *x = DebugClearRequest{} - mi := &file_ateapi_proto_msgTypes[39] + mi := &file_ateapi_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2653,7 +2699,7 @@ func (x *DebugClearRequest) String() string { func (*DebugClearRequest) ProtoMessage() {} func (x *DebugClearRequest) ProtoReflect() protoreflect.Message { - mi := &file_ateapi_proto_msgTypes[39] + mi := &file_ateapi_proto_msgTypes[40] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2666,7 +2712,7 @@ func (x *DebugClearRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DebugClearRequest.ProtoReflect.Descriptor instead. func (*DebugClearRequest) Descriptor() ([]byte, []int) { - return file_ateapi_proto_rawDescGZIP(), []int{39} + return file_ateapi_proto_rawDescGZIP(), []int{40} } type DebugClearResponse struct { @@ -2677,7 +2723,7 @@ type DebugClearResponse struct { func (x *DebugClearResponse) Reset() { *x = DebugClearResponse{} - mi := &file_ateapi_proto_msgTypes[40] + mi := &file_ateapi_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2689,7 +2735,7 @@ func (x *DebugClearResponse) String() string { func (*DebugClearResponse) ProtoMessage() {} func (x *DebugClearResponse) ProtoReflect() protoreflect.Message { - mi := &file_ateapi_proto_msgTypes[40] + mi := &file_ateapi_proto_msgTypes[41] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2702,7 +2748,7 @@ func (x *DebugClearResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DebugClearResponse.ProtoReflect.Descriptor instead. func (*DebugClearResponse) Descriptor() ([]byte, []int) { - return file_ateapi_proto_rawDescGZIP(), []int{40} + return file_ateapi_proto_rawDescGZIP(), []int{41} } type MintJWTRequest struct { @@ -2717,7 +2763,7 @@ type MintJWTRequest struct { func (x *MintJWTRequest) Reset() { *x = MintJWTRequest{} - mi := &file_ateapi_proto_msgTypes[41] + mi := &file_ateapi_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2729,7 +2775,7 @@ func (x *MintJWTRequest) String() string { func (*MintJWTRequest) ProtoMessage() {} func (x *MintJWTRequest) ProtoReflect() protoreflect.Message { - mi := &file_ateapi_proto_msgTypes[41] + mi := &file_ateapi_proto_msgTypes[42] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2742,7 +2788,7 @@ func (x *MintJWTRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MintJWTRequest.ProtoReflect.Descriptor instead. func (*MintJWTRequest) Descriptor() ([]byte, []int) { - return file_ateapi_proto_rawDescGZIP(), []int{41} + return file_ateapi_proto_rawDescGZIP(), []int{42} } func (x *MintJWTRequest) GetAudience() []string { @@ -2803,7 +2849,7 @@ type MintJWTResponse struct { func (x *MintJWTResponse) Reset() { *x = MintJWTResponse{} - mi := &file_ateapi_proto_msgTypes[42] + mi := &file_ateapi_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2815,7 +2861,7 @@ func (x *MintJWTResponse) String() string { func (*MintJWTResponse) ProtoMessage() {} func (x *MintJWTResponse) ProtoReflect() protoreflect.Message { - mi := &file_ateapi_proto_msgTypes[42] + mi := &file_ateapi_proto_msgTypes[43] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2828,7 +2874,7 @@ func (x *MintJWTResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use MintJWTResponse.ProtoReflect.Descriptor instead. func (*MintJWTResponse) Descriptor() ([]byte, []int) { - return file_ateapi_proto_rawDescGZIP(), []int{42} + return file_ateapi_proto_rawDescGZIP(), []int{43} } func (x *MintJWTResponse) GetActorJwt() string { @@ -2853,7 +2899,7 @@ type MintCertRequest struct { func (x *MintCertRequest) Reset() { *x = MintCertRequest{} - mi := &file_ateapi_proto_msgTypes[43] + mi := &file_ateapi_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2865,7 +2911,7 @@ func (x *MintCertRequest) String() string { func (*MintCertRequest) ProtoMessage() {} func (x *MintCertRequest) ProtoReflect() protoreflect.Message { - mi := &file_ateapi_proto_msgTypes[43] + mi := &file_ateapi_proto_msgTypes[44] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2878,7 +2924,7 @@ func (x *MintCertRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MintCertRequest.ProtoReflect.Descriptor instead. func (*MintCertRequest) Descriptor() ([]byte, []int) { - return file_ateapi_proto_rawDescGZIP(), []int{43} + return file_ateapi_proto_rawDescGZIP(), []int{44} } func (x *MintCertRequest) GetAtespace() string { @@ -2921,7 +2967,7 @@ type MintCertResponse struct { func (x *MintCertResponse) Reset() { *x = MintCertResponse{} - mi := &file_ateapi_proto_msgTypes[44] + mi := &file_ateapi_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2933,7 +2979,7 @@ func (x *MintCertResponse) String() string { func (*MintCertResponse) ProtoMessage() {} func (x *MintCertResponse) ProtoReflect() protoreflect.Message { - mi := &file_ateapi_proto_msgTypes[44] + mi := &file_ateapi_proto_msgTypes[45] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2946,7 +2992,7 @@ func (x *MintCertResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use MintCertResponse.ProtoReflect.Descriptor instead. func (*MintCertResponse) Descriptor() ([]byte, []int) { - return file_ateapi_proto_rawDescGZIP(), []int{44} + return file_ateapi_proto_rawDescGZIP(), []int{45} } func (x *MintCertResponse) GetActorCertificates() [][]byte { @@ -2989,24 +3035,20 @@ const file_ateapi_proto_rawDesc = "" + "\x12STATUS_UNSPECIFIED\x10\x00\x12\x12\n" + "\x0eSTATUS_PENDING\x10\x01\x12\x12\n" + "\x0eSTATUS_CREATED\x10\x02\x12\x13\n" + - "\x0fSTATUS_DELETING\x10\x03\"\x8a\b\n" + + "\x0fSTATUS_DELETING\x10\x03\"\xef\x06\n" + "\x05Actor\x124\n" + "\bmetadata\x18\x01 \x01(\v2\x18.ateapi.ResourceMetadataR\bmetadata\x128\n" + "\x18actor_template_namespace\x18\x02 \x01(\tR\x16actorTemplateNamespace\x12.\n" + "\x13actor_template_name\x18\x03 \x01(\tR\x11actorTemplateName\x12,\n" + - "\x06status\x18\x04 \x01(\x0e2\x14.ateapi.Actor.StatusR\x06status\x12.\n" + - "\x13ateom_pod_namespace\x18\x05 \x01(\tR\x11ateomPodNamespace\x12$\n" + - "\x0eateom_pod_name\x18\x06 \x01(\tR\fateomPodName\x12 \n" + - "\fateom_pod_ip\x18\a \x01(\tR\n" + - "ateomPodIp\x120\n" + - "\x14in_progress_snapshot\x18\b \x01(\tR\x12inProgressSnapshot\x12\"\n" + - "\rateom_pod_uid\x18\t \x01(\tR\vateomPodUid\x129\n" + - "\x0fworker_selector\x18\v \x01(\v2\x10.ateapi.SelectorR\x0eworkerSelector\x12(\n" + - "\x10worker_pool_name\x18\f \x01(\tR\x0eworkerPoolName\x12:\n" + - "\x0flatest_snapshot\x18\x0e \x01(\v2\x11.ateapi.ObjectRefR\x0elatestSnapshot\x12I\n" + - "\x13local_snapshot_info\x18\x0f \x01(\v2\x19.ateapi.LocalSnapshotInfoR\x11localSnapshotInfo\x12W\n" + - ")in_progress_snapshot_source_actor_version\x18\x10 \x01(\x03R$inProgressSnapshotSourceActorVersion\x12;\n" + - "\ractor_volumes\x18\r \x03(\v2\x16.ateapi.ExternalVolumeR\factorVolumes\"\xc6\x01\n" + + "\x06status\x18\x04 \x01(\x0e2\x14.ateapi.Actor.StatusR\x06status\x12E\n" + + "\x11worker_assignment\x18\x05 \x01(\v2\x18.ateapi.WorkerAssignmentR\x10workerAssignment\x120\n" + + "\x14in_progress_snapshot\x18\x06 \x01(\tR\x12inProgressSnapshot\x129\n" + + "\x0fworker_selector\x18\a \x01(\v2\x10.ateapi.SelectorR\x0eworkerSelector\x12:\n" + + "\x0flatest_snapshot\x18\b \x01(\v2\x11.ateapi.ObjectRefR\x0elatestSnapshot\x12I\n" + + "\x13local_snapshot_info\x18\t \x01(\v2\x19.ateapi.LocalSnapshotInfoR\x11localSnapshotInfo\x12W\n" + + ")in_progress_snapshot_source_actor_version\x18\n" + + " \x01(\x03R$inProgressSnapshotSourceActorVersion\x12;\n" + + "\ractor_volumes\x18\v \x03(\v2\x16.ateapi.ExternalVolumeR\factorVolumes\"\xc6\x01\n" + "\x06Status\x12\x16\n" + "\x12STATUS_UNSPECIFIED\x10\x00\x12\x13\n" + "\x0fSTATUS_RESUMING\x10\x01\x12\x12\n" + @@ -3016,8 +3058,15 @@ const file_ateapi_proto_rawDesc = "" + "\x0eSTATUS_PAUSING\x10\x05\x12\x11\n" + "\rSTATUS_PAUSED\x10\x06\x12\x12\n" + "\x0eSTATUS_CRASHED\x10\a\x12\x13\n" + - "\x0fSTATUS_DELETING\x10\bJ\x04\b\n" + - "\x10\vR\x14latest_snapshot_info\"\xb2\x03\n" + + "\x0fSTATUS_DELETING\x10\b\"\xc7\x01\n" + + "\x10WorkerAssignment\x12)\n" + + "\x10worker_namespace\x18\x01 \x01(\tR\x0fworkerNamespace\x12\x1f\n" + + "\vworker_pool\x18\x02 \x01(\tR\n" + + "workerPool\x12\x1d\n" + + "\n" + + "worker_pod\x18\x03 \x01(\tR\tworkerPod\x12$\n" + + "\x0eworker_pod_uid\x18\x04 \x01(\tR\fworkerPodUid\x12\"\n" + + "\rworker_pod_ip\x18\x05 \x01(\tR\vworkerPodIp\"\xb2\x03\n" + "\rActorSnapshot\x124\n" + "\bmetadata\x18\x01 \x01(\v2\x18.ateapi.ResourceMetadataR\bmetadata\x124\n" + "\fsource_actor\x18\x02 \x01(\v2\x11.ateapi.ObjectRefR\vsourceActor\x12(\n" + @@ -3210,7 +3259,7 @@ func file_ateapi_proto_rawDescGZIP() []byte { } var file_ateapi_proto_enumTypes = make([]protoimpl.EnumInfo, 5) -var file_ateapi_proto_msgTypes = make([]protoimpl.MessageInfo, 47) +var file_ateapi_proto_msgTypes = make([]protoimpl.MessageInfo, 48) var file_ateapi_proto_goTypes = []any{ (SnapshotContentScope)(0), // 0: ateapi.SnapshotContentScope (ActorSnapshotTagScope)(0), // 1: ateapi.ActorSnapshotTagScope @@ -3222,148 +3271,150 @@ var file_ateapi_proto_goTypes = []any{ (*ResourceMetadata)(nil), // 7: ateapi.ResourceMetadata (*ExternalVolume)(nil), // 8: ateapi.ExternalVolume (*Actor)(nil), // 9: ateapi.Actor - (*ActorSnapshot)(nil), // 10: ateapi.ActorSnapshot - (*ActorSnapshotTag)(nil), // 11: ateapi.ActorSnapshotTag - (*Atespace)(nil), // 12: ateapi.Atespace - (*ObjectRef)(nil), // 13: ateapi.ObjectRef - (*ActorSnapshotRef)(nil), // 14: ateapi.ActorSnapshotRef - (*CreateAtespaceRequest)(nil), // 15: ateapi.CreateAtespaceRequest - (*GetAtespaceRequest)(nil), // 16: ateapi.GetAtespaceRequest - (*ListAtespacesRequest)(nil), // 17: ateapi.ListAtespacesRequest - (*ListAtespacesResponse)(nil), // 18: ateapi.ListAtespacesResponse - (*DeleteAtespaceRequest)(nil), // 19: ateapi.DeleteAtespaceRequest - (*GetActorRequest)(nil), // 20: ateapi.GetActorRequest - (*CreateActorRequest)(nil), // 21: ateapi.CreateActorRequest - (*UpdateActorRequest)(nil), // 22: ateapi.UpdateActorRequest - (*UpdateActorResponse)(nil), // 23: ateapi.UpdateActorResponse - (*SuspendActorRequest)(nil), // 24: ateapi.SuspendActorRequest - (*SuspendActorResponse)(nil), // 25: ateapi.SuspendActorResponse - (*PauseActorRequest)(nil), // 26: ateapi.PauseActorRequest - (*PauseActorResponse)(nil), // 27: ateapi.PauseActorResponse - (*ResumeActorRequest)(nil), // 28: ateapi.ResumeActorRequest - (*ResumeActorResponse)(nil), // 29: ateapi.ResumeActorResponse - (*DeleteActorRequest)(nil), // 30: ateapi.DeleteActorRequest - (*GetActorSnapshotRequest)(nil), // 31: ateapi.GetActorSnapshotRequest - (*ListActorSnapshotsRequest)(nil), // 32: ateapi.ListActorSnapshotsRequest - (*ListActorSnapshotsResponse)(nil), // 33: ateapi.ListActorSnapshotsResponse - (*TagActorSnapshotRequest)(nil), // 34: ateapi.TagActorSnapshotRequest - (*UpdateActorSnapshotTagRequest)(nil), // 35: ateapi.UpdateActorSnapshotTagRequest - (*DeleteActorSnapshotTagRequest)(nil), // 36: ateapi.DeleteActorSnapshotTagRequest - (*ListWorkersRequest)(nil), // 37: ateapi.ListWorkersRequest - (*ListWorkersResponse)(nil), // 38: ateapi.ListWorkersResponse - (*ListActorsRequest)(nil), // 39: ateapi.ListActorsRequest - (*ListActorsResponse)(nil), // 40: ateapi.ListActorsResponse - (*Worker)(nil), // 41: ateapi.Worker - (*Assignment)(nil), // 42: ateapi.Assignment - (*KubeNamespacedObjectRef)(nil), // 43: ateapi.KubeNamespacedObjectRef - (*DebugClearRequest)(nil), // 44: ateapi.DebugClearRequest - (*DebugClearResponse)(nil), // 45: ateapi.DebugClearResponse - (*MintJWTRequest)(nil), // 46: ateapi.MintJWTRequest - (*MintJWTResponse)(nil), // 47: ateapi.MintJWTResponse - (*MintCertRequest)(nil), // 48: ateapi.MintCertRequest - (*MintCertResponse)(nil), // 49: ateapi.MintCertResponse - nil, // 50: ateapi.Selector.MatchLabelsEntry - nil, // 51: ateapi.Worker.LabelsEntry - (*timestamppb.Timestamp)(nil), // 52: google.protobuf.Timestamp + (*WorkerAssignment)(nil), // 10: ateapi.WorkerAssignment + (*ActorSnapshot)(nil), // 11: ateapi.ActorSnapshot + (*ActorSnapshotTag)(nil), // 12: ateapi.ActorSnapshotTag + (*Atespace)(nil), // 13: ateapi.Atespace + (*ObjectRef)(nil), // 14: ateapi.ObjectRef + (*ActorSnapshotRef)(nil), // 15: ateapi.ActorSnapshotRef + (*CreateAtespaceRequest)(nil), // 16: ateapi.CreateAtespaceRequest + (*GetAtespaceRequest)(nil), // 17: ateapi.GetAtespaceRequest + (*ListAtespacesRequest)(nil), // 18: ateapi.ListAtespacesRequest + (*ListAtespacesResponse)(nil), // 19: ateapi.ListAtespacesResponse + (*DeleteAtespaceRequest)(nil), // 20: ateapi.DeleteAtespaceRequest + (*GetActorRequest)(nil), // 21: ateapi.GetActorRequest + (*CreateActorRequest)(nil), // 22: ateapi.CreateActorRequest + (*UpdateActorRequest)(nil), // 23: ateapi.UpdateActorRequest + (*UpdateActorResponse)(nil), // 24: ateapi.UpdateActorResponse + (*SuspendActorRequest)(nil), // 25: ateapi.SuspendActorRequest + (*SuspendActorResponse)(nil), // 26: ateapi.SuspendActorResponse + (*PauseActorRequest)(nil), // 27: ateapi.PauseActorRequest + (*PauseActorResponse)(nil), // 28: ateapi.PauseActorResponse + (*ResumeActorRequest)(nil), // 29: ateapi.ResumeActorRequest + (*ResumeActorResponse)(nil), // 30: ateapi.ResumeActorResponse + (*DeleteActorRequest)(nil), // 31: ateapi.DeleteActorRequest + (*GetActorSnapshotRequest)(nil), // 32: ateapi.GetActorSnapshotRequest + (*ListActorSnapshotsRequest)(nil), // 33: ateapi.ListActorSnapshotsRequest + (*ListActorSnapshotsResponse)(nil), // 34: ateapi.ListActorSnapshotsResponse + (*TagActorSnapshotRequest)(nil), // 35: ateapi.TagActorSnapshotRequest + (*UpdateActorSnapshotTagRequest)(nil), // 36: ateapi.UpdateActorSnapshotTagRequest + (*DeleteActorSnapshotTagRequest)(nil), // 37: ateapi.DeleteActorSnapshotTagRequest + (*ListWorkersRequest)(nil), // 38: ateapi.ListWorkersRequest + (*ListWorkersResponse)(nil), // 39: ateapi.ListWorkersResponse + (*ListActorsRequest)(nil), // 40: ateapi.ListActorsRequest + (*ListActorsResponse)(nil), // 41: ateapi.ListActorsResponse + (*Worker)(nil), // 42: ateapi.Worker + (*Assignment)(nil), // 43: ateapi.Assignment + (*KubeNamespacedObjectRef)(nil), // 44: ateapi.KubeNamespacedObjectRef + (*DebugClearRequest)(nil), // 45: ateapi.DebugClearRequest + (*DebugClearResponse)(nil), // 46: ateapi.DebugClearResponse + (*MintJWTRequest)(nil), // 47: ateapi.MintJWTRequest + (*MintJWTResponse)(nil), // 48: ateapi.MintJWTResponse + (*MintCertRequest)(nil), // 49: ateapi.MintCertRequest + (*MintCertResponse)(nil), // 50: ateapi.MintCertResponse + nil, // 51: ateapi.Selector.MatchLabelsEntry + nil, // 52: ateapi.Worker.LabelsEntry + (*timestamppb.Timestamp)(nil), // 53: google.protobuf.Timestamp } var file_ateapi_proto_depIdxs = []int32{ - 50, // 0: ateapi.Selector.match_labels:type_name -> ateapi.Selector.MatchLabelsEntry - 52, // 1: ateapi.ResourceMetadata.create_time:type_name -> google.protobuf.Timestamp - 52, // 2: ateapi.ResourceMetadata.update_time:type_name -> google.protobuf.Timestamp + 51, // 0: ateapi.Selector.match_labels:type_name -> ateapi.Selector.MatchLabelsEntry + 53, // 1: ateapi.ResourceMetadata.create_time:type_name -> google.protobuf.Timestamp + 53, // 2: ateapi.ResourceMetadata.update_time:type_name -> google.protobuf.Timestamp 2, // 3: ateapi.ExternalVolume.status:type_name -> ateapi.ExternalVolume.Status 7, // 4: ateapi.Actor.metadata:type_name -> ateapi.ResourceMetadata 3, // 5: ateapi.Actor.status:type_name -> ateapi.Actor.Status - 6, // 6: ateapi.Actor.worker_selector:type_name -> ateapi.Selector - 13, // 7: ateapi.Actor.latest_snapshot:type_name -> ateapi.ObjectRef - 5, // 8: ateapi.Actor.local_snapshot_info:type_name -> ateapi.LocalSnapshotInfo - 8, // 9: ateapi.Actor.actor_volumes:type_name -> ateapi.ExternalVolume - 7, // 10: ateapi.ActorSnapshot.metadata:type_name -> ateapi.ResourceMetadata - 13, // 11: ateapi.ActorSnapshot.source_actor:type_name -> ateapi.ObjectRef - 0, // 12: ateapi.ActorSnapshot.content_scope:type_name -> ateapi.SnapshotContentScope - 7, // 13: ateapi.ActorSnapshotTag.metadata:type_name -> ateapi.ResourceMetadata - 13, // 14: ateapi.ActorSnapshotTag.snapshot:type_name -> ateapi.ObjectRef - 1, // 15: ateapi.ActorSnapshotTag.scope:type_name -> ateapi.ActorSnapshotTagScope - 7, // 16: ateapi.Atespace.metadata:type_name -> ateapi.ResourceMetadata - 13, // 17: ateapi.ActorSnapshotRef.snapshot:type_name -> ateapi.ObjectRef - 13, // 18: ateapi.ActorSnapshotRef.tag:type_name -> ateapi.ObjectRef - 12, // 19: ateapi.CreateAtespaceRequest.atespace:type_name -> ateapi.Atespace - 13, // 20: ateapi.GetAtespaceRequest.atespace:type_name -> ateapi.ObjectRef - 12, // 21: ateapi.ListAtespacesResponse.atespaces:type_name -> ateapi.Atespace - 13, // 22: ateapi.DeleteAtespaceRequest.atespace:type_name -> ateapi.ObjectRef - 13, // 23: ateapi.GetActorRequest.actor:type_name -> ateapi.ObjectRef - 9, // 24: ateapi.CreateActorRequest.actor:type_name -> ateapi.Actor - 14, // 25: ateapi.CreateActorRequest.source_snapshot:type_name -> ateapi.ActorSnapshotRef - 13, // 26: ateapi.UpdateActorRequest.actor:type_name -> ateapi.ObjectRef - 6, // 27: ateapi.UpdateActorRequest.worker_selector:type_name -> ateapi.Selector - 9, // 28: ateapi.UpdateActorResponse.actor:type_name -> ateapi.Actor - 13, // 29: ateapi.SuspendActorRequest.actor:type_name -> ateapi.ObjectRef - 9, // 30: ateapi.SuspendActorResponse.actor:type_name -> ateapi.Actor - 13, // 31: ateapi.PauseActorRequest.actor:type_name -> ateapi.ObjectRef - 9, // 32: ateapi.PauseActorResponse.actor:type_name -> ateapi.Actor - 13, // 33: ateapi.ResumeActorRequest.actor:type_name -> ateapi.ObjectRef - 9, // 34: ateapi.ResumeActorResponse.actor:type_name -> ateapi.Actor - 13, // 35: ateapi.DeleteActorRequest.actor:type_name -> ateapi.ObjectRef - 14, // 36: ateapi.GetActorSnapshotRequest.snapshot:type_name -> ateapi.ActorSnapshotRef - 10, // 37: ateapi.ListActorSnapshotsResponse.snapshots:type_name -> ateapi.ActorSnapshot - 14, // 38: ateapi.TagActorSnapshotRequest.snapshot:type_name -> ateapi.ActorSnapshotRef - 11, // 39: ateapi.TagActorSnapshotRequest.tag:type_name -> ateapi.ActorSnapshotTag - 13, // 40: ateapi.UpdateActorSnapshotTagRequest.tag:type_name -> ateapi.ObjectRef - 1, // 41: ateapi.UpdateActorSnapshotTagRequest.scope:type_name -> ateapi.ActorSnapshotTagScope - 13, // 42: ateapi.DeleteActorSnapshotTagRequest.tag:type_name -> ateapi.ObjectRef - 41, // 43: ateapi.ListWorkersResponse.workers:type_name -> ateapi.Worker - 9, // 44: ateapi.ListActorsResponse.actors:type_name -> ateapi.Actor - 42, // 45: ateapi.Worker.assignment:type_name -> ateapi.Assignment - 51, // 46: ateapi.Worker.labels:type_name -> ateapi.Worker.LabelsEntry - 4, // 47: ateapi.Worker.state:type_name -> ateapi.Worker.State - 43, // 48: ateapi.Assignment.actor_template:type_name -> ateapi.KubeNamespacedObjectRef - 13, // 49: ateapi.Assignment.actor:type_name -> ateapi.ObjectRef - 20, // 50: ateapi.Control.GetActor:input_type -> ateapi.GetActorRequest - 21, // 51: ateapi.Control.CreateActor:input_type -> ateapi.CreateActorRequest - 22, // 52: ateapi.Control.UpdateActor:input_type -> ateapi.UpdateActorRequest - 24, // 53: ateapi.Control.SuspendActor:input_type -> ateapi.SuspendActorRequest - 26, // 54: ateapi.Control.PauseActor:input_type -> ateapi.PauseActorRequest - 28, // 55: ateapi.Control.ResumeActor:input_type -> ateapi.ResumeActorRequest - 30, // 56: ateapi.Control.DeleteActor:input_type -> ateapi.DeleteActorRequest - 31, // 57: ateapi.Control.GetActorSnapshot:input_type -> ateapi.GetActorSnapshotRequest - 32, // 58: ateapi.Control.ListActorSnapshots:input_type -> ateapi.ListActorSnapshotsRequest - 34, // 59: ateapi.Control.TagActorSnapshot:input_type -> ateapi.TagActorSnapshotRequest - 35, // 60: ateapi.Control.UpdateActorSnapshotTag:input_type -> ateapi.UpdateActorSnapshotTagRequest - 36, // 61: ateapi.Control.DeleteActorSnapshotTag:input_type -> ateapi.DeleteActorSnapshotTagRequest - 37, // 62: ateapi.Control.ListWorkers:input_type -> ateapi.ListWorkersRequest - 39, // 63: ateapi.Control.ListActors:input_type -> ateapi.ListActorsRequest - 15, // 64: ateapi.Control.CreateAtespace:input_type -> ateapi.CreateAtespaceRequest - 16, // 65: ateapi.Control.GetAtespace:input_type -> ateapi.GetAtespaceRequest - 17, // 66: ateapi.Control.ListAtespaces:input_type -> ateapi.ListAtespacesRequest - 19, // 67: ateapi.Control.DeleteAtespace:input_type -> ateapi.DeleteAtespaceRequest - 44, // 68: ateapi.Debug.DebugClear:input_type -> ateapi.DebugClearRequest - 46, // 69: ateapi.ActorIdentity.MintJWT:input_type -> ateapi.MintJWTRequest - 48, // 70: ateapi.ActorIdentity.MintCert:input_type -> ateapi.MintCertRequest - 9, // 71: ateapi.Control.GetActor:output_type -> ateapi.Actor - 9, // 72: ateapi.Control.CreateActor:output_type -> ateapi.Actor - 23, // 73: ateapi.Control.UpdateActor:output_type -> ateapi.UpdateActorResponse - 25, // 74: ateapi.Control.SuspendActor:output_type -> ateapi.SuspendActorResponse - 27, // 75: ateapi.Control.PauseActor:output_type -> ateapi.PauseActorResponse - 29, // 76: ateapi.Control.ResumeActor:output_type -> ateapi.ResumeActorResponse - 9, // 77: ateapi.Control.DeleteActor:output_type -> ateapi.Actor - 10, // 78: ateapi.Control.GetActorSnapshot:output_type -> ateapi.ActorSnapshot - 33, // 79: ateapi.Control.ListActorSnapshots:output_type -> ateapi.ListActorSnapshotsResponse - 11, // 80: ateapi.Control.TagActorSnapshot:output_type -> ateapi.ActorSnapshotTag - 11, // 81: ateapi.Control.UpdateActorSnapshotTag:output_type -> ateapi.ActorSnapshotTag - 11, // 82: ateapi.Control.DeleteActorSnapshotTag:output_type -> ateapi.ActorSnapshotTag - 38, // 83: ateapi.Control.ListWorkers:output_type -> ateapi.ListWorkersResponse - 40, // 84: ateapi.Control.ListActors:output_type -> ateapi.ListActorsResponse - 12, // 85: ateapi.Control.CreateAtespace:output_type -> ateapi.Atespace - 12, // 86: ateapi.Control.GetAtespace:output_type -> ateapi.Atespace - 18, // 87: ateapi.Control.ListAtespaces:output_type -> ateapi.ListAtespacesResponse - 12, // 88: ateapi.Control.DeleteAtespace:output_type -> ateapi.Atespace - 45, // 89: ateapi.Debug.DebugClear:output_type -> ateapi.DebugClearResponse - 47, // 90: ateapi.ActorIdentity.MintJWT:output_type -> ateapi.MintJWTResponse - 49, // 91: ateapi.ActorIdentity.MintCert:output_type -> ateapi.MintCertResponse - 71, // [71:92] is the sub-list for method output_type - 50, // [50:71] is the sub-list for method input_type - 50, // [50:50] is the sub-list for extension type_name - 50, // [50:50] is the sub-list for extension extendee - 0, // [0:50] is the sub-list for field type_name + 10, // 6: ateapi.Actor.worker_assignment:type_name -> ateapi.WorkerAssignment + 6, // 7: ateapi.Actor.worker_selector:type_name -> ateapi.Selector + 14, // 8: ateapi.Actor.latest_snapshot:type_name -> ateapi.ObjectRef + 5, // 9: ateapi.Actor.local_snapshot_info:type_name -> ateapi.LocalSnapshotInfo + 8, // 10: ateapi.Actor.actor_volumes:type_name -> ateapi.ExternalVolume + 7, // 11: ateapi.ActorSnapshot.metadata:type_name -> ateapi.ResourceMetadata + 14, // 12: ateapi.ActorSnapshot.source_actor:type_name -> ateapi.ObjectRef + 0, // 13: ateapi.ActorSnapshot.content_scope:type_name -> ateapi.SnapshotContentScope + 7, // 14: ateapi.ActorSnapshotTag.metadata:type_name -> ateapi.ResourceMetadata + 14, // 15: ateapi.ActorSnapshotTag.snapshot:type_name -> ateapi.ObjectRef + 1, // 16: ateapi.ActorSnapshotTag.scope:type_name -> ateapi.ActorSnapshotTagScope + 7, // 17: ateapi.Atespace.metadata:type_name -> ateapi.ResourceMetadata + 14, // 18: ateapi.ActorSnapshotRef.snapshot:type_name -> ateapi.ObjectRef + 14, // 19: ateapi.ActorSnapshotRef.tag:type_name -> ateapi.ObjectRef + 13, // 20: ateapi.CreateAtespaceRequest.atespace:type_name -> ateapi.Atespace + 14, // 21: ateapi.GetAtespaceRequest.atespace:type_name -> ateapi.ObjectRef + 13, // 22: ateapi.ListAtespacesResponse.atespaces:type_name -> ateapi.Atespace + 14, // 23: ateapi.DeleteAtespaceRequest.atespace:type_name -> ateapi.ObjectRef + 14, // 24: ateapi.GetActorRequest.actor:type_name -> ateapi.ObjectRef + 9, // 25: ateapi.CreateActorRequest.actor:type_name -> ateapi.Actor + 15, // 26: ateapi.CreateActorRequest.source_snapshot:type_name -> ateapi.ActorSnapshotRef + 14, // 27: ateapi.UpdateActorRequest.actor:type_name -> ateapi.ObjectRef + 6, // 28: ateapi.UpdateActorRequest.worker_selector:type_name -> ateapi.Selector + 9, // 29: ateapi.UpdateActorResponse.actor:type_name -> ateapi.Actor + 14, // 30: ateapi.SuspendActorRequest.actor:type_name -> ateapi.ObjectRef + 9, // 31: ateapi.SuspendActorResponse.actor:type_name -> ateapi.Actor + 14, // 32: ateapi.PauseActorRequest.actor:type_name -> ateapi.ObjectRef + 9, // 33: ateapi.PauseActorResponse.actor:type_name -> ateapi.Actor + 14, // 34: ateapi.ResumeActorRequest.actor:type_name -> ateapi.ObjectRef + 9, // 35: ateapi.ResumeActorResponse.actor:type_name -> ateapi.Actor + 14, // 36: ateapi.DeleteActorRequest.actor:type_name -> ateapi.ObjectRef + 15, // 37: ateapi.GetActorSnapshotRequest.snapshot:type_name -> ateapi.ActorSnapshotRef + 11, // 38: ateapi.ListActorSnapshotsResponse.snapshots:type_name -> ateapi.ActorSnapshot + 15, // 39: ateapi.TagActorSnapshotRequest.snapshot:type_name -> ateapi.ActorSnapshotRef + 12, // 40: ateapi.TagActorSnapshotRequest.tag:type_name -> ateapi.ActorSnapshotTag + 14, // 41: ateapi.UpdateActorSnapshotTagRequest.tag:type_name -> ateapi.ObjectRef + 1, // 42: ateapi.UpdateActorSnapshotTagRequest.scope:type_name -> ateapi.ActorSnapshotTagScope + 14, // 43: ateapi.DeleteActorSnapshotTagRequest.tag:type_name -> ateapi.ObjectRef + 42, // 44: ateapi.ListWorkersResponse.workers:type_name -> ateapi.Worker + 9, // 45: ateapi.ListActorsResponse.actors:type_name -> ateapi.Actor + 43, // 46: ateapi.Worker.assignment:type_name -> ateapi.Assignment + 52, // 47: ateapi.Worker.labels:type_name -> ateapi.Worker.LabelsEntry + 4, // 48: ateapi.Worker.state:type_name -> ateapi.Worker.State + 44, // 49: ateapi.Assignment.actor_template:type_name -> ateapi.KubeNamespacedObjectRef + 14, // 50: ateapi.Assignment.actor:type_name -> ateapi.ObjectRef + 21, // 51: ateapi.Control.GetActor:input_type -> ateapi.GetActorRequest + 22, // 52: ateapi.Control.CreateActor:input_type -> ateapi.CreateActorRequest + 23, // 53: ateapi.Control.UpdateActor:input_type -> ateapi.UpdateActorRequest + 25, // 54: ateapi.Control.SuspendActor:input_type -> ateapi.SuspendActorRequest + 27, // 55: ateapi.Control.PauseActor:input_type -> ateapi.PauseActorRequest + 29, // 56: ateapi.Control.ResumeActor:input_type -> ateapi.ResumeActorRequest + 31, // 57: ateapi.Control.DeleteActor:input_type -> ateapi.DeleteActorRequest + 32, // 58: ateapi.Control.GetActorSnapshot:input_type -> ateapi.GetActorSnapshotRequest + 33, // 59: ateapi.Control.ListActorSnapshots:input_type -> ateapi.ListActorSnapshotsRequest + 35, // 60: ateapi.Control.TagActorSnapshot:input_type -> ateapi.TagActorSnapshotRequest + 36, // 61: ateapi.Control.UpdateActorSnapshotTag:input_type -> ateapi.UpdateActorSnapshotTagRequest + 37, // 62: ateapi.Control.DeleteActorSnapshotTag:input_type -> ateapi.DeleteActorSnapshotTagRequest + 38, // 63: ateapi.Control.ListWorkers:input_type -> ateapi.ListWorkersRequest + 40, // 64: ateapi.Control.ListActors:input_type -> ateapi.ListActorsRequest + 16, // 65: ateapi.Control.CreateAtespace:input_type -> ateapi.CreateAtespaceRequest + 17, // 66: ateapi.Control.GetAtespace:input_type -> ateapi.GetAtespaceRequest + 18, // 67: ateapi.Control.ListAtespaces:input_type -> ateapi.ListAtespacesRequest + 20, // 68: ateapi.Control.DeleteAtespace:input_type -> ateapi.DeleteAtespaceRequest + 45, // 69: ateapi.Debug.DebugClear:input_type -> ateapi.DebugClearRequest + 47, // 70: ateapi.ActorIdentity.MintJWT:input_type -> ateapi.MintJWTRequest + 49, // 71: ateapi.ActorIdentity.MintCert:input_type -> ateapi.MintCertRequest + 9, // 72: ateapi.Control.GetActor:output_type -> ateapi.Actor + 9, // 73: ateapi.Control.CreateActor:output_type -> ateapi.Actor + 24, // 74: ateapi.Control.UpdateActor:output_type -> ateapi.UpdateActorResponse + 26, // 75: ateapi.Control.SuspendActor:output_type -> ateapi.SuspendActorResponse + 28, // 76: ateapi.Control.PauseActor:output_type -> ateapi.PauseActorResponse + 30, // 77: ateapi.Control.ResumeActor:output_type -> ateapi.ResumeActorResponse + 9, // 78: ateapi.Control.DeleteActor:output_type -> ateapi.Actor + 11, // 79: ateapi.Control.GetActorSnapshot:output_type -> ateapi.ActorSnapshot + 34, // 80: ateapi.Control.ListActorSnapshots:output_type -> ateapi.ListActorSnapshotsResponse + 12, // 81: ateapi.Control.TagActorSnapshot:output_type -> ateapi.ActorSnapshotTag + 12, // 82: ateapi.Control.UpdateActorSnapshotTag:output_type -> ateapi.ActorSnapshotTag + 12, // 83: ateapi.Control.DeleteActorSnapshotTag:output_type -> ateapi.ActorSnapshotTag + 39, // 84: ateapi.Control.ListWorkers:output_type -> ateapi.ListWorkersResponse + 41, // 85: ateapi.Control.ListActors:output_type -> ateapi.ListActorsResponse + 13, // 86: ateapi.Control.CreateAtespace:output_type -> ateapi.Atespace + 13, // 87: ateapi.Control.GetAtespace:output_type -> ateapi.Atespace + 19, // 88: ateapi.Control.ListAtespaces:output_type -> ateapi.ListAtespacesResponse + 13, // 89: ateapi.Control.DeleteAtespace:output_type -> ateapi.Atespace + 46, // 90: ateapi.Debug.DebugClear:output_type -> ateapi.DebugClearResponse + 48, // 91: ateapi.ActorIdentity.MintJWT:output_type -> ateapi.MintJWTResponse + 50, // 92: ateapi.ActorIdentity.MintCert:output_type -> ateapi.MintCertResponse + 72, // [72:93] is the sub-list for method output_type + 51, // [51:72] is the sub-list for method input_type + 51, // [51:51] is the sub-list for extension type_name + 51, // [51:51] is the sub-list for extension extendee + 0, // [0:51] is the sub-list for field type_name } func init() { file_ateapi_proto_init() } @@ -3371,7 +3422,7 @@ func file_ateapi_proto_init() { if File_ateapi_proto != nil { return } - file_ateapi_proto_msgTypes[9].OneofWrappers = []any{ + file_ateapi_proto_msgTypes[10].OneofWrappers = []any{ (*ActorSnapshotRef_Snapshot)(nil), (*ActorSnapshotRef_Tag)(nil), } @@ -3381,7 +3432,7 @@ func file_ateapi_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_ateapi_proto_rawDesc), len(file_ateapi_proto_rawDesc)), NumEnums: 5, - NumMessages: 47, + NumMessages: 48, NumExtensions: 0, NumServices: 3, }, diff --git a/pkg/proto/ateapipb/ateapi.proto b/pkg/proto/ateapipb/ateapi.proto index 1324804d8..d02cfb1a0 100644 --- a/pkg/proto/ateapipb/ateapi.proto +++ b/pkg/proto/ateapipb/ateapi.proto @@ -178,41 +178,48 @@ message Actor { } Status status = 4; - string ateom_pod_namespace = 5; - string ateom_pod_name = 6; - string ateom_pod_ip = 7; + // worker_assignment points at the worker currently hosting this Actor. + // Unset whenever the Actor has no worker (SUSPENDED, PAUSED, CRASHED). + WorkerAssignment worker_assignment = 5; - string in_progress_snapshot = 8; - string ateom_pod_uid = 9; - reserved 10; - reserved "latest_snapshot_info"; + string in_progress_snapshot = 6; // worker_selector is the per-actor placement constraint. The scheduler // evaluates the AND of this selector and the template's workerSelector to // find eligible pools. Set at CreateActor; may be updated at any time via // UpdateActor. Changes take effect on the next ResumeActor call. - Selector worker_selector = 11; - - // worker_pool_name is the name of the WorkerPool that owns the currently - // assigned worker, in the same namespace as ateom_pod_namespace (pool and - // pod namespaces always match). Set by the scheduler at assignment time - // and cleared when the worker is freed. Needed to release the worker on - // suspend/pause since eligibility is no longer a single fixed pool - // reference on the ActorTemplate. - string worker_pool_name = 12; + Selector worker_selector = 7; // The latest durable snapshot created for this Actor. - ObjectRef latest_snapshot = 14; + ObjectRef latest_snapshot = 8; // Node-local state used only while the Actor is paused. - LocalSnapshotInfo local_snapshot_info = 15; + LocalSnapshotInfo local_snapshot_info = 9; // Actor version captured when the current durable snapshot began. - int64 in_progress_snapshot_source_actor_version = 16; + int64 in_progress_snapshot_source_actor_version = 10; // Volumes attached to the actor. These volumes only live as long as the actor. // They are deleted when the actor is deleted. - repeated ExternalVolume actor_volumes = 13; + repeated ExternalVolume actor_volumes = 11; +} + +// WorkerAssignment identifies the Worker currently hosting an Actor. +message WorkerAssignment { + // worker_namespace is the Kubernetes namespace of the WorkerPool and worker Pod. + string worker_namespace = 1; + + // worker_pool is the name of the WorkerPool the worker belongs to. + string worker_pool = 2; + + // worker_pod is the name of the Kubernetes pod hosting the Actor. + string worker_pod = 3; + + // worker_pod_uid is the Kubernetes UID of worker_pod. + string worker_pod_uid = 4; + + // worker_pod_ip is the IP of worker_pod. + string worker_pod_ip = 5; } // ActorSnapshot is an independently addressable durable Actor snapshot. Its