diff --git a/internal/daemon/cluster/downstreammanager.go b/internal/daemon/cluster/downstreammanager.go index 21eee9352..e756acd69 100644 --- a/internal/daemon/cluster/downstreammanager.go +++ b/internal/daemon/cluster/downstreammanager.go @@ -87,22 +87,24 @@ func (m *DownstreamManager) Connected() *connectedState { m.l.RLock() defer m.l.RUnlock() seenWIds := make(map[string]struct{}) - var workerIds, keyIds []string + var workerIds, unmappedKeyIds, allKeyIds []string for k, v := range m.workerConnections { if len(v) > 0 { + allKeyIds = append(allKeyIds, k) if w, ok := m.keyToWorkerId[k]; ok { if _, ok := seenWIds[w]; !ok { seenWIds[w] = struct{}{} workerIds = append(workerIds, w) } } else { - keyIds = append(keyIds, k) + unmappedKeyIds = append(unmappedKeyIds, k) } } } return &connectedState{ dm: m, - unmappedKeyIds: keyIds, + allKeyIds: allKeyIds, + unmappedKeyIds: unmappedKeyIds, workerIds: workerIds, } } @@ -111,10 +113,18 @@ func (m *DownstreamManager) Connected() *connectedState { // to request connections be disconnected that are capturred in this state. type connectedState struct { dm *DownstreamManager + allKeyIds []string unmappedKeyIds []string workerIds []string } +// AllKeyIds returns all key ids for downstream workers. +// Deprecated. Please use Unmapped KeyIds instead when communicating with +// controllers running version >= 0.12.0 HCP and >0.12.0 OSS. +func (s *connectedState) AllKeyIds() []string { + return s.allKeyIds +} + // UnmappedKeyIds are the key ids for which no worker id association is known // and which are tracking at least 1 connection. func (s *connectedState) UnmappedKeyIds() []string { @@ -140,9 +150,9 @@ func (s *connectedState) DisconnectMissingWorkers(workers []string) { } } -// DisconnectMissingKeyIds disconnects all workers which are not in the slice of -// key ids provided but are tracked in this connected state. -func (s *connectedState) DisconnectMissingKeyIds(keyIds []string) { +// DisconnectMissingUnmappedKeyIds disconnects all connections which are not in +// the slice of key ids provided but are tracked in this connected state. +func (s *connectedState) DisconnectMissingUnmappedKeyIds(keyIds []string) { am := make(map[string]struct{}, len(keyIds)) for _, i := range keyIds { am[i] = struct{}{} @@ -153,3 +163,19 @@ func (s *connectedState) DisconnectMissingKeyIds(keyIds []string) { } } } + +// DisconnectAllMissingKeyIds disconnects all workers which are not in the slice +// of key ids provided but are tracked in this connected state. +// Deprecated. Please use DisconnectMissingUnmappedKeyIds and DisconnectMissingWorkers. +// This remains for now only to support older controller versions. +func (s *connectedState) DisconnectAllMissingKeyIds(keyIds []string) { + am := make(map[string]struct{}, len(keyIds)) + for _, i := range keyIds { + am[i] = struct{}{} + } + for _, i := range s.allKeyIds { + if _, found := am[i]; !found { + s.dm.disconnectKeys(i) + } + } +} diff --git a/internal/daemon/cluster/downstreammanager_test.go b/internal/daemon/cluster/downstreammanager_test.go index e416360ee..72cc42e3d 100644 --- a/internal/daemon/cluster/downstreammanager_test.go +++ b/internal/daemon/cluster/downstreammanager_test.go @@ -23,12 +23,14 @@ func TestNewDownstreamManager(t *testing.T) { dm.addConnection("1", w1) st := dm.Connected() assert.Equal(t, []string{"1"}, st.UnmappedKeyIds()) + assert.Equal(t, []string{"1"}, st.AllKeyIds()) dm.disconnectKeys("1") assert.ErrorIs(t, w1.SetReadDeadline(time.Now()), io.ErrClosedPipe) assert.ErrorIs(t, g1.SetReadDeadline(time.Now()), io.ErrClosedPipe) assert.Empty(t, dm.Connected().UnmappedKeyIds()) + assert.Empty(t, dm.Connected().AllKeyIds()) }) t.Run("single connection with worker", func(t *testing.T) { @@ -38,6 +40,7 @@ func TestNewDownstreamManager(t *testing.T) { st := dm.Connected() assert.Empty(t, st.UnmappedKeyIds()) + assert.Equal(t, []string{"1"}, st.AllKeyIds()) assert.Equal(t, []string{"w1"}, st.WorkerIds()) dm.disconnectWorkerId("w1") @@ -45,6 +48,7 @@ func TestNewDownstreamManager(t *testing.T) { assert.ErrorIs(t, g1.SetReadDeadline(time.Now()), io.ErrClosedPipe) assert.Empty(t, dm.Connected().UnmappedKeyIds()) + assert.Empty(t, dm.Connected().AllKeyIds()) assert.Empty(t, dm.Connected().WorkerIds()) }) @@ -55,6 +59,7 @@ func TestNewDownstreamManager(t *testing.T) { w2, g2 := net.Pipe() dm.addConnection("1", w2) assert.Equal(t, []string{"1"}, dm.Connected().UnmappedKeyIds()) + assert.Equal(t, []string{"1"}, dm.Connected().AllKeyIds()) assert.NoError(t, w1.SetReadDeadline(time.Now())) assert.NoError(t, g1.SetReadDeadline(time.Now())) @@ -68,6 +73,7 @@ func TestNewDownstreamManager(t *testing.T) { assert.ErrorIs(t, g2.SetReadDeadline(time.Now()), io.ErrClosedPipe) assert.Empty(t, dm.Connected().UnmappedKeyIds()) + assert.Empty(t, dm.Connected().AllKeyIds()) }) t.Run("multiple connection with single key mapped to worker", func(t *testing.T) { @@ -81,6 +87,7 @@ func TestNewDownstreamManager(t *testing.T) { dm.mapKeyToWorkerId("1", "w1") assert.Equal(t, []string{"w1"}, dm.Connected().WorkerIds()) assert.Empty(t, dm.Connected().UnmappedKeyIds()) + assert.Equal(t, []string{"1"}, dm.Connected().AllKeyIds()) assert.NoError(t, w1.SetReadDeadline(time.Now())) assert.NoError(t, g1.SetReadDeadline(time.Now())) @@ -95,6 +102,7 @@ func TestNewDownstreamManager(t *testing.T) { assert.Empty(t, dm.Connected().UnmappedKeyIds()) assert.Empty(t, dm.Connected().WorkerIds()) + assert.Empty(t, dm.Connected().AllKeyIds()) }) t.Run("multiple connection with different keys", func(t *testing.T) { @@ -106,6 +114,7 @@ func TestNewDownstreamManager(t *testing.T) { got := dm.Connected().UnmappedKeyIds() sort.Strings(got) assert.ElementsMatch(t, []string{"1", "2"}, got) + assert.ElementsMatch(t, []string{"1", "2"}, dm.Connected().AllKeyIds()) dm.disconnectKeys("1") assert.ErrorIs(t, w1.SetReadDeadline(time.Now()), io.ErrClosedPipe) @@ -135,6 +144,7 @@ func TestNewDownstreamManager(t *testing.T) { dm.mapKeyToWorkerId("2", "w1") assert.Equal(t, []string{"w1"}, dm.Connected().WorkerIds()) assert.Empty(t, dm.Connected().UnmappedKeyIds()) + assert.ElementsMatch(t, []string{"1", "2"}, dm.Connected().AllKeyIds()) assert.NoError(t, w1.SetReadDeadline(time.Now())) assert.NoError(t, g1.SetReadDeadline(time.Now())) @@ -230,7 +240,33 @@ func TestConnectionState_Disconnect(t *testing.T) { st := dm.Connected() assert.ElementsMatch(t, []string{"1", "2", "3"}, st.UnmappedKeyIds()) - st.DisconnectMissingKeyIds([]string{"3"}) + st.DisconnectMissingUnmappedKeyIds([]string{"3"}) + assert.ErrorIs(t, w1.SetReadDeadline(time.Now()), io.ErrClosedPipe) + assert.ErrorIs(t, w2a.SetReadDeadline(time.Now()), io.ErrClosedPipe) + assert.ErrorIs(t, w2b.SetReadDeadline(time.Now()), io.ErrClosedPipe) + assert.NoError(t, w3.SetReadDeadline(time.Now())) + }) + + t.Run("disconnect some key ids using DisconnectAll", func(t *testing.T) { + dm := NewDownstreamManager() + w1, _ := net.Pipe() + dm.addConnection("1", w1) + w2a, _ := net.Pipe() + dm.addConnection("2", w2a) + w2b, _ := net.Pipe() + dm.addConnection("2", w2b) + w3, _ := net.Pipe() + dm.addConnection("3", w3) + + assert.NoError(t, w1.SetReadDeadline(time.Now())) + assert.NoError(t, w2a.SetReadDeadline(time.Now())) + assert.NoError(t, w2b.SetReadDeadline(time.Now())) + assert.NoError(t, w3.SetReadDeadline(time.Now())) + + st := dm.Connected() + assert.ElementsMatch(t, []string{"1", "2", "3"}, st.UnmappedKeyIds()) + + st.DisconnectAllMissingKeyIds([]string{"3"}) assert.ErrorIs(t, w1.SetReadDeadline(time.Now()), io.ErrClosedPipe) assert.ErrorIs(t, w2a.SetReadDeadline(time.Now()), io.ErrClosedPipe) assert.ErrorIs(t, w2b.SetReadDeadline(time.Now()), io.ErrClosedPipe) @@ -256,7 +292,7 @@ func TestConnectionState_Disconnect(t *testing.T) { st := dm.Connected() assert.ElementsMatch(t, []string{"1", "2", "3"}, st.UnmappedKeyIds()) - st.DisconnectMissingKeyIds(nil) + st.DisconnectMissingUnmappedKeyIds(nil) assert.ErrorIs(t, w1.SetReadDeadline(time.Now()), io.ErrClosedPipe) assert.ErrorIs(t, w2a.SetReadDeadline(time.Now()), io.ErrClosedPipe) assert.ErrorIs(t, w2b.SetReadDeadline(time.Now()), io.ErrClosedPipe) @@ -292,6 +328,36 @@ func TestConnectionState_Disconnect(t *testing.T) { assert.NoError(t, w3.SetReadDeadline(time.Now())) }) + t.Run("disconnect 2 key ids using DisconnectAll overlapping with workers", func(t *testing.T) { + dm := NewDownstreamManager() + w1, _ := net.Pipe() + dm.addConnection("1", w1) + w2a, _ := net.Pipe() + dm.addConnection("2", w2a) + w2b, _ := net.Pipe() + dm.addConnection("2", w2b) + w3, _ := net.Pipe() + dm.addConnection("3", w3) + + assert.NoError(t, w1.SetReadDeadline(time.Now())) + assert.NoError(t, w2a.SetReadDeadline(time.Now())) + assert.NoError(t, w2b.SetReadDeadline(time.Now())) + assert.NoError(t, w3.SetReadDeadline(time.Now())) + + dm.mapKeyToWorkerId("1", "w1") + dm.mapKeyToWorkerId("2", "w1") + st := dm.Connected() + assert.ElementsMatch(t, []string{"3"}, st.UnmappedKeyIds()) + assert.ElementsMatch(t, []string{"1", "2", "3"}, st.AllKeyIds()) + assert.ElementsMatch(t, []string{"w1"}, st.WorkerIds()) + + st.DisconnectAllMissingKeyIds([]string{"1"}) + assert.NoError(t, w1.SetReadDeadline(time.Now())) + assert.ErrorIs(t, w2a.SetReadDeadline(time.Now()), io.ErrClosedPipe) + assert.ErrorIs(t, w2b.SetReadDeadline(time.Now()), io.ErrClosedPipe) + assert.ErrorIs(t, w3.SetReadDeadline(time.Now()), io.ErrClosedPipe) + }) + t.Run("disconnect 1 key id leave worker id alone", func(t *testing.T) { dm := NewDownstreamManager() w1, _ := net.Pipe() @@ -314,7 +380,7 @@ func TestConnectionState_Disconnect(t *testing.T) { assert.ElementsMatch(t, []string{"3"}, st.UnmappedKeyIds()) assert.ElementsMatch(t, []string{"w1"}, st.WorkerIds()) - st.DisconnectMissingKeyIds(nil) + st.DisconnectMissingUnmappedKeyIds(nil) assert.NoError(t, w1.SetReadDeadline(time.Now())) assert.NoError(t, w2a.SetReadDeadline(time.Now())) assert.NoError(t, w2b.SetReadDeadline(time.Now())) diff --git a/internal/daemon/cluster/handlers/worker_service.go b/internal/daemon/cluster/handlers/worker_service.go index 929b77325..f8dea3deb 100644 --- a/internal/daemon/cluster/handlers/worker_service.go +++ b/internal/daemon/cluster/handlers/worker_service.go @@ -166,22 +166,33 @@ func (ws *workerServiceServer) Status(ctx context.Context, req *pbs.StatusReques responseControllers = append(responseControllers, thisController) } - authorizedWorkerList := &pbs.AuthorizedWorkerList{} + workerAuthRepo, err := ws.workerAuthRepoFn() + if err != nil { + event.WriteError(ctx, op, err, event.WithInfoMsg("error getting worker auth repo")) + return &pbs.StatusResponse{}, status.Errorf(codes.Internal, "Error acquiring repo to lookup worker auth info: %v", err) + } + + authorizedDownstreams := &pbs.AuthorizedDownstreamWorkerList{} if len(req.GetConnectedWorkerPublicIds()) > 0 { knownConnectedWorkers, err := serverRepo.ListWorkers(ctx, []string{scope.Global.String()}, server.WithWorkerPool(req.GetConnectedWorkerPublicIds()), server.WithLiveness(-1)) if err != nil { event.WriteError(ctx, op, err, event.WithInfoMsg("error getting known connected worker ids")) return &pbs.StatusResponse{}, status.Errorf(codes.Internal, "Error getting known connected worker ids: %v", err) } - authorizedWorkerList.WorkerPublicIds = dcommon.WorkerList(knownConnectedWorkers).PublicIds() + authorizedDownstreams.WorkerPublicIds = dcommon.WorkerList(knownConnectedWorkers).PublicIds() } - if len(req.GetConnectedWorkerKeyIdentifiers()) > 0 { - workerAuthRepo, err := ws.workerAuthRepoFn() + if len(req.GetConnectedUnmappedWorkerKeyIdentifiers()) > 0 { + authorizedKeyIds, err := workerAuthRepo.FilterToAuthorizedWorkerKeyIds(ctx, req.GetConnectedUnmappedWorkerKeyIdentifiers()) if err != nil { - event.WriteError(ctx, op, err, event.WithInfoMsg("error getting worker auth repo")) - return &pbs.StatusResponse{}, status.Errorf(codes.Internal, "Error acquiring repo to lookup worker auth info: %v", err) + event.WriteError(ctx, op, err, event.WithInfoMsg("error getting authorized unmapped worker key ids")) + return &pbs.StatusResponse{}, status.Errorf(codes.Internal, "Error getting authorized worker key ids: %v", err) } + authorizedDownstreams.UnmappedWorkerKeyIdentifiers = authorizedKeyIds + } + + authorizedWorkerList := &pbs.AuthorizedWorkerList{} + if len(req.GetConnectedWorkerKeyIdentifiers()) > 0 { authorizedKeyIds, err := workerAuthRepo.FilterToAuthorizedWorkerKeyIds(ctx, req.GetConnectedWorkerKeyIdentifiers()) if err != nil { event.WriteError(ctx, op, err, event.WithInfoMsg("error getting authorized worker key ids")) @@ -191,9 +202,10 @@ func (ws *workerServiceServer) Status(ctx context.Context, req *pbs.StatusReques } ret := &pbs.StatusResponse{ - CalculatedUpstreams: responseControllers, - WorkerId: wrk.GetPublicId(), - AuthorizedWorkers: authorizedWorkerList, + CalculatedUpstreams: responseControllers, + WorkerId: wrk.GetPublicId(), + AuthorizedWorkers: authorizedWorkerList, + AuthorizedDownstreamWorkers: authorizedDownstreams, } stateReport := make([]*session.StateReport, 0, len(req.GetJobs())) diff --git a/internal/daemon/cluster/handlers/worker_service_status_test.go b/internal/daemon/cluster/handlers/worker_service_status_test.go index 465fb5b1f..47b805ec0 100644 --- a/internal/daemon/cluster/handlers/worker_service_status_test.go +++ b/internal/daemon/cluster/handlers/worker_service_status_test.go @@ -128,8 +128,9 @@ func TestStatus(t *testing.T) { Address: "127.0.0.1", }, }, - WorkerId: worker1.PublicId, - AuthorizedWorkers: &pbs.AuthorizedWorkerList{}, + WorkerId: worker1.PublicId, + AuthorizedWorkers: &pbs.AuthorizedWorkerList{}, + AuthorizedDownstreamWorkers: &pbs.AuthorizedDownstreamWorkerList{}, }, }, { @@ -168,8 +169,9 @@ func TestStatus(t *testing.T) { Address: "127.0.0.1", }, }, - WorkerId: worker1.PublicId, - AuthorizedWorkers: &pbs.AuthorizedWorkerList{}, + WorkerId: worker1.PublicId, + AuthorizedWorkers: &pbs.AuthorizedWorkerList{}, + AuthorizedDownstreamWorkers: &pbs.AuthorizedDownstreamWorkerList{}, }, }, { @@ -221,6 +223,7 @@ func TestStatus(t *testing.T) { pbs.SessionJobInfo{}, pbs.Connection{}, pbs.AuthorizedWorkerList{}, + pbs.AuthorizedDownstreamWorkerList{}, ), cmpopts.IgnoreFields(pb.ServerWorkerStatus{}, "Tags"), ), @@ -370,8 +373,9 @@ func TestStatusSessionClosed(t *testing.T) { RequestType: pbs.CHANGETYPE_CHANGETYPE_UPDATE_STATE, }, }, - WorkerId: worker1.PublicId, - AuthorizedWorkers: &pbs.AuthorizedWorkerList{}, + WorkerId: worker1.PublicId, + AuthorizedWorkers: &pbs.AuthorizedWorkerList{}, + AuthorizedDownstreamWorkers: &pbs.AuthorizedDownstreamWorkerList{}, }, }, } @@ -404,6 +408,7 @@ func TestStatusSessionClosed(t *testing.T) { pbs.SessionJobInfo{}, pbs.Connection{}, pbs.AuthorizedWorkerList{}, + pbs.AuthorizedDownstreamWorkerList{}, ), cmpopts.IgnoreFields(pb.ServerWorkerStatus{}, "Tags"), ), @@ -528,8 +533,9 @@ func TestStatusDeadConnection(t *testing.T) { Address: "127.0.0.1", }, }, - WorkerId: worker1.PublicId, - AuthorizedWorkers: &pbs.AuthorizedWorkerList{}, + WorkerId: worker1.PublicId, + AuthorizedWorkers: &pbs.AuthorizedWorkerList{}, + AuthorizedDownstreamWorkers: &pbs.AuthorizedDownstreamWorkerList{}, } got, err := s.Status(ctx, req) @@ -547,6 +553,7 @@ func TestStatusDeadConnection(t *testing.T) { pbs.SessionJobInfo{}, pbs.Connection{}, pbs.AuthorizedWorkerList{}, + pbs.AuthorizedDownstreamWorkerList{}, ), cmpopts.IgnoreFields(pb.ServerWorkerStatus{}, "Tags"), ), @@ -673,8 +680,9 @@ func TestStatusWorkerWithKeyId(t *testing.T) { Address: "127.0.0.1", }, }, - WorkerId: worker1.PublicId, - AuthorizedWorkers: &pbs.AuthorizedWorkerList{}, + WorkerId: worker1.PublicId, + AuthorizedWorkers: &pbs.AuthorizedWorkerList{}, + AuthorizedDownstreamWorkers: &pbs.AuthorizedDownstreamWorkerList{}, }, }, { @@ -712,8 +720,9 @@ func TestStatusWorkerWithKeyId(t *testing.T) { Address: "127.0.0.1", }, }, - WorkerId: worker1.PublicId, - AuthorizedWorkers: &pbs.AuthorizedWorkerList{}, + WorkerId: worker1.PublicId, + AuthorizedWorkers: &pbs.AuthorizedWorkerList{}, + AuthorizedDownstreamWorkers: &pbs.AuthorizedDownstreamWorkerList{}, }, }, } @@ -744,6 +753,7 @@ func TestStatusWorkerWithKeyId(t *testing.T) { pbs.SessionJobInfo{}, pbs.Connection{}, pbs.AuthorizedWorkerList{}, + pbs.AuthorizedDownstreamWorkerList{}, ), cmpopts.IgnoreFields(pb.ServerWorkerStatus{}, "Tags"), ), @@ -813,8 +823,9 @@ func TestStatusAuthorizedWorkers(t *testing.T) { Address: "127.0.0.1", }, }, - WorkerId: worker1.PublicId, - AuthorizedWorkers: &pbs.AuthorizedWorkerList{}, + WorkerId: worker1.PublicId, + AuthorizedWorkers: &pbs.AuthorizedWorkerList{}, + AuthorizedDownstreamWorkers: &pbs.AuthorizedDownstreamWorkerList{}, }, }, { @@ -834,8 +845,9 @@ func TestStatusAuthorizedWorkers(t *testing.T) { Address: "127.0.0.1", }, }, - WorkerId: worker1.PublicId, - AuthorizedWorkers: &pbs.AuthorizedWorkerList{}, + WorkerId: worker1.PublicId, + AuthorizedWorkers: &pbs.AuthorizedWorkerList{}, + AuthorizedDownstreamWorkers: &pbs.AuthorizedDownstreamWorkerList{}, }, }, { @@ -860,6 +872,7 @@ func TestStatusAuthorizedWorkers(t *testing.T) { AuthorizedWorkers: &pbs.AuthorizedWorkerList{ WorkerKeyIdentifiers: []string{w1KeyId, w2KeyId}, }, + AuthorizedDownstreamWorkers: &pbs.AuthorizedDownstreamWorkerList{}, }, }, { @@ -871,8 +884,9 @@ func TestStatusAuthorizedWorkers(t *testing.T) { Name: worker1.GetName(), Address: worker1.GetAddress(), }, - ConnectedWorkerKeyIdentifiers: []string{w2KeyId, "unknown"}, - ConnectedWorkerPublicIds: []string{w1.GetPublicId(), "unknown"}, + ConnectedWorkerKeyIdentifiers: []string{w1KeyId, w2KeyId, "unknown"}, + ConnectedUnmappedWorkerKeyIdentifiers: []string{w2KeyId, "unknown"}, + ConnectedWorkerPublicIds: []string{w1.GetPublicId(), "unknown"}, }, want: &pbs.StatusResponse{ CalculatedUpstreams: []*pbs.UpstreamServer{ @@ -883,8 +897,11 @@ func TestStatusAuthorizedWorkers(t *testing.T) { }, WorkerId: worker1.PublicId, AuthorizedWorkers: &pbs.AuthorizedWorkerList{ - WorkerKeyIdentifiers: []string{w2KeyId}, - WorkerPublicIds: []string{w1.GetPublicId()}, + WorkerKeyIdentifiers: []string{w1KeyId, w2KeyId}, + }, + AuthorizedDownstreamWorkers: &pbs.AuthorizedDownstreamWorkerList{ + UnmappedWorkerKeyIdentifiers: []string{w2KeyId}, + WorkerPublicIds: []string{w1.GetPublicId()}, }, }, }, @@ -897,8 +914,9 @@ func TestStatusAuthorizedWorkers(t *testing.T) { Name: worker1.GetName(), Address: worker1.GetAddress(), }, - ConnectedWorkerKeyIdentifiers: []string{"unknown"}, - ConnectedWorkerPublicIds: []string{w1.GetPublicId(), w2.GetPublicId(), "unknown"}, + ConnectedWorkerKeyIdentifiers: []string{w1KeyId, w2KeyId, "unknown"}, + ConnectedUnmappedWorkerKeyIdentifiers: []string{"unknown"}, + ConnectedWorkerPublicIds: []string{w1.GetPublicId(), w2.GetPublicId(), "unknown"}, }, want: &pbs.StatusResponse{ CalculatedUpstreams: []*pbs.UpstreamServer{ @@ -909,6 +927,9 @@ func TestStatusAuthorizedWorkers(t *testing.T) { }, WorkerId: worker1.PublicId, AuthorizedWorkers: &pbs.AuthorizedWorkerList{ + WorkerKeyIdentifiers: []string{w1KeyId, w2KeyId}, + }, + AuthorizedDownstreamWorkers: &pbs.AuthorizedDownstreamWorkerList{ WorkerPublicIds: []string{w1.GetPublicId(), w2.GetPublicId()}, }, }, @@ -928,8 +949,10 @@ func TestStatusAuthorizedWorkers(t *testing.T) { } sort.Strings(got.GetAuthorizedWorkers().GetWorkerKeyIdentifiers()) sort.Strings(tc.want.GetAuthorizedWorkers().GetWorkerKeyIdentifiers()) - sort.Strings(got.GetAuthorizedWorkers().GetWorkerPublicIds()) - sort.Strings(tc.want.GetAuthorizedWorkers().GetWorkerPublicIds()) + sort.Strings(got.GetAuthorizedDownstreamWorkers().GetWorkerPublicIds()) + sort.Strings(tc.want.GetAuthorizedDownstreamWorkers().GetWorkerPublicIds()) + sort.Strings(got.GetAuthorizedDownstreamWorkers().GetUnmappedWorkerKeyIdentifiers()) + sort.Strings(tc.want.GetAuthorizedDownstreamWorkers().GetUnmappedWorkerKeyIdentifiers()) assert.Empty( cmp.Diff( tc.want, @@ -944,6 +967,7 @@ func TestStatusAuthorizedWorkers(t *testing.T) { pbs.SessionJobInfo{}, pbs.Connection{}, pbs.AuthorizedWorkerList{}, + pbs.AuthorizedDownstreamWorkerList{}, ), cmpopts.IgnoreFields(pb.ServerWorkerStatus{}, "Tags"), ), diff --git a/internal/daemon/controller/tickers.go b/internal/daemon/controller/tickers.go index afa91507e..a417a6fa1 100644 --- a/internal/daemon/controller/tickers.go +++ b/internal/daemon/controller/tickers.go @@ -218,7 +218,7 @@ func (c *Controller) startWorkerConnectionMaintenanceTicking(cancelCtx context.C event.WriteError(cancelCtx, op, err, event.WithInfoMsg("couldn't get authorized workers from repo")) break } - connectionState.DisconnectMissingKeyIds(authorized) + connectionState.DisconnectMissingUnmappedKeyIds(authorized) } } diff --git a/internal/daemon/worker/status.go b/internal/daemon/worker/status.go index 34d424f20..6e5be38dc 100644 --- a/internal/daemon/worker/status.go +++ b/internal/daemon/worker/status.go @@ -183,9 +183,10 @@ func (w *Worker) sendWorkerStatus(cancelCtx context.Context, sessionManager sess ReleaseVersion: versionInfo.FullVersionNumber(false), OperationalState: w.operationalState.Load().(server.OperationalState).String(), }, - ConnectedWorkerKeyIdentifiers: connectionState.UnmappedKeyIds(), - ConnectedWorkerPublicIds: connectionState.WorkerIds(), - UpdateTags: w.updateTags.Load(), + ConnectedWorkerKeyIdentifiers: connectionState.AllKeyIds(), + ConnectedUnmappedWorkerKeyIdentifiers: connectionState.UnmappedKeyIds(), + ConnectedWorkerPublicIds: connectionState.WorkerIds(), + UpdateTags: w.updateTags.Load(), }) if err != nil { event.WriteError(cancelCtx, op, err, event.WithInfoMsg("error making status request to controller")) @@ -250,9 +251,11 @@ func (w *Worker) sendWorkerStatus(cancelCtx context.Context, sessionManager sess w.updateTags.Store(false) - if authorized := result.GetAuthorizedWorkers(); authorized != nil { + if authorized := result.GetAuthorizedDownstreamWorkers(); authorized != nil { connectionState.DisconnectMissingWorkers(authorized.GetWorkerPublicIds()) - connectionState.DisconnectMissingKeyIds(authorized.GetWorkerKeyIdentifiers()) + connectionState.DisconnectMissingUnmappedKeyIds(authorized.GetUnmappedWorkerKeyIdentifiers()) + } else if authorized := result.GetAuthorizedWorkers(); authorized != nil { + connectionState.DisconnectAllMissingKeyIds(authorized.GetWorkerKeyIdentifiers()) } var addrs []string // This may be empty if we are in a multiple hop scenario diff --git a/internal/gen/controller/servers/services/server_coordination_service.pb.go b/internal/gen/controller/servers/services/server_coordination_service.pb.go index 5a46149ec..5f33a1dcb 100644 --- a/internal/gen/controller/servers/services/server_coordination_service.pb.go +++ b/internal/gen/controller/servers/services/server_coordination_service.pb.go @@ -608,8 +608,15 @@ type StatusRequest struct { // get access to the key and spoof the connection, you're already compromised. WorkerStatus *servers.ServerWorkerStatus `protobuf:"bytes,40,opt,name=worker_status,json=workerStatus,proto3" json:"worker_status,omitempty"` // The worker key identifiers presented by all downstreams connected to this - // worker + // worker. + // Deprecated. Should be removed in 0.15.0 at which time + // connected_unmapped_worker_key_identifiers should be used exclusively. + // + // Deprecated: Do not use. ConnectedWorkerKeyIdentifiers []string `protobuf:"bytes,50,rep,name=connected_worker_key_identifiers,json=connectedWorkerKeyIdentifiers,proto3" json:"connected_worker_key_identifiers,omitempty"` + // The worker key identifiers for downstream workers for which there + // is not a known worker id mapping for them yet. + ConnectedUnmappedWorkerKeyIdentifiers []string `protobuf:"bytes,51,rep,name=connected_unmapped_worker_key_identifiers,json=connectedUnmappedWorkerKeyIdentifiers,proto3" json:"connected_unmapped_worker_key_identifiers,omitempty"` // The worker public ids of all downstreams connected to this worker if known. // While there may be workers with key ids in the connected_worker_key_identifiers // list and their public ids in this list, once the requesting worker is aware @@ -670,6 +677,7 @@ func (x *StatusRequest) GetWorkerStatus() *servers.ServerWorkerStatus { return nil } +// Deprecated: Do not use. func (x *StatusRequest) GetConnectedWorkerKeyIdentifiers() []string { if x != nil { return x.ConnectedWorkerKeyIdentifiers @@ -677,6 +685,13 @@ func (x *StatusRequest) GetConnectedWorkerKeyIdentifiers() []string { return nil } +func (x *StatusRequest) GetConnectedUnmappedWorkerKeyIdentifiers() []string { + if x != nil { + return x.ConnectedUnmappedWorkerKeyIdentifiers + } + return nil +} + func (x *StatusRequest) GetConnectedWorkerPublicIds() []string { if x != nil { return x.ConnectedWorkerPublicIds @@ -739,16 +754,16 @@ func (x *JobChangeRequest) GetRequestType() CHANGETYPE { return CHANGETYPE_CHANGETYPE_UNSPECIFIED } +// Deprecated: Do not use. type AuthorizedWorkerList struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // the key id of authorized workers + // + // Deprecated: Do not use. WorkerKeyIdentifiers []string `protobuf:"bytes,1,rep,name=worker_key_identifiers,json=workerKeyIdentifiers,proto3" json:"worker_key_identifiers,omitempty"` - // the public id of workers that were reported as being connected and which - // are known by the controller. - WorkerPublicIds []string `protobuf:"bytes,2,rep,name=worker_public_ids,json=workerPublicIds,proto3" json:"worker_public_ids,omitempty"` } func (x *AuthorizedWorkerList) Reset() { @@ -783,6 +798,7 @@ func (*AuthorizedWorkerList) Descriptor() ([]byte, []int) { return file_controller_servers_services_v1_server_coordination_service_proto_rawDescGZIP(), []int{7} } +// Deprecated: Do not use. func (x *AuthorizedWorkerList) GetWorkerKeyIdentifiers() []string { if x != nil { return x.WorkerKeyIdentifiers @@ -790,7 +806,59 @@ func (x *AuthorizedWorkerList) GetWorkerKeyIdentifiers() []string { return nil } -func (x *AuthorizedWorkerList) GetWorkerPublicIds() []string { +type AuthorizedDownstreamWorkerList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // the key id of authorized workers which do not have a worker id known yet + // to the requester. + UnmappedWorkerKeyIdentifiers []string `protobuf:"bytes,1,rep,name=unmapped_worker_key_identifiers,json=unmappedWorkerKeyIdentifiers,proto3" json:"unmapped_worker_key_identifiers,omitempty"` + // the public id of workers that were reported as being connected and which + // are known by the controller. + WorkerPublicIds []string `protobuf:"bytes,2,rep,name=worker_public_ids,json=workerPublicIds,proto3" json:"worker_public_ids,omitempty"` +} + +func (x *AuthorizedDownstreamWorkerList) Reset() { + *x = AuthorizedDownstreamWorkerList{} + if protoimpl.UnsafeEnabled { + mi := &file_controller_servers_services_v1_server_coordination_service_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AuthorizedDownstreamWorkerList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AuthorizedDownstreamWorkerList) ProtoMessage() {} + +func (x *AuthorizedDownstreamWorkerList) ProtoReflect() protoreflect.Message { + mi := &file_controller_servers_services_v1_server_coordination_service_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AuthorizedDownstreamWorkerList.ProtoReflect.Descriptor instead. +func (*AuthorizedDownstreamWorkerList) Descriptor() ([]byte, []int) { + return file_controller_servers_services_v1_server_coordination_service_proto_rawDescGZIP(), []int{8} +} + +func (x *AuthorizedDownstreamWorkerList) GetUnmappedWorkerKeyIdentifiers() []string { + if x != nil { + return x.UnmappedWorkerKeyIdentifiers + } + return nil +} + +func (x *AuthorizedDownstreamWorkerList) GetWorkerPublicIds() []string { if x != nil { return x.WorkerPublicIds } @@ -815,13 +883,20 @@ type StatusResponse struct { WorkerId string `protobuf:"bytes,40,opt,name=worker_id,json=workerId,proto3" json:"worker_id,omitempty" class:"public"` // @gotags: `class:"public"` // Of the worker key identifiers provided in the request, these are the ones // which are authorized to remain connected. + // This is deprecated. Use authorized_downstream_workers instead. This + // should be removed in version 0.15.0. + // + // Deprecated: Do not use. AuthorizedWorkers *AuthorizedWorkerList `protobuf:"bytes,50,opt,name=authorized_workers,json=authorizedWorkers,proto3" json:"authorized_workers,omitempty"` + // Of the downstream workers in the request, these are the ones + // which are authorized to remain connected. + AuthorizedDownstreamWorkers *AuthorizedDownstreamWorkerList `protobuf:"bytes,51,opt,name=authorized_downstream_workers,json=authorizedDownstreamWorkers,proto3" json:"authorized_downstream_workers,omitempty"` } func (x *StatusResponse) Reset() { *x = StatusResponse{} if protoimpl.UnsafeEnabled { - mi := &file_controller_servers_services_v1_server_coordination_service_proto_msgTypes[8] + mi := &file_controller_servers_services_v1_server_coordination_service_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -834,7 +909,7 @@ func (x *StatusResponse) String() string { func (*StatusResponse) ProtoMessage() {} func (x *StatusResponse) ProtoReflect() protoreflect.Message { - mi := &file_controller_servers_services_v1_server_coordination_service_proto_msgTypes[8] + mi := &file_controller_servers_services_v1_server_coordination_service_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -847,7 +922,7 @@ func (x *StatusResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StatusResponse.ProtoReflect.Descriptor instead. func (*StatusResponse) Descriptor() ([]byte, []int) { - return file_controller_servers_services_v1_server_coordination_service_proto_rawDescGZIP(), []int{8} + return file_controller_servers_services_v1_server_coordination_service_proto_rawDescGZIP(), []int{9} } func (x *StatusResponse) GetJobsRequests() []*JobChangeRequest { @@ -871,6 +946,7 @@ func (x *StatusResponse) GetWorkerId() string { return "" } +// Deprecated: Do not use. func (x *StatusResponse) GetAuthorizedWorkers() *AuthorizedWorkerList { if x != nil { return x.AuthorizedWorkers @@ -878,6 +954,13 @@ func (x *StatusResponse) GetAuthorizedWorkers() *AuthorizedWorkerList { return nil } +func (x *StatusResponse) GetAuthorizedDownstreamWorkers() *AuthorizedDownstreamWorkerList { + if x != nil { + return x.AuthorizedDownstreamWorkers + } + return nil +} + // WorkerInfo contains information about workers for the HcpbWorkerResponse message type WorkerInfo struct { state protoimpl.MessageState @@ -893,7 +976,7 @@ type WorkerInfo struct { func (x *WorkerInfo) Reset() { *x = WorkerInfo{} if protoimpl.UnsafeEnabled { - mi := &file_controller_servers_services_v1_server_coordination_service_proto_msgTypes[9] + mi := &file_controller_servers_services_v1_server_coordination_service_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -906,7 +989,7 @@ func (x *WorkerInfo) String() string { func (*WorkerInfo) ProtoMessage() {} func (x *WorkerInfo) ProtoReflect() protoreflect.Message { - mi := &file_controller_servers_services_v1_server_coordination_service_proto_msgTypes[9] + mi := &file_controller_servers_services_v1_server_coordination_service_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -919,7 +1002,7 @@ func (x *WorkerInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use WorkerInfo.ProtoReflect.Descriptor instead. func (*WorkerInfo) Descriptor() ([]byte, []int) { - return file_controller_servers_services_v1_server_coordination_service_proto_rawDescGZIP(), []int{9} + return file_controller_servers_services_v1_server_coordination_service_proto_rawDescGZIP(), []int{10} } func (x *WorkerInfo) GetId() string { @@ -946,7 +1029,7 @@ type ListHcpbWorkersRequest struct { func (x *ListHcpbWorkersRequest) Reset() { *x = ListHcpbWorkersRequest{} if protoimpl.UnsafeEnabled { - mi := &file_controller_servers_services_v1_server_coordination_service_proto_msgTypes[10] + mi := &file_controller_servers_services_v1_server_coordination_service_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -959,7 +1042,7 @@ func (x *ListHcpbWorkersRequest) String() string { func (*ListHcpbWorkersRequest) ProtoMessage() {} func (x *ListHcpbWorkersRequest) ProtoReflect() protoreflect.Message { - mi := &file_controller_servers_services_v1_server_coordination_service_proto_msgTypes[10] + mi := &file_controller_servers_services_v1_server_coordination_service_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -972,7 +1055,7 @@ func (x *ListHcpbWorkersRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListHcpbWorkersRequest.ProtoReflect.Descriptor instead. func (*ListHcpbWorkersRequest) Descriptor() ([]byte, []int) { - return file_controller_servers_services_v1_server_coordination_service_proto_rawDescGZIP(), []int{10} + return file_controller_servers_services_v1_server_coordination_service_proto_rawDescGZIP(), []int{11} } // A response containing worker information @@ -987,7 +1070,7 @@ type ListHcpbWorkersResponse struct { func (x *ListHcpbWorkersResponse) Reset() { *x = ListHcpbWorkersResponse{} if protoimpl.UnsafeEnabled { - mi := &file_controller_servers_services_v1_server_coordination_service_proto_msgTypes[11] + mi := &file_controller_servers_services_v1_server_coordination_service_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1000,7 +1083,7 @@ func (x *ListHcpbWorkersResponse) String() string { func (*ListHcpbWorkersResponse) ProtoMessage() {} func (x *ListHcpbWorkersResponse) ProtoReflect() protoreflect.Message { - mi := &file_controller_servers_services_v1_server_coordination_service_proto_msgTypes[11] + mi := &file_controller_servers_services_v1_server_coordination_service_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1013,7 +1096,7 @@ func (x *ListHcpbWorkersResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListHcpbWorkersResponse.ProtoReflect.Descriptor instead. func (*ListHcpbWorkersResponse) Descriptor() ([]byte, []int) { - return file_controller_servers_services_v1_server_coordination_service_proto_rawDescGZIP(), []int{11} + return file_controller_servers_services_v1_server_coordination_service_proto_rawDescGZIP(), []int{12} } func (x *ListHcpbWorkersResponse) GetWorkers() []*WorkerInfo { @@ -1084,7 +1167,7 @@ var file_controller_servers_services_v1_server_coordination_service_proto_rawDes 0x0a, 0x10, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x4f, 0x4c, 0x4c, 0x45, 0x52, 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x59, 0x50, - 0x45, 0x5f, 0x57, 0x4f, 0x52, 0x4b, 0x45, 0x52, 0x10, 0x02, 0x22, 0xd5, 0x02, 0x0a, 0x0d, 0x53, + 0x45, 0x5f, 0x57, 0x4f, 0x52, 0x4b, 0x45, 0x52, 0x10, 0x02, 0x22, 0xb3, 0x03, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x04, 0x6a, 0x6f, 0x62, 0x73, 0x18, 0x14, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x2e, @@ -1096,34 +1179,47 @@ var file_controller_servers_services_v1_server_coordination_service_proto_rawDes 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0c, - 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x47, 0x0a, 0x20, + 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x4b, 0x0a, 0x20, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, - 0x18, 0x32, 0x20, 0x03, 0x28, 0x09, 0x52, 0x1d, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, - 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x66, 0x69, 0x65, 0x72, 0x73, 0x12, 0x3d, 0x0a, 0x1b, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, - 0x65, 0x64, 0x5f, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, - 0x5f, 0x69, 0x64, 0x73, 0x18, 0x37, 0x20, 0x03, 0x28, 0x09, 0x52, 0x18, 0x63, 0x6f, 0x6e, 0x6e, - 0x65, 0x63, 0x74, 0x65, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6c, 0x69, - 0x63, 0x49, 0x64, 0x73, 0x4a, 0x04, 0x08, 0x0a, 0x10, 0x0b, 0x52, 0x06, 0x77, 0x6f, 0x72, 0x6b, - 0x65, 0x72, 0x22, 0x98, 0x01, 0x0a, 0x10, 0x4a, 0x6f, 0x62, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x35, 0x0a, 0x03, 0x6a, 0x6f, 0x62, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, - 0x72, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x03, 0x6a, 0x6f, 0x62, 0x12, 0x4d, - 0x0a, 0x0c, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, - 0x72, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x54, 0x59, 0x50, 0x45, - 0x52, 0x0b, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x22, 0x78, 0x0a, - 0x14, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x65, - 0x72, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x34, 0x0a, 0x16, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x5f, - 0x6b, 0x65, 0x79, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x14, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x4b, 0x65, 0x79, + 0x18, 0x32, 0x20, 0x03, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x1d, 0x63, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x65, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x49, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x12, 0x58, 0x0a, 0x29, 0x63, 0x6f, 0x6e, + 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x6e, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x5f, + 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x18, 0x33, 0x20, 0x03, 0x28, 0x09, 0x52, 0x25, 0x63, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x55, 0x6e, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x57, + 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, + 0x65, 0x72, 0x73, 0x12, 0x3d, 0x0a, 0x1b, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, + 0x5f, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x69, + 0x64, 0x73, 0x18, 0x37, 0x20, 0x03, 0x28, 0x09, 0x52, 0x18, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, + 0x74, 0x65, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x49, + 0x64, 0x73, 0x4a, 0x04, 0x08, 0x0a, 0x10, 0x0b, 0x52, 0x06, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, + 0x22, 0x98, 0x01, 0x0a, 0x10, 0x4a, 0x6f, 0x62, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x35, 0x0a, 0x03, 0x6a, 0x6f, 0x62, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, + 0x2e, 0x76, 0x31, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x03, 0x6a, 0x6f, 0x62, 0x12, 0x4d, 0x0a, 0x0c, + 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x2a, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, + 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x54, 0x59, 0x50, 0x45, 0x52, 0x0b, + 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x22, 0x54, 0x0a, 0x14, 0x41, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x4c, + 0x69, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x16, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x5f, 0x6b, 0x65, + 0x79, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x14, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x4b, + 0x65, 0x79, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x3a, 0x02, 0x18, + 0x01, 0x22, 0x93, 0x01, 0x0a, 0x1e, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, + 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, + 0x4c, 0x69, 0x73, 0x74, 0x12, 0x45, 0x0a, 0x1f, 0x75, 0x6e, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, + 0x5f, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x69, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x1c, 0x75, + 0x6e, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x50, 0x75, - 0x62, 0x6c, 0x69, 0x63, 0x49, 0x64, 0x73, 0x22, 0xdf, 0x02, 0x0a, 0x0e, 0x53, 0x74, 0x61, 0x74, + 0x62, 0x6c, 0x69, 0x63, 0x49, 0x64, 0x73, 0x22, 0xe8, 0x03, 0x0a, 0x0e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x0d, 0x6a, 0x6f, 0x62, 0x73, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x14, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x73, @@ -1138,75 +1234,84 @@ var file_controller_servers_services_v1_server_coordination_service_proto_rawDes 0x13, 0x63, 0x61, 0x6c, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x55, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x28, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x49, - 0x64, 0x12, 0x63, 0x0a, 0x12, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x5f, + 0x64, 0x12, 0x67, 0x0a, 0x12, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x73, 0x18, 0x32, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x11, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x57, - 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x73, 0x4a, 0x04, 0x08, 0x0a, 0x10, 0x0b, 0x52, 0x0b, 0x63, 0x6f, - 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x73, 0x22, 0x36, 0x0a, 0x0a, 0x57, 0x6f, 0x72, - 0x6b, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x22, 0x18, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x63, 0x70, 0x62, 0x57, 0x6f, 0x72, - 0x6b, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x5f, 0x0a, 0x17, 0x4c, - 0x69, 0x73, 0x74, 0x48, 0x63, 0x70, 0x62, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x07, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, - 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x73, 0x2a, 0x92, 0x01, 0x0a, - 0x10, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x54, 0x41, 0x54, 0x55, - 0x53, 0x12, 0x20, 0x0a, 0x1c, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x53, - 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, - 0x44, 0x10, 0x00, 0x12, 0x1f, 0x0a, 0x1b, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x49, 0x4f, - 0x4e, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x41, 0x55, 0x54, 0x48, 0x4f, 0x52, 0x49, 0x5a, - 0x45, 0x44, 0x10, 0x01, 0x12, 0x1e, 0x0a, 0x1a, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x49, - 0x4f, 0x4e, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, - 0x45, 0x44, 0x10, 0x02, 0x12, 0x1b, 0x0a, 0x17, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x49, - 0x4f, 0x4e, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x43, 0x4c, 0x4f, 0x53, 0x45, 0x44, 0x10, - 0x03, 0x2a, 0x9e, 0x01, 0x0a, 0x0d, 0x53, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x53, 0x54, 0x41, - 0x54, 0x55, 0x53, 0x12, 0x1d, 0x0a, 0x19, 0x53, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x53, 0x54, - 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, - 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x53, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x53, 0x54, 0x41, - 0x54, 0x55, 0x53, 0x5f, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x18, 0x0a, - 0x14, 0x53, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x41, - 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x02, 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x45, 0x53, 0x53, 0x49, - 0x4f, 0x4e, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x43, 0x41, 0x4e, 0x43, 0x45, 0x4c, 0x49, - 0x4e, 0x47, 0x10, 0x03, 0x12, 0x1c, 0x0a, 0x18, 0x53, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x53, - 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x54, 0x45, 0x52, 0x4d, 0x49, 0x4e, 0x41, 0x54, 0x45, 0x44, - 0x10, 0x04, 0x2a, 0x37, 0x0a, 0x07, 0x4a, 0x4f, 0x42, 0x54, 0x59, 0x50, 0x45, 0x12, 0x17, 0x0a, - 0x13, 0x4a, 0x4f, 0x42, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, - 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x4a, 0x4f, 0x42, 0x54, 0x59, 0x50, - 0x45, 0x5f, 0x53, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x10, 0x01, 0x2a, 0x45, 0x0a, 0x0a, 0x43, - 0x48, 0x41, 0x4e, 0x47, 0x45, 0x54, 0x59, 0x50, 0x45, 0x12, 0x1a, 0x0a, 0x16, 0x43, 0x48, 0x41, - 0x4e, 0x47, 0x45, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, - 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x54, - 0x59, 0x50, 0x45, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, - 0x10, 0x01, 0x32, 0x8d, 0x02, 0x0a, 0x19, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x6f, 0x6f, - 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x12, 0x69, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2d, 0x2e, 0x63, 0x6f, 0x6e, - 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, - 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x84, 0x01, 0x0a, 0x0f, - 0x4c, 0x69, 0x73, 0x74, 0x48, 0x63, 0x70, 0x62, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x73, 0x12, - 0x36, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x73, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x76, 0x31, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x63, 0x70, 0x62, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, - 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x63, 0x70, - 0x62, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x42, 0x51, 0x5a, 0x4f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2f, 0x62, 0x6f, 0x75, 0x6e, 0x64, - 0x61, 0x72, 0x79, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x67, 0x65, 0x6e, - 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2f, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x73, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x3b, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x69, 0x73, 0x74, 0x42, 0x02, 0x18, 0x01, 0x52, 0x11, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x65, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x73, 0x12, 0x82, 0x01, 0x0a, 0x1d, 0x61, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x73, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x73, 0x18, 0x33, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, + 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x44, 0x6f, + 0x77, 0x6e, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x4c, 0x69, + 0x73, 0x74, 0x52, 0x1b, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x44, 0x6f, + 0x77, 0x6e, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x73, 0x4a, + 0x04, 0x08, 0x0a, 0x10, 0x0b, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, + 0x72, 0x73, 0x22, 0x36, 0x0a, 0x0a, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x18, 0x0a, 0x16, 0x4c, 0x69, + 0x73, 0x74, 0x48, 0x63, 0x70, 0x62, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x22, 0x5f, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x63, 0x70, 0x62, + 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x44, 0x0a, 0x07, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x2a, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x73, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x76, + 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x77, 0x6f, + 0x72, 0x6b, 0x65, 0x72, 0x73, 0x2a, 0x92, 0x01, 0x0a, 0x10, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, + 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x12, 0x20, 0x0a, 0x1c, 0x43, 0x4f, + 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, + 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1f, 0x0a, 0x1b, + 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, + 0x5f, 0x41, 0x55, 0x54, 0x48, 0x4f, 0x52, 0x49, 0x5a, 0x45, 0x44, 0x10, 0x01, 0x12, 0x1e, 0x0a, + 0x1a, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x54, 0x41, 0x54, 0x55, + 0x53, 0x5f, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x45, 0x44, 0x10, 0x02, 0x12, 0x1b, 0x0a, + 0x17, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x54, 0x41, 0x54, 0x55, + 0x53, 0x5f, 0x43, 0x4c, 0x4f, 0x53, 0x45, 0x44, 0x10, 0x03, 0x2a, 0x9e, 0x01, 0x0a, 0x0d, 0x53, + 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x12, 0x1d, 0x0a, 0x19, + 0x53, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, + 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x53, + 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x50, 0x45, 0x4e, + 0x44, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x53, 0x45, 0x53, 0x53, 0x49, 0x4f, + 0x4e, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x02, + 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x53, 0x54, 0x41, 0x54, 0x55, + 0x53, 0x5f, 0x43, 0x41, 0x4e, 0x43, 0x45, 0x4c, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x1c, 0x0a, + 0x18, 0x53, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x54, + 0x45, 0x52, 0x4d, 0x49, 0x4e, 0x41, 0x54, 0x45, 0x44, 0x10, 0x04, 0x2a, 0x37, 0x0a, 0x07, 0x4a, + 0x4f, 0x42, 0x54, 0x59, 0x50, 0x45, 0x12, 0x17, 0x0a, 0x13, 0x4a, 0x4f, 0x42, 0x54, 0x59, 0x50, + 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, + 0x13, 0x0a, 0x0f, 0x4a, 0x4f, 0x42, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x45, 0x53, 0x53, 0x49, + 0x4f, 0x4e, 0x10, 0x01, 0x2a, 0x45, 0x0a, 0x0a, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x54, 0x59, + 0x50, 0x45, 0x12, 0x1a, 0x0a, 0x16, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x54, 0x59, 0x50, 0x45, + 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1b, + 0x0a, 0x17, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x50, 0x44, + 0x41, 0x54, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0x01, 0x32, 0x8d, 0x02, 0x0a, 0x19, + 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x69, 0x0a, 0x06, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x12, 0x2d, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x84, 0x01, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x63, 0x70, + 0x62, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x73, 0x12, 0x36, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, + 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x63, + 0x70, 0x62, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x37, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x73, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x76, + 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x63, 0x70, 0x62, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x51, 0x5a, 0x4f, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, + 0x6f, 0x72, 0x70, 0x2f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x2f, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, + 0x6c, 0x6c, 0x65, 0x72, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x2f, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x73, 0x3b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1222,26 +1327,27 @@ func file_controller_servers_services_v1_server_coordination_service_proto_rawDe } var file_controller_servers_services_v1_server_coordination_service_proto_enumTypes = make([]protoimpl.EnumInfo, 5) -var file_controller_servers_services_v1_server_coordination_service_proto_msgTypes = make([]protoimpl.MessageInfo, 12) +var file_controller_servers_services_v1_server_coordination_service_proto_msgTypes = make([]protoimpl.MessageInfo, 13) var file_controller_servers_services_v1_server_coordination_service_proto_goTypes = []interface{}{ - (CONNECTIONSTATUS)(0), // 0: controller.servers.services.v1.CONNECTIONSTATUS - (SESSIONSTATUS)(0), // 1: controller.servers.services.v1.SESSIONSTATUS - (JOBTYPE)(0), // 2: controller.servers.services.v1.JOBTYPE - (CHANGETYPE)(0), // 3: controller.servers.services.v1.CHANGETYPE - (UpstreamServer_TYPE)(0), // 4: controller.servers.services.v1.UpstreamServer.TYPE - (*Connection)(nil), // 5: controller.servers.services.v1.Connection - (*SessionJobInfo)(nil), // 6: controller.servers.services.v1.SessionJobInfo - (*Job)(nil), // 7: controller.servers.services.v1.Job - (*JobStatus)(nil), // 8: controller.servers.services.v1.JobStatus - (*UpstreamServer)(nil), // 9: controller.servers.services.v1.UpstreamServer - (*StatusRequest)(nil), // 10: controller.servers.services.v1.StatusRequest - (*JobChangeRequest)(nil), // 11: controller.servers.services.v1.JobChangeRequest - (*AuthorizedWorkerList)(nil), // 12: controller.servers.services.v1.AuthorizedWorkerList - (*StatusResponse)(nil), // 13: controller.servers.services.v1.StatusResponse - (*WorkerInfo)(nil), // 14: controller.servers.services.v1.WorkerInfo - (*ListHcpbWorkersRequest)(nil), // 15: controller.servers.services.v1.ListHcpbWorkersRequest - (*ListHcpbWorkersResponse)(nil), // 16: controller.servers.services.v1.ListHcpbWorkersResponse - (*servers.ServerWorkerStatus)(nil), // 17: controller.servers.v1.ServerWorkerStatus + (CONNECTIONSTATUS)(0), // 0: controller.servers.services.v1.CONNECTIONSTATUS + (SESSIONSTATUS)(0), // 1: controller.servers.services.v1.SESSIONSTATUS + (JOBTYPE)(0), // 2: controller.servers.services.v1.JOBTYPE + (CHANGETYPE)(0), // 3: controller.servers.services.v1.CHANGETYPE + (UpstreamServer_TYPE)(0), // 4: controller.servers.services.v1.UpstreamServer.TYPE + (*Connection)(nil), // 5: controller.servers.services.v1.Connection + (*SessionJobInfo)(nil), // 6: controller.servers.services.v1.SessionJobInfo + (*Job)(nil), // 7: controller.servers.services.v1.Job + (*JobStatus)(nil), // 8: controller.servers.services.v1.JobStatus + (*UpstreamServer)(nil), // 9: controller.servers.services.v1.UpstreamServer + (*StatusRequest)(nil), // 10: controller.servers.services.v1.StatusRequest + (*JobChangeRequest)(nil), // 11: controller.servers.services.v1.JobChangeRequest + (*AuthorizedWorkerList)(nil), // 12: controller.servers.services.v1.AuthorizedWorkerList + (*AuthorizedDownstreamWorkerList)(nil), // 13: controller.servers.services.v1.AuthorizedDownstreamWorkerList + (*StatusResponse)(nil), // 14: controller.servers.services.v1.StatusResponse + (*WorkerInfo)(nil), // 15: controller.servers.services.v1.WorkerInfo + (*ListHcpbWorkersRequest)(nil), // 16: controller.servers.services.v1.ListHcpbWorkersRequest + (*ListHcpbWorkersResponse)(nil), // 17: controller.servers.services.v1.ListHcpbWorkersResponse + (*servers.ServerWorkerStatus)(nil), // 18: controller.servers.v1.ServerWorkerStatus } var file_controller_servers_services_v1_server_coordination_service_proto_depIdxs = []int32{ 0, // 0: controller.servers.services.v1.Connection.status:type_name -> controller.servers.services.v1.CONNECTIONSTATUS @@ -1252,22 +1358,23 @@ var file_controller_servers_services_v1_server_coordination_service_proto_depIdx 7, // 5: controller.servers.services.v1.JobStatus.job:type_name -> controller.servers.services.v1.Job 4, // 6: controller.servers.services.v1.UpstreamServer.type:type_name -> controller.servers.services.v1.UpstreamServer.TYPE 8, // 7: controller.servers.services.v1.StatusRequest.jobs:type_name -> controller.servers.services.v1.JobStatus - 17, // 8: controller.servers.services.v1.StatusRequest.worker_status:type_name -> controller.servers.v1.ServerWorkerStatus + 18, // 8: controller.servers.services.v1.StatusRequest.worker_status:type_name -> controller.servers.v1.ServerWorkerStatus 7, // 9: controller.servers.services.v1.JobChangeRequest.job:type_name -> controller.servers.services.v1.Job 3, // 10: controller.servers.services.v1.JobChangeRequest.request_type:type_name -> controller.servers.services.v1.CHANGETYPE 11, // 11: controller.servers.services.v1.StatusResponse.jobs_requests:type_name -> controller.servers.services.v1.JobChangeRequest 9, // 12: controller.servers.services.v1.StatusResponse.calculated_upstreams:type_name -> controller.servers.services.v1.UpstreamServer 12, // 13: controller.servers.services.v1.StatusResponse.authorized_workers:type_name -> controller.servers.services.v1.AuthorizedWorkerList - 14, // 14: controller.servers.services.v1.ListHcpbWorkersResponse.workers:type_name -> controller.servers.services.v1.WorkerInfo - 10, // 15: controller.servers.services.v1.ServerCoordinationService.Status:input_type -> controller.servers.services.v1.StatusRequest - 15, // 16: controller.servers.services.v1.ServerCoordinationService.ListHcpbWorkers:input_type -> controller.servers.services.v1.ListHcpbWorkersRequest - 13, // 17: controller.servers.services.v1.ServerCoordinationService.Status:output_type -> controller.servers.services.v1.StatusResponse - 16, // 18: controller.servers.services.v1.ServerCoordinationService.ListHcpbWorkers:output_type -> controller.servers.services.v1.ListHcpbWorkersResponse - 17, // [17:19] is the sub-list for method output_type - 15, // [15:17] is the sub-list for method input_type - 15, // [15:15] is the sub-list for extension type_name - 15, // [15:15] is the sub-list for extension extendee - 0, // [0:15] is the sub-list for field type_name + 13, // 14: controller.servers.services.v1.StatusResponse.authorized_downstream_workers:type_name -> controller.servers.services.v1.AuthorizedDownstreamWorkerList + 15, // 15: controller.servers.services.v1.ListHcpbWorkersResponse.workers:type_name -> controller.servers.services.v1.WorkerInfo + 10, // 16: controller.servers.services.v1.ServerCoordinationService.Status:input_type -> controller.servers.services.v1.StatusRequest + 16, // 17: controller.servers.services.v1.ServerCoordinationService.ListHcpbWorkers:input_type -> controller.servers.services.v1.ListHcpbWorkersRequest + 14, // 18: controller.servers.services.v1.ServerCoordinationService.Status:output_type -> controller.servers.services.v1.StatusResponse + 17, // 19: controller.servers.services.v1.ServerCoordinationService.ListHcpbWorkers:output_type -> controller.servers.services.v1.ListHcpbWorkersResponse + 18, // [18:20] is the sub-list for method output_type + 16, // [16:18] is the sub-list for method input_type + 16, // [16:16] is the sub-list for extension type_name + 16, // [16:16] is the sub-list for extension extendee + 0, // [0:16] is the sub-list for field type_name } func init() { file_controller_servers_services_v1_server_coordination_service_proto_init() } @@ -1373,7 +1480,7 @@ func file_controller_servers_services_v1_server_coordination_service_proto_init( } } file_controller_servers_services_v1_server_coordination_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StatusResponse); i { + switch v := v.(*AuthorizedDownstreamWorkerList); i { case 0: return &v.state case 1: @@ -1385,7 +1492,7 @@ func file_controller_servers_services_v1_server_coordination_service_proto_init( } } file_controller_servers_services_v1_server_coordination_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WorkerInfo); i { + switch v := v.(*StatusResponse); i { case 0: return &v.state case 1: @@ -1397,7 +1504,7 @@ func file_controller_servers_services_v1_server_coordination_service_proto_init( } } file_controller_servers_services_v1_server_coordination_service_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListHcpbWorkersRequest); i { + switch v := v.(*WorkerInfo); i { case 0: return &v.state case 1: @@ -1409,6 +1516,18 @@ func file_controller_servers_services_v1_server_coordination_service_proto_init( } } file_controller_servers_services_v1_server_coordination_service_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListHcpbWorkersRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_controller_servers_services_v1_server_coordination_service_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListHcpbWorkersResponse); i { case 0: return &v.state @@ -1430,7 +1549,7 @@ func file_controller_servers_services_v1_server_coordination_service_proto_init( GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_controller_servers_services_v1_server_coordination_service_proto_rawDesc, NumEnums: 5, - NumMessages: 12, + NumMessages: 13, NumExtensions: 0, NumServices: 1, }, diff --git a/internal/proto/controller/servers/services/v1/server_coordination_service.proto b/internal/proto/controller/servers/services/v1/server_coordination_service.proto index 5866af17f..3ea50bf73 100644 --- a/internal/proto/controller/servers/services/v1/server_coordination_service.proto +++ b/internal/proto/controller/servers/services/v1/server_coordination_service.proto @@ -100,8 +100,15 @@ message StatusRequest { servers.v1.ServerWorkerStatus worker_status = 40; // The worker key identifiers presented by all downstreams connected to this - // worker - repeated string connected_worker_key_identifiers = 50; + // worker. + // Deprecated. Should be removed in 0.15.0 at which time + // connected_unmapped_worker_key_identifiers should be used exclusively. + repeated string connected_worker_key_identifiers = 50 [deprecated = true]; + + // The worker key identifiers for downstream workers for which there + // is not a known worker id mapping for them yet. + repeated string connected_unmapped_worker_key_identifiers = 51; + // The worker public ids of all downstreams connected to this worker if known. // While there may be workers with key ids in the connected_worker_key_identifiers // list and their public ids in this list, once the requesting worker is aware @@ -122,8 +129,15 @@ message JobChangeRequest { } message AuthorizedWorkerList { + option deprecated = true; // the key id of authorized workers - repeated string worker_key_identifiers = 1; + repeated string worker_key_identifiers = 1 [deprecated = true]; +} + +message AuthorizedDownstreamWorkerList { + // the key id of authorized workers which do not have a worker id known yet + // to the requester. + repeated string unmapped_worker_key_identifiers = 1; // the public id of workers that were reported as being connected and which // are known by the controller. repeated string worker_public_ids = 2; @@ -149,7 +163,13 @@ message StatusResponse { // Of the worker key identifiers provided in the request, these are the ones // which are authorized to remain connected. - AuthorizedWorkerList authorized_workers = 50; + // This is deprecated. Use authorized_downstream_workers instead. This + // should be removed in version 0.15.0. + AuthorizedWorkerList authorized_workers = 50 [deprecated = true]; + + // Of the downstream workers in the request, these are the ones + // which are authorized to remain connected. + AuthorizedDownstreamWorkerList authorized_downstream_workers = 51; } // WorkerInfo contains information about workers for the HcpbWorkerResponse message