From 4fe8207c048c8399ae8ae510993b401b33f3fef7 Mon Sep 17 00:00:00 2001 From: CMGS Date: Wed, 13 Jul 2022 18:55:56 +0800 Subject: [PATCH] [skip ci] refactor stage 1 --- cluster/calcium/build_test.go | 2 +- cluster/calcium/capacity_test.go | 2 +- cluster/calcium/create.go | 16 +- cluster/calcium/create_test.go | 2 +- cluster/calcium/dissociate_test.go | 2 +- cluster/calcium/image_test.go | 4 +- cluster/calcium/lambda_test.go | 4 +- cluster/calcium/lock.go | 10 +- cluster/calcium/lock_test.go | 8 +- cluster/calcium/metrics.go | 15 +- cluster/calcium/network_test.go | 6 +- cluster/calcium/node.go | 144 +- cluster/calcium/node_test.go | 367 +- cluster/calcium/pod_test.go | 2 +- cluster/calcium/realloc_test.go | 2 +- cluster/calcium/remap_test.go | 2 +- cluster/calcium/remove_test.go | 2 +- cluster/calcium/replace.go | 2 +- cluster/calcium/replace_test.go | 2 +- cluster/calcium/resource.go | 69 +- cluster/calcium/resource_test.go | 94 +- cluster/calcium/temp.go | 1 + cluster/calcium/wal.go | 2 +- cluster/calcium/wal_test.go | 8 +- cluster/calcium/workload.go | 2 +- cluster/cluster.go | 6 +- cluster/mocks/Cluster.go | 24 +- core.yaml.sample | 10 +- engine/docker/docker.go | 6 - engine/engine.go | 2 - engine/fake/fake.go | 5 - engine/mocks/API.go | 14 - engine/systemd/resource.go | 12 - engine/virt/virt.go | 6 - resources/binary.go | 81 +- resources/cpumem/cpumem.go | 81 +- resources/cpumem/models/capacity_test.go | 6 +- resources/cpumem/models/cpumem_test.go | 6 +- resources/cpumem/models/idle_test.go | 6 +- resources/cpumem/models/info.go | 2 +- resources/cpumem/models/metrics.go | 12 +- resources/cpumem/types/resource.go | 7 +- resources/manager.go | 102 +- resources/mocks/Manager.go | 22 +- resources/mocks/Plugin.go | 127 +- resources/plugin.go | 26 +- resources/plugins.go | 6 +- resources/volume/models/info.go | 2 +- resources/volume/models/metrics.go | 8 +- resources/volume/models/volume_test.go | 6 +- resources/volume/volume.go | 87 +- rpc/gen/core.pb.go | 5004 ++++++++++------------ rpc/gen/core.proto | 291 +- rpc/gen/core_grpc.pb.go | 224 +- rpc/rpc.go | 80 +- rpc/transform.go | 156 +- store/etcdv3/node.go | 12 +- store/etcdv3/workload.go | 6 +- store/redis/node.go | 2 +- store/redis/workload.go | 6 +- types/config.go | 29 +- types/options.go | 2 +- utils/utils.go | 4 +- utils/utils_test.go | 6 +- 64 files changed, 3135 insertions(+), 4129 deletions(-) create mode 100644 cluster/calcium/temp.go delete mode 100644 engine/systemd/resource.go diff --git a/cluster/calcium/build_test.go b/cluster/calcium/build_test.go index 5c60ce4ae..0885d45c4 100644 --- a/cluster/calcium/build_test.go +++ b/cluster/calcium/build_test.go @@ -83,7 +83,7 @@ func TestBuild(t *testing.T) { store.On("GetNodesByPod", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return([]*types.Node{node}, nil) // failed by plugin error rmgr := c.rmgr.(*resourcemocks.Manager) - rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil, nil, nil) + rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil, nil, nil) rmgr.On("GetMostIdleNode", mock.Anything, mock.Anything).Return("", types.ErrBadCount).Once() ch, err = c.BuildImage(ctx, opts) assert.Error(t, err) diff --git a/cluster/calcium/capacity_test.go b/cluster/calcium/capacity_test.go index 9296e4c79..283afe94e 100644 --- a/cluster/calcium/capacity_test.go +++ b/cluster/calcium/capacity_test.go @@ -22,7 +22,7 @@ func TestCalculateCapacity(t *testing.T) { ctx := context.Background() store := c.store.(*storemocks.Store) rmgr := c.rmgr.(*resourcemocks.Manager) - rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil, nil, nil) + rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil, nil, nil) engine := &enginemocks.API{} // pod1 := &types.Pod{Name: "p1"} diff --git a/cluster/calcium/create.go b/cluster/calcium/create.go index 32cc07884..a7070103e 100644 --- a/cluster/calcium/create.go +++ b/cluster/calcium/create.go @@ -101,8 +101,8 @@ func (c *Calcium) doCreateWorkloads(ctx context.Context, opts *types.DeployOptio return c.withNodesPodLocked(ctx, opts.NodeFilter, func(ctx context.Context, nodeMap map[string]*types.Node) (err error) { nodeNames := []string{} nodes := []*types.Node{} - for nodeName, node := range nodeMap { - nodeNames = append(nodeNames, nodeName) + for nodename, node := range nodeMap { + nodeNames = append(nodeNames, nodename) nodes = append(nodes, node) } @@ -117,14 +117,14 @@ func (c *Calcium) doCreateWorkloads(ctx context.Context, opts *types.DeployOptio // commit changes processingCommits = make(map[string]wal.Commit) - for nodeName, deploy := range deployMap { - nodes = append(nodes, nodeMap[nodeName]) - if engineArgsMap[nodeName], resourceArgsMap[nodeName], err = c.rmgr.Alloc(ctx, nodeName, deploy, opts.ResourceOpts); err != nil { + for nodename, deploy := range deployMap { + nodes = append(nodes, nodeMap[nodename]) + if engineArgsMap[nodename], resourceArgsMap[nodename], err = c.rmgr.Alloc(ctx, nodename, deploy, opts.ResourceOpts); err != nil { return errors.WithStack(err) } - processing := opts.GetProcessing(nodeName) - if processingCommits[nodeName], err = c.wal.Log(eventProcessingCreated, processing); err != nil { + processing := opts.GetProcessing(nodename) + if processingCommits[nodename], err = c.wal.Log(eventProcessingCreated, processing); err != nil { return errors.WithStack(err) } if err = c.store.CreateProcessing(ctx, processing, deploy); err != nil { @@ -275,7 +275,7 @@ func (c *Calcium) doDeployWorkloadsOnNode(ctx context.Context, } func (c *Calcium) doGetAndPrepareNode(ctx context.Context, nodename, image string) (*types.Node, error) { - node, err := c.GetNode(ctx, nodename, nil) + node, err := c.GetNode(ctx, nodename) if err != nil { return nil, err } diff --git a/cluster/calcium/create_test.go b/cluster/calcium/create_test.go index 4d6f0d0cc..77b51c37e 100644 --- a/cluster/calcium/create_test.go +++ b/cluster/calcium/create_test.go @@ -81,7 +81,7 @@ func TestCreateWorkloadTxn(t *testing.T) { store := c.store.(*storemocks.Store) rmgr := c.rmgr.(*resourcemocks.Manager) - rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil, nil, nil) + rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil, nil, nil) mwal := &walmocks.WAL{} c.wal = mwal var walCommitted bool diff --git a/cluster/calcium/dissociate_test.go b/cluster/calcium/dissociate_test.go index dd45e8c3d..ae37f2323 100644 --- a/cluster/calcium/dissociate_test.go +++ b/cluster/calcium/dissociate_test.go @@ -39,7 +39,7 @@ func TestDissociateWorkload(t *testing.T) { } store.On("GetWorkloads", mock.Anything, mock.Anything).Return([]*types.Workload{c1}, nil) - rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil, nil, nil) + rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil, nil, nil) // failed by lock store.On("GetNode", mock.Anything, "node1").Return(node1, nil) store.On("CreateLock", mock.Anything, mock.Anything).Return(nil, types.ErrNoETCD).Once() diff --git a/cluster/calcium/image_test.go b/cluster/calcium/image_test.go index 1a1e49e57..f566a70ce 100644 --- a/cluster/calcium/image_test.go +++ b/cluster/calcium/image_test.go @@ -20,7 +20,7 @@ func TestRemoveImage(t *testing.T) { ctx := context.Background() store := c.store.(*storemocks.Store) rmgr := c.rmgr.(*resourcemocks.Manager) - rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil, nil, nil) + rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil, nil, nil) // fail by validating _, err := c.RemoveImage(ctx, &types.ImageOptions{Podname: ""}) assert.Error(t, err) @@ -67,7 +67,7 @@ func TestCacheImage(t *testing.T) { ctx := context.Background() rmgr := c.rmgr.(*resourcemocks.Manager) store := c.store.(*storemocks.Store) - rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil, nil, nil) + rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil, nil, nil) // fail by validating _, err := c.CacheImage(ctx, &types.ImageOptions{Podname: ""}) assert.Error(t, err) diff --git a/cluster/calcium/lambda_test.go b/cluster/calcium/lambda_test.go index 9a45c192c..a483e75a7 100644 --- a/cluster/calcium/lambda_test.go +++ b/cluster/calcium/lambda_test.go @@ -27,7 +27,7 @@ func TestRunAndWaitFailedThenWALCommitted(t *testing.T) { c, _ := newCreateWorkloadCluster(t) rmgr := &resourcemocks.Manager{} - rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil, nil, nil) + rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil, nil, nil) rmgr.On("GetNodesDeployCapacity", mock.Anything, mock.Anything, mock.Anything).Return( nil, 0, types.ErrNoETCD, ) @@ -192,7 +192,7 @@ func newLambdaCluster(t *testing.T) (*Calcium, []*types.Node) { store := c.store.(*storemocks.Store) rmgr := c.rmgr.(*resourcemocks.Manager) - rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return( + rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return( map[string]types.NodeResourceArgs{}, map[string]types.NodeResourceArgs{}, []string{}, diff --git a/cluster/calcium/lock.go b/cluster/calcium/lock.go index 844656efd..1d86c2cf4 100644 --- a/cluster/calcium/lock.go +++ b/cluster/calcium/lock.go @@ -77,7 +77,7 @@ func (c *Calcium) withWorkloadsLocked(ctx context.Context, ids []string, f func( utils.Reverse(ids) c.doUnlockAll(utils.InheritTracingInfo(ctx, context.TODO()), locks, ids...) }() - cs, err := c.GetWorkloads(ctx, ids) + cs, err := c.store.GetWorkloads(ctx, ids) if err != nil { return err } @@ -161,13 +161,7 @@ func (c *Calcium) withNodesLocked(ctx context.Context, nf types.NodeFilter, genK locks[key] = lock lockKeys = append(lockKeys, key) } - - // refresh node - node, err := c.GetNode(ctx, n.Name, nil) - if err != nil { - return err - } - nodes[n.Name] = node + nodes[n.Name] = n } return f(ctx, nodes) } diff --git a/cluster/calcium/lock_test.go b/cluster/calcium/lock_test.go index 1e586ed43..c7f49c0e1 100644 --- a/cluster/calcium/lock_test.go +++ b/cluster/calcium/lock_test.go @@ -119,7 +119,7 @@ func TestWithNodesPodLocked(t *testing.T) { ctx := context.Background() store := c.store.(*storemocks.Store) rmgr := c.rmgr.(*resourcemocks.Manager) - rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil, nil, nil) + rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil, nil, nil) node1 := &types.Node{ NodeMeta: types.NodeMeta{ @@ -177,7 +177,7 @@ func TestWithNodePodLocked(t *testing.T) { ctx := context.Background() store := c.store.(*storemocks.Store) rmgr := c.rmgr.(*resourcemocks.Manager) - rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil, nil, nil) + rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil, nil, nil) node1 := &types.Node{ NodeMeta: types.NodeMeta{ @@ -212,7 +212,7 @@ func TestWithNodesOperationLocked(t *testing.T) { ctx := context.Background() store := c.store.(*storemocks.Store) rmgr := c.rmgr.(*resourcemocks.Manager) - rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil, nil, nil) + rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil, nil, nil) node1 := &types.Node{ NodeMeta: types.NodeMeta{ @@ -269,7 +269,7 @@ func TestWithNodeOperationLocked(t *testing.T) { ctx := context.Background() store := c.store.(*storemocks.Store) rmgr := c.rmgr.(*resourcemocks.Manager) - rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil, nil, nil) + rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil, nil, nil) node1 := &types.Node{ NodeMeta: types.NodeMeta{ diff --git a/cluster/calcium/metrics.go b/cluster/calcium/metrics.go index 4f99a69a8..1930a03e6 100644 --- a/cluster/calcium/metrics.go +++ b/cluster/calcium/metrics.go @@ -2,12 +2,12 @@ package calcium import ( "context" - "fmt" "github.com/sanity-io/litter" "github.com/projecteru2/core/log" "github.com/projecteru2/core/metrics" + "github.com/projecteru2/core/types" "github.com/projecteru2/core/utils" ) @@ -29,19 +29,22 @@ func (c *Calcium) InitMetrics() { } // SendNodeMetrics . -func (c *Calcium) SendNodeMetrics(ctx context.Context, nodeName string) { +func (c *Calcium) SendNodeMetrics(ctx context.Context, nodename string) { ctx, cancel := context.WithTimeout(utils.InheritTracingInfo(ctx, context.TODO()), c.config.GlobalTimeout) defer cancel() - node, err := c.GetNode(ctx, nodeName, nil) - fmt.Println(err) + node, err := c.GetNode(ctx, nodename) if err != nil { - log.Errorf(ctx, "[SendNodeMetrics] get node %s failed, %v", nodeName, err) + log.Errorf(ctx, "[SendNodeMetrics] get node %s failed, %v", nodename, err) return } + c.doSendNodeMetrics(ctx, node) +} + +func (c *Calcium) doSendNodeMetrics(ctx context.Context, node *types.Node) { nodeMetrics, err := c.rmgr.ConvertNodeResourceInfoToMetrics(ctx, node.Podname, node.Name, node.ResourceCapacity, node.ResourceUsage) if err != nil { - log.Errorf(ctx, "[SendNodeMetrics] resolve node %s resource info to metrics failed, %v", nodeName, err) + log.Errorf(ctx, "[SendNodeMetrics] convert node %s resource info to metrics failed, %v", node.Name, err) return } metrics.Client.SendMetrics(nodeMetrics...) diff --git a/cluster/calcium/network_test.go b/cluster/calcium/network_test.go index 5d0b18706..cf9eda47c 100644 --- a/cluster/calcium/network_test.go +++ b/cluster/calcium/network_test.go @@ -19,7 +19,7 @@ func TestNetwork(t *testing.T) { ctx := context.Background() store := c.store.(*storemocks.Store) rmgr := c.rmgr.(*resourcemocks.Manager) - rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil, nil, nil) + rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil, nil, nil) store.On("GetNodesByPod", mock.AnythingOfType("*context.emptyCtx"), mock.Anything, mock.Anything, mock.Anything).Return(nil, types.ErrNoETCD).Once() _, err := c.ListNetworks(ctx, "", "") @@ -51,7 +51,7 @@ func TestConnectNetwork(t *testing.T) { ctx := context.Background() store := c.store.(*storemocks.Store) rmgr := c.rmgr.(*resourcemocks.Manager) - rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil, nil, nil) + rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil, nil, nil) engine := &enginemocks.API{} workload := &types.Workload{Engine: engine} @@ -69,7 +69,7 @@ func TestDisConnectNetwork(t *testing.T) { ctx := context.Background() store := c.store.(*storemocks.Store) rmgr := c.rmgr.(*resourcemocks.Manager) - rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil, nil, nil) + rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil, nil, nil) engine := &enginemocks.API{} workload := &types.Workload{Engine: engine} diff --git a/cluster/calcium/node.go b/cluster/calcium/node.go index f7bea95c4..82925d1f5 100644 --- a/cluster/calcium/node.go +++ b/cluster/calcium/node.go @@ -15,6 +15,7 @@ import ( ) // AddNode adds a node +// node with resource info func (c *Calcium) AddNode(ctx context.Context, opts *types.AddNodeOptions) (*types.Node, error) { logger := log.WithField("Calcium", "AddNode").WithField("opts", opts) if err := opts.Validate(); err != nil { @@ -51,7 +52,7 @@ func (c *Calcium) AddNode(ctx context.Context, opts *types.AddNodeOptions) (*typ } node.ResourceCapacity = resourceCapacity node.ResourceUsage = resourceUsage - go c.SendNodeMetrics(ctx, node.Name) + go c.doSendNodeMetrics(ctx, node) return nil }, // rollback: remove node with resource plugins @@ -72,11 +73,12 @@ func (c *Calcium) RemoveNode(ctx context.Context, nodename string) error { return logger.ErrWithTracing(ctx, errors.WithStack(types.ErrEmptyNodeName)) } return c.withNodePodLocked(ctx, nodename, func(ctx context.Context, node *types.Node) error { - ws, err := c.ListNodeWorkloads(ctx, node.Name, nil) + workloads, err := c.ListNodeWorkloads(ctx, node.Name, nil) if err != nil { return logger.ErrWithTracing(ctx, err) } - if len(ws) > 0 { + // need drain first + if len(workloads) > 0 { return logger.ErrWithTracing(ctx, errors.WithStack(types.ErrNodeNotEmpty)) } @@ -99,24 +101,25 @@ func (c *Calcium) RemoveNode(ctx context.Context, nodename string) error { } // ListPodNodes list nodes belong to pod +// node with resource info func (c *Calcium) ListPodNodes(ctx context.Context, opts *types.ListNodesOptions) (<-chan *types.Node, error) { logger := log.WithField("Calcium", "ListPodNodes").WithField("podname", opts.Podname).WithField("labels", opts.Labels).WithField("all", opts.All).WithField("info", opts.CallInfo) - ch := make(chan *types.Node) nodes, err := c.store.GetNodesByPod(ctx, opts.Podname, opts.Labels, opts.All) if err != nil { - defer close(ch) - return ch, logger.ErrWithTracing(ctx, errors.WithStack(err)) + return nil, logger.ErrWithTracing(ctx, errors.WithStack(err)) } + ch := make(chan *types.Node) utils.SentryGo(func() { + defer close(ch) wg := &sync.WaitGroup{} wg.Add(len(nodes)) - defer close(ch) for _, node := range nodes { node := node _ = c.pool.Invoke(func() { defer wg.Done() - if err := c.getNodeResourceInfo(ctx, node, nil); err != nil { + var err error + if node.ResourceCapacity, node.ResourceUsage, node.Diffs, err = c.rmgr.GetNodeResourceInfo(ctx, node.Name, nil, false); err != nil { logger.Errorf(ctx, "failed to get node %v resource info: %+v", node.Name, err) } if opts.CallInfo { @@ -129,11 +132,13 @@ func (c *Calcium) ListPodNodes(ctx context.Context, opts *types.ListNodesOptions } wg.Wait() }) + return ch, nil } // GetNode get node -func (c *Calcium) GetNode(ctx context.Context, nodename string, plugins []string) (node *types.Node, err error) { +// node with resource info +func (c *Calcium) GetNode(ctx context.Context, nodename string) (node *types.Node, err error) { logger := log.WithField("Calcium", "GetNode").WithField("nodename", nodename) if nodename == "" { return nil, logger.ErrWithTracing(ctx, errors.WithStack(types.ErrEmptyNodeName)) @@ -141,14 +146,14 @@ func (c *Calcium) GetNode(ctx context.Context, nodename string, plugins []string if node, err = c.store.GetNode(ctx, nodename); err != nil { return nil, logger.ErrWithTracing(ctx, errors.WithStack(err)) } - if err = c.getNodeResourceInfo(ctx, node, plugins); err != nil { + if node.ResourceCapacity, node.ResourceUsage, node.Diffs, err = c.rmgr.GetNodeResourceInfo(ctx, node.Name, nil, false); err != nil { return nil, logger.ErrWithTracing(ctx, errors.WithStack(err)) } return node, nil } -// GetNodeEngine get node engine -func (c *Calcium) GetNodeEngine(ctx context.Context, nodename string) (*enginetypes.Info, error) { +// GetNodeEngineInfo get node engine +func (c *Calcium) GetNodeEngineInfo(ctx context.Context, nodename string) (*enginetypes.Info, error) { logger := log.WithField("Calcium", "GetNodeEngine").WithField("nodename", nodename) if nodename == "" { return nil, logger.ErrWithTracing(ctx, errors.WithStack(types.ErrEmptyNodeName)) @@ -162,6 +167,7 @@ func (c *Calcium) GetNodeEngine(ctx context.Context, nodename string) (*enginety } // SetNode set node available or not +// node with resource info func (c *Calcium) SetNode(ctx context.Context, opts *types.SetNodeOptions) (*types.Node, error) { logger := log.WithField("Calcium", "SetNode").WithField("opts", opts) if err := opts.Validate(); err != nil { @@ -170,14 +176,21 @@ func (c *Calcium) SetNode(ctx context.Context, opts *types.SetNodeOptions) (*typ var n *types.Node return n, c.withNodePodLocked(ctx, opts.Nodename, func(ctx context.Context, node *types.Node) error { logger.Infof(ctx, "set node") + // update resource map + var err error + node.ResourceCapacity, node.ResourceUsage, node.Diffs, err = c.rmgr.GetNodeResourceInfo(ctx, node.Name, nil, false) + if err != nil { + return err + } n = node - n.Bypass = (opts.BypassOpt == types.TriTrue) || (opts.BypassOpt == types.TriKeep && n.Bypass) + n.Bypass = (opts.Bypass == types.TriTrue) || (opts.Bypass == types.TriKeep && n.Bypass) if n.IsDown() { - logger.Errorf(ctx, "[SetNodeAvailable] node marked down: %s", opts.Nodename) + logger.Errorf(ctx, "[SetNode] node marked down: %s", opts.Nodename) } + if opts.WorkloadsDown { - c.setAllWorkloadsOnNodeDown(ctx, opts.Nodename) + c.setAllWorkloadsOnNodeDown(ctx, n.Name) } // update node endpoint @@ -194,8 +207,6 @@ func (c *Calcium) SetNode(ctx context.Context, opts *types.SetNodeOptions) (*typ } var originNodeResourceCapacity map[string]types.NodeResourceArgs - var err error - return logger.ErrWithTracing(ctx, utils.Txn(ctx, // if: update node resource capacity success func(ctx context.Context) error { @@ -211,7 +222,13 @@ func (c *Calcium) SetNode(ctx context.Context, opts *types.SetNodeOptions) (*typ if err := errors.WithStack(c.store.UpdateNodes(ctx, n)); err != nil { return err } - go c.SendNodeMetrics(ctx, node.Name) + // update resource + // actually we can ignore err here, if update success + if len(opts.ResourceOpts) != 0 { + n.ResourceCapacity, n.ResourceUsage, n.Diffs, _ = c.rmgr.GetNodeResourceInfo(ctx, node.Name, nil, false) + } + // use send to update the usage + go c.doSendNodeMetrics(ctx, n) return nil }, // rollback: update node resource capacity in reverse @@ -230,52 +247,11 @@ func (c *Calcium) SetNode(ctx context.Context, opts *types.SetNodeOptions) (*typ }) } -func (c *Calcium) getNodeResourceInfo(ctx context.Context, node *types.Node, plugins []string) (err error) { - if node.ResourceCapacity, node.ResourceUsage, node.Diffs, err = c.rmgr.GetNodeResourceInfo(ctx, node.Name, nil, false, plugins); err != nil { - log.Errorf(ctx, "[getNodeResourceInfo] failed to get node resource info for node %v, err: %v", node.Name, err) - return errors.WithStack(err) - } - return nil -} - -func (c *Calcium) setAllWorkloadsOnNodeDown(ctx context.Context, nodename string) { - workloads, err := c.store.ListNodeWorkloads(ctx, nodename, nil) - if err != nil { - log.Errorf(ctx, "[setAllWorkloadsOnNodeDown] failed to list node workloads, node %v, err: %v", nodename, errors.WithStack(err)) - return - } - - for _, workload := range workloads { - appname, entrypoint, _, err := utils.ParseWorkloadName(workload.Name) - if err != nil { - log.Errorf(ctx, "[setAllWorkloadsOnNodeDown] Set workload %s on node %s as inactive failed %v", workload.ID, nodename, err) - continue - } - - if workload.StatusMeta == nil { - workload.StatusMeta = &types.StatusMeta{ID: workload.ID} - } - workload.StatusMeta.Running = false - workload.StatusMeta.Healthy = false - - // Set these attributes to set workload status - workload.StatusMeta.Appname = appname - workload.StatusMeta.Nodename = workload.Nodename - workload.StatusMeta.Entrypoint = entrypoint - - // mark workload which belongs to this node as unhealthy - if err = c.store.SetWorkloadStatus(ctx, workload.StatusMeta, 0); err != nil { - log.Errorf(ctx, "[SetNodeAvailable] Set workload %s on node %s as inactive failed %v", workload.ID, nodename, errors.WithStack(err)) - } else { - log.Infof(ctx, "[SetNodeAvailable] Set workload %s on node %s as inactive", workload.ID, nodename) - } - } -} - // filterNodes filters nodes using NodeFilter nf // the filtering logic is introduced along with NodeFilter // NOTE: when nf.Includes is set, they don't need to belong to podname -// updateon 2021-06-21: sort and unique locks to avoid deadlock +// update on 2021-06-21: sort and unique locks to avoid deadlock +// node without resource info func (c *Calcium) filterNodes(ctx context.Context, nf types.NodeFilter) (ns []*types.Node, err error) { defer func() { if len(ns) == 0 { @@ -290,7 +266,7 @@ func (c *Calcium) filterNodes(ctx context.Context, nf types.NodeFilter) (ns []*t if len(nf.Includes) != 0 { for _, nodename := range nf.Includes { - node, err := c.GetNode(ctx, nodename, nil) + node, err := c.store.GetNode(ctx, nodename) if err != nil { return nil, err } @@ -299,18 +275,10 @@ func (c *Calcium) filterNodes(ctx context.Context, nf types.NodeFilter) (ns []*t return ns, nil } - ch, err := c.ListPodNodes(ctx, &types.ListNodesOptions{ - Podname: nf.Podname, - Labels: nf.Labels, - All: nf.All, - }) + listedNodes, err := c.store.GetNodesByPod(ctx, nf.Podname, nf.Labels, nf.All) if err != nil { return nil, err } - listedNodes := []*types.Node{} - for n := range ch { - listedNodes = append(listedNodes, n) - } if len(nf.Excludes) == 0 { return listedNodes, nil } @@ -328,3 +296,37 @@ func (c *Calcium) filterNodes(ctx context.Context, nf types.NodeFilter) (ns []*t } return ns, nil } + +func (c *Calcium) setAllWorkloadsOnNodeDown(ctx context.Context, nodename string) { + workloads, err := c.store.ListNodeWorkloads(ctx, nodename, nil) + if err != nil { + log.Errorf(ctx, "[setAllWorkloadsOnNodeDown] failed to list node workloads, node %v, err: %v", nodename, errors.WithStack(err)) + return + } + + for _, workload := range workloads { + appname, entrypoint, _, err := utils.ParseWorkloadName(workload.Name) + if err != nil { + log.Errorf(ctx, "[setAllWorkloadsOnNodeDown] Set workload %s on node %s as inactive failed %v", workload.ID, nodename, err) + continue + } + + if workload.StatusMeta == nil { + workload.StatusMeta = &types.StatusMeta{ID: workload.ID} + } + workload.StatusMeta.Running = false + workload.StatusMeta.Healthy = false + + // Set these attributes to set workload status + workload.StatusMeta.Appname = appname + workload.StatusMeta.Nodename = workload.Nodename + workload.StatusMeta.Entrypoint = entrypoint + + // mark workload which belongs to this node as unhealthy + if err = c.store.SetWorkloadStatus(ctx, workload.StatusMeta, 0); err != nil { + log.Errorf(ctx, "[SetNodeAvailable] Set workload %s on node %s as inactive failed %v", workload.ID, nodename, errors.WithStack(err)) + } else { + log.Infof(ctx, "[SetNodeAvailable] Set workload %s on node %s as inactive", workload.ID, nodename) + } + } +} diff --git a/cluster/calcium/node_test.go b/cluster/calcium/node_test.go index da1fd456e..8f06f9a06 100644 --- a/cluster/calcium/node_test.go +++ b/cluster/calcium/node_test.go @@ -2,7 +2,9 @@ package calcium import ( "context" + "fmt" "testing" + "time" "github.com/projecteru2/core/engine/factory" enginemocks "github.com/projecteru2/core/engine/mocks" @@ -13,7 +15,6 @@ import ( storemocks "github.com/projecteru2/core/store/mocks" "github.com/projecteru2/core/types" - "github.com/pkg/errors" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" ) @@ -22,10 +23,34 @@ func TestAddNode(t *testing.T) { c := NewTestCluster() ctx := context.Background() factory.InitEngineCache(ctx, c.config) + + opts := &types.AddNodeOptions{} + // failed by validating + _, err := c.AddNode(ctx, opts) + assert.Error(t, err) + + nodename := "nodename" + podname := "podname" + opts.Nodename = nodename + opts.Podname = podname + opts.Endpoint = fmt.Sprintf("mock://%s", nodename) + + // failed by rmgr.AddNode rmgr := c.rmgr.(*resourcemocks.Manager) - rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil, nil, nil) - rmgr.On("ConvertNodeResourceInfoToMetrics", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return([]*resourcetypes.Metrics{}, nil) + rmgr.On("AddNode", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil, types.ErrNoETCD).Once() + _, err = c.AddNode(ctx, opts) + assert.Error(t, err) + rmgr.AssertExpectations(t) + rmgr.On("AddNode", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return( + map[string]types.NodeResourceArgs{}, map[string]types.NodeResourceArgs{}, nil) + rmgr.On("RemoveNode", mock.Anything, mock.Anything).Return(nil) + // failed by store.AddNode + store := c.store.(*storemocks.Store) + store.On("AddNode", mock.Anything, mock.Anything).Return(nil, types.ErrNoETCD).Once() + _, err = c.AddNode(ctx, opts) + assert.Error(t, err) + store.AssertExpectations(t) name := "test" node := &types.Node{ NodeMeta: types.NodeMeta{ @@ -33,34 +58,9 @@ func TestAddNode(t *testing.T) { Endpoint: "endpoint", }, } - - store := c.store.(*storemocks.Store) - store.On("AddNode", - mock.Anything, - mock.Anything, mock.Anything, mock.Anything, - mock.Anything, mock.Anything, mock.Anything, - mock.Anything, mock.Anything, mock.Anything, mock.Anything, - mock.Anything, mock.Anything, mock.Anything).Return(node, nil) - rmgr.On("AddNode", - mock.Anything, mock.Anything, mock.Anything, mock.Anything, - ).Return( - map[string]types.NodeResourceArgs{}, - map[string]types.NodeResourceArgs{}, - nil, - ) - store.On("GetNode", - mock.Anything, - mock.Anything).Return(node, nil) - - // fail by validating - _, err := c.AddNode(ctx, &types.AddNodeOptions{}) - assert.Error(t, err) - - n, err := c.AddNode(ctx, &types.AddNodeOptions{ - Nodename: "nodename", - Podname: "podname", - Endpoint: "mock://" + name, - }) + store.On("AddNode", mock.Anything, mock.Anything).Return(node, nil) + rmgr.On("ConvertNodeResourceInfoToMetrics", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return([]*resourcetypes.Metrics{}, nil) + n, err := c.AddNode(ctx, opts) assert.NoError(t, err) assert.Equal(t, n.Name, name) } @@ -68,92 +68,110 @@ func TestAddNode(t *testing.T) { func TestRemoveNode(t *testing.T) { c := NewTestCluster() ctx := context.Background() - rmgr := c.rmgr.(*resourcemocks.Manager) - - name := "test" - node := &types.Node{NodeMeta: types.NodeMeta{Name: name}} store := c.store.(*storemocks.Store) lock := &lockmocks.DistributedLock{} lock.On("Lock", mock.Anything).Return(context.TODO(), nil) lock.On("Unlock", mock.Anything).Return(nil) store.On("CreateLock", mock.Anything, mock.Anything).Return(lock, nil) - rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil, nil, nil) - rmgr.On("RemoveNode", mock.Anything, mock.Anything).Return(nil) - store.On("GetNode", - mock.Anything, - mock.Anything).Return(node, nil) + name := "test" + node := &types.Node{NodeMeta: types.NodeMeta{Name: name}} + store.On("GetNode", mock.Anything, mock.Anything).Return(node, nil) + // fail, ListNodeWorkloads fail store.On("ListNodeWorkloads", mock.Anything, mock.Anything, mock.Anything).Return([]*types.Workload{}, types.ErrNoETCD).Once() assert.Error(t, c.RemoveNode(ctx, name)) + // fail, node still has associated workloads store.On("ListNodeWorkloads", mock.Anything, mock.Anything, mock.Anything).Return([]*types.Workload{{}}, nil).Once() assert.Error(t, c.RemoveNode(ctx, name)) + store.AssertExpectations(t) - // succeed + // fail by store.RemoveNode store.On("ListNodeWorkloads", mock.Anything, mock.Anything, mock.Anything).Return([]*types.Workload{}, nil) - store.On("RemoveNode", mock.Anything, mock.Anything).Return(nil) - pod := &types.Pod{Name: name} - store.On("GetPod", mock.Anything, mock.Anything).Return(pod, nil) + store.On("RemoveNode", mock.Anything, mock.Anything).Return(types.ErrNoETCD).Once() + assert.Error(t, c.RemoveNode(ctx, name)) - store.On("GetNodesByPod", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return([]*types.Node{node}, nil) + // success + store.On("RemoveNode", mock.Anything, mock.Anything).Return(nil) + rmgr := c.rmgr.(*resourcemocks.Manager) + rmgr.On("RemoveNode", mock.Anything, mock.Anything).Return(nil) assert.NoError(t, c.RemoveNode(ctx, name)) + store.AssertExpectations(t) + rmgr.AssertExpectations(t) } func TestListPodNodes(t *testing.T) { c := NewTestCluster() - rmgr := c.rmgr.(*resourcemocks.Manager) - rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil, nil, nil) ctx := context.Background() - name1 := "test1" - name2 := "test2" - nodes := []*types.Node{ - {NodeMeta: types.NodeMeta{Name: name1}, Available: true}, - {NodeMeta: types.NodeMeta{Name: name2}, Available: false}, - } + opts := &types.ListNodesOptions{} store := c.store.(*storemocks.Store) + // failed by GetNodesByPod store.On("GetNodesByPod", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, types.ErrNoETCD).Once() - _, err := c.ListPodNodes(ctx, &types.ListNodesOptions{}) + _, err := c.ListPodNodes(ctx, opts) assert.Error(t, err) + store.AssertExpectations(t) + + // success + engine := &enginemocks.API{} + engine.On("Info", mock.Anything).Return(nil, types.ErrNoETCD) + name1 := "test1" + name2 := "test2" + nodes := []*types.Node{ + {NodeMeta: types.NodeMeta{Name: name1}, Engine: engine, Available: true}, + {NodeMeta: types.NodeMeta{Name: name2}, Engine: engine, Available: false}, + } store.On("GetNodesByPod", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nodes, nil) + rmgr := c.rmgr.(*resourcemocks.Manager) + rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil, nil, types.ErrNoETCD) + opts.CallInfo = true + ns, err := c.ListPodNodes(ctx, &types.ListNodesOptions{}) - nss := []*types.Node{} - for n := range ns { - nss = append(nss, n) - } - assert.NoError(t, err) - assert.Equal(t, len(nss), 2) - assert.Contains(t, nss[0].Name, "test") - ns, err = c.ListPodNodes(ctx, &types.ListNodesOptions{}) assert.NoError(t, err) cnt := 0 for range ns { cnt++ } assert.Equal(t, cnt, 2) + rmgr.AssertExpectations(t) + store.AssertExpectations(t) } func TestGetNode(t *testing.T) { c := NewTestCluster() ctx := context.Background() - rmgr := c.rmgr.(*resourcemocks.Manager) - rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil, nil, nil) // fail by validating - _, err := c.GetNode(ctx, "", nil) + _, err := c.GetNode(ctx, "") + assert.Error(t, err) + nodename := "test" + + // failed by store.GetNode + store := c.store.(*storemocks.Store) + store.On("GetNode", mock.Anything, mock.Anything).Return(nil, types.ErrNoETCD).Once() + _, err = c.GetNode(ctx, nodename) assert.Error(t, err) - name := "test" node := &types.Node{ - NodeMeta: types.NodeMeta{Name: name}, + NodeMeta: types.NodeMeta{Name: nodename}, } - - store := c.store.(*storemocks.Store) store.On("GetNode", mock.Anything, mock.Anything).Return(node, nil) - n, err := c.GetNode(ctx, name, nil) + // failed by GetNodeResourceInfo + rmgr := c.rmgr.(*resourcemocks.Manager) + rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil, nil, types.ErrNoETCD).Once() + _, err = c.GetNode(ctx, nodename) + assert.Error(t, err) + + rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil, nil, nil) + + // success + node, err = c.GetNode(ctx, nodename) assert.NoError(t, err) - assert.Equal(t, n.Name, name) + assert.Equal(t, node.Name, nodename) + + rmgr.AssertExpectations(t) + store.AssertExpectations(t) } func TestGetNodeEngine(t *testing.T) { @@ -161,115 +179,126 @@ func TestGetNodeEngine(t *testing.T) { ctx := context.Background() // fail by validating - _, err := c.GetNodeEngine(ctx, "") + _, err := c.GetNodeEngineInfo(ctx, "") + assert.Error(t, err) + nodename := "test" + + // fail by store.GetNode + store := c.store.(*storemocks.Store) + store.On("GetNode", mock.Anything, mock.Anything).Return(nil, types.ErrNoETCD).Once() + _, err = c.GetNode(ctx, nodename) assert.Error(t, err) + // success engine := &enginemocks.API{} engine.On("Info", mock.Anything).Return(&enginetypes.Info{Type: "fake"}, nil) - name := "test" node := &types.Node{ - NodeMeta: types.NodeMeta{Name: name}, + NodeMeta: types.NodeMeta{Name: nodename}, Engine: engine, } - - store := c.store.(*storemocks.Store) store.On("GetNode", mock.Anything, mock.Anything).Return(node, nil) - e, err := c.GetNodeEngine(ctx, name) + e, err := c.GetNodeEngineInfo(ctx, nodename) assert.NoError(t, err) assert.Equal(t, e.Type, "fake") + store.AssertExpectations(t) } func TestSetNode(t *testing.T) { c := NewTestCluster() ctx := context.Background() - rmgr := c.rmgr.(*resourcemocks.Manager) - rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil, nil, nil) - rmgr.On("SetNodeResourceCapacity", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return( - map[string]types.NodeResourceArgs{}, - map[string]types.NodeResourceArgs{}, - nil, - ) - rmgr.On("ConvertNodeResourceInfoToMetrics", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return([]*resourcetypes.Metrics{}, nil) - name := "test" - node := &types.Node{NodeMeta: types.NodeMeta{Name: name}} + opts := &types.SetNodeOptions{} + + // failed by validating + _, err := c.SetNode(ctx, opts) + assert.Error(t, err) store := c.store.(*storemocks.Store) lock := &lockmocks.DistributedLock{} - store.On("CreateLock", mock.Anything, mock.Anything).Return(lock, nil) lock.On("Lock", mock.Anything).Return(context.TODO(), nil) lock.On("Unlock", mock.Anything).Return(nil) - store.On("SetNodeStatus", mock.Anything, mock.Anything, mock.Anything).Return(nil) + store.On("CreateLock", mock.Anything, mock.Anything).Return(lock, nil) + name := "test" + opts.Nodename = name + node := &types.Node{NodeMeta: types.NodeMeta{Name: name}} + store.On("GetNode", mock.Anything, mock.Anything).Return(node, nil) - // fail by validating - _, err := c.SetNode(ctx, &types.SetNodeOptions{Nodename: ""}) - assert.Error(t, err) - // failed by get node - store.On("GetNode", mock.Anything, mock.Anything).Return(nil, types.ErrCannotGetEngine).Once() - store.On("GetNodesByPod", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return([]*types.Node{node}, nil) - _, err = c.SetNode(ctx, &types.SetNodeOptions{Nodename: "xxxx"}) + // failed by GetNodeResourceInfo + rmgr := c.rmgr.(*resourcemocks.Manager) + rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil, nil, types.ErrNoETCD).Once() + _, err = c.SetNode(ctx, opts) assert.Error(t, err) - store.On("GetNode", mock.Anything, mock.Anything).Return(node, nil) - // failed by no node name - _, err = c.SetNode(ctx, &types.SetNodeOptions{Nodename: "test1"}) + rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil, nil, nil) + + // for bypass + opts.Bypass = types.TriTrue + opts.WorkloadsDown = true + // for setAllWorkloadsOnNodeDown + workloads := []*types.Workload{{ID: "1", Name: "wrong_name"}, {ID: "2", Name: "a_b_c"}} + store.On("ListNodeWorkloads", mock.Anything, mock.Anything, mock.Anything).Return(workloads, nil) + store.On("SetWorkloadStatus", mock.Anything, mock.Anything, mock.Anything).Return(nil) + + // for set endpoint + endpoint := "mock://test2" + opts.Endpoint = endpoint + + // for labels update + labels := map[string]string{"a": "1", "b": "2"} + opts.Labels = labels + + // failed by SetNodeResourceCapacity + opts.ResourceOpts = types.NodeResourceOpts{"a": 1} + rmgr.On("SetNodeResourceCapacity", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return( + nil, nil, types.ErrNoETCD, + ).Once() + _, err = c.SetNode(ctx, opts) assert.Error(t, err) - // failed by updatenode - store.On("UpdateNodes", mock.Anything, mock.Anything).Return(types.ErrCannotGetEngine).Once() - _, err = c.SetNode(ctx, &types.SetNodeOptions{Nodename: "test"}) + rmgr.On("SetNodeResourceCapacity", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return( + nil, nil, nil, + ) + + // rollback + store.On("UpdateNodes", mock.Anything, mock.Anything).Return(types.ErrNoETCD).Once() + _, err = c.SetNode(ctx, opts) assert.Error(t, err) store.On("UpdateNodes", mock.Anything, mock.Anything).Return(nil) - // succ when node available - n, err := c.SetNode(ctx, &types.SetNodeOptions{Nodename: "test", Endpoint: "tcp://127.0.0.1:2379"}) - assert.NoError(t, err) - assert.Equal(t, n.Name, name) - assert.Equal(t, n.Endpoint, "tcp://127.0.0.1:2379") - // not available - // can still set node even if ListNodeWorkloads fails - store.On("ListNodeWorkloads", mock.Anything, mock.Anything, mock.Anything).Return(nil, types.ErrNoETCD).Once() - _, err = c.SetNode(ctx, &types.SetNodeOptions{Nodename: "test", WorkloadsDown: true}) - assert.NoError(t, err) - workloads := []*types.Workload{{Name: "wrong_name"}, {Name: "a_b_c"}} - store.On("ListNodeWorkloads", mock.Anything, mock.Anything, mock.Anything).Return(workloads, nil) - store.On("SetWorkloadStatus", - mock.Anything, mock.Anything, mock.Anything, - ).Return(types.ErrNoETCD) - _, err = c.SetNode(ctx, &types.SetNodeOptions{Nodename: "test", WorkloadsDown: true}) - assert.NoError(t, err) - // test modify - setOpts := &types.SetNodeOptions{ - Nodename: "test", - Labels: map[string]string{"some": "1"}, - ResourceOpts: types.NodeResourceOpts{"w": 1}, - } - // set label - n, err = c.SetNode(ctx, setOpts) - assert.NoError(t, err) - assert.Equal(t, n.Labels["some"], "1") - // set endpoint - setOpts.Endpoint = "tcp://10.10.10.10:2379" - n, err = c.SetNode(ctx, setOpts) - assert.NoError(t, err) - assert.Equal(t, n.Endpoint, "tcp://10.10.10.10:2379") - // no impact on endpoint - setOpts.Endpoint = "" - n, err = c.SetNode(ctx, setOpts) - assert.NoError(t, err) - assert.Equal(t, n.Endpoint, "tcp://10.10.10.10:2379") - // set ca / cert / key - setOpts.Ca = "hh" - setOpts.Cert = "hh" - setOpts.Key = "hh" - n, err = c.SetNode(ctx, setOpts) + rmgr.On("ConvertNodeResourceInfoToMetrics", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return([]*resourcetypes.Metrics{}, nil) + + // done + node, err = c.SetNode(ctx, opts) assert.NoError(t, err) + assert.Equal(t, node.Endpoint, endpoint) + assert.Equal(t, labels["a"], node.Labels["a"]) + store.AssertExpectations(t) + time.Sleep(100 * time.Millisecond) // for send metrics testing + rmgr.AssertExpectations(t) } func TestFilterNodes(t *testing.T) { - assert := assert.New(t) c := NewTestCluster() - rmgr := c.rmgr.(*resourcemocks.Manager) - rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil, nil, nil) + ctx := context.Background() store := c.store.(*storemocks.Store) + + // failed by GetNode + nf := types.NodeFilter{Includes: []string{"test"}} + store.On("GetNode", mock.Anything, mock.Anything).Return(nil, types.ErrNoETCD).Once() + _, err := c.filterNodes(ctx, nf) + assert.Error(t, err) + + // succ by GetNode + node1 := &types.Node{NodeMeta: types.NodeMeta{Name: "0"}} + store.On("GetNode", mock.Anything, mock.Anything).Return(node1, nil) + ns, err := c.filterNodes(ctx, nf) + assert.NoError(t, err) + assert.Len(t, ns, 1) + + // failed by GetNodesByPod + nf.Includes = []string{} + store.On("GetNodesByPod", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, types.ErrNoETCD).Once() + _, err = c.filterNodes(ctx, nf) + assert.Error(t, err) + nodes := []*types.Node{ { NodeMeta: types.NodeMeta{Name: "A"}, @@ -284,38 +313,16 @@ func TestFilterNodes(t *testing.T) { NodeMeta: types.NodeMeta{Name: "D"}, }, } - ctx := context.Background() + store.On("GetNodesByPod", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nodes, nil) - // error - store.On("GetNodesByPod", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, errors.New("fail to list pod nodes")).Once() - _, err := c.filterNodes(ctx, types.NodeFilter{Includes: []string{}, Excludes: []string{"A", "X"}}) - assert.Error(err) - - // empty nodenames, non-empty excludeNodenames - store.On("GetNodesByPod", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nodes, nil).Once() - nodes1, err := c.filterNodes(ctx, types.NodeFilter{Includes: []string{}, Excludes: []string{"A", "B"}}) - assert.NoError(err) - assert.Equal(2, len(nodes1)) - - // empty nodenames, empty excludeNodenames - store.On("GetNodesByPod", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nodes, nil).Once() - nodes2, err := c.filterNodes(ctx, types.NodeFilter{Includes: []string{}, Excludes: []string{}}) - assert.NoError(err) - assert.Equal(4, len(nodes2)) - - // non-empty nodenames, empty excludeNodenames - store.On("GetNode", mock.Anything, "O").Return(&types.Node{NodeMeta: types.NodeMeta{Name: "O"}}, nil).Once() - store.On("GetNode", mock.Anything, "P").Return(&types.Node{NodeMeta: types.NodeMeta{Name: "P"}}, nil).Once() - nodes3, err := c.filterNodes(ctx, types.NodeFilter{Includes: []string{"O", "P"}, Excludes: []string{}}) - assert.NoError(err) - assert.Equal("O", nodes3[0].Name) - assert.Equal("P", nodes3[1].Name) - - // non-empty nodenames - store.On("GetNode", mock.Anything, "X").Return(&types.Node{NodeMeta: types.NodeMeta{Name: "X"}}, nil).Once() - store.On("GetNode", mock.Anything, "Y").Return(&types.Node{NodeMeta: types.NodeMeta{Name: "Y"}}, nil).Once() - nodes4, err := c.filterNodes(ctx, types.NodeFilter{Includes: []string{"X", "Y"}, Excludes: []string{"A", "B"}}) - assert.NoError(err) - assert.Equal("X", nodes4[0].Name) - assert.Equal("Y", nodes4[1].Name) + // no excludes + ns, err = c.filterNodes(ctx, nf) + assert.NoError(t, err) + assert.Len(t, ns, 4) + + // excludes + nf.Excludes = []string{"A", "C"} + ns, err = c.filterNodes(ctx, nf) + assert.NoError(t, err) + assert.Len(t, ns, 2) } diff --git a/cluster/calcium/pod_test.go b/cluster/calcium/pod_test.go index 3257dbdf0..5d88cd279 100644 --- a/cluster/calcium/pod_test.go +++ b/cluster/calcium/pod_test.go @@ -38,7 +38,7 @@ func TestRemovePod(t *testing.T) { ctx := context.Background() store := c.store.(*storemocks.Store) rmgr := c.rmgr.(*resourcemocks.Manager) - rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil, nil, nil) + rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil, nil, nil) assert.Error(t, c.RemovePod(ctx, "")) diff --git a/cluster/calcium/realloc_test.go b/cluster/calcium/realloc_test.go index 85f02bedd..5ba4bbbab 100644 --- a/cluster/calcium/realloc_test.go +++ b/cluster/calcium/realloc_test.go @@ -21,7 +21,7 @@ func TestRealloc(t *testing.T) { ctx := context.Background() store := c.store.(*storemocks.Store) rmgr := c.rmgr.(*resourcemocks.Manager) - rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil, nil, nil) + rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil, nil, nil) rmgr.On("ConvertNodeResourceInfoToMetrics", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return([]*resourcetypes.Metrics{}, nil) c.config.Scheduler.ShareBase = 100 diff --git a/cluster/calcium/remap_test.go b/cluster/calcium/remap_test.go index ce2f4fb23..f6e4f884f 100644 --- a/cluster/calcium/remap_test.go +++ b/cluster/calcium/remap_test.go @@ -18,7 +18,7 @@ func TestRemapResource(t *testing.T) { c := NewTestCluster() store := c.store.(*storemocks.Store) rmgr := c.rmgr.(*resourcemocks.Manager) - rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return( + rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return( map[string]types.NodeResourceArgs{"test": map[string]interface{}{"abc": 123}}, map[string]types.NodeResourceArgs{"test": map[string]interface{}{"abc": 123}}, []string{types.ErrNoETCD.Error()}, diff --git a/cluster/calcium/remove_test.go b/cluster/calcium/remove_test.go index 307dfcd13..d174d8861 100644 --- a/cluster/calcium/remove_test.go +++ b/cluster/calcium/remove_test.go @@ -25,7 +25,7 @@ func TestRemoveWorkload(t *testing.T) { lock.On("Unlock", mock.Anything).Return(nil) store := c.store.(*storemocks.Store) rmgr := c.rmgr.(*resourcemocks.Manager) - rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil, nil, nil) + rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil, nil, nil) rmgr.On("SetNodeResourceUsage", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return( map[string]types.NodeResourceArgs{}, map[string]types.NodeResourceArgs{}, diff --git a/cluster/calcium/replace.go b/cluster/calcium/replace.go index af799c4d9..4a105703d 100644 --- a/cluster/calcium/replace.go +++ b/cluster/calcium/replace.go @@ -113,7 +113,7 @@ func (c *Calcium) doReplaceWorkload( Hook: []*bytes.Buffer{}, } // label filter - if !utils.FilterWorkload(workload.Labels, opts.FilterLabels) { + if !utils.LabelsFilter(workload.Labels, opts.FilterLabels) { return nil, removeMessage, errors.WithStack(types.ErrNotFitLabels) } // prepare node diff --git a/cluster/calcium/replace_test.go b/cluster/calcium/replace_test.go index 973e472dd..2c19a6e03 100644 --- a/cluster/calcium/replace_test.go +++ b/cluster/calcium/replace_test.go @@ -23,7 +23,7 @@ func TestReplaceWorkload(t *testing.T) { lock.On("Unlock", mock.Anything).Return(nil) store := c.store.(*storemocks.Store) rmgr := c.rmgr.(*resourcemocks.Manager) - rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil, nil, nil) + rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil, nil, nil) _, err := c.ReplaceWorkload(ctx, &types.ReplaceOptions{ DeployOptions: types.DeployOptions{ diff --git a/cluster/calcium/resource.go b/cluster/calcium/resource.go index df2df8f6f..40a351a35 100644 --- a/cluster/calcium/resource.go +++ b/cluster/calcium/resource.go @@ -8,6 +8,7 @@ import ( "github.com/projecteru2/core/log" "github.com/projecteru2/core/strategy" "github.com/projecteru2/core/types" + "github.com/projecteru2/core/utils" "github.com/pkg/errors" ) @@ -15,74 +16,78 @@ import ( // PodResource show pod resource usage func (c *Calcium) PodResource(ctx context.Context, podname string) (chan *types.NodeResource, error) { logger := log.WithField("Calcium", "PodResource").WithField("podname", podname) - nodeCh, err := c.ListPodNodes(ctx, &types.ListNodesOptions{Podname: podname, All: true}) + nodes, err := c.store.GetNodesByPod(ctx, podname, nil, true) if err != nil { return nil, logger.ErrWithTracing(ctx, err) } ch := make(chan *types.NodeResource) - go func() { + utils.SentryGo(func() { defer close(ch) wg := &sync.WaitGroup{} - for node := range nodeCh { + wg.Add(len(nodes)) + for _, node := range nodes { node := node - wg.Add(1) _ = c.pool.Invoke(func() { defer wg.Done() - nodeResource, err := c.doGetNodeResource(ctx, node.Name, false) + nr, err := c.doGetNodeResource(ctx, node.Name, false, false) if err != nil { - nodeResource = &types.NodeResource{ + nr = &types.NodeResource{ Name: node.Name, Diffs: []string{logger.ErrWithTracing(ctx, err).Error()}, } } - ch <- nodeResource + ch <- nr }) } wg.Wait() - }() + }) + return ch, nil } // NodeResource check node's workload and resource func (c *Calcium) NodeResource(ctx context.Context, nodename string, fix bool) (*types.NodeResource, error) { logger := log.WithField("Calcium", "NodeResource").WithField("nodename", nodename).WithField("fix", fix) - if nodename == "" { - return nil, logger.ErrWithTracing(ctx, types.ErrEmptyNodeName) - } - - nr, err := c.doGetNodeResource(ctx, nodename, fix) - if err != nil { - return nil, logger.ErrWithTracing(ctx, err) - } - for _, workload := range nr.Workloads { - if _, err := workload.Inspect(ctx); err != nil { // 用于探测节点上容器是否存在 - nr.Diffs = append(nr.Diffs, fmt.Sprintf("workload %s inspect failed %v \n", workload.ID, err)) - continue - } - } + nr, err := c.doGetNodeResource(ctx, nodename, true, fix) return nr, logger.ErrWithTracing(ctx, err) } -func (c *Calcium) doGetNodeResource(ctx context.Context, nodename string, fix bool) (*types.NodeResource, error) { +func (c *Calcium) doGetNodeResource(ctx context.Context, nodename string, inspect, fix bool) (*types.NodeResource, error) { + logger := log.WithField("Calcium", "doGetNodeResource").WithField("nodename", nodename).WithField("inspect", inspect).WithField("fix", fix) + if nodename == "" { + return nil, logger.ErrWithTracing(ctx, types.ErrEmptyNodeName) + } var nr *types.NodeResource return nr, c.withNodePodLocked(ctx, nodename, func(ctx context.Context, node *types.Node) error { - workloads, err := c.ListNodeWorkloads(ctx, nodename, nil) + workloads, err := c.store.ListNodeWorkloads(ctx, node.Name, nil) if err != nil { - log.Errorf(ctx, "[doGetNodeResource] failed to list node workloads, node %v, err: %v", nodename, err) + log.Errorf(ctx, "[doGetNodeResource] failed to list node workloads, node %v, err: %v", node.Name, err) return err } - if fix { - go c.SendNodeMetrics(ctx, node.Name) + // get node resources + resourceCapacity, resourceUsage, resourceDiffs, err := c.rmgr.GetNodeResourceInfo(ctx, node.Name, workloads, fix) + if err != nil { + log.Errorf(ctx, "[doGetNodeResource] failed to get node resources, node %v, err: %v", node.Name, err) + return err } - nr = &types.NodeResource{ - Name: nodename, - ResourceCapacity: node.ResourceCapacity, - ResourceUsage: node.ResourceUsage, - Diffs: node.Diffs, + Name: node.Name, + ResourceCapacity: resourceCapacity, + ResourceUsage: resourceUsage, + Diffs: resourceDiffs, Workloads: workloads, } + + if inspect { + for _, workload := range nr.Workloads { + if _, err := workload.Inspect(ctx); err != nil { // 用于探测节点上容器是否存在 + nr.Diffs = append(nr.Diffs, fmt.Sprintf("workload %s inspect failed %v \n", workload.ID, err)) + continue + } + } + } + return nil }) } diff --git a/cluster/calcium/resource_test.go b/cluster/calcium/resource_test.go index 215667841..7d5fe5f01 100644 --- a/cluster/calcium/resource_test.go +++ b/cluster/calcium/resource_test.go @@ -2,14 +2,10 @@ package calcium import ( "context" - "fmt" - "strings" "testing" - "time" enginemocks "github.com/projecteru2/core/engine/mocks" lockmocks "github.com/projecteru2/core/lock/mocks" - resourcetypes "github.com/projecteru2/core/resources" resourcemocks "github.com/projecteru2/core/resources/mocks" storemocks "github.com/projecteru2/core/store/mocks" "github.com/projecteru2/core/types" @@ -34,45 +30,51 @@ func TestPodResource(t *testing.T) { ch, err := c.PodResource(ctx, podname) assert.Error(t, err) store.AssertExpectations(t) - - // failed by ListNodeWorkloads node := &types.Node{ NodeMeta: types.NodeMeta{ Name: nodename, }, } - rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return( - map[string]types.NodeResourceArgs{"test": map[string]interface{}{"abc": 123}}, - map[string]types.NodeResourceArgs{"test": map[string]interface{}{"abc": 123}}, - []string{types.ErrNoETCD.Error()}, - nil) store.On("GetNodesByPod", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return([]*types.Node{node}, nil) store.On("GetNode", mock.Anything, mock.Anything).Return(node, nil) - store.On("ListNodeWorkloads", mock.Anything, mock.Anything, mock.Anything).Return(nil, types.ErrNoETCD).Once() store.On("CreateLock", mock.Anything, mock.Anything).Return(lock, nil) + + // failed by ListNodeWorkloads + store.On("ListNodeWorkloads", mock.Anything, mock.Anything, mock.Anything).Return(nil, types.ErrNoETCD).Once() ch, err = c.PodResource(ctx, podname) assert.NoError(t, err) msg := <-ch - assert.True(t, strings.Contains(msg.Diffs[0], types.ErrNoETCD.Error())) + assert.Equal(t, msg.Name, nodename) + assert.NotEmpty(t, msg.Diffs) store.AssertExpectations(t) - workloads := []*types.Workload{ {ResourceArgs: map[string]types.WorkloadResourceArgs{}}, {ResourceArgs: map[string]types.WorkloadResourceArgs{}}, } store.On("ListNodeWorkloads", mock.Anything, mock.Anything, mock.Anything).Return(workloads, nil) - engine := &enginemocks.API{} - engine.On("ResourceValidate", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return( - fmt.Errorf("%s", "not validate"), - ) - node.Engine = engine + + // failed by GetNodeResourceInfo + rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return( + nil, nil, nil, types.ErrNoETCD).Once() + ch, err = c.PodResource(ctx, podname) + msg = <-ch + assert.NoError(t, err) + assert.Equal(t, msg.Name, nodename) + assert.NotEmpty(t, msg.Diffs) + store.AssertExpectations(t) + rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return( + map[string]types.NodeResourceArgs{"test": map[string]interface{}{"abc": 123}}, + map[string]types.NodeResourceArgs{"test": map[string]interface{}{"abc": 123}}, + []string{}, + nil) // success - rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil, []string{"a"}, nil) - r, err := c.PodResource(ctx, podname) + ch, err = c.PodResource(ctx, podname) + msg = <-ch assert.NoError(t, err) - first := <-r - assert.NotEmpty(t, first.Diffs) + assert.Equal(t, msg.Name, nodename) + assert.Empty(t, msg.Diffs) + store.AssertExpectations(t) } func TestNodeResource(t *testing.T) { @@ -81,52 +83,36 @@ func TestNodeResource(t *testing.T) { nodename := "testnode" store := c.store.(*storemocks.Store) rmgr := c.rmgr.(*resourcemocks.Manager) - rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return( - nil, nil, nil, nil, - ) lock := &lockmocks.DistributedLock{} store.On("CreateLock", mock.Anything, mock.Anything).Return(lock, nil) lock.On("Lock", mock.Anything).Return(context.TODO(), nil) lock.On("Unlock", mock.Anything).Return(nil) + node := &types.Node{ NodeMeta: types.NodeMeta{ Name: nodename, }, } engine := &enginemocks.API{} - engine.On("ResourceValidate", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return( - fmt.Errorf("%s", "not validate"), - ) - node.Engine = engine - // fail by validating - _, err := c.NodeResource(ctx, "", false) - assert.Error(t, err) - // failed by GetNode - store.On("GetNode", ctx, nodename).Return(nil, types.ErrNoETCD).Once() - _, err = c.NodeResource(ctx, nodename, false) - assert.Error(t, err) - store.On("GetNode", mock.Anything, nodename).Return(node, nil) - // failed by list node workloads - store.On("ListNodeWorkloads", mock.Anything, mock.Anything, mock.Anything).Return(nil, types.ErrNoETCD).Once() - _, err = c.NodeResource(ctx, nodename, false) - assert.Error(t, err) + store.On("GetNode", mock.Anything, mock.Anything).Return(node, nil) + store.On("CreateLock", mock.Anything, mock.Anything).Return(lock, nil) + + rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return( + map[string]types.NodeResourceArgs{"test": map[string]interface{}{"abc": 123}}, + map[string]types.NodeResourceArgs{"test": map[string]interface{}{"abc": 123}}, + []string{}, + nil) + workloads := []*types.Workload{ - { - ResourceArgs: map[string]types.WorkloadResourceArgs{}, - }, - { - ResourceArgs: map[string]types.WorkloadResourceArgs{}, - }, + {ResourceArgs: map[string]types.WorkloadResourceArgs{}, Engine: engine}, + {ResourceArgs: map[string]types.WorkloadResourceArgs{}, Engine: engine}, } store.On("ListNodeWorkloads", mock.Anything, mock.Anything, mock.Anything).Return(workloads, nil) - store.On("UpdateNodes", mock.Anything, mock.Anything).Return(nil) - rmgr.On("ConvertNodeResourceInfoToMetrics", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return([]*resourcetypes.Metrics{}, nil) - // success but workload inspect failed + engine.On("VirtualizationInspect", mock.Anything, mock.Anything).Return(nil, types.ErrNoETCD) + nr, err := c.NodeResource(ctx, nodename, true) - time.Sleep(time.Second) assert.NoError(t, err) assert.Equal(t, nr.Name, nodename) assert.NotEmpty(t, nr.Diffs) - details := strings.Join(nr.Diffs, ",") - assert.Contains(t, details, "inspect failed") + store.AssertExpectations(t) } diff --git a/cluster/calcium/temp.go b/cluster/calcium/temp.go new file mode 100644 index 000000000..b3749cfd6 --- /dev/null +++ b/cluster/calcium/temp.go @@ -0,0 +1 @@ +package calcium diff --git a/cluster/calcium/wal.go b/cluster/calcium/wal.go index 35b02acfc..169c76ccb 100644 --- a/cluster/calcium/wal.go +++ b/cluster/calcium/wal.go @@ -170,7 +170,7 @@ func (h *CreateWorkloadHandler) Handle(ctx context.Context, raw interface{}) (er } // workload meta doesn't exist - node, err := h.calcium.GetNode(ctx, wrk.Nodename, nil) + node, err := h.calcium.GetNode(ctx, wrk.Nodename) if err != nil { return logger.ErrWithTracing(ctx, err) } diff --git a/cluster/calcium/wal_test.go b/cluster/calcium/wal_test.go index 6f18b95dc..e90a4618a 100644 --- a/cluster/calcium/wal_test.go +++ b/cluster/calcium/wal_test.go @@ -24,7 +24,7 @@ func TestHandleCreateWorkloadNoHandle(t *testing.T) { require.NoError(t, err) c.wal = wal rmgr := c.rmgr.(*resourcemocks.Manager) - rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return( + rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return( map[string]types.NodeResourceArgs{}, map[string]types.NodeResourceArgs{}, []string{}, @@ -56,7 +56,7 @@ func TestHandleCreateWorkloadError(t *testing.T) { require.NoError(t, err) c.wal = wal rmgr := c.rmgr.(*resourcemocks.Manager) - rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return( + rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return( map[string]types.NodeResourceArgs{}, map[string]types.NodeResourceArgs{}, []string{}, @@ -110,7 +110,7 @@ func TestHandleCreateWorkloadHandled(t *testing.T) { require.NoError(t, err) c.wal = wal rmgr := c.rmgr.(*resourcemocks.Manager) - rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return( + rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return( map[string]types.NodeResourceArgs{}, map[string]types.NodeResourceArgs{}, []string{}, @@ -157,7 +157,7 @@ func TestHandleCreateLambda(t *testing.T) { require.NoError(t, err) c.wal = wal rmgr := c.rmgr.(*resourcemocks.Manager) - rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return( + rmgr.On("GetNodeResourceInfo", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return( map[string]types.NodeResourceArgs{}, map[string]types.NodeResourceArgs{}, []string{}, diff --git a/cluster/calcium/workload.go b/cluster/calcium/workload.go index 1b8444c7b..5b1a98bfc 100644 --- a/cluster/calcium/workload.go +++ b/cluster/calcium/workload.go @@ -51,6 +51,6 @@ func (c *Calcium) getWorkloadNode(ctx context.Context, id string) (*types.Node, if err != nil { return nil, err } - node, err := c.GetNode(ctx, w.Nodename, nil) + node, err := c.GetNode(ctx, w.Nodename) return node, err } diff --git a/cluster/cluster.go b/cluster/cluster.go index f22fffac7..5c9aa23f5 100644 --- a/cluster/cluster.go +++ b/cluster/cluster.go @@ -55,15 +55,15 @@ type Cluster interface { AddNode(context.Context, *types.AddNodeOptions) (*types.Node, error) RemoveNode(ctx context.Context, nodename string) error ListPodNodes(context.Context, *types.ListNodesOptions) (<-chan *types.Node, error) - GetNode(ctx context.Context, nodename string, plugins []string) (*types.Node, error) - GetNodeEngine(ctx context.Context, nodename string) (*enginetypes.Info, error) + GetNode(ctx context.Context, nodename string) (*types.Node, error) + GetNodeEngineInfo(ctx context.Context, nodename string) (*enginetypes.Info, error) SetNode(ctx context.Context, opts *types.SetNodeOptions) (*types.Node, error) SetNodeStatus(ctx context.Context, nodename string, ttl int64) error GetNodeStatus(ctx context.Context, nodename string) (*types.NodeStatus, error) NodeStatusStream(ctx context.Context) chan *types.NodeStatus // node resource NodeResource(ctx context.Context, nodename string, fix bool) (*types.NodeResource, error) - SendNodeMetrics(ctx context.Context, nodeName string) + SendNodeMetrics(ctx context.Context, nodename string) // calculate capacity CalculateCapacity(context.Context, *types.DeployOptions) (*types.CapacityMessage, error) // meta workloads diff --git a/cluster/mocks/Cluster.go b/cluster/mocks/Cluster.go index 90e1b048a..e9d5af11e 100644 --- a/cluster/mocks/Cluster.go +++ b/cluster/mocks/Cluster.go @@ -295,13 +295,13 @@ func (_m *Cluster) GetIdentifier() string { return r0 } -// GetNode provides a mock function with given fields: ctx, nodename, plugins -func (_m *Cluster) GetNode(ctx context.Context, nodename string, plugins []string) (*types.Node, error) { - ret := _m.Called(ctx, nodename, plugins) +// GetNode provides a mock function with given fields: ctx, nodename +func (_m *Cluster) GetNode(ctx context.Context, nodename string) (*types.Node, error) { + ret := _m.Called(ctx, nodename) var r0 *types.Node - if rf, ok := ret.Get(0).(func(context.Context, string, []string) *types.Node); ok { - r0 = rf(ctx, nodename, plugins) + if rf, ok := ret.Get(0).(func(context.Context, string) *types.Node); ok { + r0 = rf(ctx, nodename) } else { if ret.Get(0) != nil { r0 = ret.Get(0).(*types.Node) @@ -309,8 +309,8 @@ func (_m *Cluster) GetNode(ctx context.Context, nodename string, plugins []strin } var r1 error - if rf, ok := ret.Get(1).(func(context.Context, string, []string) error); ok { - r1 = rf(ctx, nodename, plugins) + if rf, ok := ret.Get(1).(func(context.Context, string) error); ok { + r1 = rf(ctx, nodename) } else { r1 = ret.Error(1) } @@ -318,8 +318,8 @@ func (_m *Cluster) GetNode(ctx context.Context, nodename string, plugins []strin return r0, r1 } -// GetNodeEngine provides a mock function with given fields: ctx, nodename -func (_m *Cluster) GetNodeEngine(ctx context.Context, nodename string) (*enginetypes.Info, error) { +// GetNodeEngineInfo provides a mock function with given fields: ctx, nodename +func (_m *Cluster) GetNodeEngineInfo(ctx context.Context, nodename string) (*enginetypes.Info, error) { ret := _m.Called(ctx, nodename) var r0 *enginetypes.Info @@ -859,9 +859,9 @@ func (_m *Cluster) Send(ctx context.Context, opts *types.SendOptions) (chan *typ return r0, r1 } -// SendNodeMetrics provides a mock function with given fields: ctx, nodeName -func (_m *Cluster) SendNodeMetrics(ctx context.Context, nodeName string) { - _m.Called(ctx, nodeName) +// SendNodeMetrics provides a mock function with given fields: ctx, nodename +func (_m *Cluster) SendNodeMetrics(ctx context.Context, nodename string) { + _m.Called(ctx, nodename) } // SetNode provides a mock function with given fields: ctx, opts diff --git a/core.yaml.sample b/core.yaml.sample index bb7449e5c..652e7d81a 100644 --- a/core.yaml.sample +++ b/core.yaml.sample @@ -14,9 +14,6 @@ sentry_dsn: "https://examplePublicKey@o0.ingest.sentry.io/0" # option wal_file: core.wal # required, default core.wal wal_open_timeout: 8s # required, default 8s -resource_plugins_dir: /etc/eru/plugins # optional, default /etc/eru/plugins -resource_plugins_timeout: 30s # optional, if need to use plugin, set it - auth: # optional username: admin password: password @@ -75,4 +72,9 @@ systemd: scheduler: maxshare: -1 # required default -1 sharebase: 100 # required default 100 - max_deploy_count: 10000 \ No newline at end of file + max_deploy_count: 10000 + +resource_plugin: + dir: /etc/eru/plugins # optional, default /etc/eru/plugins +call_timeout: 30s # optional, if need to use plugin, set it +whitelist: # optional, if need plugins whitelist \ No newline at end of file diff --git a/engine/docker/docker.go b/engine/docker/docker.go index dc462ecd1..f96f74165 100644 --- a/engine/docker/docker.go +++ b/engine/docker/docker.go @@ -58,12 +58,6 @@ func (e *Engine) Info(ctx context.Context) (*enginetypes.Info, error) { return &enginetypes.Info{Type: Type, ID: r.ID, NCPU: r.NCPU, MemTotal: r.MemTotal}, nil } -// ResourceValidate validate resource usage -func (e *Engine) ResourceValidate(ctx context.Context, cpu float64, cpumap map[string]int64, memory, storage int64) error { - // TODO list all workloads, calcuate resource - return nil -} - // Ping test connection func (e *Engine) Ping(ctx context.Context) error { _, err := e.client.Ping(ctx) diff --git a/engine/engine.go b/engine/engine.go index e4ac8299a..6df5de5d8 100644 --- a/engine/engine.go +++ b/engine/engine.go @@ -49,6 +49,4 @@ type API interface { VirtualizationWait(ctx context.Context, ID, state string) (*enginetypes.VirtualizationWaitResult, error) VirtualizationUpdateResource(ctx context.Context, ID string, opts *enginetypes.VirtualizationResource) error VirtualizationCopyFrom(ctx context.Context, ID, path string) (content []byte, uid, gid int, mode int64, _ error) - - ResourceValidate(ctx context.Context, cpu float64, cpumap map[string]int64, memory, storage int64) error } diff --git a/engine/fake/fake.go b/engine/fake/fake.go index bc63d2ee4..905ce12ab 100644 --- a/engine/fake/fake.go +++ b/engine/fake/fake.go @@ -183,8 +183,3 @@ func (f *Engine) VirtualizationUpdateResource(ctx context.Context, ID string, op func (f *Engine) VirtualizationCopyFrom(ctx context.Context, ID, path string) (content []byte, uid, gid int, mode int64, _ error) { return nil, 0, 0, 0, f.DefaultErr } - -// ResourceValidate . -func (f *Engine) ResourceValidate(ctx context.Context, cpu float64, cpumap map[string]int64, memory, storage int64) error { - return f.DefaultErr -} diff --git a/engine/mocks/API.go b/engine/mocks/API.go index cfeb8fba2..9199c669d 100644 --- a/engine/mocks/API.go +++ b/engine/mocks/API.go @@ -476,20 +476,6 @@ func (_m *API) Ping(ctx context.Context) error { return r0 } -// ResourceValidate provides a mock function with given fields: ctx, cpu, cpumap, memory, storage -func (_m *API) ResourceValidate(ctx context.Context, cpu float64, cpumap map[string]int64, memory int64, storage int64) error { - ret := _m.Called(ctx, cpu, cpumap, memory, storage) - - var r0 error - if rf, ok := ret.Get(0).(func(context.Context, float64, map[string]int64, int64, int64) error); ok { - r0 = rf(ctx, cpu, cpumap, memory, storage) - } else { - r0 = ret.Error(0) - } - - return r0 -} - // VirtualizationAttach provides a mock function with given fields: ctx, ID, stream, openStdin func (_m *API) VirtualizationAttach(ctx context.Context, ID string, stream bool, openStdin bool) (io.ReadCloser, io.ReadCloser, io.WriteCloser, error) { ret := _m.Called(ctx, ID, stream, openStdin) diff --git a/engine/systemd/resource.go b/engine/systemd/resource.go deleted file mode 100644 index 077adc9d8..000000000 --- a/engine/systemd/resource.go +++ /dev/null @@ -1,12 +0,0 @@ -package systemd - -import ( - "context" - - "github.com/projecteru2/core/types" -) - -// ResourceValidate validates resources -func (e *Engine) ResourceValidate(ctx context.Context, cpu float64, cpumap map[string]int64, memory, storage int64) (err error) { - return types.ErrEngineNotImplemented -} diff --git a/engine/virt/virt.go b/engine/virt/virt.go index 6dd4b9385..80002fd16 100644 --- a/engine/virt/virt.go +++ b/engine/virt/virt.go @@ -355,9 +355,3 @@ func (v *Virt) VirtualizationCopyFrom(ctx context.Context, ID, path string) (con content, err = ioutil.ReadAll(rd) return } - -// ResourceValidate validate resource usage -func (v *Virt) ResourceValidate(ctx context.Context, cpu float64, cpumap map[string]int64, memory, storage int64) error { - // TODO list all workloads, calculate resource - return nil -} diff --git a/resources/binary.go b/resources/binary.go index 70809a48b..ad8ac405f 100644 --- a/resources/binary.go +++ b/resources/binary.go @@ -33,19 +33,28 @@ func (bp *BinaryPlugin) GetNodesDeployCapacity(ctx context.Context, nodes []stri } // GetNodeResourceInfo . -func (bp *BinaryPlugin) GetNodeResourceInfo(ctx context.Context, nodeName string, workloads []*coretypes.Workload) (resp *GetNodeResourceInfoResponse, err error) { - return bp.getNodeResourceInfo(ctx, nodeName, workloads, false) -} +func (bp *BinaryPlugin) GetNodeResourceInfo(ctx context.Context, nodename string, workloads []*coretypes.Workload, fix bool) (resp *GetNodeResourceInfoResponse, err error) { + workloadMap := map[string]coretypes.WorkloadResourceArgs{} + for _, workload := range workloads { + workloadMap[workload.ID] = workload.ResourceArgs[bp.Name()] + } -// FixNodeResource . -func (bp *BinaryPlugin) FixNodeResource(ctx context.Context, nodeName string, workloads []*coretypes.Workload) (resp *GetNodeResourceInfoResponse, err error) { - return bp.getNodeResourceInfo(ctx, nodeName, workloads, true) + req := GetNodeResourceInfoRequest{ + NodeName: nodename, + WorkloadMap: workloadMap, + Fix: fix, + } + resp = &GetNodeResourceInfoResponse{} + if err = bp.call(ctx, getNodeResourceInfoCommand, req, resp); err != nil { + return nil, err + } + return resp, nil } // SetNodeResourceInfo . -func (bp *BinaryPlugin) SetNodeResourceInfo(ctx context.Context, nodeName string, resourceCapacity coretypes.NodeResourceArgs, resourceUsage coretypes.NodeResourceArgs) (*SetNodeResourceInfoResponse, error) { +func (bp *BinaryPlugin) SetNodeResourceInfo(ctx context.Context, nodename string, resourceCapacity coretypes.NodeResourceArgs, resourceUsage coretypes.NodeResourceArgs) (*SetNodeResourceInfoResponse, error) { req := SetNodeResourceInfoRequest{ - NodeName: nodeName, + NodeName: nodename, Capacity: resourceCapacity, Usage: resourceUsage, } @@ -54,9 +63,9 @@ func (bp *BinaryPlugin) SetNodeResourceInfo(ctx context.Context, nodeName string } // GetDeployArgs . -func (bp *BinaryPlugin) GetDeployArgs(ctx context.Context, nodeName string, deployCount int, resourceOpts coretypes.WorkloadResourceOpts) (resp *GetDeployArgsResponse, err error) { +func (bp *BinaryPlugin) GetDeployArgs(ctx context.Context, nodename string, deployCount int, resourceOpts coretypes.WorkloadResourceOpts) (resp *GetDeployArgsResponse, err error) { req := GetDeployArgsRequest{ - NodeName: nodeName, + NodeName: nodename, DeployCount: deployCount, ResourceOpts: resourceOpts, } @@ -68,9 +77,9 @@ func (bp *BinaryPlugin) GetDeployArgs(ctx context.Context, nodeName string, depl } // GetReallocArgs . -func (bp *BinaryPlugin) GetReallocArgs(ctx context.Context, nodeName string, originResourceArgs coretypes.WorkloadResourceArgs, resourceOpts coretypes.WorkloadResourceOpts) (resp *GetReallocArgsResponse, err error) { +func (bp *BinaryPlugin) GetReallocArgs(ctx context.Context, nodename string, originResourceArgs coretypes.WorkloadResourceArgs, resourceOpts coretypes.WorkloadResourceOpts) (resp *GetReallocArgsResponse, err error) { req := GetReallocArgsRequest{ - NodeName: nodeName, + NodeName: nodename, Old: originResourceArgs, ResourceOpts: resourceOpts, } @@ -82,14 +91,14 @@ func (bp *BinaryPlugin) GetReallocArgs(ctx context.Context, nodeName string, ori } // GetRemapArgs . -func (bp *BinaryPlugin) GetRemapArgs(ctx context.Context, nodeName string, workloadMap map[string]*coretypes.Workload) (*GetRemapArgsResponse, error) { +func (bp *BinaryPlugin) GetRemapArgs(ctx context.Context, nodename string, workloadMap map[string]*coretypes.Workload) (*GetRemapArgsResponse, error) { workloadResourceArgsMap := map[string]coretypes.WorkloadResourceArgs{} for workloadID, workload := range workloadMap { workloadResourceArgsMap[workloadID] = workload.ResourceArgs[bp.Name()] } req := GetRemapArgsRequest{ - NodeName: nodeName, + NodeName: nodename, WorkloadMap: workloadResourceArgsMap, } resp := &GetRemapArgsResponse{} @@ -99,9 +108,9 @@ func (bp *BinaryPlugin) GetRemapArgs(ctx context.Context, nodeName string, workl return resp, nil } -func (bp *BinaryPlugin) SetNodeResourceUsage(ctx context.Context, nodeName string, nodeResourceOpts coretypes.NodeResourceOpts, nodeResourceArgs coretypes.NodeResourceArgs, workloadResourceArgs []coretypes.WorkloadResourceArgs, delta bool, incr bool) (*SetNodeResourceUsageResponse, error) { +func (bp *BinaryPlugin) SetNodeResourceUsage(ctx context.Context, nodename string, nodeResourceOpts coretypes.NodeResourceOpts, nodeResourceArgs coretypes.NodeResourceArgs, workloadResourceArgs []coretypes.WorkloadResourceArgs, delta bool, incr bool) (*SetNodeResourceUsageResponse, error) { req := SetNodeResourceUsageRequest{ - NodeName: nodeName, + NodeName: nodename, WorkloadResourceArgs: workloadResourceArgs, NodeResourceOpts: nodeResourceOpts, NodeResourceArgs: nodeResourceArgs, @@ -116,9 +125,9 @@ func (bp *BinaryPlugin) SetNodeResourceUsage(ctx context.Context, nodeName strin return resp, nil } -func (bp *BinaryPlugin) SetNodeResourceCapacity(ctx context.Context, nodeName string, nodeResourceOpts coretypes.NodeResourceOpts, nodeResourceArgs coretypes.NodeResourceArgs, delta bool, incr bool) (*SetNodeResourceCapacityResponse, error) { +func (bp *BinaryPlugin) SetNodeResourceCapacity(ctx context.Context, nodename string, nodeResourceOpts coretypes.NodeResourceOpts, nodeResourceArgs coretypes.NodeResourceArgs, delta bool, incr bool) (*SetNodeResourceCapacityResponse, error) { req := SetNodeResourceCapacityRequest{ - NodeName: nodeName, + NodeName: nodename, NodeResourceOpts: nodeResourceOpts, NodeResourceArgs: nodeResourceArgs, Delta: delta, @@ -133,9 +142,9 @@ func (bp *BinaryPlugin) SetNodeResourceCapacity(ctx context.Context, nodeName st } // AddNode . -func (bp *BinaryPlugin) AddNode(ctx context.Context, nodeName string, resourceOpts coretypes.NodeResourceOpts, nodeInfo *enginetypes.Info) (resp *AddNodeResponse, err error) { +func (bp *BinaryPlugin) AddNode(ctx context.Context, nodename string, resourceOpts coretypes.NodeResourceOpts, nodeInfo *enginetypes.Info) (resp *AddNodeResponse, err error) { req := AddNodeRequest{ - NodeName: nodeName, + NodeName: nodename, ResourceOpts: resourceOpts, } resp = &AddNodeResponse{} @@ -146,9 +155,9 @@ func (bp *BinaryPlugin) AddNode(ctx context.Context, nodeName string, resourceOp } // RemoveNode . -func (bp *BinaryPlugin) RemoveNode(ctx context.Context, nodeName string) (*RemoveNodeResponse, error) { +func (bp *BinaryPlugin) RemoveNode(ctx context.Context, nodename string) (*RemoveNodeResponse, error) { req := RemoveNodeRequest{ - NodeName: nodeName, + NodeName: nodename, } resp := &RemoveNodeResponse{} return resp, bp.call(ctx, removeNodeCommand, req, resp) @@ -171,10 +180,10 @@ func (bp *BinaryPlugin) GetMetricsDescription(ctx context.Context) (*GetMetricsD } // ConvertNodeResourceInfoToMetrics . -func (bp *BinaryPlugin) ConvertNodeResourceInfoToMetrics(ctx context.Context, podName string, nodeName string, nodeResourceInfo *NodeResourceInfo) (*ConvertNodeResourceInfoToMetricsResponse, error) { +func (bp *BinaryPlugin) ConvertNodeResourceInfoToMetrics(ctx context.Context, podname string, nodename string, nodeResourceInfo *NodeResourceInfo) (*ConvertNodeResourceInfoToMetricsResponse, error) { req := ConvertNodeResourceInfoToMetricsRequest{ - PodName: podName, - NodeName: nodeName, + PodName: podname, + NodeName: nodename, Capacity: nodeResourceInfo.Capacity, Usage: nodeResourceInfo.Usage, } @@ -246,13 +255,13 @@ func (bp *BinaryPlugin) execCommand(cmd *exec.Cmd) (output, log string, err erro // calls the plugin and gets json response func (bp *BinaryPlugin) call(ctx context.Context, cmd string, req interface{}, resp interface{}) error { - ctx, cancel := context.WithTimeout(ctx, bp.config.ResourcePluginsTimeout) + ctx, cancel := context.WithTimeout(ctx, bp.config.ResourcePlugin.CallTimeout) defer cancel() args := bp.getArgs(req) args = append([]string{cmd}, args...) command := exec.CommandContext(ctx, bp.path, args...) // nolint: gosec - command.Dir = bp.config.ResourcePluginsDir + command.Dir = bp.config.ResourcePlugin.Dir log.Infof(ctx, "[callBinaryPlugin] command: %s %s", bp.path, strings.Join(args, " ")) pluginOutput, pluginLog, err := bp.execCommand(command) @@ -273,21 +282,3 @@ func (bp *BinaryPlugin) call(ctx context.Context, cmd string, req interface{}, r } return nil } - -func (bp *BinaryPlugin) getNodeResourceInfo(ctx context.Context, nodeName string, workloads []*coretypes.Workload, fix bool) (resp *GetNodeResourceInfoResponse, err error) { - workloadMap := map[string]coretypes.WorkloadResourceArgs{} - for _, workload := range workloads { - workloadMap[workload.ID] = workload.ResourceArgs[bp.Name()] - } - - req := GetNodeResourceInfoRequest{ - NodeName: nodeName, - WorkloadMap: workloadMap, - Fix: fix, - } - resp = &GetNodeResourceInfoResponse{} - if err = bp.call(ctx, getNodeResourceInfoCommand, req, resp); err != nil { - return nil, err - } - return resp, nil -} diff --git a/resources/cpumem/cpumem.go b/resources/cpumem/cpumem.go index b60cd3d6d..7141a08f5 100644 --- a/resources/cpumem/cpumem.go +++ b/resources/cpumem/cpumem.go @@ -27,12 +27,12 @@ func NewPlugin(config coretypes.Config) (*Plugin, error) { } // GetDeployArgs . -func (c *Plugin) GetDeployArgs(ctx context.Context, nodeName string, deployCount int, resourceOpts coretypes.WorkloadResourceOpts) (*resources.GetDeployArgsResponse, error) { +func (c *Plugin) GetDeployArgs(ctx context.Context, nodename string, deployCount int, resourceOpts coretypes.WorkloadResourceOpts) (*resources.GetDeployArgsResponse, error) { workloadResourceOpts := &types.WorkloadResourceOpts{} if err := workloadResourceOpts.ParseFromRawParams(coretypes.RawParams(resourceOpts)); err != nil { return nil, err } - engineArgs, resourceArgs, err := c.c.GetDeployArgs(ctx, nodeName, deployCount, workloadResourceOpts) + engineArgs, resourceArgs, err := c.c.GetDeployArgs(ctx, nodename, deployCount, workloadResourceOpts) if err != nil { return nil, err } @@ -45,7 +45,7 @@ func (c *Plugin) GetDeployArgs(ctx context.Context, nodeName string, deployCount } // GetReallocArgs . -func (c *Plugin) GetReallocArgs(ctx context.Context, nodeName string, originResourceArgs coretypes.WorkloadResourceArgs, resourceOpts coretypes.WorkloadResourceOpts) (*resources.GetReallocArgsResponse, error) { +func (c *Plugin) GetReallocArgs(ctx context.Context, nodename string, originResourceArgs coretypes.WorkloadResourceArgs, resourceOpts coretypes.WorkloadResourceOpts) (*resources.GetReallocArgsResponse, error) { workloadResourceOpts := &types.WorkloadResourceOpts{} if err := workloadResourceOpts.ParseFromRawParams(coretypes.RawParams(resourceOpts)); err != nil { return nil, err @@ -55,7 +55,7 @@ func (c *Plugin) GetReallocArgs(ctx context.Context, nodeName string, originReso return nil, err } - engineArgs, delta, resourceArgs, err := c.c.GetReallocArgs(ctx, nodeName, originWorkloadResourceArgs, workloadResourceOpts) + engineArgs, delta, resourceArgs, err := c.c.GetReallocArgs(ctx, nodename, originWorkloadResourceArgs, workloadResourceOpts) if err != nil { return nil, err } @@ -69,13 +69,13 @@ func (c *Plugin) GetReallocArgs(ctx context.Context, nodeName string, originReso } // GetRemapArgs . -func (c *Plugin) GetRemapArgs(ctx context.Context, nodeName string, workloadMap map[string]*coretypes.Workload) (*resources.GetRemapArgsResponse, error) { +func (c *Plugin) GetRemapArgs(ctx context.Context, nodename string, workloadMap map[string]*coretypes.Workload) (*resources.GetRemapArgsResponse, error) { workloadResourceArgsMap, err := c.workloadMapToWorkloadResourceArgsMap(workloadMap) if err != nil { return nil, err } - engineArgs, err := c.c.GetRemapArgs(ctx, nodeName, workloadResourceArgsMap) + engineArgs, err := c.c.GetRemapArgs(ctx, nodename, workloadResourceArgsMap) if err != nil { return nil, err } @@ -107,30 +107,39 @@ func (c *Plugin) GetNodesDeployCapacity(ctx context.Context, nodeNames []string, // GetMostIdleNode . func (c *Plugin) GetMostIdleNode(ctx context.Context, nodeNames []string) (*resources.GetMostIdleNodeResponse, error) { - nodeName, priority, err := c.c.GetMostIdleNode(ctx, nodeNames) + nodename, priority, err := c.c.GetMostIdleNode(ctx, nodeNames) if err != nil { return nil, err } resp := &resources.GetMostIdleNodeResponse{} return resp, mapstructure.Decode(map[string]interface{}{ - "node": nodeName, + "node": nodename, "priority": priority, }, resp) } // GetNodeResourceInfo . -func (c *Plugin) GetNodeResourceInfo(ctx context.Context, nodeName string, workloads []*coretypes.Workload) (*resources.GetNodeResourceInfoResponse, error) { - return c.getNodeResourceInfo(ctx, nodeName, workloads, false) -} +func (c *Plugin) GetNodeResourceInfo(ctx context.Context, nodename string, workloads []*coretypes.Workload, fix bool) (*resources.GetNodeResourceInfoResponse, error) { + workloadResourceArgsMap, err := c.workloadListToWorkloadResourceArgsMap(workloads) + if err != nil { + return nil, err + } -// FixNodeResource . -func (c *Plugin) FixNodeResource(ctx context.Context, nodeName string, workloads []*coretypes.Workload) (*resources.GetNodeResourceInfoResponse, error) { - return c.getNodeResourceInfo(ctx, nodeName, workloads, true) + nodeResourceInfo, diffs, err := c.c.GetNodeResourceInfo(ctx, nodename, workloadResourceArgsMap, fix) + if err != nil { + return nil, err + } + + resp := &resources.GetNodeResourceInfoResponse{} + return resp, mapstructure.Decode(map[string]interface{}{ + "resource_info": nodeResourceInfo, + "diffs": diffs, + }, resp) } // SetNodeResourceUsage . -func (c *Plugin) SetNodeResourceUsage(ctx context.Context, nodeName string, resourceOpts coretypes.NodeResourceOpts, resourceArgs coretypes.NodeResourceArgs, workloadResourceArgs []coretypes.WorkloadResourceArgs, delta bool, incr bool) (*resources.SetNodeResourceUsageResponse, error) { +func (c *Plugin) SetNodeResourceUsage(ctx context.Context, nodename string, resourceOpts coretypes.NodeResourceOpts, resourceArgs coretypes.NodeResourceArgs, workloadResourceArgs []coretypes.WorkloadResourceArgs, delta bool, incr bool) (*resources.SetNodeResourceUsageResponse, error) { var nodeResourceOpts *types.NodeResourceOpts var nodeResourceArgs *types.NodeResourceArgs var workloadResourceArgsList []*types.WorkloadResourceArgs @@ -159,7 +168,7 @@ func (c *Plugin) SetNodeResourceUsage(ctx context.Context, nodeName string, reso } } - before, after, err := c.c.SetNodeResourceUsage(ctx, nodeName, nodeResourceOpts, nodeResourceArgs, workloadResourceArgsList, delta, incr) + before, after, err := c.c.SetNodeResourceUsage(ctx, nodename, nodeResourceOpts, nodeResourceArgs, workloadResourceArgsList, delta, incr) if err != nil { return nil, err } @@ -172,7 +181,7 @@ func (c *Plugin) SetNodeResourceUsage(ctx context.Context, nodeName string, reso } // SetNodeResourceCapacity . -func (c *Plugin) SetNodeResourceCapacity(ctx context.Context, nodeName string, resourceOpts coretypes.NodeResourceOpts, resourceArgs coretypes.NodeResourceArgs, delta bool, incr bool) (*resources.SetNodeResourceCapacityResponse, error) { +func (c *Plugin) SetNodeResourceCapacity(ctx context.Context, nodename string, resourceOpts coretypes.NodeResourceOpts, resourceArgs coretypes.NodeResourceArgs, delta bool, incr bool) (*resources.SetNodeResourceCapacityResponse, error) { var nodeResourceOpts *types.NodeResourceOpts var nodeResourceArgs *types.NodeResourceArgs @@ -189,7 +198,7 @@ func (c *Plugin) SetNodeResourceCapacity(ctx context.Context, nodeName string, r } } - before, after, err := c.c.SetNodeResourceCapacity(ctx, nodeName, nodeResourceOpts, nodeResourceArgs, delta, incr) + before, after, err := c.c.SetNodeResourceCapacity(ctx, nodename, nodeResourceOpts, nodeResourceArgs, delta, incr) if err != nil { return nil, err } @@ -202,7 +211,7 @@ func (c *Plugin) SetNodeResourceCapacity(ctx context.Context, nodeName string, r } // SetNodeResourceInfo . -func (c *Plugin) SetNodeResourceInfo(ctx context.Context, nodeName string, resourceCapacity coretypes.NodeResourceArgs, resourceUsage coretypes.NodeResourceArgs) (*resources.SetNodeResourceInfoResponse, error) { +func (c *Plugin) SetNodeResourceInfo(ctx context.Context, nodename string, resourceCapacity coretypes.NodeResourceArgs, resourceUsage coretypes.NodeResourceArgs) (*resources.SetNodeResourceInfoResponse, error) { capacity := &types.NodeResourceArgs{} if err := capacity.ParseFromRawParams(coretypes.RawParams(resourceCapacity)); err != nil { return nil, err @@ -213,20 +222,20 @@ func (c *Plugin) SetNodeResourceInfo(ctx context.Context, nodeName string, resou return nil, err } - if err := c.c.SetNodeResourceInfo(ctx, nodeName, capacity, usage); err != nil { + if err := c.c.SetNodeResourceInfo(ctx, nodename, capacity, usage); err != nil { return nil, err } return &resources.SetNodeResourceInfoResponse{}, nil } // AddNode . -func (c *Plugin) AddNode(ctx context.Context, nodeName string, resourceOpts coretypes.NodeResourceOpts, nodeInfo *enginetypes.Info) (*resources.AddNodeResponse, error) { +func (c *Plugin) AddNode(ctx context.Context, nodename string, resourceOpts coretypes.NodeResourceOpts, nodeInfo *enginetypes.Info) (*resources.AddNodeResponse, error) { nodeResourceOpts := &types.NodeResourceOpts{} if err := nodeResourceOpts.ParseFromRawParams(coretypes.RawParams(resourceOpts)); err != nil { return nil, err } - // set default value + // reset by node info default value if nodeInfo != nil { if len(nodeResourceOpts.CPUMap) == 0 { nodeResourceOpts.CPUMap = types.CPUMap{} @@ -240,7 +249,7 @@ func (c *Plugin) AddNode(ctx context.Context, nodeName string, resourceOpts core } } - nodeResourceInfo, err := c.c.AddNode(ctx, nodeName, nodeResourceOpts) + nodeResourceInfo, err := c.c.AddNode(ctx, nodename, nodeResourceOpts) if err != nil { return nil, err } @@ -253,8 +262,8 @@ func (c *Plugin) AddNode(ctx context.Context, nodeName string, resourceOpts core } // RemoveNode . -func (c *Plugin) RemoveNode(ctx context.Context, nodeName string) (*resources.RemoveNodeResponse, error) { - if err := c.c.RemoveNode(ctx, nodeName); err != nil { +func (c *Plugin) RemoveNode(ctx context.Context, nodename string) (*resources.RemoveNodeResponse, error) { + if err := c.c.RemoveNode(ctx, nodename); err != nil { return nil, err } return &resources.RemoveNodeResponse{}, nil @@ -287,24 +296,6 @@ func (c *Plugin) workloadListToWorkloadResourceArgsMap(workloads []*coretypes.Wo return c.workloadMapToWorkloadResourceArgsMap(workloadMap) } -func (c *Plugin) getNodeResourceInfo(ctx context.Context, nodeName string, workloads []*coretypes.Workload, fix bool) (*resources.GetNodeResourceInfoResponse, error) { - workloadResourceArgsMap, err := c.workloadListToWorkloadResourceArgsMap(workloads) - if err != nil { - return nil, err - } - - nodeResourceInfo, diffs, err := c.c.GetNodeResourceInfo(ctx, nodeName, workloadResourceArgsMap, fix) - if err != nil { - return nil, err - } - - resp := &resources.GetNodeResourceInfoResponse{} - return resp, mapstructure.Decode(map[string]interface{}{ - "resource_info": nodeResourceInfo, - "diffs": diffs, - }, resp) -} - // GetMetricsDescription . func (c *Plugin) GetMetricsDescription(ctx context.Context) (*resources.GetMetricsDescriptionResponse, error) { resp := &resources.GetMetricsDescriptionResponse{} @@ -312,7 +303,7 @@ func (c *Plugin) GetMetricsDescription(ctx context.Context) (*resources.GetMetri } // ConvertNodeResourceInfoToMetrics . -func (c *Plugin) ConvertNodeResourceInfoToMetrics(ctx context.Context, podName string, nodeName string, info *resources.NodeResourceInfo) (*resources.ConvertNodeResourceInfoToMetricsResponse, error) { +func (c *Plugin) ConvertNodeResourceInfoToMetrics(ctx context.Context, podname string, nodename string, info *resources.NodeResourceInfo) (*resources.ConvertNodeResourceInfoToMetricsResponse, error) { capacity, usage := &types.NodeResourceArgs{}, &types.NodeResourceArgs{} if err := capacity.ParseFromRawParams(coretypes.RawParams(info.Capacity)); err != nil { return nil, err @@ -321,7 +312,7 @@ func (c *Plugin) ConvertNodeResourceInfoToMetrics(ctx context.Context, podName s return nil, err } - metrics := c.c.ConvertNodeResourceInfoToMetrics(podName, nodeName, capacity, usage) + metrics := c.c.ConvertNodeResourceInfoToMetrics(podname, nodename, capacity, usage) resp := &resources.ConvertNodeResourceInfoToMetricsResponse{} return resp, mapstructure.Decode(metrics, resp) } diff --git a/resources/cpumem/models/capacity_test.go b/resources/cpumem/models/capacity_test.go index 2577173f9..50d420b1c 100644 --- a/resources/cpumem/models/capacity_test.go +++ b/resources/cpumem/models/capacity_test.go @@ -115,9 +115,9 @@ func generateComplexNodes(t *testing.T, cpuMem *CPUMem) []string { } nodes := []string{} for i, info := range infos { - nodeName := fmt.Sprintf("node%d", i) - assert.Nil(t, cpuMem.doSetNodeResourceInfo(context.Background(), nodeName, info)) - nodes = append(nodes, nodeName) + nodename := fmt.Sprintf("node%d", i) + assert.Nil(t, cpuMem.doSetNodeResourceInfo(context.Background(), nodename, info)) + nodes = append(nodes, nodename) } return nodes } diff --git a/resources/cpumem/models/cpumem_test.go b/resources/cpumem/models/cpumem_test.go index aca6b84a0..b27e2e035 100644 --- a/resources/cpumem/models/cpumem_test.go +++ b/resources/cpumem/models/cpumem_test.go @@ -60,9 +60,9 @@ func generateNodes(t *testing.T, cpuMem *CPUMem, nums int, cores int, memory int infos := generateNodeResourceInfos(t, nums, cores, memory, shares) for i, info := range infos { - nodeName := fmt.Sprintf("node%d", i) - assert.Nil(t, cpuMem.doSetNodeResourceInfo(context.Background(), nodeName, info)) - nodes = append(nodes, nodeName) + nodename := fmt.Sprintf("node%d", i) + assert.Nil(t, cpuMem.doSetNodeResourceInfo(context.Background(), nodename, info)) + nodes = append(nodes, nodename) } return nodes diff --git a/resources/cpumem/models/idle_test.go b/resources/cpumem/models/idle_test.go index 7e2ed0a45..cde9c63ca 100644 --- a/resources/cpumem/models/idle_test.go +++ b/resources/cpumem/models/idle_test.go @@ -30,9 +30,9 @@ func TestGetMostIdleNode(t *testing.T) { nodes := []string{} for i, info := range infos { - nodeName := fmt.Sprintf("node%d", i) - assert.Nil(t, cpuMem.doSetNodeResourceInfo(context.Background(), nodeName, info)) - nodes = append(nodes, nodeName) + nodename := fmt.Sprintf("node%d", i) + assert.Nil(t, cpuMem.doSetNodeResourceInfo(context.Background(), nodename, info)) + nodes = append(nodes, nodename) } node, _, err := cpuMem.GetMostIdleNode(ctx, nodes) diff --git a/resources/cpumem/models/info.go b/resources/cpumem/models/info.go index b31c9b488..057738ed0 100644 --- a/resources/cpumem/models/info.go +++ b/resources/cpumem/models/info.go @@ -75,7 +75,7 @@ func (c *CPUMem) GetNodeResourceInfo(ctx context.Context, node string, workloadR // calculateNodeResourceArgs priority: node resource opts > node resource args > workload resource args list func (c *CPUMem) calculateNodeResourceArgs(origin *types.NodeResourceArgs, nodeResourceOpts *types.NodeResourceOpts, nodeResourceArgs *types.NodeResourceArgs, workloadResourceArgs []*types.WorkloadResourceArgs, delta bool, incr bool) (res *types.NodeResourceArgs) { if origin == nil || !delta { - res = (&types.NodeResourceArgs{}).DeepCopy() + res = &types.NodeResourceArgs{} } else { res = origin.DeepCopy() } diff --git a/resources/cpumem/models/metrics.go b/resources/cpumem/models/metrics.go index 85e6d82fc..f30a65e21 100644 --- a/resources/cpumem/models/metrics.go +++ b/resources/cpumem/models/metrics.go @@ -37,24 +37,24 @@ func (c *CPUMem) GetMetricsDescription() []map[string]interface{} { } } -func (c *CPUMem) ConvertNodeResourceInfoToMetrics(podName string, nodeName string, nodeResourceCapacity *types.NodeResourceArgs, nodeResourceUsage *types.NodeResourceArgs) []map[string]interface{} { - cleanedNodeName := strings.ReplaceAll(nodeName, ".", "_") +func (c *CPUMem) ConvertNodeResourceInfoToMetrics(podname string, nodename string, nodeResourceCapacity *types.NodeResourceArgs, nodeResourceUsage *types.NodeResourceArgs) []map[string]interface{} { + cleanedNodeName := strings.ReplaceAll(nodename, ".", "_") metrics := []map[string]interface{}{ { "name": "memory_capacity", - "labels": []string{podName, nodeName}, + "labels": []string{podname, nodename}, "value": fmt.Sprintf("%v", nodeResourceCapacity.Memory), "key": fmt.Sprintf("core.node.%s.memory", cleanedNodeName), }, { "name": "memory_used", - "labels": []string{podName, nodeName}, + "labels": []string{podname, nodename}, "value": fmt.Sprintf("%v", nodeResourceUsage.Memory), "key": fmt.Sprintf("core.node.%s.memory.used", cleanedNodeName), }, { "name": "cpu_used", - "labels": []string{podName, nodeName}, + "labels": []string{podname, nodename}, "value": fmt.Sprintf("%v", nodeResourceUsage.CPU), "key": fmt.Sprintf("core.node.%s.cpu.used", cleanedNodeName), }, @@ -63,7 +63,7 @@ func (c *CPUMem) ConvertNodeResourceInfoToMetrics(podName string, nodeName strin for cpuID, pieces := range nodeResourceUsage.CPUMap { metrics = append(metrics, map[string]interface{}{ "name": "cpu_map", - "labels": []string{podName, nodeName, cpuID}, + "labels": []string{podname, nodename, cpuID}, "value": fmt.Sprintf("%v", pieces), "key": fmt.Sprintf("core.node.%s.cpu.%s", cleanedNodeName, cpuID), }) diff --git a/resources/cpumem/types/resource.go b/resources/cpumem/types/resource.go index b6ad1510a..f53c803b7 100644 --- a/resources/cpumem/types/resource.go +++ b/resources/cpumem/types/resource.go @@ -6,6 +6,7 @@ import ( "strconv" "strings" + "github.com/mitchellh/mapstructure" coretypes "github.com/projecteru2/core/types" coreutils "github.com/projecteru2/core/utils" @@ -135,11 +136,7 @@ type NodeResourceArgs struct { // ParseFromRawParams . func (r *NodeResourceArgs) ParseFromRawParams(rawParams coretypes.RawParams) error { - body, err := json.Marshal(rawParams) - if err != nil { - return err - } - return json.Unmarshal(body, r) + return mapstructure.Decode(rawParams, r) } // DeepCopy . diff --git a/resources/manager.go b/resources/manager.go index b58b11b04..1c119b8a6 100644 --- a/resources/manager.go +++ b/resources/manager.go @@ -86,7 +86,7 @@ func (pm *PluginsManager) GetNodesDeployCapacity(ctx context.Context, nodeNames // SetNodeResourceCapacity updates node resource capacity // receives resource options instead of resource args -func (pm *PluginsManager) SetNodeResourceCapacity(ctx context.Context, nodeName string, nodeResourceOpts types.NodeResourceOpts, nodeResourceArgs map[string]types.NodeResourceArgs, delta bool, incr bool) (map[string]types.NodeResourceArgs, map[string]types.NodeResourceArgs, error) { +func (pm *PluginsManager) SetNodeResourceCapacity(ctx context.Context, nodename string, nodeResourceOpts types.NodeResourceOpts, nodeResourceArgs map[string]types.NodeResourceArgs, delta bool, incr bool) (map[string]types.NodeResourceArgs, map[string]types.NodeResourceArgs, error) { rollbackPlugins := []Plugin{} beforeMap := map[string]types.NodeResourceArgs{} afterMap := map[string]types.NodeResourceArgs{} @@ -101,9 +101,9 @@ func (pm *PluginsManager) SetNodeResourceCapacity(ctx context.Context, nodeName // commit: call plugins to set node resource func(ctx context.Context) error { respMap, err := callPlugins(ctx, pm.plugins, func(plugin Plugin) (*SetNodeResourceCapacityResponse, error) { - resp, err := plugin.SetNodeResourceCapacity(ctx, nodeName, nodeResourceOpts, nodeResourceArgs[plugin.Name()], delta, incr) + resp, err := plugin.SetNodeResourceCapacity(ctx, nodename, nodeResourceOpts, nodeResourceArgs[plugin.Name()], delta, incr) if err != nil { - log.Errorf(ctx, "[SetNodeResourceCapacity] node %v plugin %v failed to set node resource capacity, err: %v", nodeName, plugin.Name(), err) + log.Errorf(ctx, "[SetNodeResourceCapacity] node %v plugin %v failed to set node resource capacity, err: %v", nodename, plugin.Name(), err) } return resp, err }) @@ -115,7 +115,7 @@ func (pm *PluginsManager) SetNodeResourceCapacity(ctx context.Context, nodeName afterMap[plugin.Name()] = resp.After } - log.Errorf(ctx, "[SetNodeResourceCapacity] failed to set node resource for node %v", nodeName) + log.Errorf(ctx, "[SetNodeResourceCapacity] failed to set node resource for node %v", nodename) return err } return nil @@ -123,7 +123,7 @@ func (pm *PluginsManager) SetNodeResourceCapacity(ctx context.Context, nodeName // rollback: set the rollback resource args in reverse func(ctx context.Context) error { _, err := callPlugins(ctx, rollbackPlugins, func(plugin Plugin) (*SetNodeResourceCapacityResponse, error) { - resp, err := plugin.SetNodeResourceCapacity(ctx, nodeName, nil, beforeMap[plugin.Name()], false, false) + resp, err := plugin.SetNodeResourceCapacity(ctx, nodename, nil, beforeMap[plugin.Name()], false, false) if err != nil { log.Errorf(ctx, "[SetNodeResourceCapacity] node %v plugin %v failed to rollback node resource capacity, err: %v", err) } @@ -140,28 +140,22 @@ func (pm *PluginsManager) SetNodeResourceCapacity(ctx context.Context, nodeName } // GetNodeResourceInfo . -func (pm *PluginsManager) GetNodeResourceInfo(ctx context.Context, nodeName string, workloads []*types.Workload, fix bool, whitelist []string) (map[string]types.NodeResourceArgs, map[string]types.NodeResourceArgs, []string, error) { +func (pm *PluginsManager) GetNodeResourceInfo(ctx context.Context, nodename string, workloads []*types.Workload, fix bool) (map[string]types.NodeResourceArgs, map[string]types.NodeResourceArgs, []string, error) { resourceCapacity := map[string]types.NodeResourceArgs{} resourceUsage := map[string]types.NodeResourceArgs{} resourceDiffs := []string{} plugins := pm.plugins - if whitelist != nil { + if pm.config.ResourcePlugin.Whitelist != nil { plugins = utils.Filter(plugins, func(plugin Plugin) bool { - return slices.Contains(whitelist, plugin.Name()) + return slices.Contains(pm.config.ResourcePlugin.Whitelist, plugin.Name()) }) } respMap, err := callPlugins(ctx, plugins, func(plugin Plugin) (*GetNodeResourceInfoResponse, error) { - var resp *GetNodeResourceInfoResponse - var err error - if fix { - resp, err = plugin.FixNodeResource(ctx, nodeName, workloads) - } else { - resp, err = plugin.GetNodeResourceInfo(ctx, nodeName, workloads) - } + resp, err := plugin.GetNodeResourceInfo(ctx, nodename, workloads, fix) if err != nil { - log.Errorf(ctx, "[GetNodeResourceInfo] plugin %v failed to get node resource of node %v, err: %v", plugin.Name(), nodeName, err) + log.Errorf(ctx, "[GetNodeResourceInfo] plugin %v failed to get node resource of node %v, err: %v", plugin.Name(), nodename, err) } return resp, err }) @@ -180,7 +174,7 @@ func (pm *PluginsManager) GetNodeResourceInfo(ctx context.Context, nodeName stri } // SetNodeResourceUsage with rollback -func (pm *PluginsManager) SetNodeResourceUsage(ctx context.Context, nodeName string, nodeResourceOpts types.NodeResourceOpts, nodeResourceArgs map[string]types.NodeResourceArgs, workloadResourceArgs []map[string]types.WorkloadResourceArgs, delta bool, incr bool) (map[string]types.NodeResourceArgs, map[string]types.NodeResourceArgs, error) { +func (pm *PluginsManager) SetNodeResourceUsage(ctx context.Context, nodename string, nodeResourceOpts types.NodeResourceOpts, nodeResourceArgs map[string]types.NodeResourceArgs, workloadResourceArgs []map[string]types.WorkloadResourceArgs, delta bool, incr bool) (map[string]types.NodeResourceArgs, map[string]types.NodeResourceArgs, error) { workloadResourceArgsMap := map[string][]types.WorkloadResourceArgs{} rollbackPlugins := []Plugin{} beforeMap := map[string]types.NodeResourceArgs{} @@ -206,9 +200,9 @@ func (pm *PluginsManager) SetNodeResourceUsage(ctx context.Context, nodeName str // commit: call plugins to set node resource func(ctx context.Context) error { respMap, err := callPlugins(ctx, pm.plugins, func(plugin Plugin) (*SetNodeResourceUsageResponse, error) { - resp, err := plugin.SetNodeResourceUsage(ctx, nodeName, nodeResourceOpts, nodeResourceArgs[plugin.Name()], workloadResourceArgsMap[plugin.Name()], delta, incr) + resp, err := plugin.SetNodeResourceUsage(ctx, nodename, nodeResourceOpts, nodeResourceArgs[plugin.Name()], workloadResourceArgsMap[plugin.Name()], delta, incr) if err != nil { - log.Errorf(ctx, "[SetNodeResourceUsage] node %v plugin %v failed to update node resource, err: %v", nodeName, plugin.Name(), err) + log.Errorf(ctx, "[SetNodeResourceUsage] node %v plugin %v failed to update node resource, err: %v", nodename, plugin.Name(), err) } return resp, err }) @@ -220,7 +214,7 @@ func (pm *PluginsManager) SetNodeResourceUsage(ctx context.Context, nodeName str afterMap[plugin.Name()] = resp.After } - log.Errorf(ctx, "[UpdateNodeResourceUsage] failed to set node resource for node %v", nodeName) + log.Errorf(ctx, "[UpdateNodeResourceUsage] failed to set node resource for node %v", nodename) return err } return nil @@ -228,7 +222,7 @@ func (pm *PluginsManager) SetNodeResourceUsage(ctx context.Context, nodeName str // rollback: set the rollback resource args in reverse func(ctx context.Context) error { _, err := callPlugins(ctx, rollbackPlugins, func(plugin Plugin) (*SetNodeResourceUsageResponse, error) { - resp, err := plugin.SetNodeResourceUsage(ctx, nodeName, nil, beforeMap[plugin.Name()], nil, false, false) + resp, err := plugin.SetNodeResourceUsage(ctx, nodename, nil, beforeMap[plugin.Name()], nil, false, false) if err != nil { log.Errorf(ctx, "[UpdateNodeResourceUsage] node %v plugin %v failed to rollback node resource, err: %v", err) } @@ -245,7 +239,7 @@ func (pm *PluginsManager) SetNodeResourceUsage(ctx context.Context, nodeName str } // Alloc . -func (pm *PluginsManager) Alloc(ctx context.Context, nodeName string, deployCount int, resourceOpts types.WorkloadResourceOpts) ([]types.EngineArgs, []map[string]types.WorkloadResourceArgs, error) { +func (pm *PluginsManager) Alloc(ctx context.Context, nodename string, deployCount int, resourceOpts types.WorkloadResourceOpts) ([]types.EngineArgs, []map[string]types.WorkloadResourceArgs, error) { resEngineArgs := make([]types.EngineArgs, deployCount) resResourceArgs := make([]map[string]types.WorkloadResourceArgs, deployCount) @@ -259,9 +253,9 @@ func (pm *PluginsManager) Alloc(ctx context.Context, nodeName string, deployCoun // prepare: calculate engine args and resource args func(ctx context.Context) error { respMap, err := callPlugins(ctx, pm.plugins, func(plugin Plugin) (*GetDeployArgsResponse, error) { - resp, err := plugin.GetDeployArgs(ctx, nodeName, deployCount, resourceOpts) + resp, err := plugin.GetDeployArgs(ctx, nodename, deployCount, resourceOpts) if err != nil { - log.Errorf(ctx, "[Alloc] plugin %v failed to compute alloc args, request %v, node %v, deploy count %v, err %v", plugin.Name(), resourceOpts, nodeName, deployCount, err) + log.Errorf(ctx, "[Alloc] plugin %v failed to compute alloc args, request %v, node %v, deploy count %v, err %v", plugin.Name(), resourceOpts, nodename, deployCount, err) } return resp, err }) @@ -286,7 +280,7 @@ func (pm *PluginsManager) Alloc(ctx context.Context, nodeName string, deployCoun }, // commit: update node resources func(ctx context.Context) error { - if _, _, err := pm.SetNodeResourceUsage(ctx, nodeName, nil, nil, resResourceArgs, true, Incr); err != nil { + if _, _, err := pm.SetNodeResourceUsage(ctx, nodename, nil, nil, resResourceArgs, true, Incr); err != nil { log.Errorf(ctx, "[Alloc] failed to update node resource, err: %v", err) return err } @@ -301,13 +295,13 @@ func (pm *PluginsManager) Alloc(ctx context.Context, nodeName string, deployCoun } // RollbackAlloc rollbacks the allocated resource -func (pm *PluginsManager) RollbackAlloc(ctx context.Context, nodeName string, resourceArgs []map[string]types.WorkloadResourceArgs) error { - _, _, err := pm.SetNodeResourceUsage(ctx, nodeName, nil, nil, resourceArgs, true, Decr) +func (pm *PluginsManager) RollbackAlloc(ctx context.Context, nodename string, resourceArgs []map[string]types.WorkloadResourceArgs) error { + _, _, err := pm.SetNodeResourceUsage(ctx, nodename, nil, nil, resourceArgs, true, Decr) return err } // Realloc reallocates resource for workloads, returns engine args and final resource args. -func (pm *PluginsManager) Realloc(ctx context.Context, nodeName string, originResourceArgs map[string]types.WorkloadResourceArgs, resourceOpts types.WorkloadResourceOpts) (types.EngineArgs, map[string]types.WorkloadResourceArgs, map[string]types.WorkloadResourceArgs, error) { +func (pm *PluginsManager) Realloc(ctx context.Context, nodename string, originResourceArgs map[string]types.WorkloadResourceArgs, resourceOpts types.WorkloadResourceOpts) (types.EngineArgs, map[string]types.WorkloadResourceArgs, map[string]types.WorkloadResourceArgs, error) { resEngineArgs := types.EngineArgs{} resDeltaResourceArgs := map[string]types.WorkloadResourceArgs{} resFinalResourceArgs := map[string]types.WorkloadResourceArgs{} @@ -316,7 +310,7 @@ func (pm *PluginsManager) Realloc(ctx context.Context, nodeName string, originRe // prepare: calculate engine args, delta node resource args and final workload resource args func(ctx context.Context) error { respMap, err := callPlugins(ctx, pm.plugins, func(plugin Plugin) (*GetReallocArgsResponse, error) { - resp, err := plugin.GetReallocArgs(ctx, nodeName, originResourceArgs[plugin.Name()], resourceOpts) + resp, err := plugin.GetReallocArgs(ctx, nodename, originResourceArgs[plugin.Name()], resourceOpts) if err != nil { log.Errorf(ctx, "[Realloc] plugin %v failed to calculate realloc args, err: %v", plugin.Name(), err) } @@ -340,8 +334,8 @@ func (pm *PluginsManager) Realloc(ctx context.Context, nodeName string, originRe }, // commit: update node resource func(ctx context.Context) error { - if _, _, err := pm.SetNodeResourceUsage(ctx, nodeName, nil, nil, []map[string]types.WorkloadResourceArgs{resDeltaResourceArgs}, true, Incr); err != nil { - log.Errorf(ctx, "[Realloc] failed to update nodeName resource, err: %v", err) + if _, _, err := pm.SetNodeResourceUsage(ctx, nodename, nil, nil, []map[string]types.WorkloadResourceArgs{resDeltaResourceArgs}, true, Incr); err != nil { + log.Errorf(ctx, "[Realloc] failed to update nodename resource, err: %v", err) return err } return nil @@ -355,8 +349,8 @@ func (pm *PluginsManager) Realloc(ctx context.Context, nodeName string, originRe } // RollbackRealloc rollbacks the resource changes caused by realloc -func (pm *PluginsManager) RollbackRealloc(ctx context.Context, nodeName string, resourceArgs map[string]types.WorkloadResourceArgs) error { - _, _, err := pm.SetNodeResourceUsage(ctx, nodeName, nil, nil, []map[string]types.WorkloadResourceArgs{resourceArgs}, true, Decr) +func (pm *PluginsManager) RollbackRealloc(ctx context.Context, nodename string, resourceArgs map[string]types.WorkloadResourceArgs) error { + _, _, err := pm.SetNodeResourceUsage(ctx, nodename, nil, nil, []map[string]types.WorkloadResourceArgs{resourceArgs}, true, Decr) return err } @@ -384,19 +378,19 @@ func (pm *PluginsManager) GetMetricsDescription(ctx context.Context) ([]*Metrics } // ConvertNodeResourceInfoToMetrics . -func (pm *PluginsManager) ConvertNodeResourceInfoToMetrics(ctx context.Context, podName string, nodeName string, nodeResourceCapacity map[string]types.NodeResourceArgs, nodeResourceUsage map[string]types.NodeResourceArgs) ([]*Metrics, error) { +func (pm *PluginsManager) ConvertNodeResourceInfoToMetrics(ctx context.Context, podname string, nodename string, nodeResourceCapacity map[string]types.NodeResourceArgs, nodeResourceUsage map[string]types.NodeResourceArgs) ([]*Metrics, error) { var metrics []*Metrics respMap, err := callPlugins(ctx, pm.plugins, func(plugin Plugin) (*ConvertNodeResourceInfoToMetricsResponse, error) { capacity, usage := nodeResourceCapacity[plugin.Name()], nodeResourceUsage[plugin.Name()] - resp, err := plugin.ConvertNodeResourceInfoToMetrics(ctx, podName, nodeName, &NodeResourceInfo{Capacity: capacity, Usage: usage}) + resp, err := plugin.ConvertNodeResourceInfoToMetrics(ctx, podname, nodename, &NodeResourceInfo{Capacity: capacity, Usage: usage}) if err != nil { - log.Errorf(ctx, "[ConvertNodeResourceInfoToMetrics] plugin %v failed to resolve node resource info to metrics, err: %v", plugin.Name(), err) + log.Errorf(ctx, "[ConvertNodeResourceInfoToMetrics] plugin %v failed to convert node resource info to metrics, err: %v", plugin.Name(), err) } return resp, err }) if err != nil { - log.Errorf(ctx, "[ConvertNodeResourceInfoToMetrics] failed to resolve node resource info to metrics") + log.Errorf(ctx, "[ConvertNodeResourceInfoToMetrics] failed to convert node resource info to metrics") return nil, err } @@ -408,7 +402,7 @@ func (pm *PluginsManager) ConvertNodeResourceInfoToMetrics(ctx context.Context, } // AddNode . -func (pm *PluginsManager) AddNode(ctx context.Context, nodeName string, resourceOpts types.NodeResourceOpts, nodeInfo *enginetypes.Info) (map[string]types.NodeResourceArgs, map[string]types.NodeResourceArgs, error) { +func (pm *PluginsManager) AddNode(ctx context.Context, nodename string, resourceOpts types.NodeResourceOpts, nodeInfo *enginetypes.Info) (map[string]types.NodeResourceArgs, map[string]types.NodeResourceArgs, error) { resResourceCapacity := map[string]types.NodeResourceArgs{} resResourceUsage := map[string]types.NodeResourceArgs{} rollbackPlugins := []Plugin{} @@ -421,9 +415,9 @@ func (pm *PluginsManager) AddNode(ctx context.Context, nodeName string, resource // commit: call plugins to add the node func(ctx context.Context) error { respMap, err := callPlugins(ctx, pm.plugins, func(plugin Plugin) (*AddNodeResponse, error) { - resp, err := plugin.AddNode(ctx, nodeName, resourceOpts, nodeInfo) + resp, err := plugin.AddNode(ctx, nodename, resourceOpts, nodeInfo) if err != nil { - log.Errorf(ctx, "[AddNode] node %v plugin %v failed to add node, req: %v, err: %v", nodeName, plugin.Name(), resourceOpts, err) + log.Errorf(ctx, "[AddNode] node %v plugin %v failed to add node, req: %v, err: %v", nodename, plugin.Name(), resourceOpts, err) } return resp, err }) @@ -433,7 +427,7 @@ func (pm *PluginsManager) AddNode(ctx context.Context, nodeName string, resource rollbackPlugins = append(rollbackPlugins, plugin) } - log.Errorf(ctx, "[AddNode] node %v failed to add node %v, rollback", nodeName, resourceOpts) + log.Errorf(ctx, "[AddNode] node %v failed to add node %v, rollback", nodename, resourceOpts) return err } @@ -447,9 +441,9 @@ func (pm *PluginsManager) AddNode(ctx context.Context, nodeName string, resource // rollback: remove node func(ctx context.Context) error { _, err := callPlugins(ctx, rollbackPlugins, func(plugin Plugin) (*RemoveNodeResponse, error) { - resp, err := plugin.RemoveNode(ctx, nodeName) + resp, err := plugin.RemoveNode(ctx, nodename) if err != nil { - log.Errorf(ctx, "[AddNode] node %v plugin %v failed to rollback, err: %v", nodeName, plugin.Name(), err) + log.Errorf(ctx, "[AddNode] node %v plugin %v failed to rollback, err: %v", nodename, plugin.Name(), err) } return resp, err }) @@ -466,7 +460,7 @@ func (pm *PluginsManager) AddNode(ctx context.Context, nodeName string, resource } // RemoveNode . -func (pm *PluginsManager) RemoveNode(ctx context.Context, nodeName string) error { +func (pm *PluginsManager) RemoveNode(ctx context.Context, nodename string) error { var resourceCapacityMap map[string]types.NodeResourceArgs var resourceUsageMap map[string]types.NodeResourceArgs rollbackPlugins := []Plugin{} @@ -475,9 +469,9 @@ func (pm *PluginsManager) RemoveNode(ctx context.Context, nodeName string) error // prepare: get node resource func(ctx context.Context) error { var err error - resourceCapacityMap, resourceUsageMap, _, err = pm.GetNodeResourceInfo(ctx, nodeName, nil, false, nil) + resourceCapacityMap, resourceUsageMap, _, err = pm.GetNodeResourceInfo(ctx, nodename, nil, false) if err != nil { - log.Errorf(ctx, "[RemoveNode] failed to get node %v resource, err: %v", nodeName, err) + log.Errorf(ctx, "[RemoveNode] failed to get node %v resource, err: %v", nodename, err) return err } return nil @@ -485,9 +479,9 @@ func (pm *PluginsManager) RemoveNode(ctx context.Context, nodeName string) error // commit: remove node func(ctx context.Context) error { respMap, err := callPlugins(ctx, pm.plugins, func(plugin Plugin) (*RemoveNodeResponse, error) { - resp, err := plugin.RemoveNode(ctx, nodeName) + resp, err := plugin.RemoveNode(ctx, nodename) if err != nil { - log.Errorf(ctx, "[AddNode] plugin %v failed to remove node, err: %v", plugin.Name(), nodeName, err) + log.Errorf(ctx, "[AddNode] plugin %v failed to remove node, err: %v", plugin.Name(), nodename, err) } return resp, err }) @@ -497,7 +491,7 @@ func (pm *PluginsManager) RemoveNode(ctx context.Context, nodeName string) error rollbackPlugins = append(rollbackPlugins, plugin) } - log.Errorf(ctx, "[AddNode] failed to remove node %v", nodeName) + log.Errorf(ctx, "[AddNode] failed to remove node %v", nodename) return err } return nil @@ -505,9 +499,9 @@ func (pm *PluginsManager) RemoveNode(ctx context.Context, nodeName string) error // rollback: add node func(ctx context.Context) error { _, err := callPlugins(ctx, rollbackPlugins, func(plugin Plugin) (*SetNodeResourceInfoResponse, error) { - resp, err := plugin.SetNodeResourceInfo(ctx, nodeName, resourceCapacityMap[plugin.Name()], resourceUsageMap[plugin.Name()]) + resp, err := plugin.SetNodeResourceInfo(ctx, nodename, resourceCapacityMap[plugin.Name()], resourceUsageMap[plugin.Name()]) if err != nil { - log.Errorf(ctx, "[RemoveNode] plugin %v node %v failed to rollback, err: %v", plugin.Name(), nodeName, err) + log.Errorf(ctx, "[RemoveNode] plugin %v node %v failed to rollback, err: %v", plugin.Name(), nodename, err) } return resp, err }) @@ -524,14 +518,14 @@ func (pm *PluginsManager) RemoveNode(ctx context.Context, nodeName string) error // GetRemapArgs remaps resource and returns engine args for workloads. format: {"workload-1": {"cpus": ["1-3"]}} // remap doesn't change resource args -func (pm *PluginsManager) GetRemapArgs(ctx context.Context, nodeName string, workloadMap map[string]*types.Workload) (map[string]types.EngineArgs, error) { +func (pm *PluginsManager) GetRemapArgs(ctx context.Context, nodename string, workloadMap map[string]*types.Workload) (map[string]types.EngineArgs, error) { resEngineArgsMap := map[string]types.EngineArgs{} // call plugins to remap respMap, err := callPlugins(ctx, pm.plugins, func(plugin Plugin) (*GetRemapArgsResponse, error) { - resp, err := plugin.GetRemapArgs(ctx, nodeName, workloadMap) + resp, err := plugin.GetRemapArgs(ctx, nodename, workloadMap) if err != nil { - log.Errorf(ctx, "[GetRemapArgs] plugin %v node %v failed to remap, err: %v", plugin.Name(), nodeName, err) + log.Errorf(ctx, "[GetRemapArgs] plugin %v node %v failed to remap, err: %v", plugin.Name(), nodename, err) } return resp, err }) diff --git a/resources/mocks/Manager.go b/resources/mocks/Manager.go index 46fe9e6fd..66a4f135f 100644 --- a/resources/mocks/Manager.go +++ b/resources/mocks/Manager.go @@ -160,13 +160,13 @@ func (_m *Manager) GetMostIdleNode(_a0 context.Context, _a1 []string) (string, e return r0, r1 } -// GetNodeResourceInfo provides a mock function with given fields: _a0, _a1, _a2, _a3, _a4 -func (_m *Manager) GetNodeResourceInfo(_a0 context.Context, _a1 string, _a2 []*types.Workload, _a3 bool, _a4 []string) (map[string]types.NodeResourceArgs, map[string]types.NodeResourceArgs, []string, error) { - ret := _m.Called(_a0, _a1, _a2, _a3, _a4) +// GetNodeResourceInfo provides a mock function with given fields: _a0, _a1, _a2, _a3 +func (_m *Manager) GetNodeResourceInfo(_a0 context.Context, _a1 string, _a2 []*types.Workload, _a3 bool) (map[string]types.NodeResourceArgs, map[string]types.NodeResourceArgs, []string, error) { + ret := _m.Called(_a0, _a1, _a2, _a3) var r0 map[string]types.NodeResourceArgs - if rf, ok := ret.Get(0).(func(context.Context, string, []*types.Workload, bool, []string) map[string]types.NodeResourceArgs); ok { - r0 = rf(_a0, _a1, _a2, _a3, _a4) + if rf, ok := ret.Get(0).(func(context.Context, string, []*types.Workload, bool) map[string]types.NodeResourceArgs); ok { + r0 = rf(_a0, _a1, _a2, _a3) } else { if ret.Get(0) != nil { r0 = ret.Get(0).(map[string]types.NodeResourceArgs) @@ -174,8 +174,8 @@ func (_m *Manager) GetNodeResourceInfo(_a0 context.Context, _a1 string, _a2 []*t } var r1 map[string]types.NodeResourceArgs - if rf, ok := ret.Get(1).(func(context.Context, string, []*types.Workload, bool, []string) map[string]types.NodeResourceArgs); ok { - r1 = rf(_a0, _a1, _a2, _a3, _a4) + if rf, ok := ret.Get(1).(func(context.Context, string, []*types.Workload, bool) map[string]types.NodeResourceArgs); ok { + r1 = rf(_a0, _a1, _a2, _a3) } else { if ret.Get(1) != nil { r1 = ret.Get(1).(map[string]types.NodeResourceArgs) @@ -183,8 +183,8 @@ func (_m *Manager) GetNodeResourceInfo(_a0 context.Context, _a1 string, _a2 []*t } var r2 []string - if rf, ok := ret.Get(2).(func(context.Context, string, []*types.Workload, bool, []string) []string); ok { - r2 = rf(_a0, _a1, _a2, _a3, _a4) + if rf, ok := ret.Get(2).(func(context.Context, string, []*types.Workload, bool) []string); ok { + r2 = rf(_a0, _a1, _a2, _a3) } else { if ret.Get(2) != nil { r2 = ret.Get(2).([]string) @@ -192,8 +192,8 @@ func (_m *Manager) GetNodeResourceInfo(_a0 context.Context, _a1 string, _a2 []*t } var r3 error - if rf, ok := ret.Get(3).(func(context.Context, string, []*types.Workload, bool, []string) error); ok { - r3 = rf(_a0, _a1, _a2, _a3, _a4) + if rf, ok := ret.Get(3).(func(context.Context, string, []*types.Workload, bool) error); ok { + r3 = rf(_a0, _a1, _a2, _a3) } else { r3 = ret.Error(3) } diff --git a/resources/mocks/Plugin.go b/resources/mocks/Plugin.go index c6381eb5f..decdcec71 100644 --- a/resources/mocks/Plugin.go +++ b/resources/mocks/Plugin.go @@ -18,13 +18,13 @@ type Plugin struct { mock.Mock } -// AddNode provides a mock function with given fields: ctx, nodeName, resourceOpts, nodeInfo -func (_m *Plugin) AddNode(ctx context.Context, nodeName string, resourceOpts types.NodeResourceOpts, nodeInfo *enginetypes.Info) (*resources.AddNodeResponse, error) { - ret := _m.Called(ctx, nodeName, resourceOpts, nodeInfo) +// AddNode provides a mock function with given fields: ctx, nodename, resourceOpts, nodeInfo +func (_m *Plugin) AddNode(ctx context.Context, nodename string, resourceOpts types.NodeResourceOpts, nodeInfo *enginetypes.Info) (*resources.AddNodeResponse, error) { + ret := _m.Called(ctx, nodename, resourceOpts, nodeInfo) var r0 *resources.AddNodeResponse if rf, ok := ret.Get(0).(func(context.Context, string, types.NodeResourceOpts, *enginetypes.Info) *resources.AddNodeResponse); ok { - r0 = rf(ctx, nodeName, resourceOpts, nodeInfo) + r0 = rf(ctx, nodename, resourceOpts, nodeInfo) } else { if ret.Get(0) != nil { r0 = ret.Get(0).(*resources.AddNodeResponse) @@ -33,7 +33,7 @@ func (_m *Plugin) AddNode(ctx context.Context, nodeName string, resourceOpts typ var r1 error if rf, ok := ret.Get(1).(func(context.Context, string, types.NodeResourceOpts, *enginetypes.Info) error); ok { - r1 = rf(ctx, nodeName, resourceOpts, nodeInfo) + r1 = rf(ctx, nodename, resourceOpts, nodeInfo) } else { r1 = ret.Error(1) } @@ -41,13 +41,13 @@ func (_m *Plugin) AddNode(ctx context.Context, nodeName string, resourceOpts typ return r0, r1 } -// ConvertNodeResourceInfoToMetrics provides a mock function with given fields: ctx, podName, nodeName, nodeResourceInfo -func (_m *Plugin) ConvertNodeResourceInfoToMetrics(ctx context.Context, podName string, nodeName string, nodeResourceInfo *resources.NodeResourceInfo) (*resources.ConvertNodeResourceInfoToMetricsResponse, error) { - ret := _m.Called(ctx, podName, nodeName, nodeResourceInfo) +// ConvertNodeResourceInfoToMetrics provides a mock function with given fields: ctx, podname, nodename, nodeResourceInfo +func (_m *Plugin) ConvertNodeResourceInfoToMetrics(ctx context.Context, podname string, nodename string, nodeResourceInfo *resources.NodeResourceInfo) (*resources.ConvertNodeResourceInfoToMetricsResponse, error) { + ret := _m.Called(ctx, podname, nodename, nodeResourceInfo) var r0 *resources.ConvertNodeResourceInfoToMetricsResponse if rf, ok := ret.Get(0).(func(context.Context, string, string, *resources.NodeResourceInfo) *resources.ConvertNodeResourceInfoToMetricsResponse); ok { - r0 = rf(ctx, podName, nodeName, nodeResourceInfo) + r0 = rf(ctx, podname, nodename, nodeResourceInfo) } else { if ret.Get(0) != nil { r0 = ret.Get(0).(*resources.ConvertNodeResourceInfoToMetricsResponse) @@ -56,7 +56,7 @@ func (_m *Plugin) ConvertNodeResourceInfoToMetrics(ctx context.Context, podName var r1 error if rf, ok := ret.Get(1).(func(context.Context, string, string, *resources.NodeResourceInfo) error); ok { - r1 = rf(ctx, podName, nodeName, nodeResourceInfo) + r1 = rf(ctx, podname, nodename, nodeResourceInfo) } else { r1 = ret.Error(1) } @@ -64,36 +64,13 @@ func (_m *Plugin) ConvertNodeResourceInfoToMetrics(ctx context.Context, podName return r0, r1 } -// FixNodeResource provides a mock function with given fields: ctx, nodeName, workloads -func (_m *Plugin) FixNodeResource(ctx context.Context, nodeName string, workloads []*types.Workload) (*resources.GetNodeResourceInfoResponse, error) { - ret := _m.Called(ctx, nodeName, workloads) - - var r0 *resources.GetNodeResourceInfoResponse - if rf, ok := ret.Get(0).(func(context.Context, string, []*types.Workload) *resources.GetNodeResourceInfoResponse); ok { - r0 = rf(ctx, nodeName, workloads) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*resources.GetNodeResourceInfoResponse) - } - } - - var r1 error - if rf, ok := ret.Get(1).(func(context.Context, string, []*types.Workload) error); ok { - r1 = rf(ctx, nodeName, workloads) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// GetDeployArgs provides a mock function with given fields: ctx, nodeName, deployCount, resourceOpts -func (_m *Plugin) GetDeployArgs(ctx context.Context, nodeName string, deployCount int, resourceOpts types.WorkloadResourceOpts) (*resources.GetDeployArgsResponse, error) { - ret := _m.Called(ctx, nodeName, deployCount, resourceOpts) +// GetDeployArgs provides a mock function with given fields: ctx, nodename, deployCount, resourceOpts +func (_m *Plugin) GetDeployArgs(ctx context.Context, nodename string, deployCount int, resourceOpts types.WorkloadResourceOpts) (*resources.GetDeployArgsResponse, error) { + ret := _m.Called(ctx, nodename, deployCount, resourceOpts) var r0 *resources.GetDeployArgsResponse if rf, ok := ret.Get(0).(func(context.Context, string, int, types.WorkloadResourceOpts) *resources.GetDeployArgsResponse); ok { - r0 = rf(ctx, nodeName, deployCount, resourceOpts) + r0 = rf(ctx, nodename, deployCount, resourceOpts) } else { if ret.Get(0) != nil { r0 = ret.Get(0).(*resources.GetDeployArgsResponse) @@ -102,7 +79,7 @@ func (_m *Plugin) GetDeployArgs(ctx context.Context, nodeName string, deployCoun var r1 error if rf, ok := ret.Get(1).(func(context.Context, string, int, types.WorkloadResourceOpts) error); ok { - r1 = rf(ctx, nodeName, deployCount, resourceOpts) + r1 = rf(ctx, nodename, deployCount, resourceOpts) } else { r1 = ret.Error(1) } @@ -156,13 +133,13 @@ func (_m *Plugin) GetMostIdleNode(ctx context.Context, nodeNames []string) (*res return r0, r1 } -// GetNodeResourceInfo provides a mock function with given fields: ctx, nodeName, workloads -func (_m *Plugin) GetNodeResourceInfo(ctx context.Context, nodeName string, workloads []*types.Workload) (*resources.GetNodeResourceInfoResponse, error) { - ret := _m.Called(ctx, nodeName, workloads) +// GetNodeResourceInfo provides a mock function with given fields: ctx, nodename, workloads, fix +func (_m *Plugin) GetNodeResourceInfo(ctx context.Context, nodename string, workloads []*types.Workload, fix bool) (*resources.GetNodeResourceInfoResponse, error) { + ret := _m.Called(ctx, nodename, workloads, fix) var r0 *resources.GetNodeResourceInfoResponse - if rf, ok := ret.Get(0).(func(context.Context, string, []*types.Workload) *resources.GetNodeResourceInfoResponse); ok { - r0 = rf(ctx, nodeName, workloads) + if rf, ok := ret.Get(0).(func(context.Context, string, []*types.Workload, bool) *resources.GetNodeResourceInfoResponse); ok { + r0 = rf(ctx, nodename, workloads, fix) } else { if ret.Get(0) != nil { r0 = ret.Get(0).(*resources.GetNodeResourceInfoResponse) @@ -170,8 +147,8 @@ func (_m *Plugin) GetNodeResourceInfo(ctx context.Context, nodeName string, work } var r1 error - if rf, ok := ret.Get(1).(func(context.Context, string, []*types.Workload) error); ok { - r1 = rf(ctx, nodeName, workloads) + if rf, ok := ret.Get(1).(func(context.Context, string, []*types.Workload, bool) error); ok { + r1 = rf(ctx, nodename, workloads, fix) } else { r1 = ret.Error(1) } @@ -202,13 +179,13 @@ func (_m *Plugin) GetNodesDeployCapacity(ctx context.Context, nodeNames []string return r0, r1 } -// GetReallocArgs provides a mock function with given fields: ctx, nodeName, originResourceArgs, resourceOpts -func (_m *Plugin) GetReallocArgs(ctx context.Context, nodeName string, originResourceArgs types.WorkloadResourceArgs, resourceOpts types.WorkloadResourceOpts) (*resources.GetReallocArgsResponse, error) { - ret := _m.Called(ctx, nodeName, originResourceArgs, resourceOpts) +// GetReallocArgs provides a mock function with given fields: ctx, nodename, originResourceArgs, resourceOpts +func (_m *Plugin) GetReallocArgs(ctx context.Context, nodename string, originResourceArgs types.WorkloadResourceArgs, resourceOpts types.WorkloadResourceOpts) (*resources.GetReallocArgsResponse, error) { + ret := _m.Called(ctx, nodename, originResourceArgs, resourceOpts) var r0 *resources.GetReallocArgsResponse if rf, ok := ret.Get(0).(func(context.Context, string, types.WorkloadResourceArgs, types.WorkloadResourceOpts) *resources.GetReallocArgsResponse); ok { - r0 = rf(ctx, nodeName, originResourceArgs, resourceOpts) + r0 = rf(ctx, nodename, originResourceArgs, resourceOpts) } else { if ret.Get(0) != nil { r0 = ret.Get(0).(*resources.GetReallocArgsResponse) @@ -217,7 +194,7 @@ func (_m *Plugin) GetReallocArgs(ctx context.Context, nodeName string, originRes var r1 error if rf, ok := ret.Get(1).(func(context.Context, string, types.WorkloadResourceArgs, types.WorkloadResourceOpts) error); ok { - r1 = rf(ctx, nodeName, originResourceArgs, resourceOpts) + r1 = rf(ctx, nodename, originResourceArgs, resourceOpts) } else { r1 = ret.Error(1) } @@ -225,13 +202,13 @@ func (_m *Plugin) GetReallocArgs(ctx context.Context, nodeName string, originRes return r0, r1 } -// GetRemapArgs provides a mock function with given fields: ctx, nodeName, workloadMap -func (_m *Plugin) GetRemapArgs(ctx context.Context, nodeName string, workloadMap map[string]*types.Workload) (*resources.GetRemapArgsResponse, error) { - ret := _m.Called(ctx, nodeName, workloadMap) +// GetRemapArgs provides a mock function with given fields: ctx, nodename, workloadMap +func (_m *Plugin) GetRemapArgs(ctx context.Context, nodename string, workloadMap map[string]*types.Workload) (*resources.GetRemapArgsResponse, error) { + ret := _m.Called(ctx, nodename, workloadMap) var r0 *resources.GetRemapArgsResponse if rf, ok := ret.Get(0).(func(context.Context, string, map[string]*types.Workload) *resources.GetRemapArgsResponse); ok { - r0 = rf(ctx, nodeName, workloadMap) + r0 = rf(ctx, nodename, workloadMap) } else { if ret.Get(0) != nil { r0 = ret.Get(0).(*resources.GetRemapArgsResponse) @@ -240,7 +217,7 @@ func (_m *Plugin) GetRemapArgs(ctx context.Context, nodeName string, workloadMap var r1 error if rf, ok := ret.Get(1).(func(context.Context, string, map[string]*types.Workload) error); ok { - r1 = rf(ctx, nodeName, workloadMap) + r1 = rf(ctx, nodename, workloadMap) } else { r1 = ret.Error(1) } @@ -262,13 +239,13 @@ func (_m *Plugin) Name() string { return r0 } -// RemoveNode provides a mock function with given fields: ctx, nodeName -func (_m *Plugin) RemoveNode(ctx context.Context, nodeName string) (*resources.RemoveNodeResponse, error) { - ret := _m.Called(ctx, nodeName) +// RemoveNode provides a mock function with given fields: ctx, nodename +func (_m *Plugin) RemoveNode(ctx context.Context, nodename string) (*resources.RemoveNodeResponse, error) { + ret := _m.Called(ctx, nodename) var r0 *resources.RemoveNodeResponse if rf, ok := ret.Get(0).(func(context.Context, string) *resources.RemoveNodeResponse); ok { - r0 = rf(ctx, nodeName) + r0 = rf(ctx, nodename) } else { if ret.Get(0) != nil { r0 = ret.Get(0).(*resources.RemoveNodeResponse) @@ -277,7 +254,7 @@ func (_m *Plugin) RemoveNode(ctx context.Context, nodeName string) (*resources.R var r1 error if rf, ok := ret.Get(1).(func(context.Context, string) error); ok { - r1 = rf(ctx, nodeName) + r1 = rf(ctx, nodename) } else { r1 = ret.Error(1) } @@ -285,13 +262,13 @@ func (_m *Plugin) RemoveNode(ctx context.Context, nodeName string) (*resources.R return r0, r1 } -// SetNodeResourceCapacity provides a mock function with given fields: ctx, nodeName, nodeResourceOpts, nodeResourceArgs, delta, incr -func (_m *Plugin) SetNodeResourceCapacity(ctx context.Context, nodeName string, nodeResourceOpts types.NodeResourceOpts, nodeResourceArgs types.NodeResourceArgs, delta bool, incr bool) (*resources.SetNodeResourceCapacityResponse, error) { - ret := _m.Called(ctx, nodeName, nodeResourceOpts, nodeResourceArgs, delta, incr) +// SetNodeResourceCapacity provides a mock function with given fields: ctx, nodename, nodeResourceOpts, nodeResourceArgs, delta, incr +func (_m *Plugin) SetNodeResourceCapacity(ctx context.Context, nodename string, nodeResourceOpts types.NodeResourceOpts, nodeResourceArgs types.NodeResourceArgs, delta bool, incr bool) (*resources.SetNodeResourceCapacityResponse, error) { + ret := _m.Called(ctx, nodename, nodeResourceOpts, nodeResourceArgs, delta, incr) var r0 *resources.SetNodeResourceCapacityResponse if rf, ok := ret.Get(0).(func(context.Context, string, types.NodeResourceOpts, types.NodeResourceArgs, bool, bool) *resources.SetNodeResourceCapacityResponse); ok { - r0 = rf(ctx, nodeName, nodeResourceOpts, nodeResourceArgs, delta, incr) + r0 = rf(ctx, nodename, nodeResourceOpts, nodeResourceArgs, delta, incr) } else { if ret.Get(0) != nil { r0 = ret.Get(0).(*resources.SetNodeResourceCapacityResponse) @@ -300,7 +277,7 @@ func (_m *Plugin) SetNodeResourceCapacity(ctx context.Context, nodeName string, var r1 error if rf, ok := ret.Get(1).(func(context.Context, string, types.NodeResourceOpts, types.NodeResourceArgs, bool, bool) error); ok { - r1 = rf(ctx, nodeName, nodeResourceOpts, nodeResourceArgs, delta, incr) + r1 = rf(ctx, nodename, nodeResourceOpts, nodeResourceArgs, delta, incr) } else { r1 = ret.Error(1) } @@ -308,13 +285,13 @@ func (_m *Plugin) SetNodeResourceCapacity(ctx context.Context, nodeName string, return r0, r1 } -// SetNodeResourceInfo provides a mock function with given fields: ctx, nodeName, resourceCapacity, resourceUsage -func (_m *Plugin) SetNodeResourceInfo(ctx context.Context, nodeName string, resourceCapacity types.NodeResourceArgs, resourceUsage types.NodeResourceArgs) (*resources.SetNodeResourceInfoResponse, error) { - ret := _m.Called(ctx, nodeName, resourceCapacity, resourceUsage) +// SetNodeResourceInfo provides a mock function with given fields: ctx, nodename, resourceCapacity, resourceUsage +func (_m *Plugin) SetNodeResourceInfo(ctx context.Context, nodename string, resourceCapacity types.NodeResourceArgs, resourceUsage types.NodeResourceArgs) (*resources.SetNodeResourceInfoResponse, error) { + ret := _m.Called(ctx, nodename, resourceCapacity, resourceUsage) var r0 *resources.SetNodeResourceInfoResponse if rf, ok := ret.Get(0).(func(context.Context, string, types.NodeResourceArgs, types.NodeResourceArgs) *resources.SetNodeResourceInfoResponse); ok { - r0 = rf(ctx, nodeName, resourceCapacity, resourceUsage) + r0 = rf(ctx, nodename, resourceCapacity, resourceUsage) } else { if ret.Get(0) != nil { r0 = ret.Get(0).(*resources.SetNodeResourceInfoResponse) @@ -323,7 +300,7 @@ func (_m *Plugin) SetNodeResourceInfo(ctx context.Context, nodeName string, reso var r1 error if rf, ok := ret.Get(1).(func(context.Context, string, types.NodeResourceArgs, types.NodeResourceArgs) error); ok { - r1 = rf(ctx, nodeName, resourceCapacity, resourceUsage) + r1 = rf(ctx, nodename, resourceCapacity, resourceUsage) } else { r1 = ret.Error(1) } @@ -331,13 +308,13 @@ func (_m *Plugin) SetNodeResourceInfo(ctx context.Context, nodeName string, reso return r0, r1 } -// SetNodeResourceUsage provides a mock function with given fields: ctx, nodeName, nodeResourceOpts, nodeResourceArgs, workloadResourceArgs, delta, incr -func (_m *Plugin) SetNodeResourceUsage(ctx context.Context, nodeName string, nodeResourceOpts types.NodeResourceOpts, nodeResourceArgs types.NodeResourceArgs, workloadResourceArgs []types.WorkloadResourceArgs, delta bool, incr bool) (*resources.SetNodeResourceUsageResponse, error) { - ret := _m.Called(ctx, nodeName, nodeResourceOpts, nodeResourceArgs, workloadResourceArgs, delta, incr) +// SetNodeResourceUsage provides a mock function with given fields: ctx, nodename, nodeResourceOpts, nodeResourceArgs, workloadResourceArgs, delta, incr +func (_m *Plugin) SetNodeResourceUsage(ctx context.Context, nodename string, nodeResourceOpts types.NodeResourceOpts, nodeResourceArgs types.NodeResourceArgs, workloadResourceArgs []types.WorkloadResourceArgs, delta bool, incr bool) (*resources.SetNodeResourceUsageResponse, error) { + ret := _m.Called(ctx, nodename, nodeResourceOpts, nodeResourceArgs, workloadResourceArgs, delta, incr) var r0 *resources.SetNodeResourceUsageResponse if rf, ok := ret.Get(0).(func(context.Context, string, types.NodeResourceOpts, types.NodeResourceArgs, []types.WorkloadResourceArgs, bool, bool) *resources.SetNodeResourceUsageResponse); ok { - r0 = rf(ctx, nodeName, nodeResourceOpts, nodeResourceArgs, workloadResourceArgs, delta, incr) + r0 = rf(ctx, nodename, nodeResourceOpts, nodeResourceArgs, workloadResourceArgs, delta, incr) } else { if ret.Get(0) != nil { r0 = ret.Get(0).(*resources.SetNodeResourceUsageResponse) @@ -346,7 +323,7 @@ func (_m *Plugin) SetNodeResourceUsage(ctx context.Context, nodeName string, nod var r1 error if rf, ok := ret.Get(1).(func(context.Context, string, types.NodeResourceOpts, types.NodeResourceArgs, []types.WorkloadResourceArgs, bool, bool) error); ok { - r1 = rf(ctx, nodeName, nodeResourceOpts, nodeResourceArgs, workloadResourceArgs, delta, incr) + r1 = rf(ctx, nodename, nodeResourceOpts, nodeResourceArgs, workloadResourceArgs, delta, incr) } else { r1 = ret.Error(1) } diff --git a/resources/plugin.go b/resources/plugin.go index bccb3ca62..067d80ab8 100644 --- a/resources/plugin.go +++ b/resources/plugin.go @@ -35,16 +35,16 @@ type Plugin interface { // GetDeployArgs tries to allocate resource, returns engine args for each workload, format: [{"cpus": 1.2}, {"cpus": 1.2}] // also returns resource args for each workload, format: [{"cpus": 1.2}, {"cpus": 1.2}] // pure calculation - GetDeployArgs(ctx context.Context, nodeName string, deployCount int, resourceOpts coretypes.WorkloadResourceOpts) (*GetDeployArgsResponse, error) + GetDeployArgs(ctx context.Context, nodename string, deployCount int, resourceOpts coretypes.WorkloadResourceOpts) (*GetDeployArgsResponse, error) // GetReallocArgs tries to reallocate resource, returns engine args, delta resource args and final resource args. // should return error if resource of some node is not enough for the realloc operation. // pure calculation - GetReallocArgs(ctx context.Context, nodeName string, originResourceArgs coretypes.WorkloadResourceArgs, resourceOpts coretypes.WorkloadResourceOpts) (*GetReallocArgsResponse, error) + GetReallocArgs(ctx context.Context, nodename string, originResourceArgs coretypes.WorkloadResourceArgs, resourceOpts coretypes.WorkloadResourceOpts) (*GetReallocArgsResponse, error) // GetRemapArgs tries to remap resources based on workload metadata and node resource usage, then returns engine args for workloads. // pure calculation - GetRemapArgs(ctx context.Context, nodeName string, workloadMap map[string]*coretypes.Workload) (*GetRemapArgsResponse, error) + GetRemapArgs(ctx context.Context, nodename string, workloadMap map[string]*coretypes.Workload) (*GetRemapArgsResponse, error) // GetNodesDeployCapacity returns available nodes and total capacity GetNodesDeployCapacity(ctx context.Context, nodeNames []string, resourceOpts coretypes.WorkloadResourceOpts) (*GetNodesDeployCapacityResponse, error) @@ -54,34 +54,32 @@ type Plugin interface { // GetNodeResourceInfo returns total resource info and available resource info of the node, format: {"cpu": 2} // also returns diffs, format: ["node.VolumeUsed != sum(workload.VolumeRequest"] - GetNodeResourceInfo(ctx context.Context, nodeName string, workloads []*coretypes.Workload) (*GetNodeResourceInfoResponse, error) - - // FixNodeResource fixes the node resource usage by its workloads - FixNodeResource(ctx context.Context, nodeName string, workloads []*coretypes.Workload) (*GetNodeResourceInfoResponse, error) + // can fix the node resource usage by its workloads + GetNodeResourceInfo(ctx context.Context, nodename string, workloads []*coretypes.Workload, fix bool) (*GetNodeResourceInfoResponse, error) // SetNodeResourceUsage sets the amount of allocated resource info - SetNodeResourceUsage(ctx context.Context, nodeName string, nodeResourceOpts coretypes.NodeResourceOpts, nodeResourceArgs coretypes.NodeResourceArgs, workloadResourceArgs []coretypes.WorkloadResourceArgs, delta bool, incr bool) (*SetNodeResourceUsageResponse, error) + SetNodeResourceUsage(ctx context.Context, nodename string, nodeResourceOpts coretypes.NodeResourceOpts, nodeResourceArgs coretypes.NodeResourceArgs, workloadResourceArgs []coretypes.WorkloadResourceArgs, delta bool, incr bool) (*SetNodeResourceUsageResponse, error) // SetNodeResourceCapacity sets the amount of total resource info - SetNodeResourceCapacity(ctx context.Context, nodeName string, nodeResourceOpts coretypes.NodeResourceOpts, nodeResourceArgs coretypes.NodeResourceArgs, delta bool, incr bool) (*SetNodeResourceCapacityResponse, error) + SetNodeResourceCapacity(ctx context.Context, nodename string, nodeResourceOpts coretypes.NodeResourceOpts, nodeResourceArgs coretypes.NodeResourceArgs, delta bool, incr bool) (*SetNodeResourceCapacityResponse, error) // SetNodeResourceInfo sets both total node resource info and allocated resource info // used for rollback of RemoveNode // notice: here uses absolute values, not delta values - SetNodeResourceInfo(ctx context.Context, nodeName string, resourceCapacity coretypes.NodeResourceArgs, resourceUsage coretypes.NodeResourceArgs) (*SetNodeResourceInfoResponse, error) + SetNodeResourceInfo(ctx context.Context, nodename string, resourceCapacity coretypes.NodeResourceArgs, resourceUsage coretypes.NodeResourceArgs) (*SetNodeResourceInfoResponse, error) // AddNode adds a node with requested resource, returns resource capacity and (empty) resource usage // should return error if the node already exists - AddNode(ctx context.Context, nodeName string, resourceOpts coretypes.NodeResourceOpts, nodeInfo *enginetypes.Info) (*AddNodeResponse, error) + AddNode(ctx context.Context, nodename string, resourceOpts coretypes.NodeResourceOpts, nodeInfo *enginetypes.Info) (*AddNodeResponse, error) // RemoveNode removes node - RemoveNode(ctx context.Context, nodeName string) (*RemoveNodeResponse, error) + RemoveNode(ctx context.Context, nodename string) (*RemoveNodeResponse, error) // GetMetricsDescription returns metrics description GetMetricsDescription(ctx context.Context) (*GetMetricsDescriptionResponse, error) // ConvertNodeResourceInfoToMetrics resolves node resource info to metrics - ConvertNodeResourceInfoToMetrics(ctx context.Context, podName string, nodeName string, nodeResourceInfo *NodeResourceInfo) (*ConvertNodeResourceInfoToMetricsResponse, error) + ConvertNodeResourceInfoToMetrics(ctx context.Context, podname string, nodename string, nodeResourceInfo *NodeResourceInfo) (*ConvertNodeResourceInfoToMetricsResponse, error) // Name returns the name of plugin Name() string @@ -96,7 +94,7 @@ type Manager interface { SetNodeResourceCapacity(context.Context, string, types.NodeResourceOpts, map[string]types.NodeResourceArgs, bool, bool) (map[string]types.NodeResourceArgs, map[string]types.NodeResourceArgs, error) - GetNodeResourceInfo(context.Context, string, []*types.Workload, bool, []string) (map[string]types.NodeResourceArgs, map[string]types.NodeResourceArgs, []string, error) + GetNodeResourceInfo(context.Context, string, []*types.Workload, bool) (map[string]types.NodeResourceArgs, map[string]types.NodeResourceArgs, []string, error) SetNodeResourceUsage(context.Context, string, types.NodeResourceOpts, map[string]types.NodeResourceArgs, []map[string]types.WorkloadResourceArgs, bool, bool) (map[string]types.NodeResourceArgs, map[string]types.NodeResourceArgs, error) diff --git a/resources/plugins.go b/resources/plugins.go index f964b7441..122e35368 100644 --- a/resources/plugins.go +++ b/resources/plugins.go @@ -28,13 +28,13 @@ func NewPluginsManager(config types.Config) (*PluginsManager, error) { // LoadPlugins . func (pm *PluginsManager) LoadPlugins(ctx context.Context) error { - if pm.config.ResourcePluginsDir == "" { + if pm.config.ResourcePlugin.Dir == "" { return nil } - pluginFiles, err := utils.ListAllExecutableFiles(pm.config.ResourcePluginsDir) + pluginFiles, err := utils.ListAllExecutableFiles(pm.config.ResourcePlugin.Dir) if err != nil { - log.Errorf(ctx, "[LoadPlugins] failed to list all executable files dir: %v, err: %v", pm.config.ResourcePluginsDir, err) + log.Errorf(ctx, "[LoadPlugins] failed to list all executable files dir: %v, err: %v", pm.config.ResourcePlugin.Dir, err) return err } diff --git a/resources/volume/models/info.go b/resources/volume/models/info.go index 6304925fd..88642b408 100644 --- a/resources/volume/models/info.go +++ b/resources/volume/models/info.go @@ -79,7 +79,7 @@ func (v *Volume) GetNodeResourceInfo(ctx context.Context, node string, workloadR } if err = v.doSetNodeResourceInfo(ctx, node, resourceInfo); err != nil { logrus.Warnf("[GetNodeResourceInfo] failed to fix node resource, err: %v", err) - diffs = append(diffs, "fix failed") + diffs = append(diffs, err.Error()) } } diff --git a/resources/volume/models/metrics.go b/resources/volume/models/metrics.go index 14e3fc0c4..7f793454d 100644 --- a/resources/volume/models/metrics.go +++ b/resources/volume/models/metrics.go @@ -25,18 +25,18 @@ func (v *Volume) GetMetricsDescription() []map[string]interface{} { } } -func (v *Volume) ConvertNodeResourceInfoToMetrics(podName string, nodeName string, nodeResourceCapacity *types.NodeResourceArgs, nodeResourceUsage *types.NodeResourceArgs) []map[string]interface{} { - cleanedNodeName := strings.ReplaceAll(nodeName, ".", "_") +func (v *Volume) ConvertNodeResourceInfoToMetrics(podname string, nodename string, nodeResourceCapacity *types.NodeResourceArgs, nodeResourceUsage *types.NodeResourceArgs) []map[string]interface{} { + cleanedNodeName := strings.ReplaceAll(nodename, ".", "_") metrics := []map[string]interface{}{ { "name": "storage_used", - "labels": []string{podName, nodeName}, + "labels": []string{podname, nodename}, "value": fmt.Sprintf("%v", nodeResourceUsage.Storage), "key": fmt.Sprintf("core.node.%s.storage.used", cleanedNodeName), }, { "name": "storage_capacity", - "labels": []string{podName, nodeName}, + "labels": []string{podname, nodename}, "value": fmt.Sprintf("%v", nodeResourceCapacity.Storage), "key": fmt.Sprintf("core.node.%s.storage.used", cleanedNodeName), }, diff --git a/resources/volume/models/volume_test.go b/resources/volume/models/volume_test.go index ccdeeb519..365f06153 100644 --- a/resources/volume/models/volume_test.go +++ b/resources/volume/models/volume_test.go @@ -63,9 +63,9 @@ func generateNodes(t *testing.T, volume *Volume, num int) []string { infos := generateNodeResourceInfos(num) for i, info := range infos { - nodeName := fmt.Sprintf("node%d", i) - assert.Nil(t, volume.doSetNodeResourceInfo(context.Background(), nodeName, info)) - nodes = append(nodes, nodeName) + nodename := fmt.Sprintf("node%d", i) + assert.Nil(t, volume.doSetNodeResourceInfo(context.Background(), nodename, info)) + nodes = append(nodes, nodename) } return nodes diff --git a/resources/volume/volume.go b/resources/volume/volume.go index 6ad23240e..182933fe1 100644 --- a/resources/volume/volume.go +++ b/resources/volume/volume.go @@ -26,12 +26,12 @@ func NewPlugin(config coretypes.Config) (*Plugin, error) { } // GetDeployArgs . -func (v *Plugin) GetDeployArgs(ctx context.Context, nodeName string, deployCount int, resourceOpts coretypes.WorkloadResourceOpts) (*resources.GetDeployArgsResponse, error) { +func (v *Plugin) GetDeployArgs(ctx context.Context, nodename string, deployCount int, resourceOpts coretypes.WorkloadResourceOpts) (*resources.GetDeployArgsResponse, error) { workloadResourceOpts := &types.WorkloadResourceOpts{} if err := workloadResourceOpts.ParseFromRawParams(coretypes.RawParams(resourceOpts)); err != nil { return nil, err } - engineArgs, resourceArgs, err := v.v.GetDeployArgs(ctx, nodeName, deployCount, workloadResourceOpts) + engineArgs, resourceArgs, err := v.v.GetDeployArgs(ctx, nodename, deployCount, workloadResourceOpts) if err != nil { return nil, err } @@ -44,7 +44,7 @@ func (v *Plugin) GetDeployArgs(ctx context.Context, nodeName string, deployCount } // GetReallocArgs . -func (v *Plugin) GetReallocArgs(ctx context.Context, nodeName string, originResourceArgs coretypes.WorkloadResourceArgs, resourceOpts coretypes.WorkloadResourceOpts) (*resources.GetReallocArgsResponse, error) { +func (v *Plugin) GetReallocArgs(ctx context.Context, nodename string, originResourceArgs coretypes.WorkloadResourceArgs, resourceOpts coretypes.WorkloadResourceOpts) (*resources.GetReallocArgsResponse, error) { workloadResourceOpts := &types.WorkloadResourceOpts{} if err := workloadResourceOpts.ParseFromRawParams(coretypes.RawParams(resourceOpts)); err != nil { return nil, err @@ -54,7 +54,7 @@ func (v *Plugin) GetReallocArgs(ctx context.Context, nodeName string, originReso return nil, err } - engineArgs, delta, resourceArgs, err := v.v.GetReallocArgs(ctx, nodeName, originWorkloadResourceArgs, workloadResourceOpts) + engineArgs, delta, resourceArgs, err := v.v.GetReallocArgs(ctx, nodename, originWorkloadResourceArgs, workloadResourceOpts) if err != nil { return nil, err } @@ -68,13 +68,13 @@ func (v *Plugin) GetReallocArgs(ctx context.Context, nodeName string, originReso } // GetRemapArgs . -func (v *Plugin) GetRemapArgs(ctx context.Context, nodeName string, workloadMap map[string]*coretypes.Workload) (*resources.GetRemapArgsResponse, error) { +func (v *Plugin) GetRemapArgs(ctx context.Context, nodename string, workloadMap map[string]*coretypes.Workload) (*resources.GetRemapArgsResponse, error) { workloadResourceArgsMap, err := v.workloadMapToWorkloadResourceArgsMap(workloadMap) if err != nil { return nil, err } - engineArgs, err := v.v.GetRemapArgs(ctx, nodeName, workloadResourceArgsMap) + engineArgs, err := v.v.GetRemapArgs(ctx, nodename, workloadResourceArgsMap) if err != nil { return nil, err } @@ -106,30 +106,39 @@ func (v *Plugin) GetNodesDeployCapacity(ctx context.Context, nodeNames []string, // GetMostIdleNode . func (v *Plugin) GetMostIdleNode(ctx context.Context, nodeNames []string) (*resources.GetMostIdleNodeResponse, error) { - nodeName, priority, err := v.v.GetMostIdleNode(ctx, nodeNames) + nodename, priority, err := v.v.GetMostIdleNode(ctx, nodeNames) if err != nil { return nil, err } resp := &resources.GetMostIdleNodeResponse{} return resp, mapstructure.Decode(map[string]interface{}{ - "node": nodeName, + "node": nodename, "priority": priority, }, resp) } // GetNodeResourceInfo . -func (v *Plugin) GetNodeResourceInfo(ctx context.Context, nodeName string, workloads []*coretypes.Workload) (*resources.GetNodeResourceInfoResponse, error) { - return v.getNodeResourceInfo(ctx, nodeName, workloads, false) -} +func (v *Plugin) GetNodeResourceInfo(ctx context.Context, nodename string, workloads []*coretypes.Workload, fix bool) (*resources.GetNodeResourceInfoResponse, error) { + workloadResourceArgsMap, err := v.workloadListToWorkloadResourceArgsMap(workloads) + if err != nil { + return nil, err + } + + nodeResourceInfo, diffs, err := v.v.GetNodeResourceInfo(ctx, nodename, workloadResourceArgsMap, fix) + if err != nil { + return nil, err + } -// FixNodeResource . -func (v *Plugin) FixNodeResource(ctx context.Context, nodeName string, workloads []*coretypes.Workload) (*resources.GetNodeResourceInfoResponse, error) { - return v.getNodeResourceInfo(ctx, nodeName, workloads, true) + resp := &resources.GetNodeResourceInfoResponse{} + return resp, mapstructure.Decode(map[string]interface{}{ + "resource_info": nodeResourceInfo, + "diffs": diffs, + }, resp) } // SetNodeResourceUsage . -func (v *Plugin) SetNodeResourceUsage(ctx context.Context, nodeName string, resourceOpts coretypes.NodeResourceOpts, resourceArgs coretypes.NodeResourceArgs, workloadResourceArgs []coretypes.WorkloadResourceArgs, delta bool, incr bool) (*resources.SetNodeResourceUsageResponse, error) { +func (v *Plugin) SetNodeResourceUsage(ctx context.Context, nodename string, resourceOpts coretypes.NodeResourceOpts, resourceArgs coretypes.NodeResourceArgs, workloadResourceArgs []coretypes.WorkloadResourceArgs, delta bool, incr bool) (*resources.SetNodeResourceUsageResponse, error) { var nodeResourceOpts *types.NodeResourceOpts var nodeResourceArgs *types.NodeResourceArgs var workloadResourceArgsList []*types.WorkloadResourceArgs @@ -158,7 +167,7 @@ func (v *Plugin) SetNodeResourceUsage(ctx context.Context, nodeName string, reso } } - before, after, err := v.v.SetNodeResourceUsage(ctx, nodeName, nodeResourceOpts, nodeResourceArgs, workloadResourceArgsList, delta, incr) + before, after, err := v.v.SetNodeResourceUsage(ctx, nodename, nodeResourceOpts, nodeResourceArgs, workloadResourceArgsList, delta, incr) if err != nil { return nil, err } @@ -171,7 +180,7 @@ func (v *Plugin) SetNodeResourceUsage(ctx context.Context, nodeName string, reso } // SetNodeResourceCapacity . -func (v *Plugin) SetNodeResourceCapacity(ctx context.Context, nodeName string, resourceOpts coretypes.NodeResourceOpts, resourceArgs coretypes.NodeResourceArgs, delta bool, incr bool) (*resources.SetNodeResourceCapacityResponse, error) { +func (v *Plugin) SetNodeResourceCapacity(ctx context.Context, nodename string, resourceOpts coretypes.NodeResourceOpts, resourceArgs coretypes.NodeResourceArgs, delta bool, incr bool) (*resources.SetNodeResourceCapacityResponse, error) { var nodeResourceOpts *types.NodeResourceOpts var nodeResourceArgs *types.NodeResourceArgs @@ -188,7 +197,7 @@ func (v *Plugin) SetNodeResourceCapacity(ctx context.Context, nodeName string, r } } - before, after, err := v.v.SetNodeResourceCapacity(ctx, nodeName, nodeResourceOpts, nodeResourceArgs, delta, incr) + before, after, err := v.v.SetNodeResourceCapacity(ctx, nodename, nodeResourceOpts, nodeResourceArgs, delta, incr) if err != nil { return nil, err } @@ -201,7 +210,7 @@ func (v *Plugin) SetNodeResourceCapacity(ctx context.Context, nodeName string, r } // SetNodeResourceInfo . -func (v *Plugin) SetNodeResourceInfo(ctx context.Context, nodeName string, resourceCapacity coretypes.NodeResourceArgs, resourceUsage coretypes.NodeResourceArgs) (*resources.SetNodeResourceInfoResponse, error) { +func (v *Plugin) SetNodeResourceInfo(ctx context.Context, nodename string, resourceCapacity coretypes.NodeResourceArgs, resourceUsage coretypes.NodeResourceArgs) (*resources.SetNodeResourceInfoResponse, error) { capacity := &types.NodeResourceArgs{} if err := capacity.ParseFromRawParams(coretypes.RawParams(resourceCapacity)); err != nil { return nil, err @@ -212,27 +221,25 @@ func (v *Plugin) SetNodeResourceInfo(ctx context.Context, nodeName string, resou return nil, err } - if err := v.v.SetNodeResourceInfo(ctx, nodeName, capacity, usage); err != nil { + if err := v.v.SetNodeResourceInfo(ctx, nodename, capacity, usage); err != nil { return nil, err } return &resources.SetNodeResourceInfoResponse{}, nil } // AddNode . -func (v *Plugin) AddNode(ctx context.Context, nodeName string, resourceOpts coretypes.NodeResourceOpts, nodeInfo *enginetypes.Info) (*resources.AddNodeResponse, error) { +func (v *Plugin) AddNode(ctx context.Context, nodename string, resourceOpts coretypes.NodeResourceOpts, nodeInfo *enginetypes.Info) (*resources.AddNodeResponse, error) { nodeResourceOpts := &types.NodeResourceOpts{} if err := nodeResourceOpts.ParseFromRawParams(coretypes.RawParams(resourceOpts)); err != nil { return nil, err } - // set default value - if nodeInfo != nil { - if nodeResourceOpts.Storage == 0 { - nodeResourceOpts.Storage = nodeInfo.StorageTotal * 8 / 10 - } + // reset by default value + if nodeInfo != nil && nodeResourceOpts.Storage == 0 { + nodeResourceOpts.Storage = nodeInfo.StorageTotal * 8 / 10 } - nodeResourceInfo, err := v.v.AddNode(ctx, nodeName, nodeResourceOpts) + nodeResourceInfo, err := v.v.AddNode(ctx, nodename, nodeResourceOpts) if err != nil { return nil, err } @@ -245,8 +252,8 @@ func (v *Plugin) AddNode(ctx context.Context, nodeName string, resourceOpts core } // RemoveNode . -func (v *Plugin) RemoveNode(ctx context.Context, nodeName string) (*resources.RemoveNodeResponse, error) { - if err := v.v.RemoveNode(ctx, nodeName); err != nil { +func (v *Plugin) RemoveNode(ctx context.Context, nodename string) (*resources.RemoveNodeResponse, error) { + if err := v.v.RemoveNode(ctx, nodename); err != nil { return nil, err } return &resources.RemoveNodeResponse{}, nil @@ -279,24 +286,6 @@ func (v *Plugin) workloadListToWorkloadResourceArgsMap(workloads []*coretypes.Wo return v.workloadMapToWorkloadResourceArgsMap(workloadMap) } -func (v *Plugin) getNodeResourceInfo(ctx context.Context, nodeName string, workloads []*coretypes.Workload, fix bool) (*resources.GetNodeResourceInfoResponse, error) { - workloadResourceArgsMap, err := v.workloadListToWorkloadResourceArgsMap(workloads) - if err != nil { - return nil, err - } - - nodeResourceInfo, diffs, err := v.v.GetNodeResourceInfo(ctx, nodeName, workloadResourceArgsMap, fix) - if err != nil { - return nil, err - } - - resp := &resources.GetNodeResourceInfoResponse{} - return resp, mapstructure.Decode(map[string]interface{}{ - "resource_info": nodeResourceInfo, - "diffs": diffs, - }, resp) -} - // GetMetricsDescription . func (v *Plugin) GetMetricsDescription(ctx context.Context) (*resources.GetMetricsDescriptionResponse, error) { resp := &resources.GetMetricsDescriptionResponse{} @@ -304,7 +293,7 @@ func (v *Plugin) GetMetricsDescription(ctx context.Context) (*resources.GetMetri } // ConvertNodeResourceInfoToMetrics . -func (v *Plugin) ConvertNodeResourceInfoToMetrics(ctx context.Context, podName string, nodeName string, info *resources.NodeResourceInfo) (*resources.ConvertNodeResourceInfoToMetricsResponse, error) { +func (v *Plugin) ConvertNodeResourceInfoToMetrics(ctx context.Context, podname string, nodename string, info *resources.NodeResourceInfo) (*resources.ConvertNodeResourceInfoToMetricsResponse, error) { capacity, usage := &types.NodeResourceArgs{}, &types.NodeResourceArgs{} if err := capacity.ParseFromRawParams(coretypes.RawParams(info.Capacity)); err != nil { return nil, err @@ -313,7 +302,7 @@ func (v *Plugin) ConvertNodeResourceInfoToMetrics(ctx context.Context, podName s return nil, err } - metrics := v.v.ConvertNodeResourceInfoToMetrics(podName, nodeName, capacity, usage) + metrics := v.v.ConvertNodeResourceInfoToMetrics(podname, nodename, capacity, usage) resp := &resources.ConvertNodeResourceInfoToMetricsResponse{} return resp, mapstructure.Decode(metrics, resp) } diff --git a/rpc/gen/core.pb.go b/rpc/gen/core.pb.go index 6d4292711..621d0c2ad 100644 --- a/rpc/gen/core.pb.go +++ b/rpc/gen/core.pb.go @@ -167,7 +167,7 @@ func (x BuildImageOptions_BuildMethod) Number() protoreflect.EnumNumber { // Deprecated: Use BuildImageOptions_BuildMethod.Descriptor instead. func (BuildImageOptions_BuildMethod) EnumDescriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{46, 0} + return file_rpc_gen_core_proto_rawDescGZIP(), []int{43, 0} } type DeployOptions_Strategy int32 @@ -222,7 +222,7 @@ func (x DeployOptions_Strategy) Number() protoreflect.EnumNumber { // Deprecated: Use DeployOptions_Strategy.Descriptor instead. func (DeployOptions_Strategy) EnumDescriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{52, 0} + return file_rpc_gen_core_proto_rawDescGZIP(), []int{49, 0} } type Empty struct { @@ -268,12 +268,12 @@ type CoreInfo struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Version string `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"` - Revison string `protobuf:"bytes,2,opt,name=revison,proto3" json:"revison,omitempty"` - BuildAt string `protobuf:"bytes,3,opt,name=build_at,json=buildAt,proto3" json:"build_at,omitempty"` - GolangVersion string `protobuf:"bytes,4,opt,name=golang_version,json=golangVersion,proto3" json:"golang_version,omitempty"` - OsArch string `protobuf:"bytes,5,opt,name=os_arch,json=osArch,proto3" json:"os_arch,omitempty"` - Identifier string `protobuf:"bytes,6,opt,name=identifier,proto3" json:"identifier,omitempty"` + Version string `protobuf:"bytes,1001,opt,name=version,proto3" json:"version,omitempty"` + Revison string `protobuf:"bytes,1002,opt,name=revison,proto3" json:"revison,omitempty"` + BuildAt string `protobuf:"bytes,1003,opt,name=build_at,json=buildAt,proto3" json:"build_at,omitempty"` + GolangVersion string `protobuf:"bytes,1004,opt,name=golang_version,json=golangVersion,proto3" json:"golang_version,omitempty"` + OsArch string `protobuf:"bytes,1005,opt,name=os_arch,json=osArch,proto3" json:"os_arch,omitempty"` + Identifier string `protobuf:"bytes,1006,opt,name=identifier,proto3" json:"identifier,omitempty"` } func (x *CoreInfo) Reset() { @@ -355,8 +355,8 @@ type ServiceStatus struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Addresses []string `protobuf:"bytes,1,rep,name=addresses,proto3" json:"addresses,omitempty"` - IntervalInSecond int64 `protobuf:"varint,2,opt,name=interval_in_second,json=intervalInSecond,proto3" json:"interval_in_second,omitempty"` + Addresses []string `protobuf:"bytes,1001,rep,name=addresses,proto3" json:"addresses,omitempty"` + IntervalInSecond int64 `protobuf:"varint,1002,opt,name=interval_in_second,json=intervalInSecond,proto3" json:"interval_in_second,omitempty"` } func (x *ServiceStatus) Reset() { @@ -410,7 +410,7 @@ type Engine struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` + Type string `protobuf:"bytes,1001,opt,name=type,proto3" json:"type,omitempty"` } func (x *Engine) Reset() { @@ -457,11 +457,11 @@ type ListWorkloadsOptions struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Appname string `protobuf:"bytes,1,opt,name=appname,proto3" json:"appname,omitempty"` - Entrypoint string `protobuf:"bytes,2,opt,name=entrypoint,proto3" json:"entrypoint,omitempty"` - Nodename string `protobuf:"bytes,3,opt,name=nodename,proto3" json:"nodename,omitempty"` - Labels map[string]string `protobuf:"bytes,4,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Limit int64 `protobuf:"varint,5,opt,name=limit,proto3" json:"limit,omitempty"` + Appname string `protobuf:"bytes,1001,opt,name=appname,proto3" json:"appname,omitempty"` + Entrypoint string `protobuf:"bytes,1002,opt,name=entrypoint,proto3" json:"entrypoint,omitempty"` + Nodename string `protobuf:"bytes,1003,opt,name=nodename,proto3" json:"nodename,omitempty"` + Labels map[string]string `protobuf:"bytes,1004,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Limit int64 `protobuf:"varint,1005,opt,name=limit,proto3" json:"limit,omitempty"` } func (x *ListWorkloadsOptions) Reset() { @@ -537,8 +537,8 @@ type Pod struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Desc string `protobuf:"bytes,2,opt,name=desc,proto3" json:"desc,omitempty"` + Name string `protobuf:"bytes,1001,opt,name=name,proto3" json:"name,omitempty"` + Desc string `protobuf:"bytes,1002,opt,name=desc,proto3" json:"desc,omitempty"` } func (x *Pod) Reset() { @@ -592,7 +592,7 @@ type Pods struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Pods []*Pod `protobuf:"bytes,1,rep,name=pods,proto3" json:"pods,omitempty"` + Pods []*Pod `protobuf:"bytes,1001,rep,name=pods,proto3" json:"pods,omitempty"` } func (x *Pods) Reset() { @@ -634,73 +634,18 @@ func (x *Pods) GetPods() []*Pod { return nil } -type PodResource struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - NodesResource []*NodeResource `protobuf:"bytes,2,rep,name=nodes_resource,json=nodesResource,proto3" json:"nodes_resource,omitempty"` -} - -func (x *PodResource) Reset() { - *x = PodResource{} - if protoimpl.UnsafeEnabled { - mi := &file_rpc_gen_core_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PodResource) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PodResource) ProtoMessage() {} - -func (x *PodResource) ProtoReflect() protoreflect.Message { - mi := &file_rpc_gen_core_proto_msgTypes[7] - 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 PodResource.ProtoReflect.Descriptor instead. -func (*PodResource) Descriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{7} -} - -func (x *PodResource) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *PodResource) GetNodesResource() []*NodeResource { - if x != nil { - return x.NodesResource - } - return nil -} - type StringSlice struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Slice []string `protobuf:"bytes,1,rep,name=slice,proto3" json:"slice,omitempty"` + Slice []string `protobuf:"bytes,1001,rep,name=slice,proto3" json:"slice,omitempty"` } func (x *StringSlice) Reset() { *x = StringSlice{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_gen_core_proto_msgTypes[8] + mi := &file_rpc_gen_core_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -713,7 +658,7 @@ func (x *StringSlice) String() string { func (*StringSlice) ProtoMessage() {} func (x *StringSlice) ProtoReflect() protoreflect.Message { - mi := &file_rpc_gen_core_proto_msgTypes[8] + mi := &file_rpc_gen_core_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -726,7 +671,7 @@ func (x *StringSlice) ProtoReflect() protoreflect.Message { // Deprecated: Use StringSlice.ProtoReflect.Descriptor instead. func (*StringSlice) Descriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{8} + return file_rpc_gen_core_proto_rawDescGZIP(), []int{7} } func (x *StringSlice) GetSlice() []string { @@ -750,7 +695,7 @@ type RawParam struct { func (x *RawParam) Reset() { *x = RawParam{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_gen_core_proto_msgTypes[9] + mi := &file_rpc_gen_core_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -763,7 +708,7 @@ func (x *RawParam) String() string { func (*RawParam) ProtoMessage() {} func (x *RawParam) ProtoReflect() protoreflect.Message { - mi := &file_rpc_gen_core_proto_msgTypes[9] + mi := &file_rpc_gen_core_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -776,7 +721,7 @@ func (x *RawParam) ProtoReflect() protoreflect.Message { // Deprecated: Use RawParam.ProtoReflect.Descriptor instead. func (*RawParam) Descriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{9} + return file_rpc_gen_core_proto_rawDescGZIP(), []int{8} } func (m *RawParam) GetValue() isRawParam_Value { @@ -805,11 +750,11 @@ type isRawParam_Value interface { } type RawParam_Str struct { - Str string `protobuf:"bytes,1,opt,name=str,proto3,oneof"` + Str string `protobuf:"bytes,1001,opt,name=str,proto3,oneof"` } type RawParam_StringSlice struct { - StringSlice *StringSlice `protobuf:"bytes,2,opt,name=string_slice,json=stringSlice,proto3,oneof"` + StringSlice *StringSlice `protobuf:"bytes,1002,opt,name=string_slice,json=stringSlice,proto3,oneof"` } func (*RawParam_Str) isRawParam_Value() {} @@ -821,20 +766,16 @@ type NodeResource struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - CpuPercent float64 `protobuf:"fixed64,2,opt,name=cpu_percent,json=cpuPercent,proto3" json:"cpu_percent,omitempty"` - MemoryPercent float64 `protobuf:"fixed64,3,opt,name=memory_percent,json=memoryPercent,proto3" json:"memory_percent,omitempty"` - StoragePercent float64 `protobuf:"fixed64,4,opt,name=storage_percent,json=storagePercent,proto3" json:"storage_percent,omitempty"` - VolumePercent float64 `protobuf:"fixed64,5,opt,name=volume_percent,json=volumePercent,proto3" json:"volume_percent,omitempty"` - Diffs []string `protobuf:"bytes,6,rep,name=diffs,proto3" json:"diffs,omitempty"` - ResourceCapacity string `protobuf:"bytes,7,opt,name=resource_capacity,json=resourceCapacity,proto3" json:"resource_capacity,omitempty"` - ResourceUsage string `protobuf:"bytes,8,opt,name=resource_usage,json=resourceUsage,proto3" json:"resource_usage,omitempty"` + Name string `protobuf:"bytes,1001,opt,name=name,proto3" json:"name,omitempty"` + Diffs []string `protobuf:"bytes,1002,rep,name=diffs,proto3" json:"diffs,omitempty"` + ResourceCapacity string `protobuf:"bytes,1003,opt,name=resource_capacity,json=resourceCapacity,proto3" json:"resource_capacity,omitempty"` + ResourceUsage string `protobuf:"bytes,1004,opt,name=resource_usage,json=resourceUsage,proto3" json:"resource_usage,omitempty"` } func (x *NodeResource) Reset() { *x = NodeResource{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_gen_core_proto_msgTypes[10] + mi := &file_rpc_gen_core_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -847,7 +788,7 @@ func (x *NodeResource) String() string { func (*NodeResource) ProtoMessage() {} func (x *NodeResource) ProtoReflect() protoreflect.Message { - mi := &file_rpc_gen_core_proto_msgTypes[10] + mi := &file_rpc_gen_core_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -860,7 +801,7 @@ func (x *NodeResource) ProtoReflect() protoreflect.Message { // Deprecated: Use NodeResource.ProtoReflect.Descriptor instead. func (*NodeResource) Descriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{10} + return file_rpc_gen_core_proto_rawDescGZIP(), []int{9} } func (x *NodeResource) GetName() string { @@ -870,34 +811,6 @@ func (x *NodeResource) GetName() string { return "" } -func (x *NodeResource) GetCpuPercent() float64 { - if x != nil { - return x.CpuPercent - } - return 0 -} - -func (x *NodeResource) GetMemoryPercent() float64 { - if x != nil { - return x.MemoryPercent - } - return 0 -} - -func (x *NodeResource) GetStoragePercent() float64 { - if x != nil { - return x.StoragePercent - } - return 0 -} - -func (x *NodeResource) GetVolumePercent() float64 { - if x != nil { - return x.VolumePercent - } - return 0 -} - func (x *NodeResource) GetDiffs() []string { if x != nil { return x.Diffs @@ -924,14 +837,14 @@ type ListNetworkOptions struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Podname string `protobuf:"bytes,1,opt,name=podname,proto3" json:"podname,omitempty"` - Driver string `protobuf:"bytes,2,opt,name=driver,proto3" json:"driver,omitempty"` + Podname string `protobuf:"bytes,1001,opt,name=podname,proto3" json:"podname,omitempty"` + Driver string `protobuf:"bytes,1002,opt,name=driver,proto3" json:"driver,omitempty"` } func (x *ListNetworkOptions) Reset() { *x = ListNetworkOptions{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_gen_core_proto_msgTypes[11] + mi := &file_rpc_gen_core_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -944,7 +857,7 @@ func (x *ListNetworkOptions) String() string { func (*ListNetworkOptions) ProtoMessage() {} func (x *ListNetworkOptions) ProtoReflect() protoreflect.Message { - mi := &file_rpc_gen_core_proto_msgTypes[11] + mi := &file_rpc_gen_core_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -957,7 +870,7 @@ func (x *ListNetworkOptions) ProtoReflect() protoreflect.Message { // Deprecated: Use ListNetworkOptions.ProtoReflect.Descriptor instead. func (*ListNetworkOptions) Descriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{11} + return file_rpc_gen_core_proto_rawDescGZIP(), []int{10} } func (x *ListNetworkOptions) GetPodname() string { @@ -979,16 +892,16 @@ type ConnectNetworkOptions struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Network string `protobuf:"bytes,1,opt,name=network,proto3" json:"network,omitempty"` - Target string `protobuf:"bytes,2,opt,name=target,proto3" json:"target,omitempty"` - Ipv4 string `protobuf:"bytes,3,opt,name=ipv4,proto3" json:"ipv4,omitempty"` - Ipv6 string `protobuf:"bytes,4,opt,name=ipv6,proto3" json:"ipv6,omitempty"` + Network string `protobuf:"bytes,1001,opt,name=network,proto3" json:"network,omitempty"` + Target string `protobuf:"bytes,1002,opt,name=target,proto3" json:"target,omitempty"` + Ipv4 string `protobuf:"bytes,1003,opt,name=ipv4,proto3" json:"ipv4,omitempty"` + Ipv6 string `protobuf:"bytes,1004,opt,name=ipv6,proto3" json:"ipv6,omitempty"` } func (x *ConnectNetworkOptions) Reset() { *x = ConnectNetworkOptions{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_gen_core_proto_msgTypes[12] + mi := &file_rpc_gen_core_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1001,7 +914,7 @@ func (x *ConnectNetworkOptions) String() string { func (*ConnectNetworkOptions) ProtoMessage() {} func (x *ConnectNetworkOptions) ProtoReflect() protoreflect.Message { - mi := &file_rpc_gen_core_proto_msgTypes[12] + mi := &file_rpc_gen_core_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1014,7 +927,7 @@ func (x *ConnectNetworkOptions) ProtoReflect() protoreflect.Message { // Deprecated: Use ConnectNetworkOptions.ProtoReflect.Descriptor instead. func (*ConnectNetworkOptions) Descriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{12} + return file_rpc_gen_core_proto_rawDescGZIP(), []int{11} } func (x *ConnectNetworkOptions) GetNetwork() string { @@ -1050,15 +963,15 @@ type DisconnectNetworkOptions struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Network string `protobuf:"bytes,1,opt,name=network,proto3" json:"network,omitempty"` - Target string `protobuf:"bytes,2,opt,name=target,proto3" json:"target,omitempty"` - Force bool `protobuf:"varint,3,opt,name=force,proto3" json:"force,omitempty"` + Network string `protobuf:"bytes,1001,opt,name=network,proto3" json:"network,omitempty"` + Target string `protobuf:"bytes,1002,opt,name=target,proto3" json:"target,omitempty"` + Force bool `protobuf:"varint,1003,opt,name=force,proto3" json:"force,omitempty"` } func (x *DisconnectNetworkOptions) Reset() { *x = DisconnectNetworkOptions{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_gen_core_proto_msgTypes[13] + mi := &file_rpc_gen_core_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1071,7 +984,7 @@ func (x *DisconnectNetworkOptions) String() string { func (*DisconnectNetworkOptions) ProtoMessage() {} func (x *DisconnectNetworkOptions) ProtoReflect() protoreflect.Message { - mi := &file_rpc_gen_core_proto_msgTypes[13] + mi := &file_rpc_gen_core_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1084,7 +997,7 @@ func (x *DisconnectNetworkOptions) ProtoReflect() protoreflect.Message { // Deprecated: Use DisconnectNetworkOptions.ProtoReflect.Descriptor instead. func (*DisconnectNetworkOptions) Descriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{13} + return file_rpc_gen_core_proto_rawDescGZIP(), []int{12} } func (x *DisconnectNetworkOptions) GetNetwork() string { @@ -1113,14 +1026,14 @@ type Network struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Subnets []string `protobuf:"bytes,2,rep,name=subnets,proto3" json:"subnets,omitempty"` + Name string `protobuf:"bytes,1001,opt,name=name,proto3" json:"name,omitempty"` + Subnets []string `protobuf:"bytes,1002,rep,name=subnets,proto3" json:"subnets,omitempty"` } func (x *Network) Reset() { *x = Network{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_gen_core_proto_msgTypes[14] + mi := &file_rpc_gen_core_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1133,7 +1046,7 @@ func (x *Network) String() string { func (*Network) ProtoMessage() {} func (x *Network) ProtoReflect() protoreflect.Message { - mi := &file_rpc_gen_core_proto_msgTypes[14] + mi := &file_rpc_gen_core_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1146,7 +1059,7 @@ func (x *Network) ProtoReflect() protoreflect.Message { // Deprecated: Use Network.ProtoReflect.Descriptor instead. func (*Network) Descriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{14} + return file_rpc_gen_core_proto_rawDescGZIP(), []int{13} } func (x *Network) GetName() string { @@ -1168,13 +1081,13 @@ type Networks struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Networks []*Network `protobuf:"bytes,1,rep,name=networks,proto3" json:"networks,omitempty"` + Networks []*Network `protobuf:"bytes,1001,rep,name=networks,proto3" json:"networks,omitempty"` } func (x *Networks) Reset() { *x = Networks{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_gen_core_proto_msgTypes[15] + mi := &file_rpc_gen_core_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1187,7 +1100,7 @@ func (x *Networks) String() string { func (*Networks) ProtoMessage() {} func (x *Networks) ProtoReflect() protoreflect.Message { - mi := &file_rpc_gen_core_proto_msgTypes[15] + mi := &file_rpc_gen_core_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1200,7 +1113,7 @@ func (x *Networks) ProtoReflect() protoreflect.Message { // Deprecated: Use Networks.ProtoReflect.Descriptor instead. func (*Networks) Descriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{15} + return file_rpc_gen_core_proto_rawDescGZIP(), []int{14} } func (x *Networks) GetNetworks() []*Network { @@ -1215,36 +1128,21 @@ type Node struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Endpoint string `protobuf:"bytes,2,opt,name=endpoint,proto3" json:"endpoint,omitempty"` - Podname string `protobuf:"bytes,3,opt,name=podname,proto3" json:"podname,omitempty"` - Cpu map[string]int32 `protobuf:"bytes,4,rep,name=cpu,proto3" json:"cpu,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` - CpuUsed float64 `protobuf:"fixed64,5,opt,name=cpu_used,json=cpuUsed,proto3" json:"cpu_used,omitempty"` - Memory int64 `protobuf:"varint,6,opt,name=memory,proto3" json:"memory,omitempty"` - MemoryUsed int64 `protobuf:"varint,7,opt,name=memory_used,json=memoryUsed,proto3" json:"memory_used,omitempty"` - Available bool `protobuf:"varint,8,opt,name=available,proto3" json:"available,omitempty"` - Labels map[string]string `protobuf:"bytes,9,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - InitMemory int64 `protobuf:"varint,10,opt,name=init_memory,json=initMemory,proto3" json:"init_memory,omitempty"` - InitCpu map[string]int32 `protobuf:"bytes,11,rep,name=init_cpu,json=initCpu,proto3" json:"init_cpu,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` - Info string `protobuf:"bytes,12,opt,name=info,proto3" json:"info,omitempty"` - Numa map[string]string `protobuf:"bytes,13,rep,name=numa,proto3" json:"numa,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - NumaMemory map[string]int64 `protobuf:"bytes,14,rep,name=numa_memory,json=numaMemory,proto3" json:"numa_memory,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` - Storage int64 `protobuf:"varint,15,opt,name=storage,proto3" json:"storage,omitempty"` - StorageUsed int64 `protobuf:"varint,16,opt,name=storage_used,json=storageUsed,proto3" json:"storage_used,omitempty"` - InitStorage int64 `protobuf:"varint,17,opt,name=init_storage,json=initStorage,proto3" json:"init_storage,omitempty"` - InitVolume map[string]int64 `protobuf:"bytes,18,rep,name=init_volume,json=initVolume,proto3" json:"init_volume,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` - Volume map[string]int64 `protobuf:"bytes,19,rep,name=volume,proto3" json:"volume,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` - VolumeUsed int64 `protobuf:"varint,20,opt,name=volume_used,json=volumeUsed,proto3" json:"volume_used,omitempty"` - InitNumaMemory map[string]int64 `protobuf:"bytes,21,rep,name=init_numa_memory,json=initNumaMemory,proto3" json:"init_numa_memory,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` - Bypass bool `protobuf:"varint,22,opt,name=bypass,proto3" json:"bypass,omitempty"` - ResourceCapacity string `protobuf:"bytes,23,opt,name=resource_capacity,json=resourceCapacity,proto3" json:"resource_capacity,omitempty"` - ResourceUsage string `protobuf:"bytes,24,opt,name=resource_usage,json=resourceUsage,proto3" json:"resource_usage,omitempty"` + Name string `protobuf:"bytes,1001,opt,name=name,proto3" json:"name,omitempty"` + Endpoint string `protobuf:"bytes,1002,opt,name=endpoint,proto3" json:"endpoint,omitempty"` + Podname string `protobuf:"bytes,1003,opt,name=podname,proto3" json:"podname,omitempty"` + Available bool `protobuf:"varint,1004,opt,name=available,proto3" json:"available,omitempty"` + Bypass bool `protobuf:"varint,1005,opt,name=bypass,proto3" json:"bypass,omitempty"` + Labels map[string]string `protobuf:"bytes,1006,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Info string `protobuf:"bytes,1007,opt,name=info,proto3" json:"info,omitempty"` + ResourceCapacity string `protobuf:"bytes,1008,opt,name=resource_capacity,json=resourceCapacity,proto3" json:"resource_capacity,omitempty"` + ResourceUsage string `protobuf:"bytes,1009,opt,name=resource_usage,json=resourceUsage,proto3" json:"resource_usage,omitempty"` } func (x *Node) Reset() { *x = Node{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_gen_core_proto_msgTypes[16] + mi := &file_rpc_gen_core_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1257,7 +1155,7 @@ func (x *Node) String() string { func (*Node) ProtoMessage() {} func (x *Node) ProtoReflect() protoreflect.Message { - mi := &file_rpc_gen_core_proto_msgTypes[16] + mi := &file_rpc_gen_core_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1270,7 +1168,7 @@ func (x *Node) ProtoReflect() protoreflect.Message { // Deprecated: Use Node.ProtoReflect.Descriptor instead. func (*Node) Descriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{16} + return file_rpc_gen_core_proto_rawDescGZIP(), []int{15} } func (x *Node) GetName() string { @@ -1294,34 +1192,6 @@ func (x *Node) GetPodname() string { return "" } -func (x *Node) GetCpu() map[string]int32 { - if x != nil { - return x.Cpu - } - return nil -} - -func (x *Node) GetCpuUsed() float64 { - if x != nil { - return x.CpuUsed - } - return 0 -} - -func (x *Node) GetMemory() int64 { - if x != nil { - return x.Memory - } - return 0 -} - -func (x *Node) GetMemoryUsed() int64 { - if x != nil { - return x.MemoryUsed - } - return 0 -} - func (x *Node) GetAvailable() bool { if x != nil { return x.Available @@ -1329,23 +1199,16 @@ func (x *Node) GetAvailable() bool { return false } -func (x *Node) GetLabels() map[string]string { - if x != nil { - return x.Labels - } - return nil -} - -func (x *Node) GetInitMemory() int64 { +func (x *Node) GetBypass() bool { if x != nil { - return x.InitMemory + return x.Bypass } - return 0 + return false } -func (x *Node) GetInitCpu() map[string]int32 { +func (x *Node) GetLabels() map[string]string { if x != nil { - return x.InitCpu + return x.Labels } return nil } @@ -1357,100 +1220,85 @@ func (x *Node) GetInfo() string { return "" } -func (x *Node) GetNuma() map[string]string { - if x != nil { - return x.Numa - } - return nil -} - -func (x *Node) GetNumaMemory() map[string]int64 { +func (x *Node) GetResourceCapacity() string { if x != nil { - return x.NumaMemory + return x.ResourceCapacity } - return nil + return "" } -func (x *Node) GetStorage() int64 { +func (x *Node) GetResourceUsage() string { if x != nil { - return x.Storage + return x.ResourceUsage } - return 0 + return "" } -func (x *Node) GetStorageUsed() int64 { - if x != nil { - return x.StorageUsed - } - return 0 -} +type AddPodOptions struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (x *Node) GetInitStorage() int64 { - if x != nil { - return x.InitStorage - } - return 0 + Name string `protobuf:"bytes,1001,opt,name=name,proto3" json:"name,omitempty"` + Desc string `protobuf:"bytes,1002,opt,name=desc,proto3" json:"desc,omitempty"` } -func (x *Node) GetInitVolume() map[string]int64 { - if x != nil { - return x.InitVolume +func (x *AddPodOptions) Reset() { + *x = AddPodOptions{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_gen_core_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return nil } -func (x *Node) GetVolume() map[string]int64 { - if x != nil { - return x.Volume - } - return nil +func (x *AddPodOptions) String() string { + return protoimpl.X.MessageStringOf(x) } -func (x *Node) GetVolumeUsed() int64 { - if x != nil { - return x.VolumeUsed - } - return 0 -} +func (*AddPodOptions) ProtoMessage() {} -func (x *Node) GetInitNumaMemory() map[string]int64 { - if x != nil { - return x.InitNumaMemory +func (x *AddPodOptions) ProtoReflect() protoreflect.Message { + mi := &file_rpc_gen_core_proto_msgTypes[16] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (x *Node) GetBypass() bool { - if x != nil { - return x.Bypass - } - return false +// Deprecated: Use AddPodOptions.ProtoReflect.Descriptor instead. +func (*AddPodOptions) Descriptor() ([]byte, []int) { + return file_rpc_gen_core_proto_rawDescGZIP(), []int{16} } -func (x *Node) GetResourceCapacity() string { +func (x *AddPodOptions) GetName() string { if x != nil { - return x.ResourceCapacity + return x.Name } return "" } -func (x *Node) GetResourceUsage() string { +func (x *AddPodOptions) GetDesc() string { if x != nil { - return x.ResourceUsage + return x.Desc } return "" } -type Nodes struct { +type RemovePodOptions struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Nodes []*Node `protobuf:"bytes,1,rep,name=nodes,proto3" json:"nodes,omitempty"` + Name string `protobuf:"bytes,1001,opt,name=name,proto3" json:"name,omitempty"` } -func (x *Nodes) Reset() { - *x = Nodes{} +func (x *RemovePodOptions) Reset() { + *x = RemovePodOptions{} if protoimpl.UnsafeEnabled { mi := &file_rpc_gen_core_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1458,13 +1306,13 @@ func (x *Nodes) Reset() { } } -func (x *Nodes) String() string { +func (x *RemovePodOptions) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Nodes) ProtoMessage() {} +func (*RemovePodOptions) ProtoMessage() {} -func (x *Nodes) ProtoReflect() protoreflect.Message { +func (x *RemovePodOptions) ProtoReflect() protoreflect.Message { mi := &file_rpc_gen_core_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1476,29 +1324,28 @@ func (x *Nodes) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Nodes.ProtoReflect.Descriptor instead. -func (*Nodes) Descriptor() ([]byte, []int) { +// Deprecated: Use RemovePodOptions.ProtoReflect.Descriptor instead. +func (*RemovePodOptions) Descriptor() ([]byte, []int) { return file_rpc_gen_core_proto_rawDescGZIP(), []int{17} } -func (x *Nodes) GetNodes() []*Node { +func (x *RemovePodOptions) GetName() string { if x != nil { - return x.Nodes + return x.Name } - return nil + return "" } -type NodeAvailable struct { +type GetPodOptions struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Nodename string `protobuf:"bytes,1,opt,name=nodename,proto3" json:"nodename,omitempty"` - Podname string `protobuf:"bytes,2,opt,name=podname,proto3" json:"podname,omitempty"` + Name string `protobuf:"bytes,1001,opt,name=name,proto3" json:"name,omitempty"` } -func (x *NodeAvailable) Reset() { - *x = NodeAvailable{} +func (x *GetPodOptions) Reset() { + *x = GetPodOptions{} if protoimpl.UnsafeEnabled { mi := &file_rpc_gen_core_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1506,13 +1353,13 @@ func (x *NodeAvailable) Reset() { } } -func (x *NodeAvailable) String() string { +func (x *GetPodOptions) String() string { return protoimpl.X.MessageStringOf(x) } -func (*NodeAvailable) ProtoMessage() {} +func (*GetPodOptions) ProtoMessage() {} -func (x *NodeAvailable) ProtoReflect() protoreflect.Message { +func (x *GetPodOptions) ProtoReflect() protoreflect.Message { mi := &file_rpc_gen_core_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1524,50 +1371,35 @@ func (x *NodeAvailable) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use NodeAvailable.ProtoReflect.Descriptor instead. -func (*NodeAvailable) Descriptor() ([]byte, []int) { +// Deprecated: Use GetPodOptions.ProtoReflect.Descriptor instead. +func (*GetPodOptions) Descriptor() ([]byte, []int) { return file_rpc_gen_core_proto_rawDescGZIP(), []int{18} } -func (x *NodeAvailable) GetNodename() string { - if x != nil { - return x.Nodename - } - return "" -} - -func (x *NodeAvailable) GetPodname() string { +func (x *GetPodOptions) GetName() string { if x != nil { - return x.Podname + return x.Name } return "" } -type SetNodeOptions struct { +type AddNodeOptions struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Nodename string `protobuf:"bytes,1,opt,name=nodename,proto3" json:"nodename,omitempty"` - DeltaCpu map[string]int32 `protobuf:"bytes,3,rep,name=delta_cpu,json=deltaCpu,proto3" json:"delta_cpu,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` - DeltaMemory int64 `protobuf:"varint,4,opt,name=delta_memory,json=deltaMemory,proto3" json:"delta_memory,omitempty"` - DeltaStorage int64 `protobuf:"varint,5,opt,name=delta_storage,json=deltaStorage,proto3" json:"delta_storage,omitempty"` - DeltaNumaMemory map[string]int64 `protobuf:"bytes,6,rep,name=delta_numa_memory,json=deltaNumaMemory,proto3" json:"delta_numa_memory,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` - Numa map[string]string `protobuf:"bytes,7,rep,name=numa,proto3" json:"numa,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Labels map[string]string `protobuf:"bytes,8,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - DeltaVolume map[string]int64 `protobuf:"bytes,9,rep,name=delta_volume,json=deltaVolume,proto3" json:"delta_volume,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` - WorkloadsDown bool `protobuf:"varint,10,opt,name=workloads_down,json=workloadsDown,proto3" json:"workloads_down,omitempty"` - Endpoint string `protobuf:"bytes,11,opt,name=endpoint,proto3" json:"endpoint,omitempty"` - BypassOpt TriOpt `protobuf:"varint,12,opt,name=bypass_opt,json=bypassOpt,proto3,enum=pb.TriOpt" json:"bypass_opt,omitempty"` - Ca string `protobuf:"bytes,13,opt,name=ca,proto3" json:"ca,omitempty"` - Cert string `protobuf:"bytes,14,opt,name=cert,proto3" json:"cert,omitempty"` - Key string `protobuf:"bytes,15,opt,name=key,proto3" json:"key,omitempty"` - ResourceOpts map[string]*RawParam `protobuf:"bytes,16,rep,name=resource_opts,json=resourceOpts,proto3" json:"resource_opts,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Delta bool `protobuf:"varint,17,opt,name=delta,proto3" json:"delta,omitempty"` + Nodename string `protobuf:"bytes,1001,opt,name=nodename,proto3" json:"nodename,omitempty"` + Endpoint string `protobuf:"bytes,1002,opt,name=endpoint,proto3" json:"endpoint,omitempty"` + Podname string `protobuf:"bytes,1003,opt,name=podname,proto3" json:"podname,omitempty"` + Ca string `protobuf:"bytes,1004,opt,name=ca,proto3" json:"ca,omitempty"` + Cert string `protobuf:"bytes,1005,opt,name=cert,proto3" json:"cert,omitempty"` + Key string `protobuf:"bytes,1006,opt,name=key,proto3" json:"key,omitempty"` + Labels map[string]string `protobuf:"bytes,1007,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + ResourceOpts map[string]*RawParam `protobuf:"bytes,1008,rep,name=resource_opts,json=resourceOpts,proto3" json:"resource_opts,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } -func (x *SetNodeOptions) Reset() { - *x = SetNodeOptions{} +func (x *AddNodeOptions) Reset() { + *x = AddNodeOptions{} if protoimpl.UnsafeEnabled { mi := &file_rpc_gen_core_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1575,13 +1407,13 @@ func (x *SetNodeOptions) Reset() { } } -func (x *SetNodeOptions) String() string { +func (x *AddNodeOptions) String() string { return protoimpl.X.MessageStringOf(x) } -func (*SetNodeOptions) ProtoMessage() {} +func (*AddNodeOptions) ProtoMessage() {} -func (x *SetNodeOptions) ProtoReflect() protoreflect.Message { +func (x *AddNodeOptions) ProtoReflect() protoreflect.Message { mi := &file_rpc_gen_core_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1593,134 +1425,77 @@ func (x *SetNodeOptions) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use SetNodeOptions.ProtoReflect.Descriptor instead. -func (*SetNodeOptions) Descriptor() ([]byte, []int) { +// Deprecated: Use AddNodeOptions.ProtoReflect.Descriptor instead. +func (*AddNodeOptions) Descriptor() ([]byte, []int) { return file_rpc_gen_core_proto_rawDescGZIP(), []int{19} } -func (x *SetNodeOptions) GetNodename() string { +func (x *AddNodeOptions) GetNodename() string { if x != nil { return x.Nodename } return "" } -func (x *SetNodeOptions) GetDeltaCpu() map[string]int32 { - if x != nil { - return x.DeltaCpu - } - return nil -} - -func (x *SetNodeOptions) GetDeltaMemory() int64 { - if x != nil { - return x.DeltaMemory - } - return 0 -} - -func (x *SetNodeOptions) GetDeltaStorage() int64 { - if x != nil { - return x.DeltaStorage - } - return 0 -} - -func (x *SetNodeOptions) GetDeltaNumaMemory() map[string]int64 { - if x != nil { - return x.DeltaNumaMemory - } - return nil -} - -func (x *SetNodeOptions) GetNuma() map[string]string { - if x != nil { - return x.Numa - } - return nil -} - -func (x *SetNodeOptions) GetLabels() map[string]string { - if x != nil { - return x.Labels - } - return nil -} - -func (x *SetNodeOptions) GetDeltaVolume() map[string]int64 { - if x != nil { - return x.DeltaVolume - } - return nil -} - -func (x *SetNodeOptions) GetWorkloadsDown() bool { - if x != nil { - return x.WorkloadsDown - } - return false -} - -func (x *SetNodeOptions) GetEndpoint() string { +func (x *AddNodeOptions) GetEndpoint() string { if x != nil { return x.Endpoint } return "" } -func (x *SetNodeOptions) GetBypassOpt() TriOpt { +func (x *AddNodeOptions) GetPodname() string { if x != nil { - return x.BypassOpt + return x.Podname } - return TriOpt_KEEP + return "" } -func (x *SetNodeOptions) GetCa() string { +func (x *AddNodeOptions) GetCa() string { if x != nil { return x.Ca } return "" } -func (x *SetNodeOptions) GetCert() string { +func (x *AddNodeOptions) GetCert() string { if x != nil { return x.Cert } return "" } -func (x *SetNodeOptions) GetKey() string { +func (x *AddNodeOptions) GetKey() string { if x != nil { return x.Key } return "" } -func (x *SetNodeOptions) GetResourceOpts() map[string]*RawParam { +func (x *AddNodeOptions) GetLabels() map[string]string { if x != nil { - return x.ResourceOpts + return x.Labels } return nil } -func (x *SetNodeOptions) GetDelta() bool { +func (x *AddNodeOptions) GetResourceOpts() map[string]*RawParam { if x != nil { - return x.Delta + return x.ResourceOpts } - return false + return nil } -type SetNodeStatusOptions struct { +type RemoveNodeOptions struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Nodename string `protobuf:"bytes,1,opt,name=nodename,proto3" json:"nodename,omitempty"` - Ttl int64 `protobuf:"varint,2,opt,name=ttl,proto3" json:"ttl,omitempty"` + Nodename string `protobuf:"bytes,1001,opt,name=nodename,proto3" json:"nodename,omitempty"` } -func (x *SetNodeStatusOptions) Reset() { - *x = SetNodeStatusOptions{} +func (x *RemoveNodeOptions) Reset() { + *x = RemoveNodeOptions{} if protoimpl.UnsafeEnabled { mi := &file_rpc_gen_core_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1728,13 +1503,13 @@ func (x *SetNodeStatusOptions) Reset() { } } -func (x *SetNodeStatusOptions) String() string { +func (x *RemoveNodeOptions) String() string { return protoimpl.X.MessageStringOf(x) } -func (*SetNodeStatusOptions) ProtoMessage() {} +func (*RemoveNodeOptions) ProtoMessage() {} -func (x *SetNodeStatusOptions) ProtoReflect() protoreflect.Message { +func (x *RemoveNodeOptions) ProtoReflect() protoreflect.Message { mi := &file_rpc_gen_core_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1746,35 +1521,29 @@ func (x *SetNodeStatusOptions) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use SetNodeStatusOptions.ProtoReflect.Descriptor instead. -func (*SetNodeStatusOptions) Descriptor() ([]byte, []int) { +// Deprecated: Use RemoveNodeOptions.ProtoReflect.Descriptor instead. +func (*RemoveNodeOptions) Descriptor() ([]byte, []int) { return file_rpc_gen_core_proto_rawDescGZIP(), []int{20} } -func (x *SetNodeStatusOptions) GetNodename() string { +func (x *RemoveNodeOptions) GetNodename() string { if x != nil { return x.Nodename } return "" } -func (x *SetNodeStatusOptions) GetTtl() int64 { - if x != nil { - return x.Ttl - } - return 0 -} - -type GetNodeStatusOptions struct { +type GetNodeOptions struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Nodename string `protobuf:"bytes,1,opt,name=nodename,proto3" json:"nodename,omitempty"` + Nodename string `protobuf:"bytes,1001,opt,name=nodename,proto3" json:"nodename,omitempty"` + Labels map[string]string `protobuf:"bytes,1002,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } -func (x *GetNodeStatusOptions) Reset() { - *x = GetNodeStatusOptions{} +func (x *GetNodeOptions) Reset() { + *x = GetNodeOptions{} if protoimpl.UnsafeEnabled { mi := &file_rpc_gen_core_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1782,13 +1551,13 @@ func (x *GetNodeStatusOptions) Reset() { } } -func (x *GetNodeStatusOptions) String() string { +func (x *GetNodeOptions) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetNodeStatusOptions) ProtoMessage() {} +func (*GetNodeOptions) ProtoMessage() {} -func (x *GetNodeStatusOptions) ProtoReflect() protoreflect.Message { +func (x *GetNodeOptions) ProtoReflect() protoreflect.Message { mi := &file_rpc_gen_core_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1800,31 +1569,36 @@ func (x *GetNodeStatusOptions) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetNodeStatusOptions.ProtoReflect.Descriptor instead. -func (*GetNodeStatusOptions) Descriptor() ([]byte, []int) { +// Deprecated: Use GetNodeOptions.ProtoReflect.Descriptor instead. +func (*GetNodeOptions) Descriptor() ([]byte, []int) { return file_rpc_gen_core_proto_rawDescGZIP(), []int{21} } -func (x *GetNodeStatusOptions) GetNodename() string { +func (x *GetNodeOptions) GetNodename() string { if x != nil { return x.Nodename } return "" } -type NodeStatusStreamMessage struct { +func (x *GetNodeOptions) GetLabels() map[string]string { + if x != nil { + return x.Labels + } + return nil +} + +type GetNodeResourceOptions struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Nodename string `protobuf:"bytes,1,opt,name=nodename,proto3" json:"nodename,omitempty"` - Podname string `protobuf:"bytes,2,opt,name=podname,proto3" json:"podname,omitempty"` - Alive bool `protobuf:"varint,3,opt,name=alive,proto3" json:"alive,omitempty"` - Error string `protobuf:"bytes,4,opt,name=error,proto3" json:"error,omitempty"` + Opts *GetNodeOptions `protobuf:"bytes,1001,opt,name=opts,proto3" json:"opts,omitempty"` + Fix bool `protobuf:"varint,1002,opt,name=fix,proto3" json:"fix,omitempty"` } -func (x *NodeStatusStreamMessage) Reset() { - *x = NodeStatusStreamMessage{} +func (x *GetNodeResourceOptions) Reset() { + *x = GetNodeResourceOptions{} if protoimpl.UnsafeEnabled { mi := &file_rpc_gen_core_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1832,13 +1606,13 @@ func (x *NodeStatusStreamMessage) Reset() { } } -func (x *NodeStatusStreamMessage) String() string { +func (x *GetNodeResourceOptions) String() string { return protoimpl.X.MessageStringOf(x) } -func (*NodeStatusStreamMessage) ProtoMessage() {} +func (*GetNodeResourceOptions) ProtoMessage() {} -func (x *NodeStatusStreamMessage) ProtoReflect() protoreflect.Message { +func (x *GetNodeResourceOptions) ProtoReflect() protoreflect.Message { mi := &file_rpc_gen_core_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1850,52 +1624,39 @@ func (x *NodeStatusStreamMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use NodeStatusStreamMessage.ProtoReflect.Descriptor instead. -func (*NodeStatusStreamMessage) Descriptor() ([]byte, []int) { +// Deprecated: Use GetNodeResourceOptions.ProtoReflect.Descriptor instead. +func (*GetNodeResourceOptions) Descriptor() ([]byte, []int) { return file_rpc_gen_core_proto_rawDescGZIP(), []int{22} } -func (x *NodeStatusStreamMessage) GetNodename() string { - if x != nil { - return x.Nodename - } - return "" -} - -func (x *NodeStatusStreamMessage) GetPodname() string { +func (x *GetNodeResourceOptions) GetOpts() *GetNodeOptions { if x != nil { - return x.Podname + return x.Opts } - return "" + return nil } -func (x *NodeStatusStreamMessage) GetAlive() bool { +func (x *GetNodeResourceOptions) GetFix() bool { if x != nil { - return x.Alive + return x.Fix } return false } -func (x *NodeStatusStreamMessage) GetError() string { - if x != nil { - return x.Error - } - return "" -} - -type NodeFilter struct { +type ListNodesOptions struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Includes []string `protobuf:"bytes,1,rep,name=includes,proto3" json:"includes,omitempty"` - Excludes []string `protobuf:"bytes,2,rep,name=excludes,proto3" json:"excludes,omitempty"` - Labels map[string]string `protobuf:"bytes,3,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - All bool `protobuf:"varint,4,opt,name=all,proto3" json:"all,omitempty"` + Podname string `protobuf:"bytes,1001,opt,name=podname,proto3" json:"podname,omitempty"` + All bool `protobuf:"varint,1002,opt,name=all,proto3" json:"all,omitempty"` + Labels map[string]string `protobuf:"bytes,1003,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + TimeoutInSecond int32 `protobuf:"varint,1004,opt,name=timeout_in_second,json=timeoutInSecond,proto3" json:"timeout_in_second,omitempty"` + SkipInfo bool `protobuf:"varint,1005,opt,name=skip_info,json=skipInfo,proto3" json:"skip_info,omitempty"` } -func (x *NodeFilter) Reset() { - *x = NodeFilter{} +func (x *ListNodesOptions) Reset() { + *x = ListNodesOptions{} if protoimpl.UnsafeEnabled { mi := &file_rpc_gen_core_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1903,13 +1664,13 @@ func (x *NodeFilter) Reset() { } } -func (x *NodeFilter) String() string { +func (x *ListNodesOptions) String() string { return protoimpl.X.MessageStringOf(x) } -func (*NodeFilter) ProtoMessage() {} +func (*ListNodesOptions) ProtoMessage() {} -func (x *NodeFilter) ProtoReflect() protoreflect.Message { +func (x *ListNodesOptions) ProtoReflect() protoreflect.Message { mi := &file_rpc_gen_core_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1921,61 +1682,65 @@ func (x *NodeFilter) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use NodeFilter.ProtoReflect.Descriptor instead. -func (*NodeFilter) Descriptor() ([]byte, []int) { +// Deprecated: Use ListNodesOptions.ProtoReflect.Descriptor instead. +func (*ListNodesOptions) Descriptor() ([]byte, []int) { return file_rpc_gen_core_proto_rawDescGZIP(), []int{23} } -func (x *NodeFilter) GetIncludes() []string { +func (x *ListNodesOptions) GetPodname() string { if x != nil { - return x.Includes + return x.Podname } - return nil + return "" } -func (x *NodeFilter) GetExcludes() []string { +func (x *ListNodesOptions) GetAll() bool { if x != nil { - return x.Excludes + return x.All } - return nil + return false } -func (x *NodeFilter) GetLabels() map[string]string { +func (x *ListNodesOptions) GetLabels() map[string]string { if x != nil { return x.Labels } return nil } -func (x *NodeFilter) GetAll() bool { +func (x *ListNodesOptions) GetTimeoutInSecond() int32 { if x != nil { - return x.All + return x.TimeoutInSecond + } + return 0 +} + +func (x *ListNodesOptions) GetSkipInfo() bool { + if x != nil { + return x.SkipInfo } return false } -type Workload struct { +type SetNodeOptions struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Podname string `protobuf:"bytes,2,opt,name=podname,proto3" json:"podname,omitempty"` - Nodename string `protobuf:"bytes,3,opt,name=nodename,proto3" json:"nodename,omitempty"` - Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` - Privileged bool `protobuf:"varint,5,opt,name=privileged,proto3" json:"privileged,omitempty"` - Labels map[string]string `protobuf:"bytes,6,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Publish map[string]string `protobuf:"bytes,7,rep,name=publish,proto3" json:"publish,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Image string `protobuf:"bytes,8,opt,name=image,proto3" json:"image,omitempty"` - Status *WorkloadStatus `protobuf:"bytes,9,opt,name=status,proto3" json:"status,omitempty"` - // Resource resource = 10; - CreateTime int64 `protobuf:"varint,11,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"` - Env []string `protobuf:"bytes,12,rep,name=env,proto3" json:"env,omitempty"` - ResourceArgs string `protobuf:"bytes,13,opt,name=resource_args,json=resourceArgs,proto3" json:"resource_args,omitempty"` + Nodename string `protobuf:"bytes,1001,opt,name=nodename,proto3" json:"nodename,omitempty"` + Endpoint string `protobuf:"bytes,1002,opt,name=endpoint,proto3" json:"endpoint,omitempty"` + Ca string `protobuf:"bytes,1003,opt,name=ca,proto3" json:"ca,omitempty"` + Cert string `protobuf:"bytes,1004,opt,name=cert,proto3" json:"cert,omitempty"` + Key string `protobuf:"bytes,1005,opt,name=key,proto3" json:"key,omitempty"` + Labels map[string]string `protobuf:"bytes,1006,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + ResourceOpts map[string]*RawParam `protobuf:"bytes,1007,rep,name=resource_opts,json=resourceOpts,proto3" json:"resource_opts,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Delta bool `protobuf:"varint,1008,opt,name=delta,proto3" json:"delta,omitempty"` + WorkloadsDown bool `protobuf:"varint,1009,opt,name=workloads_down,json=workloadsDown,proto3" json:"workloads_down,omitempty"` + Bypass TriOpt `protobuf:"varint,1010,opt,name=bypass,proto3,enum=pb.TriOpt" json:"bypass,omitempty"` } -func (x *Workload) Reset() { - *x = Workload{} +func (x *SetNodeOptions) Reset() { + *x = SetNodeOptions{} if protoimpl.UnsafeEnabled { mi := &file_rpc_gen_core_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1983,13 +1748,13 @@ func (x *Workload) Reset() { } } -func (x *Workload) String() string { +func (x *SetNodeOptions) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Workload) ProtoMessage() {} +func (*SetNodeOptions) ProtoMessage() {} -func (x *Workload) ProtoReflect() protoreflect.Message { +func (x *SetNodeOptions) ProtoReflect() protoreflect.Message { mi := &file_rpc_gen_core_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2001,114 +1766,92 @@ func (x *Workload) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Workload.ProtoReflect.Descriptor instead. -func (*Workload) Descriptor() ([]byte, []int) { +// Deprecated: Use SetNodeOptions.ProtoReflect.Descriptor instead. +func (*SetNodeOptions) Descriptor() ([]byte, []int) { return file_rpc_gen_core_proto_rawDescGZIP(), []int{24} } -func (x *Workload) GetId() string { +func (x *SetNodeOptions) GetNodename() string { if x != nil { - return x.Id + return x.Nodename } return "" } -func (x *Workload) GetPodname() string { +func (x *SetNodeOptions) GetEndpoint() string { if x != nil { - return x.Podname + return x.Endpoint } return "" } -func (x *Workload) GetNodename() string { +func (x *SetNodeOptions) GetCa() string { if x != nil { - return x.Nodename + return x.Ca } return "" } -func (x *Workload) GetName() string { +func (x *SetNodeOptions) GetCert() string { if x != nil { - return x.Name + return x.Cert } return "" } -func (x *Workload) GetPrivileged() bool { +func (x *SetNodeOptions) GetKey() string { if x != nil { - return x.Privileged + return x.Key } - return false + return "" } -func (x *Workload) GetLabels() map[string]string { +func (x *SetNodeOptions) GetLabels() map[string]string { if x != nil { return x.Labels } return nil } -func (x *Workload) GetPublish() map[string]string { - if x != nil { - return x.Publish - } - return nil -} - -func (x *Workload) GetImage() string { - if x != nil { - return x.Image - } - return "" -} - -func (x *Workload) GetStatus() *WorkloadStatus { +func (x *SetNodeOptions) GetResourceOpts() map[string]*RawParam { if x != nil { - return x.Status + return x.ResourceOpts } return nil } -func (x *Workload) GetCreateTime() int64 { +func (x *SetNodeOptions) GetDelta() bool { if x != nil { - return x.CreateTime + return x.Delta } - return 0 + return false } -func (x *Workload) GetEnv() []string { +func (x *SetNodeOptions) GetWorkloadsDown() bool { if x != nil { - return x.Env + return x.WorkloadsDown } - return nil + return false } -func (x *Workload) GetResourceArgs() string { +func (x *SetNodeOptions) GetBypass() TriOpt { if x != nil { - return x.ResourceArgs + return x.Bypass } - return "" + return TriOpt_KEEP } -type WorkloadStatus struct { +type SetNodeStatusOptions struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Running bool `protobuf:"varint,2,opt,name=running,proto3" json:"running,omitempty"` - Healthy bool `protobuf:"varint,3,opt,name=healthy,proto3" json:"healthy,omitempty"` - Networks map[string]string `protobuf:"bytes,4,rep,name=networks,proto3" json:"networks,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Extension []byte `protobuf:"bytes,5,opt,name=extension,proto3" json:"extension,omitempty"` - Ttl int64 `protobuf:"varint,6,opt,name=ttl,proto3" json:"ttl,omitempty"` - // extra fields used to set workload status - Appname string `protobuf:"bytes,7,opt,name=appname,proto3" json:"appname,omitempty"` - Nodename string `protobuf:"bytes,8,opt,name=nodename,proto3" json:"nodename,omitempty"` - Entrypoint string `protobuf:"bytes,9,opt,name=entrypoint,proto3" json:"entrypoint,omitempty"` + Nodename string `protobuf:"bytes,1001,opt,name=nodename,proto3" json:"nodename,omitempty"` + Ttl int64 `protobuf:"varint,1002,opt,name=ttl,proto3" json:"ttl,omitempty"` } -func (x *WorkloadStatus) Reset() { - *x = WorkloadStatus{} +func (x *SetNodeStatusOptions) Reset() { + *x = SetNodeStatusOptions{} if protoimpl.UnsafeEnabled { mi := &file_rpc_gen_core_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2116,13 +1859,13 @@ func (x *WorkloadStatus) Reset() { } } -func (x *WorkloadStatus) String() string { +func (x *SetNodeStatusOptions) String() string { return protoimpl.X.MessageStringOf(x) } -func (*WorkloadStatus) ProtoMessage() {} +func (*SetNodeStatusOptions) ProtoMessage() {} -func (x *WorkloadStatus) ProtoReflect() protoreflect.Message { +func (x *SetNodeStatusOptions) ProtoReflect() protoreflect.Message { mi := &file_rpc_gen_core_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2134,84 +1877,35 @@ func (x *WorkloadStatus) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use WorkloadStatus.ProtoReflect.Descriptor instead. -func (*WorkloadStatus) Descriptor() ([]byte, []int) { +// Deprecated: Use SetNodeStatusOptions.ProtoReflect.Descriptor instead. +func (*SetNodeStatusOptions) Descriptor() ([]byte, []int) { return file_rpc_gen_core_proto_rawDescGZIP(), []int{25} } -func (x *WorkloadStatus) GetId() string { +func (x *SetNodeStatusOptions) GetNodename() string { if x != nil { - return x.Id + return x.Nodename } return "" } -func (x *WorkloadStatus) GetRunning() bool { - if x != nil { - return x.Running - } - return false -} - -func (x *WorkloadStatus) GetHealthy() bool { - if x != nil { - return x.Healthy - } - return false -} - -func (x *WorkloadStatus) GetNetworks() map[string]string { - if x != nil { - return x.Networks - } - return nil -} - -func (x *WorkloadStatus) GetExtension() []byte { - if x != nil { - return x.Extension - } - return nil -} - -func (x *WorkloadStatus) GetTtl() int64 { +func (x *SetNodeStatusOptions) GetTtl() int64 { if x != nil { return x.Ttl } return 0 } -func (x *WorkloadStatus) GetAppname() string { - if x != nil { - return x.Appname - } - return "" -} - -func (x *WorkloadStatus) GetNodename() string { - if x != nil { - return x.Nodename - } - return "" -} - -func (x *WorkloadStatus) GetEntrypoint() string { - if x != nil { - return x.Entrypoint - } - return "" -} - -type WorkloadsStatus struct { +type GetNodeStatusOptions struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Status []*WorkloadStatus `protobuf:"bytes,1,rep,name=status,proto3" json:"status,omitempty"` + Nodename string `protobuf:"bytes,1001,opt,name=nodename,proto3" json:"nodename,omitempty"` } -func (x *WorkloadsStatus) Reset() { - *x = WorkloadsStatus{} +func (x *GetNodeStatusOptions) Reset() { + *x = GetNodeStatusOptions{} if protoimpl.UnsafeEnabled { mi := &file_rpc_gen_core_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2219,13 +1913,13 @@ func (x *WorkloadsStatus) Reset() { } } -func (x *WorkloadsStatus) String() string { +func (x *GetNodeStatusOptions) String() string { return protoimpl.X.MessageStringOf(x) } -func (*WorkloadsStatus) ProtoMessage() {} +func (*GetNodeStatusOptions) ProtoMessage() {} -func (x *WorkloadsStatus) ProtoReflect() protoreflect.Message { +func (x *GetNodeStatusOptions) ProtoReflect() protoreflect.Message { mi := &file_rpc_gen_core_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2237,28 +1931,31 @@ func (x *WorkloadsStatus) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use WorkloadsStatus.ProtoReflect.Descriptor instead. -func (*WorkloadsStatus) Descriptor() ([]byte, []int) { +// Deprecated: Use GetNodeStatusOptions.ProtoReflect.Descriptor instead. +func (*GetNodeStatusOptions) Descriptor() ([]byte, []int) { return file_rpc_gen_core_proto_rawDescGZIP(), []int{26} } -func (x *WorkloadsStatus) GetStatus() []*WorkloadStatus { +func (x *GetNodeStatusOptions) GetNodename() string { if x != nil { - return x.Status + return x.Nodename } - return nil + return "" } -type SetWorkloadsStatusOptions struct { +type NodeStatusStreamMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Status []*WorkloadStatus `protobuf:"bytes,1,rep,name=status,proto3" json:"status,omitempty"` + Nodename string `protobuf:"bytes,1001,opt,name=nodename,proto3" json:"nodename,omitempty"` + Podname string `protobuf:"bytes,1002,opt,name=podname,proto3" json:"podname,omitempty"` + Alive bool `protobuf:"varint,1003,opt,name=alive,proto3" json:"alive,omitempty"` + Error string `protobuf:"bytes,1004,opt,name=error,proto3" json:"error,omitempty"` } -func (x *SetWorkloadsStatusOptions) Reset() { - *x = SetWorkloadsStatusOptions{} +func (x *NodeStatusStreamMessage) Reset() { + *x = NodeStatusStreamMessage{} if protoimpl.UnsafeEnabled { mi := &file_rpc_gen_core_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2266,13 +1963,13 @@ func (x *SetWorkloadsStatusOptions) Reset() { } } -func (x *SetWorkloadsStatusOptions) String() string { +func (x *NodeStatusStreamMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*SetWorkloadsStatusOptions) ProtoMessage() {} +func (*NodeStatusStreamMessage) ProtoMessage() {} -func (x *SetWorkloadsStatusOptions) ProtoReflect() protoreflect.Message { +func (x *NodeStatusStreamMessage) ProtoReflect() protoreflect.Message { mi := &file_rpc_gen_core_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2284,31 +1981,52 @@ func (x *SetWorkloadsStatusOptions) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use SetWorkloadsStatusOptions.ProtoReflect.Descriptor instead. -func (*SetWorkloadsStatusOptions) Descriptor() ([]byte, []int) { +// Deprecated: Use NodeStatusStreamMessage.ProtoReflect.Descriptor instead. +func (*NodeStatusStreamMessage) Descriptor() ([]byte, []int) { return file_rpc_gen_core_proto_rawDescGZIP(), []int{27} } -func (x *SetWorkloadsStatusOptions) GetStatus() []*WorkloadStatus { +func (x *NodeStatusStreamMessage) GetNodename() string { if x != nil { - return x.Status + return x.Nodename } - return nil + return "" } -type WorkloadStatusStreamOptions struct { +func (x *NodeStatusStreamMessage) GetPodname() string { + if x != nil { + return x.Podname + } + return "" +} + +func (x *NodeStatusStreamMessage) GetAlive() bool { + if x != nil { + return x.Alive + } + return false +} + +func (x *NodeStatusStreamMessage) GetError() string { + if x != nil { + return x.Error + } + return "" +} + +type NodeFilter struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Appname string `protobuf:"bytes,1,opt,name=appname,proto3" json:"appname,omitempty"` - Entrypoint string `protobuf:"bytes,2,opt,name=entrypoint,proto3" json:"entrypoint,omitempty"` - Nodename string `protobuf:"bytes,3,opt,name=nodename,proto3" json:"nodename,omitempty"` - Labels map[string]string `protobuf:"bytes,4,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Includes []string `protobuf:"bytes,1001,rep,name=includes,proto3" json:"includes,omitempty"` + Excludes []string `protobuf:"bytes,1002,rep,name=excludes,proto3" json:"excludes,omitempty"` + Labels map[string]string `protobuf:"bytes,1003,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + All bool `protobuf:"varint,1004,opt,name=all,proto3" json:"all,omitempty"` } -func (x *WorkloadStatusStreamOptions) Reset() { - *x = WorkloadStatusStreamOptions{} +func (x *NodeFilter) Reset() { + *x = NodeFilter{} if protoimpl.UnsafeEnabled { mi := &file_rpc_gen_core_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2316,13 +2034,13 @@ func (x *WorkloadStatusStreamOptions) Reset() { } } -func (x *WorkloadStatusStreamOptions) String() string { +func (x *NodeFilter) String() string { return protoimpl.X.MessageStringOf(x) } -func (*WorkloadStatusStreamOptions) ProtoMessage() {} +func (*NodeFilter) ProtoMessage() {} -func (x *WorkloadStatusStreamOptions) ProtoReflect() protoreflect.Message { +func (x *NodeFilter) ProtoReflect() protoreflect.Message { mi := &file_rpc_gen_core_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2334,53 +2052,61 @@ func (x *WorkloadStatusStreamOptions) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use WorkloadStatusStreamOptions.ProtoReflect.Descriptor instead. -func (*WorkloadStatusStreamOptions) Descriptor() ([]byte, []int) { +// Deprecated: Use NodeFilter.ProtoReflect.Descriptor instead. +func (*NodeFilter) Descriptor() ([]byte, []int) { return file_rpc_gen_core_proto_rawDescGZIP(), []int{28} } -func (x *WorkloadStatusStreamOptions) GetAppname() string { +func (x *NodeFilter) GetIncludes() []string { if x != nil { - return x.Appname + return x.Includes } - return "" + return nil } -func (x *WorkloadStatusStreamOptions) GetEntrypoint() string { +func (x *NodeFilter) GetExcludes() []string { if x != nil { - return x.Entrypoint + return x.Excludes } - return "" + return nil } -func (x *WorkloadStatusStreamOptions) GetNodename() string { +func (x *NodeFilter) GetLabels() map[string]string { if x != nil { - return x.Nodename + return x.Labels } - return "" + return nil } -func (x *WorkloadStatusStreamOptions) GetLabels() map[string]string { +func (x *NodeFilter) GetAll() bool { if x != nil { - return x.Labels + return x.All } - return nil + return false } -type WorkloadStatusStreamMessage struct { +type Workload struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Workload *Workload `protobuf:"bytes,2,opt,name=workload,proto3" json:"workload,omitempty"` - Status *WorkloadStatus `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` - Error string `protobuf:"bytes,4,opt,name=error,proto3" json:"error,omitempty"` - Delete bool `protobuf:"varint,5,opt,name=delete,proto3" json:"delete,omitempty"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Podname string `protobuf:"bytes,2,opt,name=podname,proto3" json:"podname,omitempty"` + Nodename string `protobuf:"bytes,3,opt,name=nodename,proto3" json:"nodename,omitempty"` + Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` + Privileged bool `protobuf:"varint,5,opt,name=privileged,proto3" json:"privileged,omitempty"` + Labels map[string]string `protobuf:"bytes,6,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Publish map[string]string `protobuf:"bytes,7,rep,name=publish,proto3" json:"publish,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Image string `protobuf:"bytes,8,opt,name=image,proto3" json:"image,omitempty"` + Status *WorkloadStatus `protobuf:"bytes,9,opt,name=status,proto3" json:"status,omitempty"` + // Resource resource = 10; + CreateTime int64 `protobuf:"varint,11,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"` + Env []string `protobuf:"bytes,12,rep,name=env,proto3" json:"env,omitempty"` + ResourceArgs string `protobuf:"bytes,13,opt,name=resource_args,json=resourceArgs,proto3" json:"resource_args,omitempty"` } -func (x *WorkloadStatusStreamMessage) Reset() { - *x = WorkloadStatusStreamMessage{} +func (x *Workload) Reset() { + *x = Workload{} if protoimpl.UnsafeEnabled { mi := &file_rpc_gen_core_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2388,13 +2114,13 @@ func (x *WorkloadStatusStreamMessage) Reset() { } } -func (x *WorkloadStatusStreamMessage) String() string { +func (x *Workload) String() string { return protoimpl.X.MessageStringOf(x) } -func (*WorkloadStatusStreamMessage) ProtoMessage() {} +func (*Workload) ProtoMessage() {} -func (x *WorkloadStatusStreamMessage) ProtoReflect() protoreflect.Message { +func (x *Workload) ProtoReflect() protoreflect.Message { mi := &file_rpc_gen_core_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2406,56 +2132,114 @@ func (x *WorkloadStatusStreamMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use WorkloadStatusStreamMessage.ProtoReflect.Descriptor instead. -func (*WorkloadStatusStreamMessage) Descriptor() ([]byte, []int) { +// Deprecated: Use Workload.ProtoReflect.Descriptor instead. +func (*Workload) Descriptor() ([]byte, []int) { return file_rpc_gen_core_proto_rawDescGZIP(), []int{29} } -func (x *WorkloadStatusStreamMessage) GetId() string { +func (x *Workload) GetId() string { if x != nil { return x.Id } return "" } -func (x *WorkloadStatusStreamMessage) GetWorkload() *Workload { +func (x *Workload) GetPodname() string { if x != nil { - return x.Workload + return x.Podname + } + return "" +} + +func (x *Workload) GetNodename() string { + if x != nil { + return x.Nodename + } + return "" +} + +func (x *Workload) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Workload) GetPrivileged() bool { + if x != nil { + return x.Privileged + } + return false +} + +func (x *Workload) GetLabels() map[string]string { + if x != nil { + return x.Labels } return nil } -func (x *WorkloadStatusStreamMessage) GetStatus() *WorkloadStatus { +func (x *Workload) GetPublish() map[string]string { if x != nil { - return x.Status + return x.Publish } return nil } -func (x *WorkloadStatusStreamMessage) GetError() string { +func (x *Workload) GetImage() string { if x != nil { - return x.Error + return x.Image } return "" } -func (x *WorkloadStatusStreamMessage) GetDelete() bool { +func (x *Workload) GetStatus() *WorkloadStatus { if x != nil { - return x.Delete + return x.Status } - return false + return nil } -type Workloads struct { +func (x *Workload) GetCreateTime() int64 { + if x != nil { + return x.CreateTime + } + return 0 +} + +func (x *Workload) GetEnv() []string { + if x != nil { + return x.Env + } + return nil +} + +func (x *Workload) GetResourceArgs() string { + if x != nil { + return x.ResourceArgs + } + return "" +} + +type WorkloadStatus struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Workloads []*Workload `protobuf:"bytes,1,rep,name=workloads,proto3" json:"workloads,omitempty"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Running bool `protobuf:"varint,2,opt,name=running,proto3" json:"running,omitempty"` + Healthy bool `protobuf:"varint,3,opt,name=healthy,proto3" json:"healthy,omitempty"` + Networks map[string]string `protobuf:"bytes,4,rep,name=networks,proto3" json:"networks,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Extension []byte `protobuf:"bytes,5,opt,name=extension,proto3" json:"extension,omitempty"` + Ttl int64 `protobuf:"varint,6,opt,name=ttl,proto3" json:"ttl,omitempty"` + // extra fields used to set workload status + Appname string `protobuf:"bytes,7,opt,name=appname,proto3" json:"appname,omitempty"` + Nodename string `protobuf:"bytes,8,opt,name=nodename,proto3" json:"nodename,omitempty"` + Entrypoint string `protobuf:"bytes,9,opt,name=entrypoint,proto3" json:"entrypoint,omitempty"` } -func (x *Workloads) Reset() { - *x = Workloads{} +func (x *WorkloadStatus) Reset() { + *x = WorkloadStatus{} if protoimpl.UnsafeEnabled { mi := &file_rpc_gen_core_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2463,13 +2247,13 @@ func (x *Workloads) Reset() { } } -func (x *Workloads) String() string { +func (x *WorkloadStatus) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Workloads) ProtoMessage() {} +func (*WorkloadStatus) ProtoMessage() {} -func (x *Workloads) ProtoReflect() protoreflect.Message { +func (x *WorkloadStatus) ProtoReflect() protoreflect.Message { mi := &file_rpc_gen_core_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2481,28 +2265,84 @@ func (x *Workloads) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Workloads.ProtoReflect.Descriptor instead. -func (*Workloads) Descriptor() ([]byte, []int) { +// Deprecated: Use WorkloadStatus.ProtoReflect.Descriptor instead. +func (*WorkloadStatus) Descriptor() ([]byte, []int) { return file_rpc_gen_core_proto_rawDescGZIP(), []int{30} } -func (x *Workloads) GetWorkloads() []*Workload { +func (x *WorkloadStatus) GetId() string { if x != nil { - return x.Workloads + return x.Id + } + return "" +} + +func (x *WorkloadStatus) GetRunning() bool { + if x != nil { + return x.Running + } + return false +} + +func (x *WorkloadStatus) GetHealthy() bool { + if x != nil { + return x.Healthy + } + return false +} + +func (x *WorkloadStatus) GetNetworks() map[string]string { + if x != nil { + return x.Networks } return nil } -type WorkloadID struct { +func (x *WorkloadStatus) GetExtension() []byte { + if x != nil { + return x.Extension + } + return nil +} + +func (x *WorkloadStatus) GetTtl() int64 { + if x != nil { + return x.Ttl + } + return 0 +} + +func (x *WorkloadStatus) GetAppname() string { + if x != nil { + return x.Appname + } + return "" +} + +func (x *WorkloadStatus) GetNodename() string { + if x != nil { + return x.Nodename + } + return "" +} + +func (x *WorkloadStatus) GetEntrypoint() string { + if x != nil { + return x.Entrypoint + } + return "" +} + +type WorkloadsStatus struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Status []*WorkloadStatus `protobuf:"bytes,1,rep,name=status,proto3" json:"status,omitempty"` } -func (x *WorkloadID) Reset() { - *x = WorkloadID{} +func (x *WorkloadsStatus) Reset() { + *x = WorkloadsStatus{} if protoimpl.UnsafeEnabled { mi := &file_rpc_gen_core_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2510,13 +2350,13 @@ func (x *WorkloadID) Reset() { } } -func (x *WorkloadID) String() string { +func (x *WorkloadsStatus) String() string { return protoimpl.X.MessageStringOf(x) } -func (*WorkloadID) ProtoMessage() {} +func (*WorkloadsStatus) ProtoMessage() {} -func (x *WorkloadID) ProtoReflect() protoreflect.Message { +func (x *WorkloadsStatus) ProtoReflect() protoreflect.Message { mi := &file_rpc_gen_core_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2528,28 +2368,28 @@ func (x *WorkloadID) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use WorkloadID.ProtoReflect.Descriptor instead. -func (*WorkloadID) Descriptor() ([]byte, []int) { +// Deprecated: Use WorkloadsStatus.ProtoReflect.Descriptor instead. +func (*WorkloadsStatus) Descriptor() ([]byte, []int) { return file_rpc_gen_core_proto_rawDescGZIP(), []int{31} } -func (x *WorkloadID) GetId() string { +func (x *WorkloadsStatus) GetStatus() []*WorkloadStatus { if x != nil { - return x.Id + return x.Status } - return "" + return nil } -type WorkloadIDs struct { +type SetWorkloadsStatusOptions struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Ids []string `protobuf:"bytes,1,rep,name=ids,proto3" json:"ids,omitempty"` + Status []*WorkloadStatus `protobuf:"bytes,1,rep,name=status,proto3" json:"status,omitempty"` } -func (x *WorkloadIDs) Reset() { - *x = WorkloadIDs{} +func (x *SetWorkloadsStatusOptions) Reset() { + *x = SetWorkloadsStatusOptions{} if protoimpl.UnsafeEnabled { mi := &file_rpc_gen_core_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2557,13 +2397,13 @@ func (x *WorkloadIDs) Reset() { } } -func (x *WorkloadIDs) String() string { +func (x *SetWorkloadsStatusOptions) String() string { return protoimpl.X.MessageStringOf(x) } -func (*WorkloadIDs) ProtoMessage() {} +func (*SetWorkloadsStatusOptions) ProtoMessage() {} -func (x *WorkloadIDs) ProtoReflect() protoreflect.Message { +func (x *SetWorkloadsStatusOptions) ProtoReflect() protoreflect.Message { mi := &file_rpc_gen_core_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2575,29 +2415,31 @@ func (x *WorkloadIDs) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use WorkloadIDs.ProtoReflect.Descriptor instead. -func (*WorkloadIDs) Descriptor() ([]byte, []int) { +// Deprecated: Use SetWorkloadsStatusOptions.ProtoReflect.Descriptor instead. +func (*SetWorkloadsStatusOptions) Descriptor() ([]byte, []int) { return file_rpc_gen_core_proto_rawDescGZIP(), []int{32} } -func (x *WorkloadIDs) GetIds() []string { +func (x *SetWorkloadsStatusOptions) GetStatus() []*WorkloadStatus { if x != nil { - return x.Ids + return x.Status } return nil } -type RemoveWorkloadOptions struct { +type WorkloadStatusStreamOptions struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Ids []string `protobuf:"bytes,1,rep,name=ids,proto3" json:"ids,omitempty"` - Force bool `protobuf:"varint,2,opt,name=force,proto3" json:"force,omitempty"` + Appname string `protobuf:"bytes,1,opt,name=appname,proto3" json:"appname,omitempty"` + Entrypoint string `protobuf:"bytes,2,opt,name=entrypoint,proto3" json:"entrypoint,omitempty"` + Nodename string `protobuf:"bytes,3,opt,name=nodename,proto3" json:"nodename,omitempty"` + Labels map[string]string `protobuf:"bytes,4,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } -func (x *RemoveWorkloadOptions) Reset() { - *x = RemoveWorkloadOptions{} +func (x *WorkloadStatusStreamOptions) Reset() { + *x = WorkloadStatusStreamOptions{} if protoimpl.UnsafeEnabled { mi := &file_rpc_gen_core_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2605,13 +2447,13 @@ func (x *RemoveWorkloadOptions) Reset() { } } -func (x *RemoveWorkloadOptions) String() string { +func (x *WorkloadStatusStreamOptions) String() string { return protoimpl.X.MessageStringOf(x) } -func (*RemoveWorkloadOptions) ProtoMessage() {} +func (*WorkloadStatusStreamOptions) ProtoMessage() {} -func (x *RemoveWorkloadOptions) ProtoReflect() protoreflect.Message { +func (x *WorkloadStatusStreamOptions) ProtoReflect() protoreflect.Message { mi := &file_rpc_gen_core_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2623,317 +2465,68 @@ func (x *RemoveWorkloadOptions) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use RemoveWorkloadOptions.ProtoReflect.Descriptor instead. -func (*RemoveWorkloadOptions) Descriptor() ([]byte, []int) { +// Deprecated: Use WorkloadStatusStreamOptions.ProtoReflect.Descriptor instead. +func (*WorkloadStatusStreamOptions) Descriptor() ([]byte, []int) { return file_rpc_gen_core_proto_rawDescGZIP(), []int{33} } -func (x *RemoveWorkloadOptions) GetIds() []string { +func (x *WorkloadStatusStreamOptions) GetAppname() string { if x != nil { - return x.Ids + return x.Appname } - return nil + return "" } -func (x *RemoveWorkloadOptions) GetForce() bool { +func (x *WorkloadStatusStreamOptions) GetEntrypoint() string { if x != nil { - return x.Force + return x.Entrypoint } - return false + return "" } -type DissociateWorkloadOptions struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Ids []string `protobuf:"bytes,1,rep,name=ids,proto3" json:"ids,omitempty"` -} - -func (x *DissociateWorkloadOptions) Reset() { - *x = DissociateWorkloadOptions{} - if protoimpl.UnsafeEnabled { - mi := &file_rpc_gen_core_proto_msgTypes[34] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DissociateWorkloadOptions) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DissociateWorkloadOptions) ProtoMessage() {} - -func (x *DissociateWorkloadOptions) ProtoReflect() protoreflect.Message { - mi := &file_rpc_gen_core_proto_msgTypes[34] - 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 DissociateWorkloadOptions.ProtoReflect.Descriptor instead. -func (*DissociateWorkloadOptions) Descriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{34} -} - -func (x *DissociateWorkloadOptions) GetIds() []string { - if x != nil { - return x.Ids - } - return nil -} - -type ReallocOptions struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // TriOpt bind_cpu_opt = 2; // deprecated - // ResourceOptions old_resource_opts = 3; - ResourceOpts map[string]*RawParam `protobuf:"bytes,4,rep,name=resource_opts,json=resourceOpts,proto3" json:"resource_opts,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *ReallocOptions) Reset() { - *x = ReallocOptions{} - if protoimpl.UnsafeEnabled { - mi := &file_rpc_gen_core_proto_msgTypes[35] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ReallocOptions) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ReallocOptions) ProtoMessage() {} - -func (x *ReallocOptions) ProtoReflect() protoreflect.Message { - mi := &file_rpc_gen_core_proto_msgTypes[35] - 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 ReallocOptions.ProtoReflect.Descriptor instead. -func (*ReallocOptions) Descriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{35} -} - -func (x *ReallocOptions) GetId() string { +func (x *WorkloadStatusStreamOptions) GetNodename() string { if x != nil { - return x.Id + return x.Nodename } return "" } -func (x *ReallocOptions) GetResourceOpts() map[string]*RawParam { +func (x *WorkloadStatusStreamOptions) GetLabels() map[string]string { if x != nil { - return x.ResourceOpts + return x.Labels } return nil } -type AddPodOptions struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Desc string `protobuf:"bytes,2,opt,name=desc,proto3" json:"desc,omitempty"` -} - -func (x *AddPodOptions) Reset() { - *x = AddPodOptions{} - if protoimpl.UnsafeEnabled { - mi := &file_rpc_gen_core_proto_msgTypes[36] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *AddPodOptions) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*AddPodOptions) ProtoMessage() {} - -func (x *AddPodOptions) ProtoReflect() protoreflect.Message { - mi := &file_rpc_gen_core_proto_msgTypes[36] - 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 AddPodOptions.ProtoReflect.Descriptor instead. -func (*AddPodOptions) Descriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{36} -} - -func (x *AddPodOptions) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *AddPodOptions) GetDesc() string { - if x != nil { - return x.Desc - } - return "" -} - -type RemovePodOptions struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` -} - -func (x *RemovePodOptions) Reset() { - *x = RemovePodOptions{} - if protoimpl.UnsafeEnabled { - mi := &file_rpc_gen_core_proto_msgTypes[37] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RemovePodOptions) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RemovePodOptions) ProtoMessage() {} - -func (x *RemovePodOptions) ProtoReflect() protoreflect.Message { - mi := &file_rpc_gen_core_proto_msgTypes[37] - 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 RemovePodOptions.ProtoReflect.Descriptor instead. -func (*RemovePodOptions) Descriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{37} -} - -func (x *RemovePodOptions) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -type GetPodOptions struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` -} - -func (x *GetPodOptions) Reset() { - *x = GetPodOptions{} - if protoimpl.UnsafeEnabled { - mi := &file_rpc_gen_core_proto_msgTypes[38] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetPodOptions) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetPodOptions) ProtoMessage() {} - -func (x *GetPodOptions) ProtoReflect() protoreflect.Message { - mi := &file_rpc_gen_core_proto_msgTypes[38] - 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 GetPodOptions.ProtoReflect.Descriptor instead. -func (*GetPodOptions) Descriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{38} -} - -func (x *GetPodOptions) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -type AddNodeOptions struct { +type WorkloadStatusStreamMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Nodename string `protobuf:"bytes,1,opt,name=nodename,proto3" json:"nodename,omitempty"` - Endpoint string `protobuf:"bytes,2,opt,name=endpoint,proto3" json:"endpoint,omitempty"` - Podname string `protobuf:"bytes,3,opt,name=podname,proto3" json:"podname,omitempty"` - Ca string `protobuf:"bytes,4,opt,name=ca,proto3" json:"ca,omitempty"` - Cert string `protobuf:"bytes,5,opt,name=cert,proto3" json:"cert,omitempty"` - Key string `protobuf:"bytes,6,opt,name=key,proto3" json:"key,omitempty"` - Cpu int32 `protobuf:"varint,7,opt,name=cpu,proto3" json:"cpu,omitempty"` - Share int32 `protobuf:"varint,8,opt,name=share,proto3" json:"share,omitempty"` - Memory int64 `protobuf:"varint,9,opt,name=memory,proto3" json:"memory,omitempty"` - Labels map[string]string `protobuf:"bytes,10,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Numa map[string]string `protobuf:"bytes,11,rep,name=numa,proto3" json:"numa,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - NumaMemory map[string]int64 `protobuf:"bytes,12,rep,name=numa_memory,json=numaMemory,proto3" json:"numa_memory,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` - Storage int64 `protobuf:"varint,13,opt,name=storage,proto3" json:"storage,omitempty"` - VolumeMap map[string]int64 `protobuf:"bytes,14,rep,name=volume_map,json=volumeMap,proto3" json:"volume_map,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` - ResourceOpts map[string]*RawParam `protobuf:"bytes,15,rep,name=resource_opts,json=resourceOpts,proto3" json:"resource_opts,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Workload *Workload `protobuf:"bytes,2,opt,name=workload,proto3" json:"workload,omitempty"` + Status *WorkloadStatus `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` + Error string `protobuf:"bytes,4,opt,name=error,proto3" json:"error,omitempty"` + Delete bool `protobuf:"varint,5,opt,name=delete,proto3" json:"delete,omitempty"` } -func (x *AddNodeOptions) Reset() { - *x = AddNodeOptions{} +func (x *WorkloadStatusStreamMessage) Reset() { + *x = WorkloadStatusStreamMessage{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_gen_core_proto_msgTypes[39] + mi := &file_rpc_gen_core_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *AddNodeOptions) String() string { +func (x *WorkloadStatusStreamMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*AddNodeOptions) ProtoMessage() {} +func (*WorkloadStatusStreamMessage) ProtoMessage() {} -func (x *AddNodeOptions) ProtoReflect() protoreflect.Message { - mi := &file_rpc_gen_core_proto_msgTypes[39] +func (x *WorkloadStatusStreamMessage) ProtoReflect() protoreflect.Message { + mi := &file_rpc_gen_core_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2944,141 +2537,71 @@ func (x *AddNodeOptions) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use AddNodeOptions.ProtoReflect.Descriptor instead. -func (*AddNodeOptions) Descriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{39} -} - -func (x *AddNodeOptions) GetNodename() string { - if x != nil { - return x.Nodename - } - return "" -} - -func (x *AddNodeOptions) GetEndpoint() string { - if x != nil { - return x.Endpoint - } - return "" -} - -func (x *AddNodeOptions) GetPodname() string { - if x != nil { - return x.Podname - } - return "" -} - -func (x *AddNodeOptions) GetCa() string { - if x != nil { - return x.Ca - } - return "" -} - -func (x *AddNodeOptions) GetCert() string { - if x != nil { - return x.Cert - } - return "" -} - -func (x *AddNodeOptions) GetKey() string { - if x != nil { - return x.Key - } - return "" -} - -func (x *AddNodeOptions) GetCpu() int32 { - if x != nil { - return x.Cpu - } - return 0 -} - -func (x *AddNodeOptions) GetShare() int32 { - if x != nil { - return x.Share - } - return 0 -} - -func (x *AddNodeOptions) GetMemory() int64 { - if x != nil { - return x.Memory - } - return 0 -} - -func (x *AddNodeOptions) GetLabels() map[string]string { - if x != nil { - return x.Labels - } - return nil +// Deprecated: Use WorkloadStatusStreamMessage.ProtoReflect.Descriptor instead. +func (*WorkloadStatusStreamMessage) Descriptor() ([]byte, []int) { + return file_rpc_gen_core_proto_rawDescGZIP(), []int{34} } -func (x *AddNodeOptions) GetNuma() map[string]string { +func (x *WorkloadStatusStreamMessage) GetId() string { if x != nil { - return x.Numa + return x.Id } - return nil + return "" } -func (x *AddNodeOptions) GetNumaMemory() map[string]int64 { +func (x *WorkloadStatusStreamMessage) GetWorkload() *Workload { if x != nil { - return x.NumaMemory + return x.Workload } return nil } -func (x *AddNodeOptions) GetStorage() int64 { +func (x *WorkloadStatusStreamMessage) GetStatus() *WorkloadStatus { if x != nil { - return x.Storage + return x.Status } - return 0 + return nil } -func (x *AddNodeOptions) GetVolumeMap() map[string]int64 { +func (x *WorkloadStatusStreamMessage) GetError() string { if x != nil { - return x.VolumeMap + return x.Error } - return nil + return "" } -func (x *AddNodeOptions) GetResourceOpts() map[string]*RawParam { +func (x *WorkloadStatusStreamMessage) GetDelete() bool { if x != nil { - return x.ResourceOpts + return x.Delete } - return nil + return false } -type RemoveNodeOptions struct { +type Workloads struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Nodename string `protobuf:"bytes,1,opt,name=nodename,proto3" json:"nodename,omitempty"` + Workloads []*Workload `protobuf:"bytes,1,rep,name=workloads,proto3" json:"workloads,omitempty"` } -func (x *RemoveNodeOptions) Reset() { - *x = RemoveNodeOptions{} +func (x *Workloads) Reset() { + *x = Workloads{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_gen_core_proto_msgTypes[40] + mi := &file_rpc_gen_core_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *RemoveNodeOptions) String() string { +func (x *Workloads) String() string { return protoimpl.X.MessageStringOf(x) } -func (*RemoveNodeOptions) ProtoMessage() {} +func (*Workloads) ProtoMessage() {} -func (x *RemoveNodeOptions) ProtoReflect() protoreflect.Message { - mi := &file_rpc_gen_core_proto_msgTypes[40] +func (x *Workloads) ProtoReflect() protoreflect.Message { + mi := &file_rpc_gen_core_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3089,45 +2612,43 @@ func (x *RemoveNodeOptions) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use RemoveNodeOptions.ProtoReflect.Descriptor instead. -func (*RemoveNodeOptions) Descriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{40} +// Deprecated: Use Workloads.ProtoReflect.Descriptor instead. +func (*Workloads) Descriptor() ([]byte, []int) { + return file_rpc_gen_core_proto_rawDescGZIP(), []int{35} } -func (x *RemoveNodeOptions) GetNodename() string { +func (x *Workloads) GetWorkloads() []*Workload { if x != nil { - return x.Nodename + return x.Workloads } - return "" + return nil } -type GetNodeOptions struct { +type WorkloadID struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Nodename string `protobuf:"bytes,1,opt,name=nodename,proto3" json:"nodename,omitempty"` - Labels map[string]string `protobuf:"bytes,2,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Plugins []string `protobuf:"bytes,3,rep,name=plugins,proto3" json:"plugins,omitempty"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` } -func (x *GetNodeOptions) Reset() { - *x = GetNodeOptions{} +func (x *WorkloadID) Reset() { + *x = WorkloadID{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_gen_core_proto_msgTypes[41] + mi := &file_rpc_gen_core_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *GetNodeOptions) String() string { +func (x *WorkloadID) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetNodeOptions) ProtoMessage() {} +func (*WorkloadID) ProtoMessage() {} -func (x *GetNodeOptions) ProtoReflect() protoreflect.Message { - mi := &file_rpc_gen_core_proto_msgTypes[41] +func (x *WorkloadID) ProtoReflect() protoreflect.Message { + mi := &file_rpc_gen_core_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3138,58 +2659,91 @@ func (x *GetNodeOptions) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetNodeOptions.ProtoReflect.Descriptor instead. -func (*GetNodeOptions) Descriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{41} +// Deprecated: Use WorkloadID.ProtoReflect.Descriptor instead. +func (*WorkloadID) Descriptor() ([]byte, []int) { + return file_rpc_gen_core_proto_rawDescGZIP(), []int{36} } -func (x *GetNodeOptions) GetNodename() string { +func (x *WorkloadID) GetId() string { if x != nil { - return x.Nodename + return x.Id } return "" } -func (x *GetNodeOptions) GetLabels() map[string]string { - if x != nil { - return x.Labels +type WorkloadIDs struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Ids []string `protobuf:"bytes,1,rep,name=ids,proto3" json:"ids,omitempty"` +} + +func (x *WorkloadIDs) Reset() { + *x = WorkloadIDs{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_gen_core_proto_msgTypes[37] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return nil } -func (x *GetNodeOptions) GetPlugins() []string { +func (x *WorkloadIDs) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WorkloadIDs) ProtoMessage() {} + +func (x *WorkloadIDs) ProtoReflect() protoreflect.Message { + mi := &file_rpc_gen_core_proto_msgTypes[37] + 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 WorkloadIDs.ProtoReflect.Descriptor instead. +func (*WorkloadIDs) Descriptor() ([]byte, []int) { + return file_rpc_gen_core_proto_rawDescGZIP(), []int{37} +} + +func (x *WorkloadIDs) GetIds() []string { if x != nil { - return x.Plugins + return x.Ids } return nil } -type GetNodeResourceOptions struct { +type RemoveWorkloadOptions struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Opts *GetNodeOptions `protobuf:"bytes,1,opt,name=opts,proto3" json:"opts,omitempty"` - Fix bool `protobuf:"varint,2,opt,name=fix,proto3" json:"fix,omitempty"` + Ids []string `protobuf:"bytes,1,rep,name=ids,proto3" json:"ids,omitempty"` + Force bool `protobuf:"varint,2,opt,name=force,proto3" json:"force,omitempty"` } -func (x *GetNodeResourceOptions) Reset() { - *x = GetNodeResourceOptions{} +func (x *RemoveWorkloadOptions) Reset() { + *x = RemoveWorkloadOptions{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_gen_core_proto_msgTypes[42] + mi := &file_rpc_gen_core_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *GetNodeResourceOptions) String() string { +func (x *RemoveWorkloadOptions) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetNodeResourceOptions) ProtoMessage() {} +func (*RemoveWorkloadOptions) ProtoMessage() {} -func (x *GetNodeResourceOptions) ProtoReflect() protoreflect.Message { - mi := &file_rpc_gen_core_proto_msgTypes[42] +func (x *RemoveWorkloadOptions) ProtoReflect() protoreflect.Message { + mi := &file_rpc_gen_core_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3200,54 +2754,50 @@ func (x *GetNodeResourceOptions) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetNodeResourceOptions.ProtoReflect.Descriptor instead. -func (*GetNodeResourceOptions) Descriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{42} +// Deprecated: Use RemoveWorkloadOptions.ProtoReflect.Descriptor instead. +func (*RemoveWorkloadOptions) Descriptor() ([]byte, []int) { + return file_rpc_gen_core_proto_rawDescGZIP(), []int{38} } -func (x *GetNodeResourceOptions) GetOpts() *GetNodeOptions { +func (x *RemoveWorkloadOptions) GetIds() []string { if x != nil { - return x.Opts + return x.Ids } return nil } -func (x *GetNodeResourceOptions) GetFix() bool { +func (x *RemoveWorkloadOptions) GetForce() bool { if x != nil { - return x.Fix + return x.Force } return false } -type ListNodesOptions struct { +type DissociateWorkloadOptions struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Podname string `protobuf:"bytes,1,opt,name=podname,proto3" json:"podname,omitempty"` - All bool `protobuf:"varint,2,opt,name=all,proto3" json:"all,omitempty"` - Labels map[string]string `protobuf:"bytes,3,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - TimeoutInSecond int32 `protobuf:"varint,4,opt,name=timeout_in_second,json=timeoutInSecond,proto3" json:"timeout_in_second,omitempty"` - SkipInfo bool `protobuf:"varint,5,opt,name=skip_info,json=skipInfo,proto3" json:"skip_info,omitempty"` + Ids []string `protobuf:"bytes,1,rep,name=ids,proto3" json:"ids,omitempty"` } -func (x *ListNodesOptions) Reset() { - *x = ListNodesOptions{} +func (x *DissociateWorkloadOptions) Reset() { + *x = DissociateWorkloadOptions{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_gen_core_proto_msgTypes[43] + mi := &file_rpc_gen_core_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *ListNodesOptions) String() string { +func (x *DissociateWorkloadOptions) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListNodesOptions) ProtoMessage() {} +func (*DissociateWorkloadOptions) ProtoMessage() {} -func (x *ListNodesOptions) ProtoReflect() protoreflect.Message { - mi := &file_rpc_gen_core_proto_msgTypes[43] +func (x *DissociateWorkloadOptions) ProtoReflect() protoreflect.Message { + mi := &file_rpc_gen_core_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3258,44 +2808,71 @@ func (x *ListNodesOptions) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListNodesOptions.ProtoReflect.Descriptor instead. -func (*ListNodesOptions) Descriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{43} +// Deprecated: Use DissociateWorkloadOptions.ProtoReflect.Descriptor instead. +func (*DissociateWorkloadOptions) Descriptor() ([]byte, []int) { + return file_rpc_gen_core_proto_rawDescGZIP(), []int{39} } -func (x *ListNodesOptions) GetPodname() string { +func (x *DissociateWorkloadOptions) GetIds() []string { if x != nil { - return x.Podname + return x.Ids } - return "" + return nil } -func (x *ListNodesOptions) GetAll() bool { - if x != nil { - return x.All +type ReallocOptions struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1001,opt,name=id,proto3" json:"id,omitempty"` + ResourceOpts map[string]*RawParam `protobuf:"bytes,1002,rep,name=resource_opts,json=resourceOpts,proto3" json:"resource_opts,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *ReallocOptions) Reset() { + *x = ReallocOptions{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_gen_core_proto_msgTypes[40] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } - return false } -func (x *ListNodesOptions) GetLabels() map[string]string { - if x != nil { - return x.Labels +func (x *ReallocOptions) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReallocOptions) ProtoMessage() {} + +func (x *ReallocOptions) ProtoReflect() protoreflect.Message { + mi := &file_rpc_gen_core_proto_msgTypes[40] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (x *ListNodesOptions) GetTimeoutInSecond() int32 { +// Deprecated: Use ReallocOptions.ProtoReflect.Descriptor instead. +func (*ReallocOptions) Descriptor() ([]byte, []int) { + return file_rpc_gen_core_proto_rawDescGZIP(), []int{40} +} + +func (x *ReallocOptions) GetId() string { if x != nil { - return x.TimeoutInSecond + return x.Id } - return 0 + return "" } -func (x *ListNodesOptions) GetSkipInfo() bool { +func (x *ReallocOptions) GetResourceOpts() map[string]*RawParam { if x != nil { - return x.SkipInfo + return x.ResourceOpts } - return false + return nil } type Build struct { @@ -3321,7 +2898,7 @@ type Build struct { func (x *Build) Reset() { *x = Build{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_gen_core_proto_msgTypes[44] + mi := &file_rpc_gen_core_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3334,7 +2911,7 @@ func (x *Build) String() string { func (*Build) ProtoMessage() {} func (x *Build) ProtoReflect() protoreflect.Message { - mi := &file_rpc_gen_core_proto_msgTypes[44] + mi := &file_rpc_gen_core_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3347,7 +2924,7 @@ func (x *Build) ProtoReflect() protoreflect.Message { // Deprecated: Use Build.ProtoReflect.Descriptor instead. func (*Build) Descriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{44} + return file_rpc_gen_core_proto_rawDescGZIP(), []int{41} } func (x *Build) GetBase() string { @@ -3453,7 +3030,7 @@ type Builds struct { func (x *Builds) Reset() { *x = Builds{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_gen_core_proto_msgTypes[45] + mi := &file_rpc_gen_core_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3466,7 +3043,7 @@ func (x *Builds) String() string { func (*Builds) ProtoMessage() {} func (x *Builds) ProtoReflect() protoreflect.Message { - mi := &file_rpc_gen_core_proto_msgTypes[45] + mi := &file_rpc_gen_core_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3479,7 +3056,7 @@ func (x *Builds) ProtoReflect() protoreflect.Message { // Deprecated: Use Builds.ProtoReflect.Descriptor instead. func (*Builds) Descriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{45} + return file_rpc_gen_core_proto_rawDescGZIP(), []int{42} } func (x *Builds) GetStages() []string { @@ -3514,7 +3091,7 @@ type BuildImageOptions struct { func (x *BuildImageOptions) Reset() { *x = BuildImageOptions{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_gen_core_proto_msgTypes[46] + mi := &file_rpc_gen_core_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3527,7 +3104,7 @@ func (x *BuildImageOptions) String() string { func (*BuildImageOptions) ProtoMessage() {} func (x *BuildImageOptions) ProtoReflect() protoreflect.Message { - mi := &file_rpc_gen_core_proto_msgTypes[46] + mi := &file_rpc_gen_core_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3540,7 +3117,7 @@ func (x *BuildImageOptions) ProtoReflect() protoreflect.Message { // Deprecated: Use BuildImageOptions.ProtoReflect.Descriptor instead. func (*BuildImageOptions) Descriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{46} + return file_rpc_gen_core_proto_rawDescGZIP(), []int{43} } func (x *BuildImageOptions) GetName() string { @@ -3612,7 +3189,7 @@ type HookOptions struct { func (x *HookOptions) Reset() { *x = HookOptions{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_gen_core_proto_msgTypes[47] + mi := &file_rpc_gen_core_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3625,7 +3202,7 @@ func (x *HookOptions) String() string { func (*HookOptions) ProtoMessage() {} func (x *HookOptions) ProtoReflect() protoreflect.Message { - mi := &file_rpc_gen_core_proto_msgTypes[47] + mi := &file_rpc_gen_core_proto_msgTypes[44] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3638,7 +3215,7 @@ func (x *HookOptions) ProtoReflect() protoreflect.Message { // Deprecated: Use HookOptions.ProtoReflect.Descriptor instead. func (*HookOptions) Descriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{47} + return file_rpc_gen_core_proto_rawDescGZIP(), []int{44} } func (x *HookOptions) GetAfterStart() []string { @@ -3676,7 +3253,7 @@ type HealthCheckOptions struct { func (x *HealthCheckOptions) Reset() { *x = HealthCheckOptions{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_gen_core_proto_msgTypes[48] + mi := &file_rpc_gen_core_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3689,7 +3266,7 @@ func (x *HealthCheckOptions) String() string { func (*HealthCheckOptions) ProtoMessage() {} func (x *HealthCheckOptions) ProtoReflect() protoreflect.Message { - mi := &file_rpc_gen_core_proto_msgTypes[48] + mi := &file_rpc_gen_core_proto_msgTypes[45] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3702,7 +3279,7 @@ func (x *HealthCheckOptions) ProtoReflect() protoreflect.Message { // Deprecated: Use HealthCheckOptions.ProtoReflect.Descriptor instead. func (*HealthCheckOptions) Descriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{48} + return file_rpc_gen_core_proto_rawDescGZIP(), []int{45} } func (x *HealthCheckOptions) GetTcpPorts() []string { @@ -3745,7 +3322,7 @@ type LogOptions struct { func (x *LogOptions) Reset() { *x = LogOptions{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_gen_core_proto_msgTypes[49] + mi := &file_rpc_gen_core_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3758,7 +3335,7 @@ func (x *LogOptions) String() string { func (*LogOptions) ProtoMessage() {} func (x *LogOptions) ProtoReflect() protoreflect.Message { - mi := &file_rpc_gen_core_proto_msgTypes[49] + mi := &file_rpc_gen_core_proto_msgTypes[46] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3771,7 +3348,7 @@ func (x *LogOptions) ProtoReflect() protoreflect.Message { // Deprecated: Use LogOptions.ProtoReflect.Descriptor instead. func (*LogOptions) Descriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{49} + return file_rpc_gen_core_proto_rawDescGZIP(), []int{46} } func (x *LogOptions) GetType() string { @@ -3813,7 +3390,7 @@ type EntrypointOptions struct { func (x *EntrypointOptions) Reset() { *x = EntrypointOptions{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_gen_core_proto_msgTypes[50] + mi := &file_rpc_gen_core_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3826,7 +3403,7 @@ func (x *EntrypointOptions) String() string { func (*EntrypointOptions) ProtoMessage() {} func (x *EntrypointOptions) ProtoReflect() protoreflect.Message { - mi := &file_rpc_gen_core_proto_msgTypes[50] + mi := &file_rpc_gen_core_proto_msgTypes[47] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3839,7 +3416,7 @@ func (x *EntrypointOptions) ProtoReflect() protoreflect.Message { // Deprecated: Use EntrypointOptions.ProtoReflect.Descriptor instead. func (*EntrypointOptions) Descriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{50} + return file_rpc_gen_core_proto_rawDescGZIP(), []int{47} } func (x *EntrypointOptions) GetName() string { @@ -3930,7 +3507,7 @@ type Volume struct { func (x *Volume) Reset() { *x = Volume{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_gen_core_proto_msgTypes[51] + mi := &file_rpc_gen_core_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3943,7 +3520,7 @@ func (x *Volume) String() string { func (*Volume) ProtoMessage() {} func (x *Volume) ProtoReflect() protoreflect.Message { - mi := &file_rpc_gen_core_proto_msgTypes[51] + mi := &file_rpc_gen_core_proto_msgTypes[48] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3956,7 +3533,7 @@ func (x *Volume) ProtoReflect() protoreflect.Message { // Deprecated: Use Volume.ProtoReflect.Descriptor instead. func (*Volume) Descriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{51} + return file_rpc_gen_core_proto_rawDescGZIP(), []int{48} } func (x *Volume) GetVolume() map[string]int64 { @@ -4004,7 +3581,7 @@ type DeployOptions struct { func (x *DeployOptions) Reset() { *x = DeployOptions{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_gen_core_proto_msgTypes[52] + mi := &file_rpc_gen_core_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4017,7 +3594,7 @@ func (x *DeployOptions) String() string { func (*DeployOptions) ProtoMessage() {} func (x *DeployOptions) ProtoReflect() protoreflect.Message { - mi := &file_rpc_gen_core_proto_msgTypes[52] + mi := &file_rpc_gen_core_proto_msgTypes[49] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4030,7 +3607,7 @@ func (x *DeployOptions) ProtoReflect() protoreflect.Message { // Deprecated: Use DeployOptions.ProtoReflect.Descriptor instead. func (*DeployOptions) Descriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{52} + return file_rpc_gen_core_proto_rawDescGZIP(), []int{49} } func (x *DeployOptions) GetName() string { @@ -4230,7 +3807,7 @@ type ReplaceOptions struct { func (x *ReplaceOptions) Reset() { *x = ReplaceOptions{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_gen_core_proto_msgTypes[53] + mi := &file_rpc_gen_core_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4243,7 +3820,7 @@ func (x *ReplaceOptions) String() string { func (*ReplaceOptions) ProtoMessage() {} func (x *ReplaceOptions) ProtoReflect() protoreflect.Message { - mi := &file_rpc_gen_core_proto_msgTypes[53] + mi := &file_rpc_gen_core_proto_msgTypes[50] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4256,7 +3833,7 @@ func (x *ReplaceOptions) ProtoReflect() protoreflect.Message { // Deprecated: Use ReplaceOptions.ProtoReflect.Descriptor instead. func (*ReplaceOptions) Descriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{53} + return file_rpc_gen_core_proto_rawDescGZIP(), []int{50} } func (x *ReplaceOptions) GetDeployOpt() *DeployOptions { @@ -4308,7 +3885,7 @@ type CacheImageOptions struct { func (x *CacheImageOptions) Reset() { *x = CacheImageOptions{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_gen_core_proto_msgTypes[54] + mi := &file_rpc_gen_core_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4321,7 +3898,7 @@ func (x *CacheImageOptions) String() string { func (*CacheImageOptions) ProtoMessage() {} func (x *CacheImageOptions) ProtoReflect() protoreflect.Message { - mi := &file_rpc_gen_core_proto_msgTypes[54] + mi := &file_rpc_gen_core_proto_msgTypes[51] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4334,7 +3911,7 @@ func (x *CacheImageOptions) ProtoReflect() protoreflect.Message { // Deprecated: Use CacheImageOptions.ProtoReflect.Descriptor instead. func (*CacheImageOptions) Descriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{54} + return file_rpc_gen_core_proto_rawDescGZIP(), []int{51} } func (x *CacheImageOptions) GetPodname() string { @@ -4380,7 +3957,7 @@ type RemoveImageOptions struct { func (x *RemoveImageOptions) Reset() { *x = RemoveImageOptions{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_gen_core_proto_msgTypes[55] + mi := &file_rpc_gen_core_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4393,7 +3970,7 @@ func (x *RemoveImageOptions) String() string { func (*RemoveImageOptions) ProtoMessage() {} func (x *RemoveImageOptions) ProtoReflect() protoreflect.Message { - mi := &file_rpc_gen_core_proto_msgTypes[55] + mi := &file_rpc_gen_core_proto_msgTypes[52] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4406,7 +3983,7 @@ func (x *RemoveImageOptions) ProtoReflect() protoreflect.Message { // Deprecated: Use RemoveImageOptions.ProtoReflect.Descriptor instead. func (*RemoveImageOptions) Descriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{55} + return file_rpc_gen_core_proto_rawDescGZIP(), []int{52} } func (x *RemoveImageOptions) GetPodname() string { @@ -4457,7 +4034,7 @@ type ListImageOptions struct { func (x *ListImageOptions) Reset() { *x = ListImageOptions{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_gen_core_proto_msgTypes[56] + mi := &file_rpc_gen_core_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4470,7 +4047,7 @@ func (x *ListImageOptions) String() string { func (*ListImageOptions) ProtoMessage() {} func (x *ListImageOptions) ProtoReflect() protoreflect.Message { - mi := &file_rpc_gen_core_proto_msgTypes[56] + mi := &file_rpc_gen_core_proto_msgTypes[53] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4483,7 +4060,7 @@ func (x *ListImageOptions) ProtoReflect() protoreflect.Message { // Deprecated: Use ListImageOptions.ProtoReflect.Descriptor instead. func (*ListImageOptions) Descriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{56} + return file_rpc_gen_core_proto_rawDescGZIP(), []int{53} } func (x *ListImageOptions) GetPodname() string { @@ -4518,7 +4095,7 @@ type CopyPaths struct { func (x *CopyPaths) Reset() { *x = CopyPaths{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_gen_core_proto_msgTypes[57] + mi := &file_rpc_gen_core_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4531,7 +4108,7 @@ func (x *CopyPaths) String() string { func (*CopyPaths) ProtoMessage() {} func (x *CopyPaths) ProtoReflect() protoreflect.Message { - mi := &file_rpc_gen_core_proto_msgTypes[57] + mi := &file_rpc_gen_core_proto_msgTypes[54] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4544,7 +4121,7 @@ func (x *CopyPaths) ProtoReflect() protoreflect.Message { // Deprecated: Use CopyPaths.ProtoReflect.Descriptor instead. func (*CopyPaths) Descriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{57} + return file_rpc_gen_core_proto_rawDescGZIP(), []int{54} } func (x *CopyPaths) GetPaths() []string { @@ -4565,7 +4142,7 @@ type CopyOptions struct { func (x *CopyOptions) Reset() { *x = CopyOptions{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_gen_core_proto_msgTypes[58] + mi := &file_rpc_gen_core_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4578,7 +4155,7 @@ func (x *CopyOptions) String() string { func (*CopyOptions) ProtoMessage() {} func (x *CopyOptions) ProtoReflect() protoreflect.Message { - mi := &file_rpc_gen_core_proto_msgTypes[58] + mi := &file_rpc_gen_core_proto_msgTypes[55] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4591,7 +4168,7 @@ func (x *CopyOptions) ProtoReflect() protoreflect.Message { // Deprecated: Use CopyOptions.ProtoReflect.Descriptor instead. func (*CopyOptions) Descriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{58} + return file_rpc_gen_core_proto_rawDescGZIP(), []int{55} } func (x *CopyOptions) GetTargets() map[string]*CopyPaths { @@ -4613,7 +4190,7 @@ type FileOwner struct { func (x *FileOwner) Reset() { *x = FileOwner{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_gen_core_proto_msgTypes[59] + mi := &file_rpc_gen_core_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4626,7 +4203,7 @@ func (x *FileOwner) String() string { func (*FileOwner) ProtoMessage() {} func (x *FileOwner) ProtoReflect() protoreflect.Message { - mi := &file_rpc_gen_core_proto_msgTypes[59] + mi := &file_rpc_gen_core_proto_msgTypes[56] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4639,7 +4216,7 @@ func (x *FileOwner) ProtoReflect() protoreflect.Message { // Deprecated: Use FileOwner.ProtoReflect.Descriptor instead. func (*FileOwner) Descriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{59} + return file_rpc_gen_core_proto_rawDescGZIP(), []int{56} } func (x *FileOwner) GetUid() int32 { @@ -4667,7 +4244,7 @@ type FileMode struct { func (x *FileMode) Reset() { *x = FileMode{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_gen_core_proto_msgTypes[60] + mi := &file_rpc_gen_core_proto_msgTypes[57] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4680,7 +4257,7 @@ func (x *FileMode) String() string { func (*FileMode) ProtoMessage() {} func (x *FileMode) ProtoReflect() protoreflect.Message { - mi := &file_rpc_gen_core_proto_msgTypes[60] + mi := &file_rpc_gen_core_proto_msgTypes[57] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4693,7 +4270,7 @@ func (x *FileMode) ProtoReflect() protoreflect.Message { // Deprecated: Use FileMode.ProtoReflect.Descriptor instead. func (*FileMode) Descriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{60} + return file_rpc_gen_core_proto_rawDescGZIP(), []int{57} } func (x *FileMode) GetMode() int64 { @@ -4717,7 +4294,7 @@ type SendOptions struct { func (x *SendOptions) Reset() { *x = SendOptions{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_gen_core_proto_msgTypes[61] + mi := &file_rpc_gen_core_proto_msgTypes[58] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4730,7 +4307,7 @@ func (x *SendOptions) String() string { func (*SendOptions) ProtoMessage() {} func (x *SendOptions) ProtoReflect() protoreflect.Message { - mi := &file_rpc_gen_core_proto_msgTypes[61] + mi := &file_rpc_gen_core_proto_msgTypes[58] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4743,7 +4320,7 @@ func (x *SendOptions) ProtoReflect() protoreflect.Message { // Deprecated: Use SendOptions.ProtoReflect.Descriptor instead. func (*SendOptions) Descriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{61} + return file_rpc_gen_core_proto_rawDescGZIP(), []int{58} } func (x *SendOptions) GetIds() []string { @@ -4786,7 +4363,7 @@ type ErrorDetail struct { func (x *ErrorDetail) Reset() { *x = ErrorDetail{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_gen_core_proto_msgTypes[62] + mi := &file_rpc_gen_core_proto_msgTypes[59] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4799,7 +4376,7 @@ func (x *ErrorDetail) String() string { func (*ErrorDetail) ProtoMessage() {} func (x *ErrorDetail) ProtoReflect() protoreflect.Message { - mi := &file_rpc_gen_core_proto_msgTypes[62] + mi := &file_rpc_gen_core_proto_msgTypes[59] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4812,7 +4389,7 @@ func (x *ErrorDetail) ProtoReflect() protoreflect.Message { // Deprecated: Use ErrorDetail.ProtoReflect.Descriptor instead. func (*ErrorDetail) Descriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{62} + return file_rpc_gen_core_proto_rawDescGZIP(), []int{59} } func (x *ErrorDetail) GetCode() int64 { @@ -4845,7 +4422,7 @@ type BuildImageMessage struct { func (x *BuildImageMessage) Reset() { *x = BuildImageMessage{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_gen_core_proto_msgTypes[63] + mi := &file_rpc_gen_core_proto_msgTypes[60] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4858,7 +4435,7 @@ func (x *BuildImageMessage) String() string { func (*BuildImageMessage) ProtoMessage() {} func (x *BuildImageMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_gen_core_proto_msgTypes[63] + mi := &file_rpc_gen_core_proto_msgTypes[60] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4871,7 +4448,7 @@ func (x *BuildImageMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use BuildImageMessage.ProtoReflect.Descriptor instead. func (*BuildImageMessage) Descriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{63} + return file_rpc_gen_core_proto_rawDescGZIP(), []int{60} } func (x *BuildImageMessage) GetId() string { @@ -4936,7 +4513,7 @@ type CreateWorkloadMessage struct { func (x *CreateWorkloadMessage) Reset() { *x = CreateWorkloadMessage{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_gen_core_proto_msgTypes[64] + mi := &file_rpc_gen_core_proto_msgTypes[61] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4949,7 +4526,7 @@ func (x *CreateWorkloadMessage) String() string { func (*CreateWorkloadMessage) ProtoMessage() {} func (x *CreateWorkloadMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_gen_core_proto_msgTypes[64] + mi := &file_rpc_gen_core_proto_msgTypes[61] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4962,7 +4539,7 @@ func (x *CreateWorkloadMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateWorkloadMessage.ProtoReflect.Descriptor instead. func (*CreateWorkloadMessage) Descriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{64} + return file_rpc_gen_core_proto_rawDescGZIP(), []int{61} } func (x *CreateWorkloadMessage) GetPodname() string { @@ -5041,7 +4618,7 @@ type ReplaceWorkloadMessage struct { func (x *ReplaceWorkloadMessage) Reset() { *x = ReplaceWorkloadMessage{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_gen_core_proto_msgTypes[65] + mi := &file_rpc_gen_core_proto_msgTypes[62] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5054,7 +4631,7 @@ func (x *ReplaceWorkloadMessage) String() string { func (*ReplaceWorkloadMessage) ProtoMessage() {} func (x *ReplaceWorkloadMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_gen_core_proto_msgTypes[65] + mi := &file_rpc_gen_core_proto_msgTypes[62] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5067,7 +4644,7 @@ func (x *ReplaceWorkloadMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use ReplaceWorkloadMessage.ProtoReflect.Descriptor instead. func (*ReplaceWorkloadMessage) Descriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{65} + return file_rpc_gen_core_proto_rawDescGZIP(), []int{62} } func (x *ReplaceWorkloadMessage) GetCreate() *CreateWorkloadMessage { @@ -5105,7 +4682,7 @@ type CacheImageMessage struct { func (x *CacheImageMessage) Reset() { *x = CacheImageMessage{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_gen_core_proto_msgTypes[66] + mi := &file_rpc_gen_core_proto_msgTypes[63] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5118,7 +4695,7 @@ func (x *CacheImageMessage) String() string { func (*CacheImageMessage) ProtoMessage() {} func (x *CacheImageMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_gen_core_proto_msgTypes[66] + mi := &file_rpc_gen_core_proto_msgTypes[63] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5131,7 +4708,7 @@ func (x *CacheImageMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use CacheImageMessage.ProtoReflect.Descriptor instead. func (*CacheImageMessage) Descriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{66} + return file_rpc_gen_core_proto_rawDescGZIP(), []int{63} } func (x *CacheImageMessage) GetImage() string { @@ -5175,7 +4752,7 @@ type RemoveImageMessage struct { func (x *RemoveImageMessage) Reset() { *x = RemoveImageMessage{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_gen_core_proto_msgTypes[67] + mi := &file_rpc_gen_core_proto_msgTypes[64] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5188,7 +4765,7 @@ func (x *RemoveImageMessage) String() string { func (*RemoveImageMessage) ProtoMessage() {} func (x *RemoveImageMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_gen_core_proto_msgTypes[67] + mi := &file_rpc_gen_core_proto_msgTypes[64] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5201,7 +4778,7 @@ func (x *RemoveImageMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use RemoveImageMessage.ProtoReflect.Descriptor instead. func (*RemoveImageMessage) Descriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{67} + return file_rpc_gen_core_proto_rawDescGZIP(), []int{64} } func (x *RemoveImageMessage) GetImage() string { @@ -5237,7 +4814,7 @@ type ImageItem struct { func (x *ImageItem) Reset() { *x = ImageItem{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_gen_core_proto_msgTypes[68] + mi := &file_rpc_gen_core_proto_msgTypes[65] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5250,7 +4827,7 @@ func (x *ImageItem) String() string { func (*ImageItem) ProtoMessage() {} func (x *ImageItem) ProtoReflect() protoreflect.Message { - mi := &file_rpc_gen_core_proto_msgTypes[68] + mi := &file_rpc_gen_core_proto_msgTypes[65] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5263,7 +4840,7 @@ func (x *ImageItem) ProtoReflect() protoreflect.Message { // Deprecated: Use ImageItem.ProtoReflect.Descriptor instead. func (*ImageItem) Descriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{68} + return file_rpc_gen_core_proto_rawDescGZIP(), []int{65} } func (x *ImageItem) GetId() string { @@ -5293,7 +4870,7 @@ type ListImageMessage struct { func (x *ListImageMessage) Reset() { *x = ListImageMessage{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_gen_core_proto_msgTypes[69] + mi := &file_rpc_gen_core_proto_msgTypes[66] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5306,7 +4883,7 @@ func (x *ListImageMessage) String() string { func (*ListImageMessage) ProtoMessage() {} func (x *ListImageMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_gen_core_proto_msgTypes[69] + mi := &file_rpc_gen_core_proto_msgTypes[66] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5319,7 +4896,7 @@ func (x *ListImageMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use ListImageMessage.ProtoReflect.Descriptor instead. func (*ListImageMessage) Descriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{69} + return file_rpc_gen_core_proto_rawDescGZIP(), []int{66} } func (x *ListImageMessage) GetImages() []*ImageItem { @@ -5356,7 +4933,7 @@ type RemoveWorkloadMessage struct { func (x *RemoveWorkloadMessage) Reset() { *x = RemoveWorkloadMessage{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_gen_core_proto_msgTypes[70] + mi := &file_rpc_gen_core_proto_msgTypes[67] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5369,7 +4946,7 @@ func (x *RemoveWorkloadMessage) String() string { func (*RemoveWorkloadMessage) ProtoMessage() {} func (x *RemoveWorkloadMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_gen_core_proto_msgTypes[70] + mi := &file_rpc_gen_core_proto_msgTypes[67] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5382,7 +4959,7 @@ func (x *RemoveWorkloadMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use RemoveWorkloadMessage.ProtoReflect.Descriptor instead. func (*RemoveWorkloadMessage) Descriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{70} + return file_rpc_gen_core_proto_rawDescGZIP(), []int{67} } func (x *RemoveWorkloadMessage) GetId() string { @@ -5418,7 +4995,7 @@ type DissociateWorkloadMessage struct { func (x *DissociateWorkloadMessage) Reset() { *x = DissociateWorkloadMessage{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_gen_core_proto_msgTypes[71] + mi := &file_rpc_gen_core_proto_msgTypes[68] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5431,7 +5008,7 @@ func (x *DissociateWorkloadMessage) String() string { func (*DissociateWorkloadMessage) ProtoMessage() {} func (x *DissociateWorkloadMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_gen_core_proto_msgTypes[71] + mi := &file_rpc_gen_core_proto_msgTypes[68] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5444,7 +5021,7 @@ func (x *DissociateWorkloadMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use DissociateWorkloadMessage.ProtoReflect.Descriptor instead. func (*DissociateWorkloadMessage) Descriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{71} + return file_rpc_gen_core_proto_rawDescGZIP(), []int{68} } func (x *DissociateWorkloadMessage) GetId() string { @@ -5472,7 +5049,7 @@ type ReallocResourceMessage struct { func (x *ReallocResourceMessage) Reset() { *x = ReallocResourceMessage{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_gen_core_proto_msgTypes[72] + mi := &file_rpc_gen_core_proto_msgTypes[69] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5485,7 +5062,7 @@ func (x *ReallocResourceMessage) String() string { func (*ReallocResourceMessage) ProtoMessage() {} func (x *ReallocResourceMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_gen_core_proto_msgTypes[72] + mi := &file_rpc_gen_core_proto_msgTypes[69] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5498,7 +5075,7 @@ func (x *ReallocResourceMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use ReallocResourceMessage.ProtoReflect.Descriptor instead. func (*ReallocResourceMessage) Descriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{72} + return file_rpc_gen_core_proto_rawDescGZIP(), []int{69} } func (x *ReallocResourceMessage) GetError() string { @@ -5523,7 +5100,7 @@ type CopyMessage struct { func (x *CopyMessage) Reset() { *x = CopyMessage{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_gen_core_proto_msgTypes[73] + mi := &file_rpc_gen_core_proto_msgTypes[70] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5536,7 +5113,7 @@ func (x *CopyMessage) String() string { func (*CopyMessage) ProtoMessage() {} func (x *CopyMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_gen_core_proto_msgTypes[73] + mi := &file_rpc_gen_core_proto_msgTypes[70] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5549,7 +5126,7 @@ func (x *CopyMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use CopyMessage.ProtoReflect.Descriptor instead. func (*CopyMessage) Descriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{73} + return file_rpc_gen_core_proto_rawDescGZIP(), []int{70} } func (x *CopyMessage) GetId() string { @@ -5600,7 +5177,7 @@ type SendMessage struct { func (x *SendMessage) Reset() { *x = SendMessage{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_gen_core_proto_msgTypes[74] + mi := &file_rpc_gen_core_proto_msgTypes[71] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5613,7 +5190,7 @@ func (x *SendMessage) String() string { func (*SendMessage) ProtoMessage() {} func (x *SendMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_gen_core_proto_msgTypes[74] + mi := &file_rpc_gen_core_proto_msgTypes[71] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5626,7 +5203,7 @@ func (x *SendMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use SendMessage.ProtoReflect.Descriptor instead. func (*SendMessage) Descriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{74} + return file_rpc_gen_core_proto_rawDescGZIP(), []int{71} } func (x *SendMessage) GetId() string { @@ -5663,7 +5240,7 @@ type AttachWorkloadMessage struct { func (x *AttachWorkloadMessage) Reset() { *x = AttachWorkloadMessage{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_gen_core_proto_msgTypes[75] + mi := &file_rpc_gen_core_proto_msgTypes[72] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5676,7 +5253,7 @@ func (x *AttachWorkloadMessage) String() string { func (*AttachWorkloadMessage) ProtoMessage() {} func (x *AttachWorkloadMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_gen_core_proto_msgTypes[75] + mi := &file_rpc_gen_core_proto_msgTypes[72] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5689,7 +5266,7 @@ func (x *AttachWorkloadMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use AttachWorkloadMessage.ProtoReflect.Descriptor instead. func (*AttachWorkloadMessage) Descriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{75} + return file_rpc_gen_core_proto_rawDescGZIP(), []int{72} } func (x *AttachWorkloadMessage) GetWorkloadId() string { @@ -5727,7 +5304,7 @@ type RunAndWaitOptions struct { func (x *RunAndWaitOptions) Reset() { *x = RunAndWaitOptions{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_gen_core_proto_msgTypes[76] + mi := &file_rpc_gen_core_proto_msgTypes[73] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5740,7 +5317,7 @@ func (x *RunAndWaitOptions) String() string { func (*RunAndWaitOptions) ProtoMessage() {} func (x *RunAndWaitOptions) ProtoReflect() protoreflect.Message { - mi := &file_rpc_gen_core_proto_msgTypes[76] + mi := &file_rpc_gen_core_proto_msgTypes[73] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5753,7 +5330,7 @@ func (x *RunAndWaitOptions) ProtoReflect() protoreflect.Message { // Deprecated: Use RunAndWaitOptions.ProtoReflect.Descriptor instead. func (*RunAndWaitOptions) Descriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{76} + return file_rpc_gen_core_proto_rawDescGZIP(), []int{73} } func (x *RunAndWaitOptions) GetDeployOptions() *DeployOptions { @@ -5797,7 +5374,7 @@ type ControlWorkloadOptions struct { func (x *ControlWorkloadOptions) Reset() { *x = ControlWorkloadOptions{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_gen_core_proto_msgTypes[77] + mi := &file_rpc_gen_core_proto_msgTypes[74] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5810,7 +5387,7 @@ func (x *ControlWorkloadOptions) String() string { func (*ControlWorkloadOptions) ProtoMessage() {} func (x *ControlWorkloadOptions) ProtoReflect() protoreflect.Message { - mi := &file_rpc_gen_core_proto_msgTypes[77] + mi := &file_rpc_gen_core_proto_msgTypes[74] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5823,7 +5400,7 @@ func (x *ControlWorkloadOptions) ProtoReflect() protoreflect.Message { // Deprecated: Use ControlWorkloadOptions.ProtoReflect.Descriptor instead. func (*ControlWorkloadOptions) Descriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{77} + return file_rpc_gen_core_proto_rawDescGZIP(), []int{74} } func (x *ControlWorkloadOptions) GetIds() []string { @@ -5860,7 +5437,7 @@ type ControlWorkloadMessage struct { func (x *ControlWorkloadMessage) Reset() { *x = ControlWorkloadMessage{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_gen_core_proto_msgTypes[78] + mi := &file_rpc_gen_core_proto_msgTypes[75] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5873,7 +5450,7 @@ func (x *ControlWorkloadMessage) String() string { func (*ControlWorkloadMessage) ProtoMessage() {} func (x *ControlWorkloadMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_gen_core_proto_msgTypes[78] + mi := &file_rpc_gen_core_proto_msgTypes[75] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5886,7 +5463,7 @@ func (x *ControlWorkloadMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use ControlWorkloadMessage.ProtoReflect.Descriptor instead. func (*ControlWorkloadMessage) Descriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{78} + return file_rpc_gen_core_proto_rawDescGZIP(), []int{75} } func (x *ControlWorkloadMessage) GetId() string { @@ -5925,7 +5502,7 @@ type LogStreamOptions struct { func (x *LogStreamOptions) Reset() { *x = LogStreamOptions{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_gen_core_proto_msgTypes[79] + mi := &file_rpc_gen_core_proto_msgTypes[76] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5938,7 +5515,7 @@ func (x *LogStreamOptions) String() string { func (*LogStreamOptions) ProtoMessage() {} func (x *LogStreamOptions) ProtoReflect() protoreflect.Message { - mi := &file_rpc_gen_core_proto_msgTypes[79] + mi := &file_rpc_gen_core_proto_msgTypes[76] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5951,7 +5528,7 @@ func (x *LogStreamOptions) ProtoReflect() protoreflect.Message { // Deprecated: Use LogStreamOptions.ProtoReflect.Descriptor instead. func (*LogStreamOptions) Descriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{79} + return file_rpc_gen_core_proto_rawDescGZIP(), []int{76} } func (x *LogStreamOptions) GetId() string { @@ -6003,7 +5580,7 @@ type LogStreamMessage struct { func (x *LogStreamMessage) Reset() { *x = LogStreamMessage{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_gen_core_proto_msgTypes[80] + mi := &file_rpc_gen_core_proto_msgTypes[77] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6016,7 +5593,7 @@ func (x *LogStreamMessage) String() string { func (*LogStreamMessage) ProtoMessage() {} func (x *LogStreamMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_gen_core_proto_msgTypes[80] + mi := &file_rpc_gen_core_proto_msgTypes[77] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6029,7 +5606,7 @@ func (x *LogStreamMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use LogStreamMessage.ProtoReflect.Descriptor instead. func (*LogStreamMessage) Descriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{80} + return file_rpc_gen_core_proto_rawDescGZIP(), []int{77} } func (x *LogStreamMessage) GetId() string { @@ -6076,7 +5653,7 @@ type ExecuteWorkloadOptions struct { func (x *ExecuteWorkloadOptions) Reset() { *x = ExecuteWorkloadOptions{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_gen_core_proto_msgTypes[81] + mi := &file_rpc_gen_core_proto_msgTypes[78] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6089,7 +5666,7 @@ func (x *ExecuteWorkloadOptions) String() string { func (*ExecuteWorkloadOptions) ProtoMessage() {} func (x *ExecuteWorkloadOptions) ProtoReflect() protoreflect.Message { - mi := &file_rpc_gen_core_proto_msgTypes[81] + mi := &file_rpc_gen_core_proto_msgTypes[78] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6102,7 +5679,7 @@ func (x *ExecuteWorkloadOptions) ProtoReflect() protoreflect.Message { // Deprecated: Use ExecuteWorkloadOptions.ProtoReflect.Descriptor instead. func (*ExecuteWorkloadOptions) Descriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{81} + return file_rpc_gen_core_proto_rawDescGZIP(), []int{78} } func (x *ExecuteWorkloadOptions) GetWorkloadId() string { @@ -6159,7 +5736,7 @@ type CapacityMessage struct { func (x *CapacityMessage) Reset() { *x = CapacityMessage{} if protoimpl.UnsafeEnabled { - mi := &file_rpc_gen_core_proto_msgTypes[82] + mi := &file_rpc_gen_core_proto_msgTypes[79] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6172,7 +5749,7 @@ func (x *CapacityMessage) String() string { func (*CapacityMessage) ProtoMessage() {} func (x *CapacityMessage) ProtoReflect() protoreflect.Message { - mi := &file_rpc_gen_core_proto_msgTypes[82] + mi := &file_rpc_gen_core_proto_msgTypes[79] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6185,7 +5762,7 @@ func (x *CapacityMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use CapacityMessage.ProtoReflect.Descriptor instead. func (*CapacityMessage) Descriptor() ([]byte, []int) { - return file_rpc_gen_core_proto_rawDescGZIP(), []int{82} + return file_rpc_gen_core_proto_rawDescGZIP(), []int{79} } func (x *CapacityMessage) GetTotal() int64 { @@ -6207,1167 +5784,1011 @@ var File_rpc_gen_core_proto protoreflect.FileDescriptor var file_rpc_gen_core_proto_rawDesc = []byte{ 0x0a, 0x12, 0x72, 0x70, 0x63, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x02, 0x70, 0x62, 0x22, 0x07, 0x0a, 0x05, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x22, 0xb9, 0x01, 0x0a, 0x08, 0x43, 0x6f, 0x72, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, - 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x76, 0x69, - 0x73, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x76, 0x69, 0x73, - 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x41, 0x74, 0x12, 0x25, 0x0a, - 0x0e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x56, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x6f, 0x73, 0x5f, 0x61, 0x72, 0x63, 0x68, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x73, 0x41, 0x72, 0x63, 0x68, 0x12, 0x1e, 0x0a, - 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x22, 0x5b, 0x0a, - 0x0d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1c, - 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x2c, 0x0a, 0x12, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x5f, 0x69, 0x6e, 0x5f, 0x73, 0x65, 0x63, 0x6f, - 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, - 0x61, 0x6c, 0x49, 0x6e, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x22, 0x1c, 0x0a, 0x06, 0x45, 0x6e, - 0x67, 0x69, 0x6e, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0xfb, 0x01, 0x0a, 0x14, 0x4c, 0x69, 0x73, - 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x70, 0x70, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x65, - 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0a, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6e, - 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, - 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3c, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, - 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, - 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, - 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x2d, 0x0a, 0x03, 0x50, 0x6f, 0x64, 0x12, 0x12, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x65, 0x73, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x64, 0x65, 0x73, 0x63, 0x22, 0x23, 0x0a, 0x04, 0x50, 0x6f, 0x64, 0x73, 0x12, 0x1b, 0x0a, - 0x04, 0x70, 0x6f, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x07, 0x2e, 0x70, 0x62, - 0x2e, 0x50, 0x6f, 0x64, 0x52, 0x04, 0x70, 0x6f, 0x64, 0x73, 0x22, 0x5a, 0x0a, 0x0b, 0x50, 0x6f, - 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x37, 0x0a, - 0x0e, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x0d, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x23, 0x0a, 0x0b, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, - 0x53, 0x6c, 0x69, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x22, 0x5d, 0x0a, 0x08, 0x52, - 0x61, 0x77, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x12, 0x0a, 0x03, 0x73, 0x74, 0x72, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x03, 0x73, 0x74, 0x72, 0x12, 0x34, 0x0a, 0x0c, 0x73, - 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x53, 0x6c, 0x69, - 0x63, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x53, 0x6c, 0x69, 0x63, - 0x65, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xa4, 0x02, 0x0a, 0x0c, 0x4e, - 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x1f, 0x0a, 0x0b, 0x63, 0x70, 0x75, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x01, 0x52, 0x0a, 0x63, 0x70, 0x75, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, - 0x12, 0x25, 0x0a, 0x0e, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, - 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0d, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, - 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, - 0x52, 0x0e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, - 0x12, 0x25, 0x0a, 0x0e, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, - 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0d, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, - 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x64, 0x69, 0x66, 0x66, 0x73, - 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x64, 0x69, 0x66, 0x66, 0x73, 0x12, 0x2b, 0x0a, - 0x11, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, - 0x74, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x43, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x55, 0x73, 0x61, 0x67, - 0x65, 0x22, 0x46, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x6f, 0x64, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x6f, 0x64, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x22, 0x71, 0x0a, 0x15, 0x43, 0x6f, 0x6e, + 0x79, 0x22, 0xbf, 0x01, 0x0a, 0x08, 0x43, 0x6f, 0x72, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x19, + 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0xe9, 0x07, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x07, 0x72, 0x65, 0x76, + 0x69, 0x73, 0x6f, 0x6e, 0x18, 0xea, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x76, + 0x69, 0x73, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x61, 0x74, + 0x18, 0xeb, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x41, 0x74, + 0x12, 0x26, 0x0a, 0x0e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x18, 0xec, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x67, 0x6f, 0x6c, 0x61, 0x6e, + 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x6f, 0x73, 0x5f, 0x61, + 0x72, 0x63, 0x68, 0x18, 0xed, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x73, 0x41, 0x72, + 0x63, 0x68, 0x12, 0x1f, 0x0a, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, + 0x18, 0xee, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, + 0x69, 0x65, 0x72, 0x22, 0x5d, 0x0a, 0x0d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x12, 0x1d, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, + 0x73, 0x18, 0xe9, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x65, 0x73, 0x12, 0x2d, 0x0a, 0x12, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x5f, + 0x69, 0x6e, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x18, 0xea, 0x07, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x10, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x49, 0x6e, 0x53, 0x65, 0x63, 0x6f, + 0x6e, 0x64, 0x22, 0x1d, 0x0a, 0x06, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x12, 0x13, 0x0a, 0x04, + 0x74, 0x79, 0x70, 0x65, 0x18, 0xe9, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x22, 0x80, 0x02, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, + 0x61, 0x64, 0x73, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x19, 0x0a, 0x07, 0x61, 0x70, + 0x70, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0xe9, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, + 0x70, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0a, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, + 0x69, 0x6e, 0x74, 0x18, 0xea, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x6e, 0x74, 0x72, + 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0xeb, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x3d, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0xec, 0x07, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, + 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4c, + 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, + 0x6c, 0x73, 0x12, 0x15, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0xed, 0x07, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, + 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x22, 0x2f, 0x0a, 0x03, 0x50, 0x6f, 0x64, 0x12, 0x13, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0xe9, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x13, 0x0a, 0x04, 0x64, 0x65, 0x73, 0x63, 0x18, 0xea, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x64, 0x65, 0x73, 0x63, 0x22, 0x24, 0x0a, 0x04, 0x50, 0x6f, 0x64, 0x73, 0x12, 0x1c, 0x0a, + 0x04, 0x70, 0x6f, 0x64, 0x73, 0x18, 0xe9, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x07, 0x2e, 0x70, + 0x62, 0x2e, 0x50, 0x6f, 0x64, 0x52, 0x04, 0x70, 0x6f, 0x64, 0x73, 0x22, 0x24, 0x0a, 0x0b, 0x53, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x53, 0x6c, 0x69, 0x63, 0x65, 0x12, 0x15, 0x0a, 0x05, 0x73, 0x6c, + 0x69, 0x63, 0x65, 0x18, 0xe9, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x73, 0x6c, 0x69, 0x63, + 0x65, 0x22, 0x5f, 0x0a, 0x08, 0x52, 0x61, 0x77, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x13, 0x0a, + 0x03, 0x73, 0x74, 0x72, 0x18, 0xe9, 0x07, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x03, 0x73, + 0x74, 0x72, 0x12, 0x35, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x6c, 0x69, + 0x63, 0x65, 0x18, 0xea, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x53, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x53, 0x6c, 0x69, 0x63, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x53, 0x6c, 0x69, 0x63, 0x65, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x22, 0x90, 0x01, 0x0a, 0x0c, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x12, 0x13, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0xe9, 0x07, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x15, 0x0a, 0x05, 0x64, 0x69, 0x66, 0x66, + 0x73, 0x18, 0xea, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x64, 0x69, 0x66, 0x66, 0x73, 0x12, + 0x2c, 0x0a, 0x11, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x63, 0x61, 0x70, 0x61, + 0x63, 0x69, 0x74, 0x79, 0x18, 0xeb, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x12, 0x26, 0x0a, + 0x0e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65, 0x18, + 0xec, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x55, 0x73, 0x61, 0x67, 0x65, 0x22, 0x48, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x19, 0x0a, 0x07, 0x70, + 0x6f, 0x64, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0xe9, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, + 0x6f, 0x64, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x17, 0x0a, 0x06, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, + 0x18, 0xea, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x22, + 0x75, 0x0a, 0x15, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x19, 0x0a, 0x07, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x18, 0xe9, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x12, 0x17, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0xea, 0x07, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x13, 0x0a, 0x04, + 0x69, 0x70, 0x76, 0x34, 0x18, 0xeb, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x69, 0x70, 0x76, + 0x34, 0x12, 0x13, 0x0a, 0x04, 0x69, 0x70, 0x76, 0x36, 0x18, 0xec, 0x07, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x69, 0x70, 0x76, 0x36, 0x22, 0x65, 0x0a, 0x18, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x4f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x16, 0x0a, 0x06, - 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, - 0x72, 0x67, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x70, 0x76, 0x34, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x69, 0x70, 0x76, 0x34, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x70, 0x76, 0x36, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x69, 0x70, 0x76, 0x36, 0x22, 0x62, 0x0a, 0x18, - 0x44, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, - 0x6b, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6e, 0x65, 0x74, 0x77, - 0x6f, 0x72, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, - 0x72, 0x6b, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, - 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, - 0x22, 0x37, 0x0a, 0x07, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x18, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x07, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x73, 0x22, 0x33, 0x0a, 0x08, 0x4e, 0x65, 0x74, - 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x12, 0x27, 0x0a, 0x08, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x62, 0x2e, 0x4e, 0x65, 0x74, - 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x08, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x22, 0xe1, - 0x0a, 0x0a, 0x04, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x65, - 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, - 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x6f, 0x64, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x6f, 0x64, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x23, 0x0a, 0x03, 0x63, 0x70, 0x75, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, - 0x2e, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x2e, 0x43, 0x70, 0x75, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x03, 0x63, 0x70, 0x75, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x70, 0x75, 0x5f, 0x75, 0x73, - 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x01, 0x52, 0x07, 0x63, 0x70, 0x75, 0x55, 0x73, 0x65, - 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x06, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x65, 0x6d, - 0x6f, 0x72, 0x79, 0x5f, 0x75, 0x73, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, - 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x55, 0x73, 0x65, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x76, - 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x61, - 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, - 0x6c, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x62, 0x2e, 0x4e, 0x6f, - 0x64, 0x65, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, - 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x6d, - 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x69, 0x6e, 0x69, - 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x30, 0x0a, 0x08, 0x69, 0x6e, 0x69, 0x74, 0x5f, - 0x63, 0x70, 0x75, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x4e, - 0x6f, 0x64, 0x65, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x43, 0x70, 0x75, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x07, 0x69, 0x6e, 0x69, 0x74, 0x43, 0x70, 0x75, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x6e, 0x66, - 0x6f, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x26, 0x0a, - 0x04, 0x6e, 0x75, 0x6d, 0x61, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, - 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x2e, 0x4e, 0x75, 0x6d, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x04, 0x6e, 0x75, 0x6d, 0x61, 0x12, 0x39, 0x0a, 0x0b, 0x6e, 0x75, 0x6d, 0x61, 0x5f, 0x6d, 0x65, - 0x6d, 0x6f, 0x72, 0x79, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x62, 0x2e, - 0x4e, 0x6f, 0x64, 0x65, 0x2e, 0x4e, 0x75, 0x6d, 0x61, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x6e, 0x75, 0x6d, 0x61, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, - 0x12, 0x18, 0x0a, 0x07, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x07, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x75, 0x73, 0x65, 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0b, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x55, 0x73, 0x65, 0x64, 0x12, 0x21, 0x0a, - 0x0c, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x18, 0x11, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0b, 0x69, 0x6e, 0x69, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x12, 0x39, 0x0a, 0x0b, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x18, - 0x12, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x2e, - 0x49, 0x6e, 0x69, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x0a, 0x69, 0x6e, 0x69, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x76, - 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x18, 0x13, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x62, - 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x06, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x76, 0x6f, 0x6c, - 0x75, 0x6d, 0x65, 0x5f, 0x75, 0x73, 0x65, 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, - 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x55, 0x73, 0x65, 0x64, 0x12, 0x46, 0x0a, 0x10, 0x69, 0x6e, - 0x69, 0x74, 0x5f, 0x6e, 0x75, 0x6d, 0x61, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x18, 0x15, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x2e, 0x49, - 0x6e, 0x69, 0x74, 0x4e, 0x75, 0x6d, 0x61, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x52, 0x0e, 0x69, 0x6e, 0x69, 0x74, 0x4e, 0x75, 0x6d, 0x61, 0x4d, 0x65, 0x6d, 0x6f, - 0x72, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x79, 0x70, 0x61, 0x73, 0x73, 0x18, 0x16, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x06, 0x62, 0x79, 0x70, 0x61, 0x73, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x18, - 0x17, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, - 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65, 0x18, 0x18, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x55, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x36, - 0x0a, 0x08, 0x43, 0x70, 0x75, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, + 0x6e, 0x73, 0x12, 0x19, 0x0a, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x18, 0xe9, 0x07, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x17, 0x0a, + 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0xea, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x15, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, + 0xeb, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x22, 0x39, 0x0a, + 0x07, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x13, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0xe9, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, + 0x07, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x73, 0x18, 0xea, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x07, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x73, 0x22, 0x34, 0x0a, 0x08, 0x4e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x73, 0x12, 0x28, 0x0a, 0x08, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73, + 0x18, 0xe9, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x62, 0x2e, 0x4e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x08, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x22, 0xe0, + 0x02, 0x0a, 0x04, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x13, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0xe9, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x08, + 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0xea, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x19, 0x0a, 0x07, 0x70, 0x6f, 0x64, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0xeb, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x6f, 0x64, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x09, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, + 0x65, 0x18, 0xec, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, + 0x62, 0x6c, 0x65, 0x12, 0x17, 0x0a, 0x06, 0x62, 0x79, 0x70, 0x61, 0x73, 0x73, 0x18, 0xed, 0x07, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x62, 0x79, 0x70, 0x61, 0x73, 0x73, 0x12, 0x2d, 0x0a, 0x06, + 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0xee, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, + 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x13, 0x0a, 0x04, 0x69, + 0x6e, 0x66, 0x6f, 0x18, 0xef, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, + 0x12, 0x2c, 0x0a, 0x11, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x63, 0x61, 0x70, + 0x61, 0x63, 0x69, 0x74, 0x79, 0x18, 0xf0, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x12, 0x26, + 0x0a, 0x0e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65, + 0x18, 0xf1, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x55, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x1a, 0x3a, 0x0a, 0x0c, 0x49, 0x6e, 0x69, 0x74, 0x43, 0x70, 0x75, 0x45, 0x6e, 0x74, 0x72, + 0x01, 0x22, 0x39, 0x0a, 0x0d, 0x41, 0x64, 0x64, 0x50, 0x6f, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x12, 0x13, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0xe9, 0x07, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x13, 0x0a, 0x04, 0x64, 0x65, 0x73, 0x63, 0x18, + 0xea, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x65, 0x73, 0x63, 0x22, 0x27, 0x0a, 0x10, + 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x6f, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x13, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0xe9, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x24, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x50, 0x6f, 0x64, 0x4f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x13, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0xe9, + 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xad, 0x03, 0x0a, 0x0e, + 0x41, 0x64, 0x64, 0x4e, 0x6f, 0x64, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1b, + 0x0a, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0xe9, 0x07, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x08, 0x65, + 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0xea, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x19, 0x0a, 0x07, 0x70, 0x6f, 0x64, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0xeb, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x6f, 0x64, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x0f, 0x0a, 0x02, 0x63, 0x61, 0x18, 0xec, 0x07, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x63, 0x61, 0x12, 0x13, 0x0a, 0x04, 0x63, 0x65, 0x72, 0x74, 0x18, 0xed, 0x07, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x65, 0x72, 0x74, 0x12, 0x11, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0xee, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x37, 0x0a, 0x06, + 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0xef, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, + 0x70, 0x62, 0x2e, 0x41, 0x64, 0x64, 0x4e, 0x6f, 0x64, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, + 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x4a, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x5f, 0x6f, 0x70, 0x74, 0x73, 0x18, 0xf0, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, + 0x70, 0x62, 0x2e, 0x41, 0x64, 0x64, 0x4e, 0x6f, 0x64, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x70, 0x74, + 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x4d, 0x0a, 0x11, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x37, 0x0a, - 0x09, 0x4e, 0x75, 0x6d, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3d, 0x0a, 0x0f, 0x4e, 0x75, 0x6d, 0x61, 0x4d, 0x65, - 0x6d, 0x6f, 0x72, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3d, 0x0a, 0x0f, 0x49, 0x6e, 0x69, 0x74, 0x56, 0x6f, 0x6c, - 0x75, 0x6d, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x39, 0x0a, 0x0b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, - 0x41, 0x0a, 0x13, 0x49, 0x6e, 0x69, 0x74, 0x4e, 0x75, 0x6d, 0x61, 0x4d, 0x65, 0x6d, 0x6f, 0x72, - 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x22, 0x27, 0x0a, 0x05, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x05, 0x6e, - 0x6f, 0x64, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x70, 0x62, 0x2e, - 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x22, 0x45, 0x0a, 0x0d, 0x4e, - 0x6f, 0x64, 0x65, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x1a, 0x0a, 0x08, - 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x6f, 0x64, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x6f, 0x64, 0x6e, 0x61, - 0x6d, 0x65, 0x22, 0xc3, 0x08, 0x0a, 0x0e, 0x53, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x4f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x3d, 0x0a, 0x09, 0x64, 0x65, 0x6c, 0x74, 0x61, 0x5f, 0x63, 0x70, 0x75, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x74, 0x4e, 0x6f, 0x64, - 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x43, 0x70, - 0x75, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x64, 0x65, 0x6c, 0x74, 0x61, 0x43, 0x70, 0x75, - 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x65, 0x6c, 0x74, 0x61, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x64, 0x65, 0x6c, 0x74, 0x61, 0x4d, 0x65, 0x6d, - 0x6f, 0x72, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x65, 0x6c, 0x74, 0x61, 0x5f, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x64, 0x65, 0x6c, 0x74, - 0x61, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0x53, 0x0a, 0x11, 0x64, 0x65, 0x6c, 0x74, - 0x61, 0x5f, 0x6e, 0x75, 0x6d, 0x61, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x18, 0x06, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, - 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x4e, 0x75, 0x6d, - 0x61, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x64, 0x65, - 0x6c, 0x74, 0x61, 0x4e, 0x75, 0x6d, 0x61, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x30, 0x0a, - 0x04, 0x6e, 0x75, 0x6d, 0x61, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x62, - 0x2e, 0x53, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, - 0x4e, 0x75, 0x6d, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x6e, 0x75, 0x6d, 0x61, 0x12, - 0x36, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x1e, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x4f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x46, 0x0a, 0x0c, 0x64, 0x65, 0x6c, 0x74, 0x61, - 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, - 0x70, 0x62, 0x2e, 0x53, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x52, 0x0b, 0x64, 0x65, 0x6c, 0x74, 0x61, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, - 0x25, 0x0a, 0x0e, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x5f, 0x64, 0x6f, 0x77, - 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, - 0x64, 0x73, 0x44, 0x6f, 0x77, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, - 0x6e, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, - 0x6e, 0x74, 0x12, 0x29, 0x0a, 0x0a, 0x62, 0x79, 0x70, 0x61, 0x73, 0x73, 0x5f, 0x6f, 0x70, 0x74, - 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x72, 0x69, 0x4f, - 0x70, 0x74, 0x52, 0x09, 0x62, 0x79, 0x70, 0x61, 0x73, 0x73, 0x4f, 0x70, 0x74, 0x12, 0x0e, 0x0a, - 0x02, 0x63, 0x61, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x63, 0x61, 0x12, 0x12, 0x0a, - 0x04, 0x63, 0x65, 0x72, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x65, 0x72, - 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x49, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, - 0x6f, 0x70, 0x74, 0x73, 0x18, 0x10, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x62, 0x2e, - 0x53, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x73, 0x12, 0x14, - 0x0a, 0x05, 0x64, 0x65, 0x6c, 0x74, 0x61, 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x64, - 0x65, 0x6c, 0x74, 0x61, 0x1a, 0x3b, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x43, 0x70, 0x75, + 0x6b, 0x65, 0x79, 0x12, 0x22, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x61, 0x77, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x30, 0x0a, 0x11, 0x52, + 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x1b, 0x0a, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0xe9, 0x07, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xa1, 0x01, + 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x1b, 0x0a, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0xe9, 0x07, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x37, 0x0a, + 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0xea, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, + 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, + 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x1a, 0x42, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x4e, 0x75, 0x6d, 0x61, 0x4d, 0x65, - 0x6d, 0x6f, 0x72, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x22, 0x54, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x27, 0x0a, 0x04, 0x6f, + 0x70, 0x74, 0x73, 0x18, 0xe9, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, 0x2e, + 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x04, + 0x6f, 0x70, 0x74, 0x73, 0x12, 0x11, 0x0a, 0x03, 0x66, 0x69, 0x78, 0x18, 0xea, 0x07, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x03, 0x66, 0x69, 0x78, 0x22, 0x81, 0x02, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, + 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x19, 0x0a, 0x07, + 0x70, 0x6f, 0x64, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0xe9, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x70, 0x6f, 0x64, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x11, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0xea, + 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x12, 0x39, 0x0a, 0x06, 0x6c, 0x61, + 0x62, 0x65, 0x6c, 0x73, 0x18, 0xeb, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x62, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, + 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, + 0x5f, 0x69, 0x6e, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x18, 0xec, 0x07, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x0f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x49, 0x6e, 0x53, 0x65, 0x63, 0x6f, + 0x6e, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, + 0xed, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x73, 0x6b, 0x69, 0x70, 0x49, 0x6e, 0x66, 0x6f, + 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xf6, 0x03, 0x0a, 0x0e, + 0x53, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1b, + 0x0a, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0xe9, 0x07, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x08, 0x65, + 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0xea, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x0f, 0x0a, 0x02, 0x63, 0x61, 0x18, 0xeb, + 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x63, 0x61, 0x12, 0x13, 0x0a, 0x04, 0x63, 0x65, 0x72, + 0x74, 0x18, 0xec, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x65, 0x72, 0x74, 0x12, 0x11, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0xed, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x37, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0xee, 0x07, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x4f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x4a, 0x0a, 0x0d, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6f, 0x70, 0x74, 0x73, 0x18, 0xef, 0x07, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x4f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, + 0x70, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x4f, 0x70, 0x74, 0x73, 0x12, 0x15, 0x0a, 0x05, 0x64, 0x65, 0x6c, 0x74, 0x61, 0x18, + 0xf0, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x64, 0x65, 0x6c, 0x74, 0x61, 0x12, 0x26, 0x0a, + 0x0e, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x18, + 0xf1, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, + 0x73, 0x44, 0x6f, 0x77, 0x6e, 0x12, 0x23, 0x0a, 0x06, 0x62, 0x79, 0x70, 0x61, 0x73, 0x73, 0x18, + 0xf2, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x72, 0x69, 0x4f, + 0x70, 0x74, 0x52, 0x06, 0x62, 0x79, 0x70, 0x61, 0x73, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, + 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x37, 0x0a, 0x09, 0x4e, 0x75, 0x6d, 0x61, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x39, - 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3e, 0x0a, 0x10, 0x44, 0x65, 0x6c, - 0x74, 0x61, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x4d, 0x0a, 0x11, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x22, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x0c, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x61, 0x77, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x44, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x4e, - 0x6f, 0x64, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, - 0x74, 0x74, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x74, 0x74, 0x6c, 0x22, 0x32, - 0x0a, 0x14, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x61, - 0x6d, 0x65, 0x22, 0x7b, 0x0a, 0x17, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1a, 0x0a, - 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x6f, 0x64, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x6f, 0x64, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x6c, 0x69, 0x76, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x05, 0x61, 0x6c, 0x69, 0x76, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, - 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, - 0xc5, 0x01, 0x0a, 0x0a, 0x4e, 0x6f, 0x64, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x1a, - 0x0a, 0x08, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x08, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x78, - 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x65, 0x78, - 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x12, 0x32, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x64, 0x65, - 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, - 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x1a, 0x39, 0x0a, 0x0b, - 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xfc, 0x03, 0x0a, 0x08, 0x57, 0x6f, 0x72, 0x6b, - 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x6f, 0x64, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x6f, 0x64, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, - 0x0a, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1e, - 0x0a, 0x0a, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x0a, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x64, 0x12, 0x30, - 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, - 0x2e, 0x70, 0x62, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x4c, 0x61, 0x62, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x4d, 0x0a, 0x11, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x4f, 0x70, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x22, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, + 0x2e, 0x52, 0x61, 0x77, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x22, 0x46, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1b, 0x0a, 0x08, + 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0xe9, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x11, 0x0a, 0x03, 0x74, 0x74, 0x6c, + 0x18, 0xea, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x74, 0x74, 0x6c, 0x22, 0x33, 0x0a, 0x14, + 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1b, 0x0a, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0xe9, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, + 0x65, 0x22, 0x7f, 0x0a, 0x17, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1b, 0x0a, 0x08, + 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0xe9, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x07, 0x70, 0x6f, 0x64, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0xea, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x6f, 0x64, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x15, 0x0a, 0x05, 0x61, 0x6c, 0x69, 0x76, 0x65, 0x18, 0xeb, 0x07, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x61, 0x6c, 0x69, 0x76, 0x65, 0x12, 0x15, 0x0a, 0x05, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x18, 0xec, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x22, 0xc9, 0x01, 0x0a, 0x0a, 0x4e, 0x6f, 0x64, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x12, 0x1b, 0x0a, 0x08, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x18, 0xe9, 0x07, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x12, 0x1b, + 0x0a, 0x08, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x18, 0xea, 0x07, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x08, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73, 0x12, 0x33, 0x0a, 0x06, 0x6c, + 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0xeb, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, + 0x62, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, - 0x12, 0x33, 0x0a, 0x07, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x18, 0x07, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x62, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x2e, - 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x70, 0x75, - 0x62, 0x6c, 0x69, 0x73, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, - 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, - 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e, 0x76, 0x18, - 0x0c, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x65, 0x6e, 0x76, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x61, 0x72, 0x67, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x72, 0x67, 0x73, 0x1a, - 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3a, 0x0a, 0x0c, 0x50, 0x75, - 0x62, 0x6c, 0x69, 0x73, 0x68, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xd5, 0x02, 0x0a, 0x0e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, - 0x6f, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x75, 0x6e, - 0x6e, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x72, 0x75, 0x6e, 0x6e, - 0x69, 0x6e, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x79, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x79, 0x12, 0x3c, 0x0a, - 0x08, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x20, 0x2e, 0x70, 0x62, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x08, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x65, - 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, - 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x74, 0x6c, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x74, 0x74, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x61, - 0x70, 0x70, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, - 0x70, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, - 0x74, 0x1a, 0x3b, 0x0a, 0x0d, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x45, 0x6e, 0x74, + 0x12, 0x11, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0xec, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, + 0x61, 0x6c, 0x6c, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x3d, - 0x0a, 0x0f, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x12, 0x2a, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x47, 0x0a, - 0x19, 0x53, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2a, 0x0a, 0x06, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, 0x2e, - 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xf3, 0x01, 0x0a, 0x1b, 0x57, 0x6f, 0x72, 0x6b, 0x6c, - 0x6f, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x70, 0x70, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x43, 0x0a, 0x06, - 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, - 0x62, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4c, 0x61, - 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, - 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xb1, 0x01, 0x0a, - 0x1b, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x28, 0x0a, 0x08, - 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, - 0x2e, 0x70, 0x62, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x08, 0x77, 0x6f, - 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x2a, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, 0x2e, 0x57, 0x6f, 0x72, 0x6b, - 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x22, 0x37, 0x0a, 0x09, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x12, 0x2a, 0x0a, - 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x09, - 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x22, 0x1c, 0x0a, 0x0a, 0x57, 0x6f, 0x72, - 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x44, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x1f, 0x0a, 0x0b, 0x57, 0x6f, 0x72, 0x6b, 0x6c, - 0x6f, 0x61, 0x64, 0x49, 0x44, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x03, 0x69, 0x64, 0x73, 0x22, 0x3f, 0x0a, 0x15, 0x52, 0x65, 0x6d, 0x6f, - 0x76, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, - 0x69, 0x64, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x22, 0x2d, 0x0a, 0x19, 0x44, 0x69, 0x73, - 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x4f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x03, 0x69, 0x64, 0x73, 0x22, 0xba, 0x01, 0x0a, 0x0e, 0x52, 0x65, 0x61, - 0x6c, 0x6c, 0x6f, 0x63, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x49, 0x0a, 0x0d, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6f, 0x70, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x4f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, - 0x70, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x4f, 0x70, 0x74, 0x73, 0x1a, 0x4d, 0x0a, 0x11, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x4f, 0x70, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x22, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, - 0x62, 0x2e, 0x52, 0x61, 0x77, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x37, 0x0a, 0x0d, 0x41, 0x64, 0x64, 0x50, 0x6f, 0x64, 0x4f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x65, - 0x73, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x65, 0x73, 0x63, 0x22, 0x26, - 0x0a, 0x10, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x6f, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x23, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x50, 0x6f, 0x64, - 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xee, 0x06, 0x0a, 0x0e, - 0x41, 0x64, 0x64, 0x4e, 0x6f, 0x64, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1a, - 0x0a, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, - 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, - 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x6f, 0x64, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x6f, 0x64, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x0e, 0x0a, 0x02, 0x63, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x63, 0x61, - 0x12, 0x12, 0x0a, 0x04, 0x63, 0x65, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x63, 0x65, 0x72, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x70, 0x75, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x03, 0x63, 0x70, 0x75, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x72, - 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x73, 0x68, 0x61, 0x72, 0x65, 0x12, 0x16, - 0x0a, 0x06, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, - 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x36, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, - 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x62, 0x2e, 0x41, 0x64, 0x64, 0x4e, - 0x6f, 0x64, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x30, - 0x0a, 0x04, 0x6e, 0x75, 0x6d, 0x61, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, - 0x62, 0x2e, 0x41, 0x64, 0x64, 0x4e, 0x6f, 0x64, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x4e, 0x75, 0x6d, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x6e, 0x75, 0x6d, 0x61, - 0x12, 0x43, 0x0a, 0x0b, 0x6e, 0x75, 0x6d, 0x61, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x18, - 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x62, 0x2e, 0x41, 0x64, 0x64, 0x4e, 0x6f, - 0x64, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4e, 0x75, 0x6d, 0x61, 0x4d, 0x65, - 0x6d, 0x6f, 0x72, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x6e, 0x75, 0x6d, 0x61, 0x4d, - 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, - 0x40, 0x0a, 0x0a, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x6d, 0x61, 0x70, 0x18, 0x0e, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x62, 0x2e, 0x41, 0x64, 0x64, 0x4e, 0x6f, 0x64, 0x65, - 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x4d, 0x61, - 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x4d, 0x61, - 0x70, 0x12, 0x49, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6f, 0x70, - 0x74, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x62, 0x2e, 0x41, 0x64, - 0x64, 0x4e, 0x6f, 0x64, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x73, 0x1a, 0x39, 0x0a, 0x0b, - 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x37, 0x0a, 0x09, 0x4e, 0x75, 0x6d, 0x61, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, - 0x1a, 0x3d, 0x0a, 0x0f, 0x4e, 0x75, 0x6d, 0x61, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, - 0x3c, 0x0a, 0x0e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x4d, 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xfc, + 0x03, 0x0a, 0x08, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x70, + 0x6f, 0x64, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x6f, + 0x64, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, + 0x67, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x70, 0x72, 0x69, 0x76, 0x69, + 0x6c, 0x65, 0x67, 0x65, 0x64, 0x12, 0x30, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, + 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, + 0x6f, 0x61, 0x64, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x33, 0x0a, 0x07, 0x70, 0x75, 0x62, 0x6c, 0x69, + 0x73, 0x68, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x62, 0x2e, 0x57, 0x6f, + 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x07, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x12, 0x14, 0x0a, 0x05, + 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, 0x6d, 0x61, + 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1f, + 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0b, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, + 0x10, 0x0a, 0x03, 0x65, 0x6e, 0x76, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x65, 0x6e, + 0x76, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x61, 0x72, + 0x67, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x41, 0x72, 0x67, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x1a, 0x3a, 0x0a, 0x0c, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x4d, 0x0a, - 0x11, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x22, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x61, 0x77, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x2f, 0x0a, 0x11, - 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xb9, 0x01, - 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x36, 0x0a, 0x06, - 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, - 0x62, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, - 0x62, 0x65, 0x6c, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x1a, 0x39, - 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x52, 0x0a, 0x16, 0x47, 0x65, 0x74, - 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x04, 0x6f, 0x70, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x4f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x04, 0x6f, 0x70, 0x74, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x66, - 0x69, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x66, 0x69, 0x78, 0x22, 0xfc, 0x01, - 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x4f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x6f, 0x64, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x6f, 0x64, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, - 0x61, 0x6c, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x12, 0x38, - 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, - 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x4f, 0x70, 0x74, + 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xd5, 0x02, + 0x0a, 0x0e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x18, 0x0a, 0x07, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x07, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x68, 0x65, + 0x61, 0x6c, 0x74, 0x68, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x68, 0x65, 0x61, + 0x6c, 0x74, 0x68, 0x79, 0x12, 0x3c, 0x0a, 0x08, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73, + 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x62, 0x2e, 0x57, 0x6f, 0x72, 0x6b, + 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, + 0x12, 0x10, 0x0a, 0x03, 0x74, 0x74, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x74, + 0x74, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x70, 0x70, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, + 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x6e, 0x74, 0x72, + 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x6e, + 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x1a, 0x3b, 0x0a, 0x0d, 0x4e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x3d, 0x0a, 0x0f, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, + 0x64, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2a, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, 0x2e, 0x57, 0x6f, + 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x22, 0x47, 0x0a, 0x19, 0x53, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x6c, + 0x6f, 0x61, 0x64, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x12, 0x2a, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xf3, 0x01, + 0x0a, 0x1b, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x18, 0x0a, + 0x07, 0x61, 0x70, 0x70, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x61, 0x70, 0x70, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x6e, 0x74, 0x72, 0x79, + 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x6e, 0x74, + 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x43, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x04, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x62, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, + 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x69, 0x6d, 0x65, - 0x6f, 0x75, 0x74, 0x5f, 0x69, 0x6e, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x0f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x49, 0x6e, 0x53, 0x65, - 0x63, 0x6f, 0x6e, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x69, 0x6e, 0x66, - 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x73, 0x6b, 0x69, 0x70, 0x49, 0x6e, 0x66, - 0x6f, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xdc, 0x05, 0x0a, - 0x05, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x62, 0x61, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x65, - 0x70, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x12, 0x18, - 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x64, 0x69, 0x72, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x64, 0x69, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x75, - 0x62, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x73, - 0x75, 0x62, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x73, 0x12, 0x27, 0x0a, 0x04, 0x65, 0x6e, 0x76, 0x73, 0x18, 0x07, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x45, 0x6e, - 0x76, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x65, 0x6e, 0x76, 0x73, 0x12, 0x27, 0x0a, - 0x04, 0x61, 0x72, 0x67, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x62, - 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x41, 0x72, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x04, 0x61, 0x72, 0x67, 0x73, 0x12, 0x2d, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, - 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x42, 0x75, 0x69, 0x6c, - 0x64, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, - 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x36, 0x0a, 0x09, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, - 0x74, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x42, 0x75, - 0x69, 0x6c, 0x64, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x52, 0x09, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x12, 0x2a, 0x0a, - 0x05, 0x63, 0x61, 0x63, 0x68, 0x65, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, - 0x62, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x43, 0x61, 0x63, 0x68, 0x65, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x52, 0x05, 0x63, 0x61, 0x63, 0x68, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x74, 0x6f, - 0x70, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, - 0x73, 0x74, 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, - 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x73, 0x65, - 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x1a, 0x37, 0x0a, 0x09, 0x45, 0x6e, 0x76, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, - 0x37, 0x0a, 0x09, 0x41, 0x72, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, + 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, + 0x02, 0x38, 0x01, 0x22, 0xb1, 0x01, 0x0a, 0x1b, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x28, 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, + 0x6f, 0x61, 0x64, 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x2a, 0x0a, + 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, + 0x70, 0x62, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, + 0x16, 0x0a, 0x06, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x06, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x22, 0x37, 0x0a, 0x09, 0x57, 0x6f, 0x72, 0x6b, 0x6c, + 0x6f, 0x61, 0x64, 0x73, 0x12, 0x2a, 0x0a, 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x2e, 0x57, 0x6f, 0x72, + 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, + 0x22, 0x1c, 0x0a, 0x0a, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x44, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x1f, + 0x0a, 0x0b, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x44, 0x73, 0x12, 0x10, 0x0a, + 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x69, 0x64, 0x73, 0x22, + 0x3f, 0x0a, 0x15, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, + 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x69, 0x64, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, + 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, + 0x22, 0x2d, 0x0a, 0x19, 0x44, 0x69, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x57, 0x6f, + 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x10, 0x0a, + 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x69, 0x64, 0x73, 0x22, + 0xbc, 0x01, 0x0a, 0x0e, 0x52, 0x65, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x4f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x12, 0x0f, 0x0a, 0x02, 0x69, 0x64, 0x18, 0xe9, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x4a, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, + 0x6f, 0x70, 0x74, 0x73, 0x18, 0xea, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x62, + 0x2e, 0x52, 0x65, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x73, 0x1a, + 0x4d, 0x0a, 0x11, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x22, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x61, 0x77, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xdc, + 0x05, 0x0a, 0x05, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x61, 0x73, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x62, 0x61, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, + 0x72, 0x65, 0x70, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x65, 0x70, 0x6f, + 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x64, 0x69, + 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x64, 0x69, 0x72, 0x12, 0x1c, 0x0a, 0x09, + 0x73, 0x75, 0x62, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x09, 0x73, 0x75, 0x62, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x12, 0x27, 0x0a, 0x04, 0x65, 0x6e, 0x76, 0x73, 0x18, 0x07, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x2e, + 0x45, 0x6e, 0x76, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x65, 0x6e, 0x76, 0x73, 0x12, + 0x27, 0x0a, 0x04, 0x61, 0x72, 0x67, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, + 0x70, 0x62, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x41, 0x72, 0x67, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x04, 0x61, 0x72, 0x67, 0x73, 0x12, 0x2d, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, + 0x6c, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x42, 0x75, + 0x69, 0x6c, 0x64, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x36, 0x0a, 0x09, 0x61, 0x72, 0x74, 0x69, 0x66, + 0x61, 0x63, 0x74, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x62, 0x2e, + 0x42, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x12, + 0x2a, 0x0a, 0x05, 0x63, 0x61, 0x63, 0x68, 0x65, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, + 0x2e, 0x70, 0x62, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x43, 0x61, 0x63, 0x68, 0x65, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x63, 0x61, 0x63, 0x68, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, + 0x74, 0x6f, 0x70, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x73, 0x74, 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x12, 0x1a, 0x0a, 0x08, + 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, + 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x1a, 0x37, 0x0a, 0x09, 0x45, 0x6e, 0x76, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x1a, 0x38, 0x0a, 0x0a, 0x43, 0x61, 0x63, 0x68, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, - 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, - 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x96, 0x01, 0x0a, 0x06, - 0x42, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x67, 0x65, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x67, 0x65, 0x73, 0x12, 0x2e, - 0x0a, 0x06, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, - 0x2e, 0x70, 0x62, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x1a, 0x44, - 0x0a, 0x0b, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x1f, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x09, - 0x2e, 0x70, 0x62, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x22, 0xa4, 0x02, 0x0a, 0x11, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6d, - 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, - 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, - 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x03, 0x75, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x04, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x22, 0x0a, 0x06, 0x62, 0x75, 0x69, 0x6c, - 0x64, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x42, 0x75, - 0x69, 0x6c, 0x64, 0x73, 0x52, 0x06, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x12, 0x10, 0x0a, 0x03, - 0x74, 0x61, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x74, 0x61, 0x72, 0x12, 0x44, - 0x0a, 0x0c, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x70, 0x62, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, - 0x6d, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x42, 0x75, 0x69, 0x6c, - 0x64, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x52, 0x0b, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x4d, 0x65, - 0x74, 0x68, 0x6f, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x78, 0x69, 0x73, 0x74, 0x5f, 0x69, 0x64, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x78, 0x69, 0x73, 0x74, 0x49, 0x64, 0x22, - 0x2a, 0x0a, 0x0b, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x07, - 0x0a, 0x03, 0x53, 0x43, 0x4d, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x52, 0x41, 0x57, 0x10, 0x01, - 0x12, 0x09, 0x0a, 0x05, 0x45, 0x58, 0x49, 0x53, 0x54, 0x10, 0x02, 0x22, 0x65, 0x0a, 0x0b, 0x48, - 0x6f, 0x6f, 0x6b, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x66, - 0x74, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x0a, 0x61, 0x66, 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x62, - 0x65, 0x66, 0x6f, 0x72, 0x65, 0x5f, 0x73, 0x74, 0x6f, 0x70, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x0a, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x53, 0x74, 0x6f, 0x70, 0x12, 0x14, 0x0a, 0x05, - 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, - 0x63, 0x65, 0x22, 0x74, 0x0a, 0x12, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x63, 0x70, 0x5f, - 0x70, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x74, 0x63, 0x70, - 0x50, 0x6f, 0x72, 0x74, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x70, 0x6f, - 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x68, 0x74, 0x74, 0x70, 0x50, 0x6f, - 0x72, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x75, 0x72, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x8f, 0x01, 0x0a, 0x0a, 0x4c, 0x6f, 0x67, - 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x32, 0x0a, 0x06, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, - 0x2e, 0x4c, 0x6f, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, - 0x39, 0x0a, 0x0b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, + 0x01, 0x1a, 0x37, 0x0a, 0x09, 0x41, 0x72, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xbe, 0x03, 0x0a, 0x11, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x1e, - 0x0a, 0x0a, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x0a, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x64, 0x12, 0x10, - 0x0a, 0x03, 0x64, 0x69, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x64, 0x69, 0x72, - 0x12, 0x20, 0x0a, 0x03, 0x6c, 0x6f, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, - 0x70, 0x62, 0x2e, 0x4c, 0x6f, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x03, 0x6c, - 0x6f, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x18, 0x06, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x07, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x12, 0x38, 0x0a, 0x0b, - 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x62, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0b, 0x68, 0x65, 0x61, 0x6c, 0x74, - 0x68, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x23, 0x0a, 0x04, 0x68, 0x6f, 0x6f, 0x6b, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x48, 0x6f, 0x6f, 0x6b, 0x4f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x04, 0x68, 0x6f, 0x6f, 0x6b, 0x12, 0x18, 0x0a, 0x07, 0x72, - 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x3c, 0x0a, 0x07, 0x73, 0x79, 0x73, 0x63, 0x74, 0x6c, 0x73, - 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x79, - 0x73, 0x63, 0x74, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x73, 0x79, 0x73, 0x63, - 0x74, 0x6c, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x18, - 0x0b, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x1a, - 0x3a, 0x0a, 0x0c, 0x53, 0x79, 0x73, 0x63, 0x74, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, + 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, + 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x1a, 0x38, 0x0a, 0x0a, 0x43, 0x61, 0x63, 0x68, 0x65, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x96, 0x01, + 0x0a, 0x06, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x67, + 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x67, 0x65, 0x73, + 0x12, 0x2e, 0x0a, 0x06, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x16, 0x2e, 0x70, 0x62, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x2e, 0x42, 0x75, 0x69, + 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x73, + 0x1a, 0x44, 0x0a, 0x0b, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, - 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x73, 0x0a, 0x06, 0x56, - 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x06, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x62, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, - 0x65, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x76, - 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x1a, 0x39, 0x0a, 0x0b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x45, + 0x79, 0x12, 0x1f, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xa4, 0x02, 0x0a, 0x11, 0x42, 0x75, 0x69, 0x6c, 0x64, + 0x49, 0x6d, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x12, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x75, 0x73, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x04, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x22, 0x0a, 0x06, 0x62, 0x75, + 0x69, 0x6c, 0x64, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x70, 0x62, 0x2e, + 0x42, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x52, 0x06, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x12, 0x10, + 0x0a, 0x03, 0x74, 0x61, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x74, 0x61, 0x72, + 0x12, 0x44, 0x0a, 0x0c, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x70, 0x62, 0x2e, 0x42, 0x75, 0x69, 0x6c, + 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x42, 0x75, + 0x69, 0x6c, 0x64, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x52, 0x0b, 0x62, 0x75, 0x69, 0x6c, 0x64, + 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x78, 0x69, 0x73, 0x74, 0x5f, + 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x78, 0x69, 0x73, 0x74, 0x49, + 0x64, 0x22, 0x2a, 0x0a, 0x0b, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, + 0x12, 0x07, 0x0a, 0x03, 0x53, 0x43, 0x4d, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x52, 0x41, 0x57, + 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x58, 0x49, 0x53, 0x54, 0x10, 0x02, 0x22, 0x65, 0x0a, + 0x0b, 0x48, 0x6f, 0x6f, 0x6b, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1f, 0x0a, 0x0b, + 0x61, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x0a, 0x61, 0x66, 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x1f, 0x0a, + 0x0b, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x5f, 0x73, 0x74, 0x6f, 0x70, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x0a, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x53, 0x74, 0x6f, 0x70, 0x12, 0x14, + 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, + 0x6f, 0x72, 0x63, 0x65, 0x22, 0x74, 0x0a, 0x12, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, + 0x65, 0x63, 0x6b, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x63, + 0x70, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x74, + 0x63, 0x70, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x68, 0x74, 0x74, 0x70, 0x5f, + 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x68, 0x74, 0x74, 0x70, + 0x50, 0x6f, 0x72, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x8f, 0x01, 0x0a, 0x0a, 0x4c, + 0x6f, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x32, 0x0a, + 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x70, 0x62, 0x2e, 0x4c, 0x6f, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x1a, 0x39, 0x0a, 0x0b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xbe, 0x03, 0x0a, + 0x11, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x64, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x64, + 0x12, 0x10, 0x0a, 0x03, 0x64, 0x69, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x64, + 0x69, 0x72, 0x12, 0x20, 0x0a, 0x03, 0x6c, 0x6f, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x6f, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, + 0x03, 0x6c, 0x6f, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x18, + 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x12, 0x38, + 0x0a, 0x0b, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x62, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0b, 0x68, 0x65, 0x61, + 0x6c, 0x74, 0x68, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x23, 0x0a, 0x04, 0x68, 0x6f, 0x6f, 0x6b, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x48, 0x6f, 0x6f, 0x6b, + 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x04, 0x68, 0x6f, 0x6f, 0x6b, 0x12, 0x18, 0x0a, + 0x07, 0x72, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x72, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x3c, 0x0a, 0x07, 0x73, 0x79, 0x73, 0x63, 0x74, + 0x6c, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, + 0x53, 0x79, 0x73, 0x63, 0x74, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x73, 0x79, + 0x73, 0x63, 0x74, 0x6c, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x73, 0x1a, 0x3a, 0x0a, 0x0c, 0x53, 0x79, 0x73, 0x63, 0x74, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x73, 0x0a, + 0x06, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x06, 0x76, 0x6f, 0x6c, 0x75, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x62, 0x2e, 0x56, 0x6f, 0x6c, + 0x75, 0x6d, 0x65, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x06, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x1a, 0x39, 0x0a, 0x0b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, + 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x22, 0x90, 0x0c, 0x0a, 0x0d, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x4f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x0a, 0x65, 0x6e, 0x74, 0x72, + 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, + 0x62, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x52, 0x0a, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, + 0x18, 0x0a, 0x07, 0x70, 0x6f, 0x64, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x70, 0x6f, 0x64, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x6f, 0x64, + 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x6f, + 0x64, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x1d, 0x0a, + 0x0a, 0x65, 0x78, 0x74, 0x72, 0x61, 0x5f, 0x61, 0x72, 0x67, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x65, 0x78, 0x74, 0x72, 0x61, 0x41, 0x72, 0x67, 0x73, 0x12, 0x14, 0x0a, 0x05, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e, 0x76, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x03, 0x65, 0x6e, 0x76, 0x12, 0x10, 0x0a, 0x03, 0x64, 0x6e, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x03, 0x64, 0x6e, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x78, 0x74, 0x72, 0x61, 0x5f, + 0x68, 0x6f, 0x73, 0x74, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x78, 0x74, + 0x72, 0x61, 0x48, 0x6f, 0x73, 0x74, 0x73, 0x12, 0x3b, 0x0a, 0x08, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x62, 0x2e, 0x44, + 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x0d, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x64, 0x65, 0x62, 0x75, + 0x67, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x64, 0x65, 0x62, 0x75, 0x67, 0x12, 0x1d, + 0x0a, 0x0a, 0x6f, 0x70, 0x65, 0x6e, 0x5f, 0x73, 0x74, 0x64, 0x69, 0x6e, 0x18, 0x0f, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x09, 0x6f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x64, 0x69, 0x6e, 0x12, 0x35, 0x0a, + 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x10, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, + 0x70, 0x62, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, + 0x62, 0x65, 0x6c, 0x73, 0x12, 0x41, 0x0a, 0x0a, 0x6e, 0x6f, 0x64, 0x65, 0x6c, 0x61, 0x62, 0x65, + 0x6c, 0x73, 0x18, 0x11, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4e, 0x6f, 0x64, 0x65, + 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x6e, 0x6f, 0x64, + 0x65, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x43, 0x0a, 0x0f, 0x64, 0x65, 0x70, 0x6c, 0x6f, + 0x79, 0x5f, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x4f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x52, 0x0e, 0x64, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x12, 0x2f, 0x0a, 0x04, + 0x64, 0x61, 0x74, 0x61, 0x18, 0x13, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x62, 0x2e, + 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x44, 0x61, + 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1f, 0x0a, + 0x0b, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x14, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0a, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1f, + 0x0a, 0x0b, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x5f, 0x68, 0x6f, 0x6f, 0x6b, 0x18, 0x15, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x12, + 0x21, 0x0a, 0x0c, 0x61, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, + 0x16, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x66, 0x74, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x61, 0x77, 0x5f, 0x61, 0x72, 0x67, 0x73, 0x18, 0x17, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x72, 0x61, 0x77, 0x41, 0x72, 0x67, 0x73, 0x12, 0x2f, 0x0a, + 0x0b, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x19, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x46, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x52, 0x0a, 0x6e, 0x6f, 0x64, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x32, + 0x0a, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x1a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, + 0x70, 0x62, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x6d, 0x6f, 0x64, + 0x65, 0x73, 0x12, 0x35, 0x0a, 0x06, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x18, 0x1b, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x4f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x06, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x12, 0x48, 0x0a, 0x0d, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6f, 0x70, 0x74, 0x73, 0x18, 0x1c, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x23, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x4f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, + 0x70, 0x74, 0x73, 0x1a, 0x3b, 0x0a, 0x0d, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, - 0x22, 0x90, 0x0c, 0x0a, 0x0d, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x4f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x0a, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, - 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x62, 0x2e, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x52, 0x0a, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x18, 0x0a, - 0x07, 0x70, 0x6f, 0x64, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x70, 0x6f, 0x64, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x6f, 0x64, 0x65, 0x6e, - 0x61, 0x6d, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x6f, 0x64, 0x65, - 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x65, - 0x78, 0x74, 0x72, 0x61, 0x5f, 0x61, 0x72, 0x67, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x65, 0x78, 0x74, 0x72, 0x61, 0x41, 0x72, 0x67, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e, 0x76, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x65, - 0x6e, 0x76, 0x12, 0x10, 0x0a, 0x03, 0x64, 0x6e, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x03, 0x64, 0x6e, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x78, 0x74, 0x72, 0x61, 0x5f, 0x68, 0x6f, - 0x73, 0x74, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x72, 0x61, - 0x48, 0x6f, 0x73, 0x74, 0x73, 0x12, 0x3b, 0x0a, 0x08, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, - 0x72, 0x6b, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, - 0x6b, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x64, 0x65, 0x62, 0x75, 0x67, 0x18, - 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x64, 0x65, 0x62, 0x75, 0x67, 0x12, 0x1d, 0x0a, 0x0a, - 0x6f, 0x70, 0x65, 0x6e, 0x5f, 0x73, 0x74, 0x64, 0x69, 0x6e, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x09, 0x6f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x64, 0x69, 0x6e, 0x12, 0x35, 0x0a, 0x06, 0x6c, - 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x10, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x62, - 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4c, - 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, - 0x6c, 0x73, 0x12, 0x41, 0x0a, 0x0a, 0x6e, 0x6f, 0x64, 0x65, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, - 0x18, 0x11, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x70, 0x6c, - 0x6f, 0x79, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x6c, 0x61, - 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x6e, 0x6f, 0x64, 0x65, 0x6c, - 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x43, 0x0a, 0x0f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x5f, - 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, - 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x2e, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x52, 0x0e, 0x64, 0x65, 0x70, 0x6c, - 0x6f, 0x79, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x12, 0x2f, 0x0a, 0x04, 0x64, 0x61, - 0x74, 0x61, 0x18, 0x13, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, - 0x70, 0x6c, 0x6f, 0x79, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x44, 0x61, 0x74, 0x61, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1f, 0x0a, 0x0b, 0x6e, - 0x6f, 0x64, 0x65, 0x73, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x14, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x0a, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1f, 0x0a, 0x0b, - 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x5f, 0x68, 0x6f, 0x6f, 0x6b, 0x18, 0x15, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0a, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x12, 0x21, 0x0a, - 0x0c, 0x61, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x16, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x66, 0x74, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x12, 0x19, 0x0a, 0x08, 0x72, 0x61, 0x77, 0x5f, 0x61, 0x72, 0x67, 0x73, 0x18, 0x17, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x07, 0x72, 0x61, 0x77, 0x41, 0x72, 0x67, 0x73, 0x12, 0x2f, 0x0a, 0x0b, 0x6e, - 0x6f, 0x64, 0x65, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, - 0x52, 0x0a, 0x6e, 0x6f, 0x64, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x32, 0x0a, 0x05, - 0x6d, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x1a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x62, - 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4d, - 0x6f, 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x73, - 0x12, 0x35, 0x0a, 0x06, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x18, 0x1b, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x1d, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x4f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x06, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x12, 0x48, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x5f, 0x6f, 0x70, 0x74, 0x73, 0x18, 0x1c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, - 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x70, 0x74, - 0x73, 0x1a, 0x3b, 0x0a, 0x0d, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x39, - 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3d, 0x0a, 0x0f, 0x4e, 0x6f, 0x64, - 0x65, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x37, 0x0a, 0x09, 0x44, 0x61, 0x74, 0x61, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3d, 0x0a, 0x0f, 0x4e, + 0x6f, 0x64, 0x65, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, + 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x37, 0x0a, 0x09, 0x44, 0x61, + 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x1a, 0x46, 0x0a, 0x0a, 0x4d, 0x6f, 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x22, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x4d, 0x6f, 0x64, 0x65, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x48, 0x0a, 0x0b, 0x4f, + 0x77, 0x6e, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x23, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x62, + 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x4d, 0x0a, 0x11, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x4f, 0x70, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x22, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, + 0x2e, 0x52, 0x61, 0x77, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x22, 0x3f, 0x0a, 0x08, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, + 0x12, 0x08, 0x0a, 0x04, 0x41, 0x55, 0x54, 0x4f, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x46, 0x49, + 0x4c, 0x4c, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x45, 0x41, 0x43, 0x48, 0x10, 0x02, 0x12, 0x0a, + 0x0a, 0x06, 0x47, 0x4c, 0x4f, 0x42, 0x41, 0x4c, 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, 0x44, 0x55, + 0x4d, 0x4d, 0x59, 0x10, 0x63, 0x22, 0xf2, 0x02, 0x0a, 0x0e, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, + 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2f, 0x0a, 0x09, 0x64, 0x65, 0x70, 0x6c, + 0x6f, 0x79, 0x4f, 0x70, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x62, + 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x09, + 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x4f, 0x70, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x68, 0x65, 0x72, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x0e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x68, 0x65, 0x72, 0x69, + 0x74, 0x12, 0x49, 0x0a, 0x0d, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x6c, 0x61, 0x62, 0x65, + 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, + 0x70, 0x6c, 0x61, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x46, 0x69, 0x6c, + 0x74, 0x65, 0x72, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, + 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x30, 0x0a, 0x04, + 0x63, 0x6f, 0x70, 0x79, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x62, 0x2e, + 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x43, + 0x6f, 0x70, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x63, 0x6f, 0x70, 0x79, 0x12, 0x10, + 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x69, 0x64, 0x73, + 0x1a, 0x3f, 0x0a, 0x11, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x1a, 0x46, 0x0a, 0x0a, 0x4d, 0x6f, 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, - 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, - 0x79, 0x12, 0x22, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x48, 0x0a, 0x0b, 0x4f, 0x77, 0x6e, - 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x23, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x62, 0x2e, 0x46, - 0x69, 0x6c, 0x65, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x1a, 0x4d, 0x0a, 0x11, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, - 0x70, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x22, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x2e, 0x52, - 0x61, 0x77, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x22, 0x3f, 0x0a, 0x08, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x12, 0x08, - 0x0a, 0x04, 0x41, 0x55, 0x54, 0x4f, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x46, 0x49, 0x4c, 0x4c, - 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x45, 0x41, 0x43, 0x48, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, - 0x47, 0x4c, 0x4f, 0x42, 0x41, 0x4c, 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, 0x44, 0x55, 0x4d, 0x4d, - 0x59, 0x10, 0x63, 0x22, 0xf2, 0x02, 0x0a, 0x0e, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x4f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2f, 0x0a, 0x09, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x4f, 0x70, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x62, 0x2e, 0x44, - 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x09, 0x64, 0x65, - 0x70, 0x6c, 0x6f, 0x79, 0x4f, 0x70, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x6e, 0x65, 0x74, 0x77, 0x6f, - 0x72, 0x6b, 0x69, 0x6e, 0x68, 0x65, 0x72, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x68, 0x65, 0x72, 0x69, 0x74, 0x12, - 0x49, 0x0a, 0x0d, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x70, 0x6c, - 0x61, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, - 0x72, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x66, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x30, 0x0a, 0x04, 0x63, 0x6f, - 0x70, 0x79, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, - 0x70, 0x6c, 0x61, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x43, 0x6f, 0x70, - 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x63, 0x6f, 0x70, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x69, 0x64, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x69, 0x64, 0x73, 0x1a, 0x3f, - 0x0a, 0x11, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, - 0x37, 0x0a, 0x09, 0x43, 0x6f, 0x70, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x77, 0x0a, 0x11, 0x43, 0x61, 0x63, 0x68, - 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x18, 0x0a, - 0x07, 0x70, 0x6f, 0x64, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x70, 0x6f, 0x64, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x6f, 0x64, 0x65, 0x6e, - 0x61, 0x6d, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x6f, 0x64, 0x65, - 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x12, 0x12, 0x0a, - 0x04, 0x73, 0x74, 0x65, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x73, 0x74, 0x65, - 0x70, 0x22, 0x8e, 0x01, 0x0a, 0x12, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x49, 0x6d, 0x61, 0x67, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x1a, 0x37, 0x0a, 0x09, 0x43, 0x6f, 0x70, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, + 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x77, 0x0a, 0x11, 0x43, 0x61, + 0x63, 0x68, 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, + 0x18, 0x0a, 0x07, 0x70, 0x6f, 0x64, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x70, 0x6f, 0x64, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x6f, 0x64, + 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x6f, + 0x64, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x6d, 0x61, 0x67, 0x65, + 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x12, + 0x12, 0x0a, 0x04, 0x73, 0x74, 0x65, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x73, + 0x74, 0x65, 0x70, 0x22, 0x8e, 0x01, 0x0a, 0x12, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x49, 0x6d, + 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x6f, + 0x64, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x6f, 0x64, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, 0x65, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, + 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x06, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x74, + 0x65, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x73, 0x74, 0x65, 0x70, 0x12, 0x14, + 0x0a, 0x05, 0x70, 0x72, 0x75, 0x6e, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x70, + 0x72, 0x75, 0x6e, 0x65, 0x22, 0x62, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x6f, 0x64, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x6f, 0x64, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x73, - 0x12, 0x16, 0x0a, 0x06, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x06, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x74, 0x65, 0x70, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x73, 0x74, 0x65, 0x70, 0x12, 0x14, 0x0a, 0x05, - 0x70, 0x72, 0x75, 0x6e, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x70, 0x72, 0x75, - 0x6e, 0x65, 0x22, 0x62, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x4f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x6f, 0x64, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x6f, 0x64, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x16, - 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0x21, 0x0a, 0x09, 0x43, 0x6f, 0x70, 0x79, 0x50, 0x61, - 0x74, 0x68, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x61, 0x74, 0x68, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x05, 0x70, 0x61, 0x74, 0x68, 0x73, 0x22, 0x90, 0x01, 0x0a, 0x0b, 0x43, 0x6f, - 0x70, 0x79, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x36, 0x0a, 0x07, 0x74, 0x61, 0x72, - 0x67, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x62, 0x2e, - 0x43, 0x6f, 0x70, 0x79, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x54, 0x61, 0x72, 0x67, - 0x65, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x73, 0x1a, 0x49, 0x0a, 0x0c, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x23, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x6f, 0x70, 0x79, 0x50, 0x61, 0x74, 0x68, - 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x2f, 0x0a, 0x09, - 0x46, 0x69, 0x6c, 0x65, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x67, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x67, 0x69, 0x64, 0x22, 0x1e, 0x0a, - 0x08, 0x46, 0x69, 0x6c, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x6f, 0x64, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x22, 0x80, 0x03, - 0x0a, 0x0b, 0x53, 0x65, 0x6e, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x10, 0x0a, - 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x69, 0x64, 0x73, 0x12, - 0x2d, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, - 0x70, 0x62, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x44, - 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x30, - 0x0a, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x70, 0x62, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4d, - 0x6f, 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x73, - 0x12, 0x33, 0x0a, 0x06, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x1b, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6f, - 0x77, 0x6e, 0x65, 0x72, 0x73, 0x1a, 0x37, 0x0a, 0x09, 0x44, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x46, - 0x0a, 0x0a, 0x4d, 0x6f, 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x22, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, - 0x70, 0x62, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x48, 0x0a, 0x0b, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x23, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x69, 0x6c, 0x65, - 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, - 0x22, 0x3b, 0x0a, 0x0b, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, - 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x63, - 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xb9, 0x01, - 0x0a, 0x11, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x70, - 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, - 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x16, 0x0a, - 0x06, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x32, 0x0a, 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x64, - 0x65, 0x74, 0x61, 0x69, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x62, - 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x0b, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x22, 0xd8, 0x02, 0x0a, 0x15, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x6f, 0x64, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x6f, 0x64, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, - 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, - 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x40, 0x0a, - 0x07, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, - 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, - 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, - 0x68, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x12, - 0x12, 0x0a, 0x04, 0x68, 0x6f, 0x6f, 0x6b, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x68, - 0x6f, 0x6f, 0x6b, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, - 0x61, 0x72, 0x67, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x41, 0x72, 0x67, 0x73, 0x1a, 0x3a, 0x0a, 0x0c, 0x50, 0x75, 0x62, 0x6c, - 0x69, 0x73, 0x68, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x22, 0x94, 0x01, 0x0a, 0x16, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, - 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, - 0x31, 0x0a, 0x06, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x19, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, - 0x6f, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x06, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x12, 0x31, 0x0a, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x57, 0x6f, - 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x06, 0x72, - 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x79, 0x0a, 0x11, 0x43, - 0x61, 0x63, 0x68, 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x60, 0x0a, 0x12, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, - 0x49, 0x6d, 0x61, 0x67, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, - 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, 0x6d, 0x61, - 0x67, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x1a, 0x0a, 0x08, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x2f, 0x0a, 0x09, 0x49, 0x6d, 0x61, 0x67, - 0x65, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x22, 0x67, 0x0a, 0x10, 0x4c, 0x69, 0x73, - 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x25, 0x0a, - 0x06, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, - 0x70, 0x62, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x06, 0x69, 0x6d, - 0x61, 0x67, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x10, 0x0a, 0x03, 0x65, 0x72, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x65, - 0x72, 0x72, 0x22, 0x55, 0x0a, 0x15, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x57, 0x6f, 0x72, 0x6b, - 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x73, - 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x6f, 0x6f, 0x6b, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x6f, 0x6f, 0x6b, 0x22, 0x41, 0x0a, 0x19, 0x44, 0x69, 0x73, - 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x2e, 0x0a, 0x16, - 0x52, 0x65, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x6f, 0x0a, 0x0b, - 0x43, 0x6f, 0x70, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, - 0x61, 0x74, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, - 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x47, 0x0a, - 0x0b, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, - 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, - 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x87, 0x01, 0x0a, 0x15, 0x41, 0x74, 0x74, 0x61, 0x63, - 0x68, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x12, 0x1f, 0x0a, 0x0b, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x49, - 0x64, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x39, 0x0a, 0x0f, 0x73, 0x74, 0x64, 0x5f, 0x73, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, - 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x64, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x54, 0x79, 0x70, - 0x65, 0x52, 0x0d, 0x73, 0x74, 0x64, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x54, 0x79, 0x70, 0x65, - 0x22, 0x9a, 0x01, 0x0a, 0x11, 0x52, 0x75, 0x6e, 0x41, 0x6e, 0x64, 0x57, 0x61, 0x69, 0x74, 0x4f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x38, 0x0a, 0x0e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, - 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x52, 0x0d, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0x10, 0x0a, 0x03, 0x63, 0x6d, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x63, - 0x6d, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x05, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x73, 0x79, 0x6e, - 0x63, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x0c, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x22, 0x54, 0x0a, - 0x16, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, - 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x69, 0x64, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, - 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, - 0x72, 0x63, 0x65, 0x22, 0x52, 0x0a, 0x16, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x57, 0x6f, + 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0x21, 0x0a, 0x09, 0x43, 0x6f, 0x70, 0x79, + 0x50, 0x61, 0x74, 0x68, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x61, 0x74, 0x68, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x70, 0x61, 0x74, 0x68, 0x73, 0x22, 0x90, 0x01, 0x0a, 0x0b, + 0x43, 0x6f, 0x70, 0x79, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x36, 0x0a, 0x07, 0x74, + 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, + 0x62, 0x2e, 0x43, 0x6f, 0x70, 0x79, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x54, 0x61, + 0x72, 0x67, 0x65, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x74, 0x61, 0x72, 0x67, + 0x65, 0x74, 0x73, 0x1a, 0x49, 0x0a, 0x0c, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x23, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x6f, 0x70, 0x79, 0x50, 0x61, + 0x74, 0x68, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x2f, + 0x0a, 0x09, 0x46, 0x69, 0x6c, 0x65, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x75, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x10, 0x0a, + 0x03, 0x67, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x67, 0x69, 0x64, 0x22, + 0x1e, 0x0a, 0x08, 0x46, 0x69, 0x6c, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6d, + 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x22, + 0x80, 0x03, 0x0a, 0x0b, 0x53, 0x65, 0x6e, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, + 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x69, 0x64, + 0x73, 0x12, 0x2d, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x19, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x44, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, + 0x12, 0x30, 0x0a, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x6d, 0x6f, 0x64, + 0x65, 0x73, 0x12, 0x33, 0x0a, 0x06, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x06, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x1a, 0x37, 0x0a, 0x09, 0x44, 0x61, 0x74, 0x61, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x1a, 0x46, 0x0a, 0x0a, 0x4d, 0x6f, 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, + 0x12, 0x22, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x0c, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x48, 0x0a, 0x0b, 0x4f, 0x77, 0x6e, 0x65, + 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x23, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x69, + 0x6c, 0x65, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x22, 0x3b, 0x0a, 0x0b, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x44, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, + 0xb9, 0x01, 0x0a, 0x11, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1a, 0x0a, + 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, + 0x16, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x32, 0x0a, 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, + 0x70, 0x62, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x0b, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x22, 0xd8, 0x02, 0x0a, 0x15, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x6f, 0x64, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x6f, 0x64, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x1a, 0x0a, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, + 0x40, 0x0a, 0x07, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x26, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, + 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x50, 0x75, 0x62, 0x6c, + 0x69, 0x73, 0x68, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, + 0x68, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x6f, 0x6f, 0x6b, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x04, 0x68, 0x6f, 0x6f, 0x6b, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x5f, 0x61, 0x72, 0x67, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x72, 0x67, 0x73, 0x1a, 0x3a, 0x0a, 0x0c, 0x50, 0x75, + 0x62, 0x6c, 0x69, 0x73, 0x68, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x94, 0x01, 0x0a, 0x16, 0x52, 0x65, 0x70, 0x6c, 0x61, + 0x63, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x12, 0x31, 0x0a, 0x06, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, + 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x06, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x12, 0x31, 0x0a, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, + 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, + 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x79, 0x0a, + 0x11, 0x43, 0x61, 0x63, 0x68, 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, + 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x60, 0x0a, 0x12, 0x52, 0x65, 0x6d, 0x6f, + 0x76, 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, + 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, + 0x6d, 0x61, 0x67, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x1a, + 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x2f, 0x0a, 0x09, 0x49, 0x6d, + 0x61, 0x67, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x22, 0x67, 0x0a, 0x10, 0x4c, + 0x69, 0x73, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, + 0x25, 0x0a, 0x06, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x0d, 0x2e, 0x70, 0x62, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x06, + 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x72, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x65, 0x72, 0x72, 0x22, 0x55, 0x0a, 0x15, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, - 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x6f, 0x6f, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x04, 0x68, 0x6f, 0x6f, 0x6b, 0x22, 0x7a, 0x0a, 0x10, 0x4c, 0x6f, 0x67, 0x53, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x74, - 0x61, 0x69, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x69, 0x6c, 0x12, - 0x14, 0x0a, 0x05, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x73, 0x69, 0x6e, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x75, 0x6e, 0x74, 0x69, 0x6c, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x75, 0x6e, 0x74, 0x69, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x66, - 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x66, 0x6f, 0x6c, - 0x6c, 0x6f, 0x77, 0x22, 0x87, 0x01, 0x0a, 0x10, 0x4c, 0x6f, 0x67, 0x53, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, + 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, + 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x6f, 0x6f, 0x6b, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x6f, 0x6f, 0x6b, 0x22, 0x41, 0x0a, 0x19, 0x44, + 0x69, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, + 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, - 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x12, - 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, - 0x74, 0x61, 0x12, 0x39, 0x0a, 0x0f, 0x73, 0x74, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x70, 0x62, - 0x2e, 0x53, 0x74, 0x64, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0d, - 0x73, 0x74, 0x64, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x22, 0xbd, 0x01, - 0x0a, 0x16, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, - 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x77, 0x6f, 0x72, 0x6b, - 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x77, - 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x65, 0x6e, 0x76, 0x73, 0x18, 0x03, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x04, 0x65, 0x6e, 0x76, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x77, 0x6f, 0x72, - 0x6b, 0x64, 0x69, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x77, 0x6f, 0x72, 0x6b, - 0x64, 0x69, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x6f, 0x70, 0x65, 0x6e, 0x5f, 0x73, 0x74, 0x64, 0x69, - 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x6f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x64, - 0x69, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6c, 0x5f, 0x63, 0x6d, 0x64, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6c, 0x43, 0x6d, 0x64, 0x22, 0xbc, 0x01, - 0x0a, 0x0f, 0x43, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x50, 0x0a, 0x0f, 0x6e, 0x6f, 0x64, 0x65, 0x5f, - 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x27, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x43, 0x61, 0x70, 0x61, 0x63, 0x69, - 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6e, 0x6f, 0x64, 0x65, 0x43, - 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x69, 0x65, 0x73, 0x1a, 0x41, 0x0a, 0x13, 0x4e, 0x6f, 0x64, - 0x65, 0x43, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x2a, 0x27, 0x0a, 0x06, - 0x54, 0x72, 0x69, 0x4f, 0x70, 0x74, 0x12, 0x08, 0x0a, 0x04, 0x4b, 0x45, 0x45, 0x50, 0x10, 0x00, - 0x12, 0x08, 0x0a, 0x04, 0x54, 0x52, 0x55, 0x45, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x41, - 0x4c, 0x53, 0x45, 0x10, 0x02, 0x2a, 0x52, 0x0a, 0x0d, 0x53, 0x74, 0x64, 0x53, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x54, 0x44, 0x4f, 0x55, 0x54, - 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x54, 0x44, 0x45, 0x52, 0x52, 0x10, 0x01, 0x12, 0x12, - 0x0a, 0x0e, 0x54, 0x59, 0x50, 0x45, 0x57, 0x4f, 0x52, 0x4b, 0x4c, 0x4f, 0x41, 0x44, 0x49, 0x44, - 0x10, 0x06, 0x12, 0x15, 0x0a, 0x08, 0x45, 0x52, 0x55, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x32, 0xf4, 0x14, 0x0a, 0x07, 0x43, 0x6f, - 0x72, 0x65, 0x52, 0x50, 0x43, 0x12, 0x21, 0x0a, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x09, 0x2e, - 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0c, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x6f, - 0x72, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x00, 0x12, 0x36, 0x0a, 0x12, 0x57, 0x61, 0x74, 0x63, - 0x68, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x09, - 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x2e, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x30, 0x01, - 0x12, 0x36, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73, - 0x12, 0x16, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, - 0x6b, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x0c, 0x2e, 0x70, 0x62, 0x2e, 0x4e, 0x65, - 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x22, 0x00, 0x12, 0x3a, 0x0a, 0x0e, 0x43, 0x6f, 0x6e, 0x6e, - 0x65, 0x63, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x2e, - 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x4f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x0b, 0x2e, 0x70, 0x62, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, - 0x72, 0x6b, 0x22, 0x00, 0x12, 0x3e, 0x0a, 0x11, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, - 0x63, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x2e, 0x44, - 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x22, 0x00, 0x12, 0x26, 0x0a, 0x06, 0x41, 0x64, 0x64, 0x50, 0x6f, 0x64, 0x12, 0x11, - 0x2e, 0x70, 0x62, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x6f, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x1a, 0x07, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x6f, 0x64, 0x22, 0x00, 0x12, 0x2e, 0x0a, 0x09, - 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x6f, 0x64, 0x12, 0x14, 0x2e, 0x70, 0x62, 0x2e, 0x52, - 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x6f, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, - 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x26, 0x0a, 0x06, - 0x47, 0x65, 0x74, 0x50, 0x6f, 0x64, 0x12, 0x11, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x50, - 0x6f, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x07, 0x2e, 0x70, 0x62, 0x2e, 0x50, - 0x6f, 0x64, 0x22, 0x00, 0x12, 0x21, 0x0a, 0x08, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, 0x64, 0x73, - 0x12, 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x08, 0x2e, 0x70, 0x62, - 0x2e, 0x50, 0x6f, 0x64, 0x73, 0x22, 0x00, 0x12, 0x36, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x50, 0x6f, - 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x11, 0x2e, 0x70, 0x62, 0x2e, 0x47, - 0x65, 0x74, 0x50, 0x6f, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x0f, 0x2e, 0x70, - 0x62, 0x2e, 0x50, 0x6f, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x00, 0x12, - 0x3c, 0x0a, 0x11, 0x50, 0x6f, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x12, 0x11, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x6f, 0x64, - 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x10, 0x2e, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x64, - 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x29, 0x0a, - 0x07, 0x41, 0x64, 0x64, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x2e, 0x70, 0x62, 0x2e, 0x41, 0x64, - 0x64, 0x4e, 0x6f, 0x64, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x08, 0x2e, 0x70, - 0x62, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x22, 0x00, 0x12, 0x30, 0x0a, 0x0a, 0x52, 0x65, 0x6d, 0x6f, - 0x76, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x6d, 0x6f, - 0x76, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x09, 0x2e, - 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x31, 0x0a, 0x0c, 0x4c, 0x69, - 0x73, 0x74, 0x50, 0x6f, 0x64, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x14, 0x2e, 0x70, 0x62, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x1a, 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x22, 0x00, 0x12, 0x34, 0x0a, - 0x0e, 0x50, 0x6f, 0x64, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, - 0x14, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x4f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x08, 0x2e, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x22, - 0x00, 0x30, 0x01, 0x12, 0x29, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x12, - 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x1a, 0x08, 0x2e, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x22, 0x00, 0x12, 0x31, - 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x12, - 0x12, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x4f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x1a, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x22, - 0x00, 0x12, 0x29, 0x0a, 0x07, 0x53, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x2e, 0x70, - 0x62, 0x2e, 0x53, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x1a, 0x08, 0x2e, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x22, 0x00, 0x12, 0x36, 0x0a, 0x0d, - 0x53, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x2e, - 0x70, 0x62, 0x2e, 0x53, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x2e, + 0x0a, 0x16, 0x52, 0x65, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x6f, + 0x0a, 0x0b, 0x43, 0x6f, 0x70, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x64, + 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, + 0x47, 0x0a, 0x0b, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, + 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, + 0x74, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x87, 0x01, 0x0a, 0x15, 0x41, 0x74, 0x74, + 0x61, 0x63, 0x68, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, + 0x64, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x39, 0x0a, 0x0f, 0x73, 0x74, 0x64, 0x5f, 0x73, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x11, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x64, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x54, + 0x79, 0x70, 0x65, 0x52, 0x0d, 0x73, 0x74, 0x64, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x54, 0x79, + 0x70, 0x65, 0x22, 0x9a, 0x01, 0x0a, 0x11, 0x52, 0x75, 0x6e, 0x41, 0x6e, 0x64, 0x57, 0x61, 0x69, + 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x38, 0x0a, 0x0e, 0x64, 0x65, 0x70, 0x6c, + 0x6f, 0x79, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x11, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x4f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x52, 0x0d, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x4f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x6d, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x03, 0x63, 0x6d, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x05, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x73, + 0x79, 0x6e, 0x63, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x0c, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x22, + 0x54, 0x0a, 0x16, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, + 0x61, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x69, 0x64, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, + 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, + 0x66, 0x6f, 0x72, 0x63, 0x65, 0x22, 0x52, 0x0a, 0x16, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, + 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x6f, 0x6f, 0x6b, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x04, 0x68, 0x6f, 0x6f, 0x6b, 0x22, 0x7a, 0x0a, 0x10, 0x4c, 0x6f, 0x67, + 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, + 0x04, 0x74, 0x61, 0x69, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x69, + 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x75, 0x6e, 0x74, 0x69, 0x6c, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x75, 0x6e, 0x74, 0x69, 0x6c, 0x12, 0x16, 0x0a, + 0x06, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x66, + 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x22, 0x87, 0x01, 0x0a, 0x10, 0x4c, 0x6f, 0x67, 0x53, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, + 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, + 0x64, 0x61, 0x74, 0x61, 0x12, 0x39, 0x0a, 0x0f, 0x73, 0x74, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, + 0x70, 0x62, 0x2e, 0x53, 0x74, 0x64, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x54, 0x79, 0x70, 0x65, + 0x52, 0x0d, 0x73, 0x74, 0x64, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x22, + 0xbd, 0x01, 0x0a, 0x16, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, + 0x6f, 0x61, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x77, 0x6f, + 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0a, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x63, + 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, + 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x65, 0x6e, 0x76, 0x73, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x65, 0x6e, 0x76, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x77, + 0x6f, 0x72, 0x6b, 0x64, 0x69, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x77, 0x6f, + 0x72, 0x6b, 0x64, 0x69, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x6f, 0x70, 0x65, 0x6e, 0x5f, 0x73, 0x74, + 0x64, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x6f, 0x70, 0x65, 0x6e, 0x53, + 0x74, 0x64, 0x69, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6c, 0x5f, 0x63, 0x6d, 0x64, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6c, 0x43, 0x6d, 0x64, 0x22, + 0xbc, 0x01, 0x0a, 0x0f, 0x43, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x50, 0x0a, 0x0f, 0x6e, 0x6f, 0x64, + 0x65, 0x5f, 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x43, 0x61, 0x70, 0x61, + 0x63, 0x69, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6e, 0x6f, 0x64, + 0x65, 0x43, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x69, 0x65, 0x73, 0x1a, 0x41, 0x0a, 0x13, 0x4e, + 0x6f, 0x64, 0x65, 0x43, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x2a, 0x27, + 0x0a, 0x06, 0x54, 0x72, 0x69, 0x4f, 0x70, 0x74, 0x12, 0x08, 0x0a, 0x04, 0x4b, 0x45, 0x45, 0x50, + 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x54, 0x52, 0x55, 0x45, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, + 0x46, 0x41, 0x4c, 0x53, 0x45, 0x10, 0x02, 0x2a, 0x52, 0x0a, 0x0d, 0x53, 0x74, 0x64, 0x53, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x54, 0x44, 0x4f, + 0x55, 0x54, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x54, 0x44, 0x45, 0x52, 0x52, 0x10, 0x01, + 0x12, 0x12, 0x0a, 0x0e, 0x54, 0x59, 0x50, 0x45, 0x57, 0x4f, 0x52, 0x4b, 0x4c, 0x4f, 0x41, 0x44, + 0x49, 0x44, 0x10, 0x06, 0x12, 0x15, 0x0a, 0x08, 0x45, 0x52, 0x55, 0x45, 0x52, 0x52, 0x4f, 0x52, + 0x10, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x32, 0x88, 0x14, 0x0a, 0x07, + 0x43, 0x6f, 0x72, 0x65, 0x52, 0x50, 0x43, 0x12, 0x21, 0x0a, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x12, + 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0c, 0x2e, 0x70, 0x62, 0x2e, + 0x43, 0x6f, 0x72, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x00, 0x12, 0x36, 0x0a, 0x12, 0x57, 0x61, + 0x74, 0x63, 0x68, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x12, 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x11, 0x2e, 0x70, 0x62, + 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, + 0x30, 0x01, 0x12, 0x36, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x73, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x0c, 0x2e, 0x70, 0x62, 0x2e, + 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x22, 0x00, 0x12, 0x3a, 0x0a, 0x0e, 0x43, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x19, 0x2e, 0x70, + 0x62, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x0b, 0x2e, 0x70, 0x62, 0x2e, 0x4e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x22, 0x00, 0x12, 0x3e, 0x0a, 0x11, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x6e, + 0x6e, 0x65, 0x63, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x1c, 0x2e, 0x70, 0x62, + 0x2e, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x26, 0x0a, 0x06, 0x41, 0x64, 0x64, 0x50, 0x6f, 0x64, + 0x12, 0x11, 0x2e, 0x70, 0x62, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x6f, 0x64, 0x4f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x1a, 0x07, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x6f, 0x64, 0x22, 0x00, 0x12, 0x2e, + 0x0a, 0x09, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x6f, 0x64, 0x12, 0x14, 0x2e, 0x70, 0x62, + 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x6f, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x1a, 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x26, + 0x0a, 0x06, 0x47, 0x65, 0x74, 0x50, 0x6f, 0x64, 0x12, 0x11, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, + 0x74, 0x50, 0x6f, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x07, 0x2e, 0x70, 0x62, + 0x2e, 0x50, 0x6f, 0x64, 0x22, 0x00, 0x12, 0x21, 0x0a, 0x08, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, + 0x64, 0x73, 0x12, 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x08, 0x2e, + 0x70, 0x62, 0x2e, 0x50, 0x6f, 0x64, 0x73, 0x22, 0x00, 0x12, 0x39, 0x0a, 0x0e, 0x47, 0x65, 0x74, + 0x50, 0x6f, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x11, 0x2e, 0x70, 0x62, + 0x2e, 0x47, 0x65, 0x74, 0x50, 0x6f, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x10, + 0x2e, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x22, 0x00, 0x30, 0x01, 0x12, 0x41, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1a, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, + 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x1a, 0x10, 0x2e, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x00, 0x12, 0x29, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x4e, 0x6f, + 0x64, 0x65, 0x12, 0x12, 0x2e, 0x70, 0x62, 0x2e, 0x41, 0x64, 0x64, 0x4e, 0x6f, 0x64, 0x65, 0x4f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x08, 0x2e, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x64, 0x65, + 0x22, 0x00, 0x12, 0x30, 0x0a, 0x0a, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4e, 0x6f, 0x64, 0x65, + 0x12, 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x22, 0x00, 0x12, 0x48, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, - 0x64, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, - 0x1b, 0x2e, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x3e, - 0x0a, 0x10, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x12, 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1b, 0x2e, - 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x41, - 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x12, 0x1a, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x10, 0x2e, - 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, - 0x00, 0x12, 0x3b, 0x0a, 0x11, 0x43, 0x61, 0x6c, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x61, - 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x12, 0x11, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x70, 0x6c, - 0x6f, 0x79, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x43, - 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2d, - 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x0e, 0x2e, - 0x70, 0x62, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x44, 0x1a, 0x0c, 0x2e, - 0x70, 0x62, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x00, 0x12, 0x30, 0x0a, - 0x0c, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x12, 0x0f, 0x2e, - 0x70, 0x62, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x44, 0x73, 0x1a, 0x0d, - 0x2e, 0x70, 0x62, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x22, 0x00, 0x12, - 0x3b, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, - 0x12, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, - 0x61, 0x64, 0x73, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x0c, 0x2e, 0x70, 0x62, 0x2e, - 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x00, 0x30, 0x01, 0x12, 0x38, 0x0a, 0x11, - 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, - 0x73, 0x12, 0x12, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x4f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x0d, 0x2e, 0x70, 0x62, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, - 0x6f, 0x61, 0x64, 0x73, 0x22, 0x00, 0x12, 0x3c, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, - 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0f, 0x2e, 0x70, - 0x62, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x44, 0x73, 0x1a, 0x13, 0x2e, - 0x70, 0x62, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x22, 0x00, 0x12, 0x4a, 0x0a, 0x12, 0x53, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x6c, - 0x6f, 0x61, 0x64, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1d, 0x2e, 0x70, 0x62, 0x2e, - 0x53, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x57, - 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, - 0x12, 0x5c, 0x0a, 0x14, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x2e, 0x57, 0x6f, - 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x1f, 0x2e, 0x70, 0x62, 0x2e, 0x57, - 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x2c, - 0x0a, 0x04, 0x43, 0x6f, 0x70, 0x79, 0x12, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x6f, 0x70, 0x79, - 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x6f, 0x70, - 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x2c, 0x0a, 0x04, - 0x53, 0x65, 0x6e, 0x64, 0x12, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x3e, 0x0a, 0x0a, 0x42, 0x75, - 0x69, 0x6c, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x42, 0x75, - 0x69, 0x6c, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, - 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x3e, 0x0a, 0x0a, 0x43, 0x61, - 0x63, 0x68, 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x61, - 0x63, 0x68, 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, - 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x61, 0x63, 0x68, 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x41, 0x0a, 0x0b, 0x52, 0x65, - 0x6d, 0x6f, 0x76, 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x2e, 0x52, - 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x1a, 0x16, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x49, 0x6d, 0x61, - 0x67, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x3b, 0x0a, - 0x09, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x14, 0x2e, 0x70, 0x62, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x1a, 0x14, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x42, 0x0a, 0x0e, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x11, 0x2e, 0x70, + 0x74, 0x79, 0x22, 0x00, 0x12, 0x32, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, 0x64, 0x4e, + 0x6f, 0x64, 0x65, 0x73, 0x12, 0x14, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, + 0x64, 0x65, 0x73, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x08, 0x2e, 0x70, 0x62, 0x2e, + 0x4e, 0x6f, 0x64, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x29, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x4e, + 0x6f, 0x64, 0x65, 0x12, 0x12, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, + 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x08, 0x2e, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x64, + 0x65, 0x22, 0x00, 0x12, 0x35, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x45, 0x6e, + 0x67, 0x69, 0x6e, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, + 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x0a, 0x2e, 0x70, + 0x62, 0x2e, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x22, 0x00, 0x12, 0x29, 0x0a, 0x07, 0x53, 0x65, + 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x74, 0x4e, 0x6f, + 0x64, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x08, 0x2e, 0x70, 0x62, 0x2e, 0x4e, + 0x6f, 0x64, 0x65, 0x22, 0x00, 0x12, 0x36, 0x0a, 0x0d, 0x53, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x74, 0x4e, + 0x6f, 0x64, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x1a, 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x48, 0x0a, + 0x0d, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, + 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x1b, 0x2e, 0x70, 0x62, 0x2e, 0x4e, 0x6f, + 0x64, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x3e, 0x0a, 0x10, 0x4e, 0x6f, 0x64, 0x65, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x09, 0x2e, 0x70, 0x62, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1b, 0x2e, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x64, 0x65, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x3b, 0x0a, 0x11, 0x43, 0x61, 0x6c, 0x63, 0x75, + 0x6c, 0x61, 0x74, 0x65, 0x43, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x12, 0x11, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, - 0x19, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, - 0x6f, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x45, - 0x0a, 0x0f, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, - 0x64, 0x12, 0x12, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x4f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, - 0x63, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x4a, 0x0a, 0x0e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x57, - 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x6d, - 0x6f, 0x76, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x1a, 0x19, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x57, 0x6f, - 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x30, - 0x01, 0x12, 0x56, 0x0a, 0x12, 0x44, 0x69, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x57, - 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x1d, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x69, 0x73, - 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x4f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x1d, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x69, 0x73, 0x73, - 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x4d, 0x0a, 0x0f, 0x43, 0x6f, 0x6e, - 0x74, 0x72, 0x6f, 0x6c, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x1a, 0x2e, 0x70, - 0x62, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, - 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x6f, - 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x4e, 0x0a, 0x0f, 0x45, 0x78, 0x65, 0x63, - 0x75, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x1a, 0x2e, 0x70, 0x62, - 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, - 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x19, 0x2e, 0x70, 0x62, 0x2e, 0x41, 0x74, 0x74, - 0x61, 0x63, 0x68, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x12, 0x43, 0x0a, 0x0f, 0x52, 0x65, 0x61, 0x6c, - 0x6c, 0x6f, 0x63, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x12, 0x2e, 0x70, 0x62, - 0x2e, 0x52, 0x65, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, - 0x1a, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x12, 0x3b, 0x0a, - 0x09, 0x4c, 0x6f, 0x67, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x14, 0x2e, 0x70, 0x62, 0x2e, - 0x4c, 0x6f, 0x67, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x1a, 0x14, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x6f, 0x67, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x44, 0x0a, 0x0a, 0x52, 0x75, - 0x6e, 0x41, 0x6e, 0x64, 0x57, 0x61, 0x69, 0x74, 0x12, 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x75, - 0x6e, 0x41, 0x6e, 0x64, 0x57, 0x61, 0x69, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, - 0x19, 0x2e, 0x70, 0x62, 0x2e, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x57, 0x6f, 0x72, 0x6b, 0x6c, - 0x6f, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, - 0x42, 0x28, 0x5a, 0x26, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x65, 0x72, 0x75, 0x32, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, - 0x72, 0x70, 0x63, 0x2f, 0x67, 0x65, 0x6e, 0x3b, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, + 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x2d, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x6c, + 0x6f, 0x61, 0x64, 0x12, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, + 0x64, 0x49, 0x44, 0x1a, 0x0c, 0x2e, 0x70, 0x62, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, + 0x64, 0x22, 0x00, 0x12, 0x30, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, + 0x61, 0x64, 0x73, 0x12, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, + 0x64, 0x49, 0x44, 0x73, 0x1a, 0x0d, 0x2e, 0x70, 0x62, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, + 0x61, 0x64, 0x73, 0x22, 0x00, 0x12, 0x3b, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, + 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x12, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x1a, 0x0c, 0x2e, 0x70, 0x62, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x00, + 0x30, 0x01, 0x12, 0x38, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x57, 0x6f, + 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x12, 0x12, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, + 0x4e, 0x6f, 0x64, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x0d, 0x2e, 0x70, 0x62, + 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x22, 0x00, 0x12, 0x3c, 0x0a, 0x12, + 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x12, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, + 0x49, 0x44, 0x73, 0x1a, 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, + 0x64, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x4a, 0x0a, 0x12, 0x53, 0x65, + 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x12, 0x1d, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, + 0x64, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, + 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x5c, 0x0a, 0x14, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, + 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x1f, + 0x2e, 0x70, 0x62, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, + 0x1f, 0x2e, 0x70, 0x62, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x22, 0x00, 0x30, 0x01, 0x12, 0x2c, 0x0a, 0x04, 0x43, 0x6f, 0x70, 0x79, 0x12, 0x0f, 0x2e, 0x70, + 0x62, 0x2e, 0x43, 0x6f, 0x70, 0x79, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x0f, 0x2e, + 0x70, 0x62, 0x2e, 0x43, 0x6f, 0x70, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, + 0x30, 0x01, 0x12, 0x2c, 0x0a, 0x04, 0x53, 0x65, 0x6e, 0x64, 0x12, 0x0f, 0x2e, 0x70, 0x62, 0x2e, + 0x53, 0x65, 0x6e, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x0f, 0x2e, 0x70, 0x62, + 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x30, 0x01, + 0x12, 0x3e, 0x0a, 0x0a, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x15, + 0x2e, 0x70, 0x62, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x4f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, + 0x49, 0x6d, 0x61, 0x67, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x30, 0x01, + 0x12, 0x3e, 0x0a, 0x0a, 0x43, 0x61, 0x63, 0x68, 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x15, + 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x61, 0x63, 0x68, 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x4f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x61, 0x63, 0x68, 0x65, + 0x49, 0x6d, 0x61, 0x67, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x30, 0x01, + 0x12, 0x41, 0x0a, 0x0b, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, + 0x16, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, + 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x16, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x6d, + 0x6f, 0x76, 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, + 0x00, 0x30, 0x01, 0x12, 0x3b, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, + 0x12, 0x14, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x4f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x14, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x49, 0x6d, 0x61, 0x67, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x30, 0x01, + 0x12, 0x42, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, + 0x61, 0x64, 0x12, 0x11, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x4f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x19, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x22, 0x00, 0x30, 0x01, 0x12, 0x45, 0x0a, 0x0f, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x57, + 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x12, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x70, + 0x6c, 0x61, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x1a, 0x2e, 0x70, 0x62, + 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x4a, 0x0a, 0x0e, 0x52, + 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x19, 0x2e, + 0x70, 0x62, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, + 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x19, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, + 0x6d, 0x6f, 0x76, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x56, 0x0a, 0x12, 0x44, 0x69, 0x73, 0x73, 0x6f, + 0x63, 0x69, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x1d, 0x2e, + 0x70, 0x62, 0x2e, 0x44, 0x69, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, + 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x1d, 0x2e, 0x70, + 0x62, 0x2e, 0x44, 0x69, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, + 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, + 0x4d, 0x0a, 0x0f, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, + 0x61, 0x64, 0x12, 0x1a, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x57, + 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x1a, + 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x57, 0x6f, 0x72, 0x6b, 0x6c, + 0x6f, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x4e, + 0x0a, 0x0f, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, + 0x64, 0x12, 0x1a, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x57, 0x6f, + 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x19, 0x2e, + 0x70, 0x62, 0x2e, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, + 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x12, 0x43, + 0x0a, 0x0f, 0x52, 0x65, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x12, 0x12, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x4f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x61, 0x6c, 0x6c, + 0x6f, 0x63, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x22, 0x00, 0x12, 0x3b, 0x0a, 0x09, 0x4c, 0x6f, 0x67, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, + 0x12, 0x14, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x6f, 0x67, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x14, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x6f, 0x67, 0x53, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x30, 0x01, + 0x12, 0x44, 0x0a, 0x0a, 0x52, 0x75, 0x6e, 0x41, 0x6e, 0x64, 0x57, 0x61, 0x69, 0x74, 0x12, 0x15, + 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x75, 0x6e, 0x41, 0x6e, 0x64, 0x57, 0x61, 0x69, 0x74, 0x4f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x19, 0x2e, 0x70, 0x62, 0x2e, 0x41, 0x74, 0x74, 0x61, 0x63, + 0x68, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x42, 0x28, 0x5a, 0x26, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x65, 0x72, 0x75, 0x32, + 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x67, 0x65, 0x6e, 0x3b, 0x70, 0x62, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -7383,7 +6804,7 @@ func file_rpc_gen_core_proto_rawDescGZIP() []byte { } var file_rpc_gen_core_proto_enumTypes = make([]protoimpl.EnumInfo, 4) -var file_rpc_gen_core_proto_msgTypes = make([]protoimpl.MessageInfo, 135) +var file_rpc_gen_core_proto_msgTypes = make([]protoimpl.MessageInfo, 118) var file_rpc_gen_core_proto_goTypes = []interface{}{ (TriOpt)(0), // 0: pb.TriOpt (StdStreamType)(0), // 1: pb.StdStreamType @@ -7396,322 +6817,285 @@ var file_rpc_gen_core_proto_goTypes = []interface{}{ (*ListWorkloadsOptions)(nil), // 8: pb.ListWorkloadsOptions (*Pod)(nil), // 9: pb.Pod (*Pods)(nil), // 10: pb.Pods - (*PodResource)(nil), // 11: pb.PodResource - (*StringSlice)(nil), // 12: pb.StringSlice - (*RawParam)(nil), // 13: pb.RawParam - (*NodeResource)(nil), // 14: pb.NodeResource - (*ListNetworkOptions)(nil), // 15: pb.ListNetworkOptions - (*ConnectNetworkOptions)(nil), // 16: pb.ConnectNetworkOptions - (*DisconnectNetworkOptions)(nil), // 17: pb.DisconnectNetworkOptions - (*Network)(nil), // 18: pb.Network - (*Networks)(nil), // 19: pb.Networks - (*Node)(nil), // 20: pb.Node - (*Nodes)(nil), // 21: pb.Nodes - (*NodeAvailable)(nil), // 22: pb.NodeAvailable - (*SetNodeOptions)(nil), // 23: pb.SetNodeOptions - (*SetNodeStatusOptions)(nil), // 24: pb.SetNodeStatusOptions - (*GetNodeStatusOptions)(nil), // 25: pb.GetNodeStatusOptions - (*NodeStatusStreamMessage)(nil), // 26: pb.NodeStatusStreamMessage - (*NodeFilter)(nil), // 27: pb.NodeFilter - (*Workload)(nil), // 28: pb.Workload - (*WorkloadStatus)(nil), // 29: pb.WorkloadStatus - (*WorkloadsStatus)(nil), // 30: pb.WorkloadsStatus - (*SetWorkloadsStatusOptions)(nil), // 31: pb.SetWorkloadsStatusOptions - (*WorkloadStatusStreamOptions)(nil), // 32: pb.WorkloadStatusStreamOptions - (*WorkloadStatusStreamMessage)(nil), // 33: pb.WorkloadStatusStreamMessage - (*Workloads)(nil), // 34: pb.Workloads - (*WorkloadID)(nil), // 35: pb.WorkloadID - (*WorkloadIDs)(nil), // 36: pb.WorkloadIDs - (*RemoveWorkloadOptions)(nil), // 37: pb.RemoveWorkloadOptions - (*DissociateWorkloadOptions)(nil), // 38: pb.DissociateWorkloadOptions - (*ReallocOptions)(nil), // 39: pb.ReallocOptions - (*AddPodOptions)(nil), // 40: pb.AddPodOptions - (*RemovePodOptions)(nil), // 41: pb.RemovePodOptions - (*GetPodOptions)(nil), // 42: pb.GetPodOptions - (*AddNodeOptions)(nil), // 43: pb.AddNodeOptions - (*RemoveNodeOptions)(nil), // 44: pb.RemoveNodeOptions - (*GetNodeOptions)(nil), // 45: pb.GetNodeOptions - (*GetNodeResourceOptions)(nil), // 46: pb.GetNodeResourceOptions - (*ListNodesOptions)(nil), // 47: pb.ListNodesOptions - (*Build)(nil), // 48: pb.Build - (*Builds)(nil), // 49: pb.Builds - (*BuildImageOptions)(nil), // 50: pb.BuildImageOptions - (*HookOptions)(nil), // 51: pb.HookOptions - (*HealthCheckOptions)(nil), // 52: pb.HealthCheckOptions - (*LogOptions)(nil), // 53: pb.LogOptions - (*EntrypointOptions)(nil), // 54: pb.EntrypointOptions - (*Volume)(nil), // 55: pb.Volume - (*DeployOptions)(nil), // 56: pb.DeployOptions - (*ReplaceOptions)(nil), // 57: pb.ReplaceOptions - (*CacheImageOptions)(nil), // 58: pb.CacheImageOptions - (*RemoveImageOptions)(nil), // 59: pb.RemoveImageOptions - (*ListImageOptions)(nil), // 60: pb.ListImageOptions - (*CopyPaths)(nil), // 61: pb.CopyPaths - (*CopyOptions)(nil), // 62: pb.CopyOptions - (*FileOwner)(nil), // 63: pb.FileOwner - (*FileMode)(nil), // 64: pb.FileMode - (*SendOptions)(nil), // 65: pb.SendOptions - (*ErrorDetail)(nil), // 66: pb.ErrorDetail - (*BuildImageMessage)(nil), // 67: pb.BuildImageMessage - (*CreateWorkloadMessage)(nil), // 68: pb.CreateWorkloadMessage - (*ReplaceWorkloadMessage)(nil), // 69: pb.ReplaceWorkloadMessage - (*CacheImageMessage)(nil), // 70: pb.CacheImageMessage - (*RemoveImageMessage)(nil), // 71: pb.RemoveImageMessage - (*ImageItem)(nil), // 72: pb.ImageItem - (*ListImageMessage)(nil), // 73: pb.ListImageMessage - (*RemoveWorkloadMessage)(nil), // 74: pb.RemoveWorkloadMessage - (*DissociateWorkloadMessage)(nil), // 75: pb.DissociateWorkloadMessage - (*ReallocResourceMessage)(nil), // 76: pb.ReallocResourceMessage - (*CopyMessage)(nil), // 77: pb.CopyMessage - (*SendMessage)(nil), // 78: pb.SendMessage - (*AttachWorkloadMessage)(nil), // 79: pb.AttachWorkloadMessage - (*RunAndWaitOptions)(nil), // 80: pb.RunAndWaitOptions - (*ControlWorkloadOptions)(nil), // 81: pb.ControlWorkloadOptions - (*ControlWorkloadMessage)(nil), // 82: pb.ControlWorkloadMessage - (*LogStreamOptions)(nil), // 83: pb.LogStreamOptions - (*LogStreamMessage)(nil), // 84: pb.LogStreamMessage - (*ExecuteWorkloadOptions)(nil), // 85: pb.ExecuteWorkloadOptions - (*CapacityMessage)(nil), // 86: pb.CapacityMessage - nil, // 87: pb.ListWorkloadsOptions.LabelsEntry - nil, // 88: pb.Node.CpuEntry - nil, // 89: pb.Node.LabelsEntry - nil, // 90: pb.Node.InitCpuEntry - nil, // 91: pb.Node.NumaEntry - nil, // 92: pb.Node.NumaMemoryEntry - nil, // 93: pb.Node.InitVolumeEntry - nil, // 94: pb.Node.VolumeEntry - nil, // 95: pb.Node.InitNumaMemoryEntry - nil, // 96: pb.SetNodeOptions.DeltaCpuEntry - nil, // 97: pb.SetNodeOptions.DeltaNumaMemoryEntry - nil, // 98: pb.SetNodeOptions.NumaEntry - nil, // 99: pb.SetNodeOptions.LabelsEntry - nil, // 100: pb.SetNodeOptions.DeltaVolumeEntry - nil, // 101: pb.SetNodeOptions.ResourceOptsEntry - nil, // 102: pb.NodeFilter.LabelsEntry - nil, // 103: pb.Workload.LabelsEntry - nil, // 104: pb.Workload.PublishEntry - nil, // 105: pb.WorkloadStatus.NetworksEntry - nil, // 106: pb.WorkloadStatusStreamOptions.LabelsEntry - nil, // 107: pb.ReallocOptions.ResourceOptsEntry - nil, // 108: pb.AddNodeOptions.LabelsEntry - nil, // 109: pb.AddNodeOptions.NumaEntry - nil, // 110: pb.AddNodeOptions.NumaMemoryEntry - nil, // 111: pb.AddNodeOptions.VolumeMapEntry - nil, // 112: pb.AddNodeOptions.ResourceOptsEntry - nil, // 113: pb.GetNodeOptions.LabelsEntry - nil, // 114: pb.ListNodesOptions.LabelsEntry - nil, // 115: pb.Build.EnvsEntry - nil, // 116: pb.Build.ArgsEntry - nil, // 117: pb.Build.LabelsEntry - nil, // 118: pb.Build.ArtifactsEntry - nil, // 119: pb.Build.CacheEntry - nil, // 120: pb.Builds.BuildsEntry - nil, // 121: pb.LogOptions.ConfigEntry - nil, // 122: pb.EntrypointOptions.SysctlsEntry - nil, // 123: pb.Volume.VolumeEntry - nil, // 124: pb.DeployOptions.NetworksEntry - nil, // 125: pb.DeployOptions.LabelsEntry - nil, // 126: pb.DeployOptions.NodelabelsEntry - nil, // 127: pb.DeployOptions.DataEntry - nil, // 128: pb.DeployOptions.ModesEntry - nil, // 129: pb.DeployOptions.OwnersEntry - nil, // 130: pb.DeployOptions.ResourceOptsEntry - nil, // 131: pb.ReplaceOptions.FilterLabelsEntry - nil, // 132: pb.ReplaceOptions.CopyEntry - nil, // 133: pb.CopyOptions.TargetsEntry - nil, // 134: pb.SendOptions.DataEntry - nil, // 135: pb.SendOptions.ModesEntry - nil, // 136: pb.SendOptions.OwnersEntry - nil, // 137: pb.CreateWorkloadMessage.PublishEntry - nil, // 138: pb.CapacityMessage.NodeCapacitiesEntry + (*StringSlice)(nil), // 11: pb.StringSlice + (*RawParam)(nil), // 12: pb.RawParam + (*NodeResource)(nil), // 13: pb.NodeResource + (*ListNetworkOptions)(nil), // 14: pb.ListNetworkOptions + (*ConnectNetworkOptions)(nil), // 15: pb.ConnectNetworkOptions + (*DisconnectNetworkOptions)(nil), // 16: pb.DisconnectNetworkOptions + (*Network)(nil), // 17: pb.Network + (*Networks)(nil), // 18: pb.Networks + (*Node)(nil), // 19: pb.Node + (*AddPodOptions)(nil), // 20: pb.AddPodOptions + (*RemovePodOptions)(nil), // 21: pb.RemovePodOptions + (*GetPodOptions)(nil), // 22: pb.GetPodOptions + (*AddNodeOptions)(nil), // 23: pb.AddNodeOptions + (*RemoveNodeOptions)(nil), // 24: pb.RemoveNodeOptions + (*GetNodeOptions)(nil), // 25: pb.GetNodeOptions + (*GetNodeResourceOptions)(nil), // 26: pb.GetNodeResourceOptions + (*ListNodesOptions)(nil), // 27: pb.ListNodesOptions + (*SetNodeOptions)(nil), // 28: pb.SetNodeOptions + (*SetNodeStatusOptions)(nil), // 29: pb.SetNodeStatusOptions + (*GetNodeStatusOptions)(nil), // 30: pb.GetNodeStatusOptions + (*NodeStatusStreamMessage)(nil), // 31: pb.NodeStatusStreamMessage + (*NodeFilter)(nil), // 32: pb.NodeFilter + (*Workload)(nil), // 33: pb.Workload + (*WorkloadStatus)(nil), // 34: pb.WorkloadStatus + (*WorkloadsStatus)(nil), // 35: pb.WorkloadsStatus + (*SetWorkloadsStatusOptions)(nil), // 36: pb.SetWorkloadsStatusOptions + (*WorkloadStatusStreamOptions)(nil), // 37: pb.WorkloadStatusStreamOptions + (*WorkloadStatusStreamMessage)(nil), // 38: pb.WorkloadStatusStreamMessage + (*Workloads)(nil), // 39: pb.Workloads + (*WorkloadID)(nil), // 40: pb.WorkloadID + (*WorkloadIDs)(nil), // 41: pb.WorkloadIDs + (*RemoveWorkloadOptions)(nil), // 42: pb.RemoveWorkloadOptions + (*DissociateWorkloadOptions)(nil), // 43: pb.DissociateWorkloadOptions + (*ReallocOptions)(nil), // 44: pb.ReallocOptions + (*Build)(nil), // 45: pb.Build + (*Builds)(nil), // 46: pb.Builds + (*BuildImageOptions)(nil), // 47: pb.BuildImageOptions + (*HookOptions)(nil), // 48: pb.HookOptions + (*HealthCheckOptions)(nil), // 49: pb.HealthCheckOptions + (*LogOptions)(nil), // 50: pb.LogOptions + (*EntrypointOptions)(nil), // 51: pb.EntrypointOptions + (*Volume)(nil), // 52: pb.Volume + (*DeployOptions)(nil), // 53: pb.DeployOptions + (*ReplaceOptions)(nil), // 54: pb.ReplaceOptions + (*CacheImageOptions)(nil), // 55: pb.CacheImageOptions + (*RemoveImageOptions)(nil), // 56: pb.RemoveImageOptions + (*ListImageOptions)(nil), // 57: pb.ListImageOptions + (*CopyPaths)(nil), // 58: pb.CopyPaths + (*CopyOptions)(nil), // 59: pb.CopyOptions + (*FileOwner)(nil), // 60: pb.FileOwner + (*FileMode)(nil), // 61: pb.FileMode + (*SendOptions)(nil), // 62: pb.SendOptions + (*ErrorDetail)(nil), // 63: pb.ErrorDetail + (*BuildImageMessage)(nil), // 64: pb.BuildImageMessage + (*CreateWorkloadMessage)(nil), // 65: pb.CreateWorkloadMessage + (*ReplaceWorkloadMessage)(nil), // 66: pb.ReplaceWorkloadMessage + (*CacheImageMessage)(nil), // 67: pb.CacheImageMessage + (*RemoveImageMessage)(nil), // 68: pb.RemoveImageMessage + (*ImageItem)(nil), // 69: pb.ImageItem + (*ListImageMessage)(nil), // 70: pb.ListImageMessage + (*RemoveWorkloadMessage)(nil), // 71: pb.RemoveWorkloadMessage + (*DissociateWorkloadMessage)(nil), // 72: pb.DissociateWorkloadMessage + (*ReallocResourceMessage)(nil), // 73: pb.ReallocResourceMessage + (*CopyMessage)(nil), // 74: pb.CopyMessage + (*SendMessage)(nil), // 75: pb.SendMessage + (*AttachWorkloadMessage)(nil), // 76: pb.AttachWorkloadMessage + (*RunAndWaitOptions)(nil), // 77: pb.RunAndWaitOptions + (*ControlWorkloadOptions)(nil), // 78: pb.ControlWorkloadOptions + (*ControlWorkloadMessage)(nil), // 79: pb.ControlWorkloadMessage + (*LogStreamOptions)(nil), // 80: pb.LogStreamOptions + (*LogStreamMessage)(nil), // 81: pb.LogStreamMessage + (*ExecuteWorkloadOptions)(nil), // 82: pb.ExecuteWorkloadOptions + (*CapacityMessage)(nil), // 83: pb.CapacityMessage + nil, // 84: pb.ListWorkloadsOptions.LabelsEntry + nil, // 85: pb.Node.LabelsEntry + nil, // 86: pb.AddNodeOptions.LabelsEntry + nil, // 87: pb.AddNodeOptions.ResourceOptsEntry + nil, // 88: pb.GetNodeOptions.LabelsEntry + nil, // 89: pb.ListNodesOptions.LabelsEntry + nil, // 90: pb.SetNodeOptions.LabelsEntry + nil, // 91: pb.SetNodeOptions.ResourceOptsEntry + nil, // 92: pb.NodeFilter.LabelsEntry + nil, // 93: pb.Workload.LabelsEntry + nil, // 94: pb.Workload.PublishEntry + nil, // 95: pb.WorkloadStatus.NetworksEntry + nil, // 96: pb.WorkloadStatusStreamOptions.LabelsEntry + nil, // 97: pb.ReallocOptions.ResourceOptsEntry + nil, // 98: pb.Build.EnvsEntry + nil, // 99: pb.Build.ArgsEntry + nil, // 100: pb.Build.LabelsEntry + nil, // 101: pb.Build.ArtifactsEntry + nil, // 102: pb.Build.CacheEntry + nil, // 103: pb.Builds.BuildsEntry + nil, // 104: pb.LogOptions.ConfigEntry + nil, // 105: pb.EntrypointOptions.SysctlsEntry + nil, // 106: pb.Volume.VolumeEntry + nil, // 107: pb.DeployOptions.NetworksEntry + nil, // 108: pb.DeployOptions.LabelsEntry + nil, // 109: pb.DeployOptions.NodelabelsEntry + nil, // 110: pb.DeployOptions.DataEntry + nil, // 111: pb.DeployOptions.ModesEntry + nil, // 112: pb.DeployOptions.OwnersEntry + nil, // 113: pb.DeployOptions.ResourceOptsEntry + nil, // 114: pb.ReplaceOptions.FilterLabelsEntry + nil, // 115: pb.ReplaceOptions.CopyEntry + nil, // 116: pb.CopyOptions.TargetsEntry + nil, // 117: pb.SendOptions.DataEntry + nil, // 118: pb.SendOptions.ModesEntry + nil, // 119: pb.SendOptions.OwnersEntry + nil, // 120: pb.CreateWorkloadMessage.PublishEntry + nil, // 121: pb.CapacityMessage.NodeCapacitiesEntry } var file_rpc_gen_core_proto_depIdxs = []int32{ - 87, // 0: pb.ListWorkloadsOptions.labels:type_name -> pb.ListWorkloadsOptions.LabelsEntry + 84, // 0: pb.ListWorkloadsOptions.labels:type_name -> pb.ListWorkloadsOptions.LabelsEntry 9, // 1: pb.Pods.pods:type_name -> pb.Pod - 14, // 2: pb.PodResource.nodes_resource:type_name -> pb.NodeResource - 12, // 3: pb.RawParam.string_slice:type_name -> pb.StringSlice - 18, // 4: pb.Networks.networks:type_name -> pb.Network - 88, // 5: pb.Node.cpu:type_name -> pb.Node.CpuEntry - 89, // 6: pb.Node.labels:type_name -> pb.Node.LabelsEntry - 90, // 7: pb.Node.init_cpu:type_name -> pb.Node.InitCpuEntry - 91, // 8: pb.Node.numa:type_name -> pb.Node.NumaEntry - 92, // 9: pb.Node.numa_memory:type_name -> pb.Node.NumaMemoryEntry - 93, // 10: pb.Node.init_volume:type_name -> pb.Node.InitVolumeEntry - 94, // 11: pb.Node.volume:type_name -> pb.Node.VolumeEntry - 95, // 12: pb.Node.init_numa_memory:type_name -> pb.Node.InitNumaMemoryEntry - 20, // 13: pb.Nodes.nodes:type_name -> pb.Node - 96, // 14: pb.SetNodeOptions.delta_cpu:type_name -> pb.SetNodeOptions.DeltaCpuEntry - 97, // 15: pb.SetNodeOptions.delta_numa_memory:type_name -> pb.SetNodeOptions.DeltaNumaMemoryEntry - 98, // 16: pb.SetNodeOptions.numa:type_name -> pb.SetNodeOptions.NumaEntry - 99, // 17: pb.SetNodeOptions.labels:type_name -> pb.SetNodeOptions.LabelsEntry - 100, // 18: pb.SetNodeOptions.delta_volume:type_name -> pb.SetNodeOptions.DeltaVolumeEntry - 0, // 19: pb.SetNodeOptions.bypass_opt:type_name -> pb.TriOpt - 101, // 20: pb.SetNodeOptions.resource_opts:type_name -> pb.SetNodeOptions.ResourceOptsEntry - 102, // 21: pb.NodeFilter.labels:type_name -> pb.NodeFilter.LabelsEntry - 103, // 22: pb.Workload.labels:type_name -> pb.Workload.LabelsEntry - 104, // 23: pb.Workload.publish:type_name -> pb.Workload.PublishEntry - 29, // 24: pb.Workload.status:type_name -> pb.WorkloadStatus - 105, // 25: pb.WorkloadStatus.networks:type_name -> pb.WorkloadStatus.NetworksEntry - 29, // 26: pb.WorkloadsStatus.status:type_name -> pb.WorkloadStatus - 29, // 27: pb.SetWorkloadsStatusOptions.status:type_name -> pb.WorkloadStatus - 106, // 28: pb.WorkloadStatusStreamOptions.labels:type_name -> pb.WorkloadStatusStreamOptions.LabelsEntry - 28, // 29: pb.WorkloadStatusStreamMessage.workload:type_name -> pb.Workload - 29, // 30: pb.WorkloadStatusStreamMessage.status:type_name -> pb.WorkloadStatus - 28, // 31: pb.Workloads.workloads:type_name -> pb.Workload - 107, // 32: pb.ReallocOptions.resource_opts:type_name -> pb.ReallocOptions.ResourceOptsEntry - 108, // 33: pb.AddNodeOptions.labels:type_name -> pb.AddNodeOptions.LabelsEntry - 109, // 34: pb.AddNodeOptions.numa:type_name -> pb.AddNodeOptions.NumaEntry - 110, // 35: pb.AddNodeOptions.numa_memory:type_name -> pb.AddNodeOptions.NumaMemoryEntry - 111, // 36: pb.AddNodeOptions.volume_map:type_name -> pb.AddNodeOptions.VolumeMapEntry - 112, // 37: pb.AddNodeOptions.resource_opts:type_name -> pb.AddNodeOptions.ResourceOptsEntry - 113, // 38: pb.GetNodeOptions.labels:type_name -> pb.GetNodeOptions.LabelsEntry - 45, // 39: pb.GetNodeResourceOptions.opts:type_name -> pb.GetNodeOptions - 114, // 40: pb.ListNodesOptions.labels:type_name -> pb.ListNodesOptions.LabelsEntry - 115, // 41: pb.Build.envs:type_name -> pb.Build.EnvsEntry - 116, // 42: pb.Build.args:type_name -> pb.Build.ArgsEntry - 117, // 43: pb.Build.labels:type_name -> pb.Build.LabelsEntry - 118, // 44: pb.Build.artifacts:type_name -> pb.Build.ArtifactsEntry - 119, // 45: pb.Build.cache:type_name -> pb.Build.CacheEntry - 120, // 46: pb.Builds.builds:type_name -> pb.Builds.BuildsEntry - 49, // 47: pb.BuildImageOptions.builds:type_name -> pb.Builds - 2, // 48: pb.BuildImageOptions.build_method:type_name -> pb.BuildImageOptions.BuildMethod - 121, // 49: pb.LogOptions.config:type_name -> pb.LogOptions.ConfigEntry - 53, // 50: pb.EntrypointOptions.log:type_name -> pb.LogOptions - 52, // 51: pb.EntrypointOptions.healthcheck:type_name -> pb.HealthCheckOptions - 51, // 52: pb.EntrypointOptions.hook:type_name -> pb.HookOptions - 122, // 53: pb.EntrypointOptions.sysctls:type_name -> pb.EntrypointOptions.SysctlsEntry - 123, // 54: pb.Volume.volume:type_name -> pb.Volume.VolumeEntry - 54, // 55: pb.DeployOptions.entrypoint:type_name -> pb.EntrypointOptions - 124, // 56: pb.DeployOptions.networks:type_name -> pb.DeployOptions.NetworksEntry - 125, // 57: pb.DeployOptions.labels:type_name -> pb.DeployOptions.LabelsEntry - 126, // 58: pb.DeployOptions.nodelabels:type_name -> pb.DeployOptions.NodelabelsEntry - 3, // 59: pb.DeployOptions.deploy_strategy:type_name -> pb.DeployOptions.Strategy - 127, // 60: pb.DeployOptions.data:type_name -> pb.DeployOptions.DataEntry - 27, // 61: pb.DeployOptions.node_filter:type_name -> pb.NodeFilter - 128, // 62: pb.DeployOptions.modes:type_name -> pb.DeployOptions.ModesEntry - 129, // 63: pb.DeployOptions.owners:type_name -> pb.DeployOptions.OwnersEntry - 130, // 64: pb.DeployOptions.resource_opts:type_name -> pb.DeployOptions.ResourceOptsEntry - 56, // 65: pb.ReplaceOptions.deployOpt:type_name -> pb.DeployOptions - 131, // 66: pb.ReplaceOptions.filter_labels:type_name -> pb.ReplaceOptions.FilterLabelsEntry - 132, // 67: pb.ReplaceOptions.copy:type_name -> pb.ReplaceOptions.CopyEntry - 133, // 68: pb.CopyOptions.targets:type_name -> pb.CopyOptions.TargetsEntry - 134, // 69: pb.SendOptions.data:type_name -> pb.SendOptions.DataEntry - 135, // 70: pb.SendOptions.modes:type_name -> pb.SendOptions.ModesEntry - 136, // 71: pb.SendOptions.owners:type_name -> pb.SendOptions.OwnersEntry - 66, // 72: pb.BuildImageMessage.error_detail:type_name -> pb.ErrorDetail - 137, // 73: pb.CreateWorkloadMessage.publish:type_name -> pb.CreateWorkloadMessage.PublishEntry - 68, // 74: pb.ReplaceWorkloadMessage.create:type_name -> pb.CreateWorkloadMessage - 74, // 75: pb.ReplaceWorkloadMessage.remove:type_name -> pb.RemoveWorkloadMessage - 72, // 76: pb.ListImageMessage.images:type_name -> pb.ImageItem - 1, // 77: pb.AttachWorkloadMessage.std_stream_type:type_name -> pb.StdStreamType - 56, // 78: pb.RunAndWaitOptions.deploy_options:type_name -> pb.DeployOptions - 1, // 79: pb.LogStreamMessage.std_stream_type:type_name -> pb.StdStreamType - 138, // 80: pb.CapacityMessage.node_capacities:type_name -> pb.CapacityMessage.NodeCapacitiesEntry - 13, // 81: pb.SetNodeOptions.ResourceOptsEntry.value:type_name -> pb.RawParam - 13, // 82: pb.ReallocOptions.ResourceOptsEntry.value:type_name -> pb.RawParam - 13, // 83: pb.AddNodeOptions.ResourceOptsEntry.value:type_name -> pb.RawParam - 48, // 84: pb.Builds.BuildsEntry.value:type_name -> pb.Build - 64, // 85: pb.DeployOptions.ModesEntry.value:type_name -> pb.FileMode - 63, // 86: pb.DeployOptions.OwnersEntry.value:type_name -> pb.FileOwner - 13, // 87: pb.DeployOptions.ResourceOptsEntry.value:type_name -> pb.RawParam - 61, // 88: pb.CopyOptions.TargetsEntry.value:type_name -> pb.CopyPaths - 64, // 89: pb.SendOptions.ModesEntry.value:type_name -> pb.FileMode - 63, // 90: pb.SendOptions.OwnersEntry.value:type_name -> pb.FileOwner - 4, // 91: pb.CoreRPC.Info:input_type -> pb.Empty - 4, // 92: pb.CoreRPC.WatchServiceStatus:input_type -> pb.Empty - 15, // 93: pb.CoreRPC.ListNetworks:input_type -> pb.ListNetworkOptions - 16, // 94: pb.CoreRPC.ConnectNetwork:input_type -> pb.ConnectNetworkOptions - 17, // 95: pb.CoreRPC.DisconnectNetwork:input_type -> pb.DisconnectNetworkOptions - 40, // 96: pb.CoreRPC.AddPod:input_type -> pb.AddPodOptions - 41, // 97: pb.CoreRPC.RemovePod:input_type -> pb.RemovePodOptions - 42, // 98: pb.CoreRPC.GetPod:input_type -> pb.GetPodOptions - 4, // 99: pb.CoreRPC.ListPods:input_type -> pb.Empty - 42, // 100: pb.CoreRPC.GetPodResource:input_type -> pb.GetPodOptions - 42, // 101: pb.CoreRPC.PodResourceStream:input_type -> pb.GetPodOptions - 43, // 102: pb.CoreRPC.AddNode:input_type -> pb.AddNodeOptions - 44, // 103: pb.CoreRPC.RemoveNode:input_type -> pb.RemoveNodeOptions - 47, // 104: pb.CoreRPC.ListPodNodes:input_type -> pb.ListNodesOptions - 47, // 105: pb.CoreRPC.PodNodesStream:input_type -> pb.ListNodesOptions - 45, // 106: pb.CoreRPC.GetNode:input_type -> pb.GetNodeOptions - 45, // 107: pb.CoreRPC.GetNodeEngine:input_type -> pb.GetNodeOptions - 23, // 108: pb.CoreRPC.SetNode:input_type -> pb.SetNodeOptions - 24, // 109: pb.CoreRPC.SetNodeStatus:input_type -> pb.SetNodeStatusOptions - 25, // 110: pb.CoreRPC.GetNodeStatus:input_type -> pb.GetNodeStatusOptions - 4, // 111: pb.CoreRPC.NodeStatusStream:input_type -> pb.Empty - 46, // 112: pb.CoreRPC.GetNodeResource:input_type -> pb.GetNodeResourceOptions - 56, // 113: pb.CoreRPC.CalculateCapacity:input_type -> pb.DeployOptions - 35, // 114: pb.CoreRPC.GetWorkload:input_type -> pb.WorkloadID - 36, // 115: pb.CoreRPC.GetWorkloads:input_type -> pb.WorkloadIDs - 8, // 116: pb.CoreRPC.ListWorkloads:input_type -> pb.ListWorkloadsOptions - 45, // 117: pb.CoreRPC.ListNodeWorkloads:input_type -> pb.GetNodeOptions - 36, // 118: pb.CoreRPC.GetWorkloadsStatus:input_type -> pb.WorkloadIDs - 31, // 119: pb.CoreRPC.SetWorkloadsStatus:input_type -> pb.SetWorkloadsStatusOptions - 32, // 120: pb.CoreRPC.WorkloadStatusStream:input_type -> pb.WorkloadStatusStreamOptions - 62, // 121: pb.CoreRPC.Copy:input_type -> pb.CopyOptions - 65, // 122: pb.CoreRPC.Send:input_type -> pb.SendOptions - 50, // 123: pb.CoreRPC.BuildImage:input_type -> pb.BuildImageOptions - 58, // 124: pb.CoreRPC.CacheImage:input_type -> pb.CacheImageOptions - 59, // 125: pb.CoreRPC.RemoveImage:input_type -> pb.RemoveImageOptions - 60, // 126: pb.CoreRPC.ListImage:input_type -> pb.ListImageOptions - 56, // 127: pb.CoreRPC.CreateWorkload:input_type -> pb.DeployOptions - 57, // 128: pb.CoreRPC.ReplaceWorkload:input_type -> pb.ReplaceOptions - 37, // 129: pb.CoreRPC.RemoveWorkload:input_type -> pb.RemoveWorkloadOptions - 38, // 130: pb.CoreRPC.DissociateWorkload:input_type -> pb.DissociateWorkloadOptions - 81, // 131: pb.CoreRPC.ControlWorkload:input_type -> pb.ControlWorkloadOptions - 85, // 132: pb.CoreRPC.ExecuteWorkload:input_type -> pb.ExecuteWorkloadOptions - 39, // 133: pb.CoreRPC.ReallocResource:input_type -> pb.ReallocOptions - 83, // 134: pb.CoreRPC.LogStream:input_type -> pb.LogStreamOptions - 80, // 135: pb.CoreRPC.RunAndWait:input_type -> pb.RunAndWaitOptions - 5, // 136: pb.CoreRPC.Info:output_type -> pb.CoreInfo - 6, // 137: pb.CoreRPC.WatchServiceStatus:output_type -> pb.ServiceStatus - 19, // 138: pb.CoreRPC.ListNetworks:output_type -> pb.Networks - 18, // 139: pb.CoreRPC.ConnectNetwork:output_type -> pb.Network - 4, // 140: pb.CoreRPC.DisconnectNetwork:output_type -> pb.Empty - 9, // 141: pb.CoreRPC.AddPod:output_type -> pb.Pod - 4, // 142: pb.CoreRPC.RemovePod:output_type -> pb.Empty - 9, // 143: pb.CoreRPC.GetPod:output_type -> pb.Pod - 10, // 144: pb.CoreRPC.ListPods:output_type -> pb.Pods - 11, // 145: pb.CoreRPC.GetPodResource:output_type -> pb.PodResource - 14, // 146: pb.CoreRPC.PodResourceStream:output_type -> pb.NodeResource - 20, // 147: pb.CoreRPC.AddNode:output_type -> pb.Node - 4, // 148: pb.CoreRPC.RemoveNode:output_type -> pb.Empty - 21, // 149: pb.CoreRPC.ListPodNodes:output_type -> pb.Nodes - 20, // 150: pb.CoreRPC.PodNodesStream:output_type -> pb.Node - 20, // 151: pb.CoreRPC.GetNode:output_type -> pb.Node - 7, // 152: pb.CoreRPC.GetNodeEngine:output_type -> pb.Engine - 20, // 153: pb.CoreRPC.SetNode:output_type -> pb.Node - 4, // 154: pb.CoreRPC.SetNodeStatus:output_type -> pb.Empty - 26, // 155: pb.CoreRPC.GetNodeStatus:output_type -> pb.NodeStatusStreamMessage - 26, // 156: pb.CoreRPC.NodeStatusStream:output_type -> pb.NodeStatusStreamMessage - 14, // 157: pb.CoreRPC.GetNodeResource:output_type -> pb.NodeResource - 86, // 158: pb.CoreRPC.CalculateCapacity:output_type -> pb.CapacityMessage - 28, // 159: pb.CoreRPC.GetWorkload:output_type -> pb.Workload - 34, // 160: pb.CoreRPC.GetWorkloads:output_type -> pb.Workloads - 28, // 161: pb.CoreRPC.ListWorkloads:output_type -> pb.Workload - 34, // 162: pb.CoreRPC.ListNodeWorkloads:output_type -> pb.Workloads - 30, // 163: pb.CoreRPC.GetWorkloadsStatus:output_type -> pb.WorkloadsStatus - 30, // 164: pb.CoreRPC.SetWorkloadsStatus:output_type -> pb.WorkloadsStatus - 33, // 165: pb.CoreRPC.WorkloadStatusStream:output_type -> pb.WorkloadStatusStreamMessage - 77, // 166: pb.CoreRPC.Copy:output_type -> pb.CopyMessage - 78, // 167: pb.CoreRPC.Send:output_type -> pb.SendMessage - 67, // 168: pb.CoreRPC.BuildImage:output_type -> pb.BuildImageMessage - 70, // 169: pb.CoreRPC.CacheImage:output_type -> pb.CacheImageMessage - 71, // 170: pb.CoreRPC.RemoveImage:output_type -> pb.RemoveImageMessage - 73, // 171: pb.CoreRPC.ListImage:output_type -> pb.ListImageMessage - 68, // 172: pb.CoreRPC.CreateWorkload:output_type -> pb.CreateWorkloadMessage - 69, // 173: pb.CoreRPC.ReplaceWorkload:output_type -> pb.ReplaceWorkloadMessage - 74, // 174: pb.CoreRPC.RemoveWorkload:output_type -> pb.RemoveWorkloadMessage - 75, // 175: pb.CoreRPC.DissociateWorkload:output_type -> pb.DissociateWorkloadMessage - 82, // 176: pb.CoreRPC.ControlWorkload:output_type -> pb.ControlWorkloadMessage - 79, // 177: pb.CoreRPC.ExecuteWorkload:output_type -> pb.AttachWorkloadMessage - 76, // 178: pb.CoreRPC.ReallocResource:output_type -> pb.ReallocResourceMessage - 84, // 179: pb.CoreRPC.LogStream:output_type -> pb.LogStreamMessage - 79, // 180: pb.CoreRPC.RunAndWait:output_type -> pb.AttachWorkloadMessage - 136, // [136:181] is the sub-list for method output_type - 91, // [91:136] is the sub-list for method input_type - 91, // [91:91] is the sub-list for extension type_name - 91, // [91:91] is the sub-list for extension extendee - 0, // [0:91] is the sub-list for field type_name + 11, // 2: pb.RawParam.string_slice:type_name -> pb.StringSlice + 17, // 3: pb.Networks.networks:type_name -> pb.Network + 85, // 4: pb.Node.labels:type_name -> pb.Node.LabelsEntry + 86, // 5: pb.AddNodeOptions.labels:type_name -> pb.AddNodeOptions.LabelsEntry + 87, // 6: pb.AddNodeOptions.resource_opts:type_name -> pb.AddNodeOptions.ResourceOptsEntry + 88, // 7: pb.GetNodeOptions.labels:type_name -> pb.GetNodeOptions.LabelsEntry + 25, // 8: pb.GetNodeResourceOptions.opts:type_name -> pb.GetNodeOptions + 89, // 9: pb.ListNodesOptions.labels:type_name -> pb.ListNodesOptions.LabelsEntry + 90, // 10: pb.SetNodeOptions.labels:type_name -> pb.SetNodeOptions.LabelsEntry + 91, // 11: pb.SetNodeOptions.resource_opts:type_name -> pb.SetNodeOptions.ResourceOptsEntry + 0, // 12: pb.SetNodeOptions.bypass:type_name -> pb.TriOpt + 92, // 13: pb.NodeFilter.labels:type_name -> pb.NodeFilter.LabelsEntry + 93, // 14: pb.Workload.labels:type_name -> pb.Workload.LabelsEntry + 94, // 15: pb.Workload.publish:type_name -> pb.Workload.PublishEntry + 34, // 16: pb.Workload.status:type_name -> pb.WorkloadStatus + 95, // 17: pb.WorkloadStatus.networks:type_name -> pb.WorkloadStatus.NetworksEntry + 34, // 18: pb.WorkloadsStatus.status:type_name -> pb.WorkloadStatus + 34, // 19: pb.SetWorkloadsStatusOptions.status:type_name -> pb.WorkloadStatus + 96, // 20: pb.WorkloadStatusStreamOptions.labels:type_name -> pb.WorkloadStatusStreamOptions.LabelsEntry + 33, // 21: pb.WorkloadStatusStreamMessage.workload:type_name -> pb.Workload + 34, // 22: pb.WorkloadStatusStreamMessage.status:type_name -> pb.WorkloadStatus + 33, // 23: pb.Workloads.workloads:type_name -> pb.Workload + 97, // 24: pb.ReallocOptions.resource_opts:type_name -> pb.ReallocOptions.ResourceOptsEntry + 98, // 25: pb.Build.envs:type_name -> pb.Build.EnvsEntry + 99, // 26: pb.Build.args:type_name -> pb.Build.ArgsEntry + 100, // 27: pb.Build.labels:type_name -> pb.Build.LabelsEntry + 101, // 28: pb.Build.artifacts:type_name -> pb.Build.ArtifactsEntry + 102, // 29: pb.Build.cache:type_name -> pb.Build.CacheEntry + 103, // 30: pb.Builds.builds:type_name -> pb.Builds.BuildsEntry + 46, // 31: pb.BuildImageOptions.builds:type_name -> pb.Builds + 2, // 32: pb.BuildImageOptions.build_method:type_name -> pb.BuildImageOptions.BuildMethod + 104, // 33: pb.LogOptions.config:type_name -> pb.LogOptions.ConfigEntry + 50, // 34: pb.EntrypointOptions.log:type_name -> pb.LogOptions + 49, // 35: pb.EntrypointOptions.healthcheck:type_name -> pb.HealthCheckOptions + 48, // 36: pb.EntrypointOptions.hook:type_name -> pb.HookOptions + 105, // 37: pb.EntrypointOptions.sysctls:type_name -> pb.EntrypointOptions.SysctlsEntry + 106, // 38: pb.Volume.volume:type_name -> pb.Volume.VolumeEntry + 51, // 39: pb.DeployOptions.entrypoint:type_name -> pb.EntrypointOptions + 107, // 40: pb.DeployOptions.networks:type_name -> pb.DeployOptions.NetworksEntry + 108, // 41: pb.DeployOptions.labels:type_name -> pb.DeployOptions.LabelsEntry + 109, // 42: pb.DeployOptions.nodelabels:type_name -> pb.DeployOptions.NodelabelsEntry + 3, // 43: pb.DeployOptions.deploy_strategy:type_name -> pb.DeployOptions.Strategy + 110, // 44: pb.DeployOptions.data:type_name -> pb.DeployOptions.DataEntry + 32, // 45: pb.DeployOptions.node_filter:type_name -> pb.NodeFilter + 111, // 46: pb.DeployOptions.modes:type_name -> pb.DeployOptions.ModesEntry + 112, // 47: pb.DeployOptions.owners:type_name -> pb.DeployOptions.OwnersEntry + 113, // 48: pb.DeployOptions.resource_opts:type_name -> pb.DeployOptions.ResourceOptsEntry + 53, // 49: pb.ReplaceOptions.deployOpt:type_name -> pb.DeployOptions + 114, // 50: pb.ReplaceOptions.filter_labels:type_name -> pb.ReplaceOptions.FilterLabelsEntry + 115, // 51: pb.ReplaceOptions.copy:type_name -> pb.ReplaceOptions.CopyEntry + 116, // 52: pb.CopyOptions.targets:type_name -> pb.CopyOptions.TargetsEntry + 117, // 53: pb.SendOptions.data:type_name -> pb.SendOptions.DataEntry + 118, // 54: pb.SendOptions.modes:type_name -> pb.SendOptions.ModesEntry + 119, // 55: pb.SendOptions.owners:type_name -> pb.SendOptions.OwnersEntry + 63, // 56: pb.BuildImageMessage.error_detail:type_name -> pb.ErrorDetail + 120, // 57: pb.CreateWorkloadMessage.publish:type_name -> pb.CreateWorkloadMessage.PublishEntry + 65, // 58: pb.ReplaceWorkloadMessage.create:type_name -> pb.CreateWorkloadMessage + 71, // 59: pb.ReplaceWorkloadMessage.remove:type_name -> pb.RemoveWorkloadMessage + 69, // 60: pb.ListImageMessage.images:type_name -> pb.ImageItem + 1, // 61: pb.AttachWorkloadMessage.std_stream_type:type_name -> pb.StdStreamType + 53, // 62: pb.RunAndWaitOptions.deploy_options:type_name -> pb.DeployOptions + 1, // 63: pb.LogStreamMessage.std_stream_type:type_name -> pb.StdStreamType + 121, // 64: pb.CapacityMessage.node_capacities:type_name -> pb.CapacityMessage.NodeCapacitiesEntry + 12, // 65: pb.AddNodeOptions.ResourceOptsEntry.value:type_name -> pb.RawParam + 12, // 66: pb.SetNodeOptions.ResourceOptsEntry.value:type_name -> pb.RawParam + 12, // 67: pb.ReallocOptions.ResourceOptsEntry.value:type_name -> pb.RawParam + 45, // 68: pb.Builds.BuildsEntry.value:type_name -> pb.Build + 61, // 69: pb.DeployOptions.ModesEntry.value:type_name -> pb.FileMode + 60, // 70: pb.DeployOptions.OwnersEntry.value:type_name -> pb.FileOwner + 12, // 71: pb.DeployOptions.ResourceOptsEntry.value:type_name -> pb.RawParam + 58, // 72: pb.CopyOptions.TargetsEntry.value:type_name -> pb.CopyPaths + 61, // 73: pb.SendOptions.ModesEntry.value:type_name -> pb.FileMode + 60, // 74: pb.SendOptions.OwnersEntry.value:type_name -> pb.FileOwner + 4, // 75: pb.CoreRPC.Info:input_type -> pb.Empty + 4, // 76: pb.CoreRPC.WatchServiceStatus:input_type -> pb.Empty + 14, // 77: pb.CoreRPC.ListNetworks:input_type -> pb.ListNetworkOptions + 15, // 78: pb.CoreRPC.ConnectNetwork:input_type -> pb.ConnectNetworkOptions + 16, // 79: pb.CoreRPC.DisconnectNetwork:input_type -> pb.DisconnectNetworkOptions + 20, // 80: pb.CoreRPC.AddPod:input_type -> pb.AddPodOptions + 21, // 81: pb.CoreRPC.RemovePod:input_type -> pb.RemovePodOptions + 22, // 82: pb.CoreRPC.GetPod:input_type -> pb.GetPodOptions + 4, // 83: pb.CoreRPC.ListPods:input_type -> pb.Empty + 22, // 84: pb.CoreRPC.GetPodResource:input_type -> pb.GetPodOptions + 26, // 85: pb.CoreRPC.GetNodeResource:input_type -> pb.GetNodeResourceOptions + 23, // 86: pb.CoreRPC.AddNode:input_type -> pb.AddNodeOptions + 24, // 87: pb.CoreRPC.RemoveNode:input_type -> pb.RemoveNodeOptions + 27, // 88: pb.CoreRPC.ListPodNodes:input_type -> pb.ListNodesOptions + 25, // 89: pb.CoreRPC.GetNode:input_type -> pb.GetNodeOptions + 25, // 90: pb.CoreRPC.GetNodeEngineInfo:input_type -> pb.GetNodeOptions + 28, // 91: pb.CoreRPC.SetNode:input_type -> pb.SetNodeOptions + 29, // 92: pb.CoreRPC.SetNodeStatus:input_type -> pb.SetNodeStatusOptions + 30, // 93: pb.CoreRPC.GetNodeStatus:input_type -> pb.GetNodeStatusOptions + 4, // 94: pb.CoreRPC.NodeStatusStream:input_type -> pb.Empty + 53, // 95: pb.CoreRPC.CalculateCapacity:input_type -> pb.DeployOptions + 40, // 96: pb.CoreRPC.GetWorkload:input_type -> pb.WorkloadID + 41, // 97: pb.CoreRPC.GetWorkloads:input_type -> pb.WorkloadIDs + 8, // 98: pb.CoreRPC.ListWorkloads:input_type -> pb.ListWorkloadsOptions + 25, // 99: pb.CoreRPC.ListNodeWorkloads:input_type -> pb.GetNodeOptions + 41, // 100: pb.CoreRPC.GetWorkloadsStatus:input_type -> pb.WorkloadIDs + 36, // 101: pb.CoreRPC.SetWorkloadsStatus:input_type -> pb.SetWorkloadsStatusOptions + 37, // 102: pb.CoreRPC.WorkloadStatusStream:input_type -> pb.WorkloadStatusStreamOptions + 59, // 103: pb.CoreRPC.Copy:input_type -> pb.CopyOptions + 62, // 104: pb.CoreRPC.Send:input_type -> pb.SendOptions + 47, // 105: pb.CoreRPC.BuildImage:input_type -> pb.BuildImageOptions + 55, // 106: pb.CoreRPC.CacheImage:input_type -> pb.CacheImageOptions + 56, // 107: pb.CoreRPC.RemoveImage:input_type -> pb.RemoveImageOptions + 57, // 108: pb.CoreRPC.ListImage:input_type -> pb.ListImageOptions + 53, // 109: pb.CoreRPC.CreateWorkload:input_type -> pb.DeployOptions + 54, // 110: pb.CoreRPC.ReplaceWorkload:input_type -> pb.ReplaceOptions + 42, // 111: pb.CoreRPC.RemoveWorkload:input_type -> pb.RemoveWorkloadOptions + 43, // 112: pb.CoreRPC.DissociateWorkload:input_type -> pb.DissociateWorkloadOptions + 78, // 113: pb.CoreRPC.ControlWorkload:input_type -> pb.ControlWorkloadOptions + 82, // 114: pb.CoreRPC.ExecuteWorkload:input_type -> pb.ExecuteWorkloadOptions + 44, // 115: pb.CoreRPC.ReallocResource:input_type -> pb.ReallocOptions + 80, // 116: pb.CoreRPC.LogStream:input_type -> pb.LogStreamOptions + 77, // 117: pb.CoreRPC.RunAndWait:input_type -> pb.RunAndWaitOptions + 5, // 118: pb.CoreRPC.Info:output_type -> pb.CoreInfo + 6, // 119: pb.CoreRPC.WatchServiceStatus:output_type -> pb.ServiceStatus + 18, // 120: pb.CoreRPC.ListNetworks:output_type -> pb.Networks + 17, // 121: pb.CoreRPC.ConnectNetwork:output_type -> pb.Network + 4, // 122: pb.CoreRPC.DisconnectNetwork:output_type -> pb.Empty + 9, // 123: pb.CoreRPC.AddPod:output_type -> pb.Pod + 4, // 124: pb.CoreRPC.RemovePod:output_type -> pb.Empty + 9, // 125: pb.CoreRPC.GetPod:output_type -> pb.Pod + 10, // 126: pb.CoreRPC.ListPods:output_type -> pb.Pods + 13, // 127: pb.CoreRPC.GetPodResource:output_type -> pb.NodeResource + 13, // 128: pb.CoreRPC.GetNodeResource:output_type -> pb.NodeResource + 19, // 129: pb.CoreRPC.AddNode:output_type -> pb.Node + 4, // 130: pb.CoreRPC.RemoveNode:output_type -> pb.Empty + 19, // 131: pb.CoreRPC.ListPodNodes:output_type -> pb.Node + 19, // 132: pb.CoreRPC.GetNode:output_type -> pb.Node + 7, // 133: pb.CoreRPC.GetNodeEngineInfo:output_type -> pb.Engine + 19, // 134: pb.CoreRPC.SetNode:output_type -> pb.Node + 4, // 135: pb.CoreRPC.SetNodeStatus:output_type -> pb.Empty + 31, // 136: pb.CoreRPC.GetNodeStatus:output_type -> pb.NodeStatusStreamMessage + 31, // 137: pb.CoreRPC.NodeStatusStream:output_type -> pb.NodeStatusStreamMessage + 83, // 138: pb.CoreRPC.CalculateCapacity:output_type -> pb.CapacityMessage + 33, // 139: pb.CoreRPC.GetWorkload:output_type -> pb.Workload + 39, // 140: pb.CoreRPC.GetWorkloads:output_type -> pb.Workloads + 33, // 141: pb.CoreRPC.ListWorkloads:output_type -> pb.Workload + 39, // 142: pb.CoreRPC.ListNodeWorkloads:output_type -> pb.Workloads + 35, // 143: pb.CoreRPC.GetWorkloadsStatus:output_type -> pb.WorkloadsStatus + 35, // 144: pb.CoreRPC.SetWorkloadsStatus:output_type -> pb.WorkloadsStatus + 38, // 145: pb.CoreRPC.WorkloadStatusStream:output_type -> pb.WorkloadStatusStreamMessage + 74, // 146: pb.CoreRPC.Copy:output_type -> pb.CopyMessage + 75, // 147: pb.CoreRPC.Send:output_type -> pb.SendMessage + 64, // 148: pb.CoreRPC.BuildImage:output_type -> pb.BuildImageMessage + 67, // 149: pb.CoreRPC.CacheImage:output_type -> pb.CacheImageMessage + 68, // 150: pb.CoreRPC.RemoveImage:output_type -> pb.RemoveImageMessage + 70, // 151: pb.CoreRPC.ListImage:output_type -> pb.ListImageMessage + 65, // 152: pb.CoreRPC.CreateWorkload:output_type -> pb.CreateWorkloadMessage + 66, // 153: pb.CoreRPC.ReplaceWorkload:output_type -> pb.ReplaceWorkloadMessage + 71, // 154: pb.CoreRPC.RemoveWorkload:output_type -> pb.RemoveWorkloadMessage + 72, // 155: pb.CoreRPC.DissociateWorkload:output_type -> pb.DissociateWorkloadMessage + 79, // 156: pb.CoreRPC.ControlWorkload:output_type -> pb.ControlWorkloadMessage + 76, // 157: pb.CoreRPC.ExecuteWorkload:output_type -> pb.AttachWorkloadMessage + 73, // 158: pb.CoreRPC.ReallocResource:output_type -> pb.ReallocResourceMessage + 81, // 159: pb.CoreRPC.LogStream:output_type -> pb.LogStreamMessage + 76, // 160: pb.CoreRPC.RunAndWait:output_type -> pb.AttachWorkloadMessage + 118, // [118:161] is the sub-list for method output_type + 75, // [75:118] is the sub-list for method input_type + 75, // [75:75] is the sub-list for extension type_name + 75, // [75:75] is the sub-list for extension extendee + 0, // [0:75] is the sub-list for field type_name } func init() { file_rpc_gen_core_proto_init() } @@ -7805,7 +7189,7 @@ func file_rpc_gen_core_proto_init() { } } file_rpc_gen_core_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PodResource); i { + switch v := v.(*StringSlice); i { case 0: return &v.state case 1: @@ -7817,7 +7201,7 @@ func file_rpc_gen_core_proto_init() { } } file_rpc_gen_core_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StringSlice); i { + switch v := v.(*RawParam); i { case 0: return &v.state case 1: @@ -7829,7 +7213,7 @@ func file_rpc_gen_core_proto_init() { } } file_rpc_gen_core_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RawParam); i { + switch v := v.(*NodeResource); i { case 0: return &v.state case 1: @@ -7841,7 +7225,7 @@ func file_rpc_gen_core_proto_init() { } } file_rpc_gen_core_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NodeResource); i { + switch v := v.(*ListNetworkOptions); i { case 0: return &v.state case 1: @@ -7853,7 +7237,7 @@ func file_rpc_gen_core_proto_init() { } } file_rpc_gen_core_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListNetworkOptions); i { + switch v := v.(*ConnectNetworkOptions); i { case 0: return &v.state case 1: @@ -7865,7 +7249,7 @@ func file_rpc_gen_core_proto_init() { } } file_rpc_gen_core_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ConnectNetworkOptions); i { + switch v := v.(*DisconnectNetworkOptions); i { case 0: return &v.state case 1: @@ -7877,7 +7261,7 @@ func file_rpc_gen_core_proto_init() { } } file_rpc_gen_core_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DisconnectNetworkOptions); i { + switch v := v.(*Network); i { case 0: return &v.state case 1: @@ -7889,7 +7273,7 @@ func file_rpc_gen_core_proto_init() { } } file_rpc_gen_core_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Network); i { + switch v := v.(*Networks); i { case 0: return &v.state case 1: @@ -7901,7 +7285,7 @@ func file_rpc_gen_core_proto_init() { } } file_rpc_gen_core_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Networks); i { + switch v := v.(*Node); i { case 0: return &v.state case 1: @@ -7913,7 +7297,7 @@ func file_rpc_gen_core_proto_init() { } } file_rpc_gen_core_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Node); i { + switch v := v.(*AddPodOptions); i { case 0: return &v.state case 1: @@ -7925,7 +7309,7 @@ func file_rpc_gen_core_proto_init() { } } file_rpc_gen_core_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Nodes); i { + switch v := v.(*RemovePodOptions); i { case 0: return &v.state case 1: @@ -7937,7 +7321,7 @@ func file_rpc_gen_core_proto_init() { } } file_rpc_gen_core_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NodeAvailable); i { + switch v := v.(*GetPodOptions); i { case 0: return &v.state case 1: @@ -7949,7 +7333,7 @@ func file_rpc_gen_core_proto_init() { } } file_rpc_gen_core_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetNodeOptions); i { + switch v := v.(*AddNodeOptions); i { case 0: return &v.state case 1: @@ -7961,7 +7345,7 @@ func file_rpc_gen_core_proto_init() { } } file_rpc_gen_core_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetNodeStatusOptions); i { + switch v := v.(*RemoveNodeOptions); i { case 0: return &v.state case 1: @@ -7973,7 +7357,7 @@ func file_rpc_gen_core_proto_init() { } } file_rpc_gen_core_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetNodeStatusOptions); i { + switch v := v.(*GetNodeOptions); i { case 0: return &v.state case 1: @@ -7985,7 +7369,7 @@ func file_rpc_gen_core_proto_init() { } } file_rpc_gen_core_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NodeStatusStreamMessage); i { + switch v := v.(*GetNodeResourceOptions); i { case 0: return &v.state case 1: @@ -7997,7 +7381,7 @@ func file_rpc_gen_core_proto_init() { } } file_rpc_gen_core_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NodeFilter); i { + switch v := v.(*ListNodesOptions); i { case 0: return &v.state case 1: @@ -8009,7 +7393,7 @@ func file_rpc_gen_core_proto_init() { } } file_rpc_gen_core_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Workload); i { + switch v := v.(*SetNodeOptions); i { case 0: return &v.state case 1: @@ -8021,7 +7405,7 @@ func file_rpc_gen_core_proto_init() { } } file_rpc_gen_core_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WorkloadStatus); i { + switch v := v.(*SetNodeStatusOptions); i { case 0: return &v.state case 1: @@ -8033,7 +7417,7 @@ func file_rpc_gen_core_proto_init() { } } file_rpc_gen_core_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WorkloadsStatus); i { + switch v := v.(*GetNodeStatusOptions); i { case 0: return &v.state case 1: @@ -8045,7 +7429,7 @@ func file_rpc_gen_core_proto_init() { } } file_rpc_gen_core_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetWorkloadsStatusOptions); i { + switch v := v.(*NodeStatusStreamMessage); i { case 0: return &v.state case 1: @@ -8057,7 +7441,7 @@ func file_rpc_gen_core_proto_init() { } } file_rpc_gen_core_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WorkloadStatusStreamOptions); i { + switch v := v.(*NodeFilter); i { case 0: return &v.state case 1: @@ -8069,7 +7453,7 @@ func file_rpc_gen_core_proto_init() { } } file_rpc_gen_core_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WorkloadStatusStreamMessage); i { + switch v := v.(*Workload); i { case 0: return &v.state case 1: @@ -8081,7 +7465,7 @@ func file_rpc_gen_core_proto_init() { } } file_rpc_gen_core_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Workloads); i { + switch v := v.(*WorkloadStatus); i { case 0: return &v.state case 1: @@ -8093,7 +7477,7 @@ func file_rpc_gen_core_proto_init() { } } file_rpc_gen_core_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WorkloadID); i { + switch v := v.(*WorkloadsStatus); i { case 0: return &v.state case 1: @@ -8105,7 +7489,7 @@ func file_rpc_gen_core_proto_init() { } } file_rpc_gen_core_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WorkloadIDs); i { + switch v := v.(*SetWorkloadsStatusOptions); i { case 0: return &v.state case 1: @@ -8117,7 +7501,7 @@ func file_rpc_gen_core_proto_init() { } } file_rpc_gen_core_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RemoveWorkloadOptions); i { + switch v := v.(*WorkloadStatusStreamOptions); i { case 0: return &v.state case 1: @@ -8129,7 +7513,7 @@ func file_rpc_gen_core_proto_init() { } } file_rpc_gen_core_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DissociateWorkloadOptions); i { + switch v := v.(*WorkloadStatusStreamMessage); i { case 0: return &v.state case 1: @@ -8141,7 +7525,7 @@ func file_rpc_gen_core_proto_init() { } } file_rpc_gen_core_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReallocOptions); i { + switch v := v.(*Workloads); i { case 0: return &v.state case 1: @@ -8153,7 +7537,7 @@ func file_rpc_gen_core_proto_init() { } } file_rpc_gen_core_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AddPodOptions); i { + switch v := v.(*WorkloadID); i { case 0: return &v.state case 1: @@ -8165,7 +7549,7 @@ func file_rpc_gen_core_proto_init() { } } file_rpc_gen_core_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RemovePodOptions); i { + switch v := v.(*WorkloadIDs); i { case 0: return &v.state case 1: @@ -8177,7 +7561,7 @@ func file_rpc_gen_core_proto_init() { } } file_rpc_gen_core_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetPodOptions); i { + switch v := v.(*RemoveWorkloadOptions); i { case 0: return &v.state case 1: @@ -8189,7 +7573,7 @@ func file_rpc_gen_core_proto_init() { } } file_rpc_gen_core_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AddNodeOptions); i { + switch v := v.(*DissociateWorkloadOptions); i { case 0: return &v.state case 1: @@ -8201,7 +7585,7 @@ func file_rpc_gen_core_proto_init() { } } file_rpc_gen_core_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RemoveNodeOptions); i { + switch v := v.(*ReallocOptions); i { case 0: return &v.state case 1: @@ -8213,42 +7597,6 @@ func file_rpc_gen_core_proto_init() { } } file_rpc_gen_core_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetNodeOptions); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_rpc_gen_core_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetNodeResourceOptions); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_rpc_gen_core_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListNodesOptions); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_rpc_gen_core_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Build); i { case 0: return &v.state @@ -8260,7 +7608,7 @@ func file_rpc_gen_core_proto_init() { return nil } } - file_rpc_gen_core_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { + file_rpc_gen_core_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Builds); i { case 0: return &v.state @@ -8272,7 +7620,7 @@ func file_rpc_gen_core_proto_init() { return nil } } - file_rpc_gen_core_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { + file_rpc_gen_core_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*BuildImageOptions); i { case 0: return &v.state @@ -8284,7 +7632,7 @@ func file_rpc_gen_core_proto_init() { return nil } } - file_rpc_gen_core_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { + file_rpc_gen_core_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*HookOptions); i { case 0: return &v.state @@ -8296,7 +7644,7 @@ func file_rpc_gen_core_proto_init() { return nil } } - file_rpc_gen_core_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { + file_rpc_gen_core_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*HealthCheckOptions); i { case 0: return &v.state @@ -8308,7 +7656,7 @@ func file_rpc_gen_core_proto_init() { return nil } } - file_rpc_gen_core_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { + file_rpc_gen_core_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LogOptions); i { case 0: return &v.state @@ -8320,7 +7668,7 @@ func file_rpc_gen_core_proto_init() { return nil } } - file_rpc_gen_core_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { + file_rpc_gen_core_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EntrypointOptions); i { case 0: return &v.state @@ -8332,7 +7680,7 @@ func file_rpc_gen_core_proto_init() { return nil } } - file_rpc_gen_core_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { + file_rpc_gen_core_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Volume); i { case 0: return &v.state @@ -8344,7 +7692,7 @@ func file_rpc_gen_core_proto_init() { return nil } } - file_rpc_gen_core_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { + file_rpc_gen_core_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DeployOptions); i { case 0: return &v.state @@ -8356,7 +7704,7 @@ func file_rpc_gen_core_proto_init() { return nil } } - file_rpc_gen_core_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { + file_rpc_gen_core_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ReplaceOptions); i { case 0: return &v.state @@ -8368,7 +7716,7 @@ func file_rpc_gen_core_proto_init() { return nil } } - file_rpc_gen_core_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { + file_rpc_gen_core_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CacheImageOptions); i { case 0: return &v.state @@ -8380,7 +7728,7 @@ func file_rpc_gen_core_proto_init() { return nil } } - file_rpc_gen_core_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { + file_rpc_gen_core_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RemoveImageOptions); i { case 0: return &v.state @@ -8392,7 +7740,7 @@ func file_rpc_gen_core_proto_init() { return nil } } - file_rpc_gen_core_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { + file_rpc_gen_core_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListImageOptions); i { case 0: return &v.state @@ -8404,7 +7752,7 @@ func file_rpc_gen_core_proto_init() { return nil } } - file_rpc_gen_core_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { + file_rpc_gen_core_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CopyPaths); i { case 0: return &v.state @@ -8416,7 +7764,7 @@ func file_rpc_gen_core_proto_init() { return nil } } - file_rpc_gen_core_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { + file_rpc_gen_core_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CopyOptions); i { case 0: return &v.state @@ -8428,7 +7776,7 @@ func file_rpc_gen_core_proto_init() { return nil } } - file_rpc_gen_core_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { + file_rpc_gen_core_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FileOwner); i { case 0: return &v.state @@ -8440,7 +7788,7 @@ func file_rpc_gen_core_proto_init() { return nil } } - file_rpc_gen_core_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { + file_rpc_gen_core_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FileMode); i { case 0: return &v.state @@ -8452,7 +7800,7 @@ func file_rpc_gen_core_proto_init() { return nil } } - file_rpc_gen_core_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} { + file_rpc_gen_core_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SendOptions); i { case 0: return &v.state @@ -8464,7 +7812,7 @@ func file_rpc_gen_core_proto_init() { return nil } } - file_rpc_gen_core_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} { + file_rpc_gen_core_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ErrorDetail); i { case 0: return &v.state @@ -8476,7 +7824,7 @@ func file_rpc_gen_core_proto_init() { return nil } } - file_rpc_gen_core_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} { + file_rpc_gen_core_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*BuildImageMessage); i { case 0: return &v.state @@ -8488,7 +7836,7 @@ func file_rpc_gen_core_proto_init() { return nil } } - file_rpc_gen_core_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} { + file_rpc_gen_core_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CreateWorkloadMessage); i { case 0: return &v.state @@ -8500,7 +7848,7 @@ func file_rpc_gen_core_proto_init() { return nil } } - file_rpc_gen_core_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} { + file_rpc_gen_core_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ReplaceWorkloadMessage); i { case 0: return &v.state @@ -8512,7 +7860,7 @@ func file_rpc_gen_core_proto_init() { return nil } } - file_rpc_gen_core_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} { + file_rpc_gen_core_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CacheImageMessage); i { case 0: return &v.state @@ -8524,7 +7872,7 @@ func file_rpc_gen_core_proto_init() { return nil } } - file_rpc_gen_core_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} { + file_rpc_gen_core_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RemoveImageMessage); i { case 0: return &v.state @@ -8536,7 +7884,7 @@ func file_rpc_gen_core_proto_init() { return nil } } - file_rpc_gen_core_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { + file_rpc_gen_core_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ImageItem); i { case 0: return &v.state @@ -8548,7 +7896,7 @@ func file_rpc_gen_core_proto_init() { return nil } } - file_rpc_gen_core_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} { + file_rpc_gen_core_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListImageMessage); i { case 0: return &v.state @@ -8560,7 +7908,7 @@ func file_rpc_gen_core_proto_init() { return nil } } - file_rpc_gen_core_proto_msgTypes[70].Exporter = func(v interface{}, i int) interface{} { + file_rpc_gen_core_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RemoveWorkloadMessage); i { case 0: return &v.state @@ -8572,7 +7920,7 @@ func file_rpc_gen_core_proto_init() { return nil } } - file_rpc_gen_core_proto_msgTypes[71].Exporter = func(v interface{}, i int) interface{} { + file_rpc_gen_core_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DissociateWorkloadMessage); i { case 0: return &v.state @@ -8584,7 +7932,7 @@ func file_rpc_gen_core_proto_init() { return nil } } - file_rpc_gen_core_proto_msgTypes[72].Exporter = func(v interface{}, i int) interface{} { + file_rpc_gen_core_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ReallocResourceMessage); i { case 0: return &v.state @@ -8596,7 +7944,7 @@ func file_rpc_gen_core_proto_init() { return nil } } - file_rpc_gen_core_proto_msgTypes[73].Exporter = func(v interface{}, i int) interface{} { + file_rpc_gen_core_proto_msgTypes[70].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CopyMessage); i { case 0: return &v.state @@ -8608,7 +7956,7 @@ func file_rpc_gen_core_proto_init() { return nil } } - file_rpc_gen_core_proto_msgTypes[74].Exporter = func(v interface{}, i int) interface{} { + file_rpc_gen_core_proto_msgTypes[71].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SendMessage); i { case 0: return &v.state @@ -8620,7 +7968,7 @@ func file_rpc_gen_core_proto_init() { return nil } } - file_rpc_gen_core_proto_msgTypes[75].Exporter = func(v interface{}, i int) interface{} { + file_rpc_gen_core_proto_msgTypes[72].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AttachWorkloadMessage); i { case 0: return &v.state @@ -8632,7 +7980,7 @@ func file_rpc_gen_core_proto_init() { return nil } } - file_rpc_gen_core_proto_msgTypes[76].Exporter = func(v interface{}, i int) interface{} { + file_rpc_gen_core_proto_msgTypes[73].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RunAndWaitOptions); i { case 0: return &v.state @@ -8644,7 +7992,7 @@ func file_rpc_gen_core_proto_init() { return nil } } - file_rpc_gen_core_proto_msgTypes[77].Exporter = func(v interface{}, i int) interface{} { + file_rpc_gen_core_proto_msgTypes[74].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ControlWorkloadOptions); i { case 0: return &v.state @@ -8656,7 +8004,7 @@ func file_rpc_gen_core_proto_init() { return nil } } - file_rpc_gen_core_proto_msgTypes[78].Exporter = func(v interface{}, i int) interface{} { + file_rpc_gen_core_proto_msgTypes[75].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ControlWorkloadMessage); i { case 0: return &v.state @@ -8668,7 +8016,7 @@ func file_rpc_gen_core_proto_init() { return nil } } - file_rpc_gen_core_proto_msgTypes[79].Exporter = func(v interface{}, i int) interface{} { + file_rpc_gen_core_proto_msgTypes[76].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LogStreamOptions); i { case 0: return &v.state @@ -8680,7 +8028,7 @@ func file_rpc_gen_core_proto_init() { return nil } } - file_rpc_gen_core_proto_msgTypes[80].Exporter = func(v interface{}, i int) interface{} { + file_rpc_gen_core_proto_msgTypes[77].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LogStreamMessage); i { case 0: return &v.state @@ -8692,7 +8040,7 @@ func file_rpc_gen_core_proto_init() { return nil } } - file_rpc_gen_core_proto_msgTypes[81].Exporter = func(v interface{}, i int) interface{} { + file_rpc_gen_core_proto_msgTypes[78].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ExecuteWorkloadOptions); i { case 0: return &v.state @@ -8704,7 +8052,7 @@ func file_rpc_gen_core_proto_init() { return nil } } - file_rpc_gen_core_proto_msgTypes[82].Exporter = func(v interface{}, i int) interface{} { + file_rpc_gen_core_proto_msgTypes[79].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CapacityMessage); i { case 0: return &v.state @@ -8717,7 +8065,7 @@ func file_rpc_gen_core_proto_init() { } } } - file_rpc_gen_core_proto_msgTypes[9].OneofWrappers = []interface{}{ + file_rpc_gen_core_proto_msgTypes[8].OneofWrappers = []interface{}{ (*RawParam_Str)(nil), (*RawParam_StringSlice)(nil), } @@ -8727,7 +8075,7 @@ func file_rpc_gen_core_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_rpc_gen_core_proto_rawDesc, NumEnums: 4, - NumMessages: 135, + NumMessages: 118, NumExtensions: 0, NumServices: 1, }, diff --git a/rpc/gen/core.proto b/rpc/gen/core.proto index a4f0dbcc0..40234533b 100644 --- a/rpc/gen/core.proto +++ b/rpc/gen/core.proto @@ -17,22 +17,19 @@ service CoreRPC { rpc GetPod(GetPodOptions) returns (Pod) {}; rpc ListPods(Empty) returns (Pods) {}; - rpc GetPodResource(GetPodOptions) returns (PodResource) {}; - rpc PodResourceStream(GetPodOptions) returns (stream NodeResource) {}; + rpc GetPodResource(GetPodOptions) returns (stream NodeResource) {}; + rpc GetNodeResource(GetNodeResourceOptions) returns (NodeResource) {}; rpc AddNode(AddNodeOptions) returns (Node) {}; rpc RemoveNode(RemoveNodeOptions) returns (Empty) {}; - rpc ListPodNodes(ListNodesOptions) returns (Nodes) {}; - rpc PodNodesStream(ListNodesOptions) returns (stream Node) {}; + rpc ListPodNodes(ListNodesOptions) returns (stream Node) {}; rpc GetNode(GetNodeOptions) returns (Node) {}; - rpc GetNodeEngine(GetNodeOptions) returns (Engine) {}; + rpc GetNodeEngineInfo(GetNodeOptions) returns (Engine) {}; rpc SetNode(SetNodeOptions) returns (Node) {}; rpc SetNodeStatus(SetNodeStatusOptions) returns (Empty) {}; rpc GetNodeStatus(GetNodeStatusOptions) returns (NodeStatusStreamMessage) {}; rpc NodeStatusStream(Empty) returns (stream NodeStatusStreamMessage) {}; - rpc GetNodeResource(GetNodeResourceOptions) returns (NodeResource) {}; - rpc CalculateCapacity(DeployOptions) returns (CapacityMessage); rpc GetWorkload(WorkloadID) returns (Workload) {}; @@ -65,172 +62,178 @@ service CoreRPC { message Empty {} message CoreInfo { - string version = 1; - string revison = 2; - string build_at = 3; - string golang_version = 4; - string os_arch = 5; - string identifier = 6; + string version = 1001; + string revison = 1002; + string build_at = 1003; + string golang_version = 1004; + string os_arch = 1005; + string identifier = 1006; } message ServiceStatus { - repeated string addresses = 1; - int64 interval_in_second = 2; + repeated string addresses = 1001; + int64 interval_in_second = 1002; } -message Engine { - string type = 1; +message Engine{ + string type = 1001; } message ListWorkloadsOptions { - string appname = 1; - string entrypoint = 2; - string nodename = 3; - map labels = 4; - int64 limit = 5; + string appname = 1001; + string entrypoint = 1002; + string nodename = 1003; + map labels = 1004; + int64 limit = 1005; } // 对的, protobuf 就是这样... message Pod { - string name = 1; - string desc = 2; + string name = 1001; + string desc = 1002; } message Pods { - repeated Pod pods = 1; -} - -message PodResource { - string name = 1; - repeated NodeResource nodes_resource = 2; + repeated Pod pods = 1001; } message StringSlice { - repeated string slice = 1; + repeated string slice = 1001; } message RawParam { oneof value { - string str = 1; - StringSlice string_slice = 2; + string str = 1001; + StringSlice string_slice = 1002; } } - message NodeResource { - string name = 1; - double cpu_percent = 2; - double memory_percent = 3; - double storage_percent = 4; - double volume_percent = 5; - repeated string diffs = 6; - string resource_capacity = 7; - string resource_usage = 8; + string name = 1001; + repeated string diffs = 1002; + string resource_capacity = 1003; + string resource_usage = 1004; } message ListNetworkOptions { - string podname = 1; - string driver = 2; + string podname = 1001; + string driver = 1002; } message ConnectNetworkOptions{ - string network = 1; - string target = 2; - string ipv4 = 3; - string ipv6 = 4; + string network = 1001; + string target = 1002; + string ipv4 = 1003; + string ipv6 = 1004; } message DisconnectNetworkOptions{ - string network = 1; - string target = 2; - bool force = 3; + string network = 1001; + string target = 1002; + bool force = 1003; } message Network { - string name = 1; - repeated string subnets = 2; + string name = 1001; + repeated string subnets = 1002; } message Networks { - repeated Network networks = 1; + repeated Network networks = 1001; } message Node { - string name = 1; - string endpoint = 2; - string podname = 3; - map cpu = 4; - double cpu_used = 5; - int64 memory = 6; - int64 memory_used = 7; - bool available = 8; - map labels = 9; - int64 init_memory = 10; - map init_cpu = 11; - string info = 12; - map numa = 13; - map numa_memory = 14; - int64 storage = 15; - int64 storage_used = 16; - int64 init_storage = 17; - map init_volume = 18; - map volume = 19; - int64 volume_used = 20; - map init_numa_memory = 21; - bool bypass = 22; - string resource_capacity = 23; - string resource_usage = 24; -} - -message Nodes { - repeated Node nodes = 1; -} - -message NodeAvailable { - string nodename = 1; - string podname = 2; + string name = 1001; + string endpoint = 1002; + string podname = 1003; + bool available = 1004; + bool bypass = 1005; + map labels = 1006; + string info = 1007; + string resource_capacity = 1008; + string resource_usage = 1009; +} + +message AddPodOptions { + string name = 1001; + string desc = 1002; +} + +message RemovePodOptions { + string name = 1001; +} + +message GetPodOptions { + string name = 1001; +} + +message AddNodeOptions { + string nodename = 1001; + string endpoint = 1002; + string podname = 1003; + string ca = 1004; + string cert = 1005; + string key = 1006; + map labels = 1007; + map resource_opts = 1008; +} + +message RemoveNodeOptions { + string nodename = 1001; +} + +message GetNodeOptions { + string nodename = 1001; + map labels = 1002; +} + +message GetNodeResourceOptions { + GetNodeOptions opts = 1001; + bool fix = 1002; +} + +message ListNodesOptions { + string podname = 1001; + bool all = 1002; + map labels = 1003; + int32 timeout_in_second = 1004; + bool skip_info = 1005; } message SetNodeOptions { - string nodename = 1; - map delta_cpu = 3; - int64 delta_memory = 4; - int64 delta_storage = 5; - map delta_numa_memory = 6; - map numa = 7; - map labels = 8; - map delta_volume = 9; - bool workloads_down = 10; - string endpoint = 11; - TriOpt bypass_opt = 12; - string ca = 13; - string cert = 14; - string key = 15; - map resource_opts = 16; - bool delta = 17; + string nodename = 1001; + string endpoint = 1002; + string ca = 1003; + string cert = 1004; + string key = 1005; + map labels = 1006; + map resource_opts = 1007; + bool delta = 1008; + bool workloads_down = 1009; + TriOpt bypass = 1010; } message SetNodeStatusOptions { - string nodename = 1; - int64 ttl = 2; + string nodename = 1001; + int64 ttl = 1002; } message GetNodeStatusOptions { - string nodename = 1; + string nodename = 1001; } message NodeStatusStreamMessage { - string nodename = 1; - string podname = 2; - bool alive = 3; - string error = 4; + string nodename = 1001; + string podname = 1002; + bool alive = 1003; + string error = 1004; } message NodeFilter { - repeated string includes = 1; - repeated string excludes = 2; - map labels = 3; - bool all = 4; + repeated string includes = 1001; + repeated string excludes = 1002; + map labels = 1003; + bool all = 1004; } message Workload { @@ -313,64 +316,8 @@ enum TriOpt { } message ReallocOptions { - string id = 1; -// TriOpt bind_cpu_opt = 2; // deprecated -// ResourceOptions old_resource_opts = 3; - map resource_opts = 4; -} - -message AddPodOptions { - string name = 1; - string desc = 2; -} - -message RemovePodOptions { - string name = 1; -} - -message GetPodOptions { - string name = 1; -} - -message AddNodeOptions { - string nodename = 1; - string endpoint = 2; - string podname = 3; - string ca = 4; - string cert = 5; - string key = 6; - int32 cpu = 7; - int32 share = 8; - int64 memory = 9; - map labels = 10; - map numa = 11; - map numa_memory = 12; - int64 storage = 13; - map volume_map = 14; - map resource_opts = 15; -} - -message RemoveNodeOptions { - string nodename = 1; -} - -message GetNodeOptions { - string nodename = 1; - map labels = 2; - repeated string plugins = 3; -} - -message GetNodeResourceOptions { - GetNodeOptions opts = 1; - bool fix = 2; -} - -message ListNodesOptions { - string podname = 1; - bool all = 2; - map labels = 3; - int32 timeout_in_second = 4; - bool skip_info = 5; + string id = 1001; + map resource_opts = 1002; } message Build { diff --git a/rpc/gen/core_grpc.pb.go b/rpc/gen/core_grpc.pb.go index f94cd09d1..02e087b6b 100644 --- a/rpc/gen/core_grpc.pb.go +++ b/rpc/gen/core_grpc.pb.go @@ -31,19 +31,17 @@ type CoreRPCClient interface { RemovePod(ctx context.Context, in *RemovePodOptions, opts ...grpc.CallOption) (*Empty, error) GetPod(ctx context.Context, in *GetPodOptions, opts ...grpc.CallOption) (*Pod, error) ListPods(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*Pods, error) - GetPodResource(ctx context.Context, in *GetPodOptions, opts ...grpc.CallOption) (*PodResource, error) - PodResourceStream(ctx context.Context, in *GetPodOptions, opts ...grpc.CallOption) (CoreRPC_PodResourceStreamClient, error) + GetPodResource(ctx context.Context, in *GetPodOptions, opts ...grpc.CallOption) (CoreRPC_GetPodResourceClient, error) + GetNodeResource(ctx context.Context, in *GetNodeResourceOptions, opts ...grpc.CallOption) (*NodeResource, error) AddNode(ctx context.Context, in *AddNodeOptions, opts ...grpc.CallOption) (*Node, error) RemoveNode(ctx context.Context, in *RemoveNodeOptions, opts ...grpc.CallOption) (*Empty, error) - ListPodNodes(ctx context.Context, in *ListNodesOptions, opts ...grpc.CallOption) (*Nodes, error) - PodNodesStream(ctx context.Context, in *ListNodesOptions, opts ...grpc.CallOption) (CoreRPC_PodNodesStreamClient, error) + ListPodNodes(ctx context.Context, in *ListNodesOptions, opts ...grpc.CallOption) (CoreRPC_ListPodNodesClient, error) GetNode(ctx context.Context, in *GetNodeOptions, opts ...grpc.CallOption) (*Node, error) - GetNodeEngine(ctx context.Context, in *GetNodeOptions, opts ...grpc.CallOption) (*Engine, error) + GetNodeEngineInfo(ctx context.Context, in *GetNodeOptions, opts ...grpc.CallOption) (*Engine, error) SetNode(ctx context.Context, in *SetNodeOptions, opts ...grpc.CallOption) (*Node, error) SetNodeStatus(ctx context.Context, in *SetNodeStatusOptions, opts ...grpc.CallOption) (*Empty, error) GetNodeStatus(ctx context.Context, in *GetNodeStatusOptions, opts ...grpc.CallOption) (*NodeStatusStreamMessage, error) NodeStatusStream(ctx context.Context, in *Empty, opts ...grpc.CallOption) (CoreRPC_NodeStatusStreamClient, error) - GetNodeResource(ctx context.Context, in *GetNodeResourceOptions, opts ...grpc.CallOption) (*NodeResource, error) CalculateCapacity(ctx context.Context, in *DeployOptions, opts ...grpc.CallOption) (*CapacityMessage, error) GetWorkload(ctx context.Context, in *WorkloadID, opts ...grpc.CallOption) (*Workload, error) GetWorkloads(ctx context.Context, in *WorkloadIDs, opts ...grpc.CallOption) (*Workloads, error) @@ -181,21 +179,12 @@ func (c *coreRPCClient) ListPods(ctx context.Context, in *Empty, opts ...grpc.Ca return out, nil } -func (c *coreRPCClient) GetPodResource(ctx context.Context, in *GetPodOptions, opts ...grpc.CallOption) (*PodResource, error) { - out := new(PodResource) - err := c.cc.Invoke(ctx, "/pb.CoreRPC/GetPodResource", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *coreRPCClient) PodResourceStream(ctx context.Context, in *GetPodOptions, opts ...grpc.CallOption) (CoreRPC_PodResourceStreamClient, error) { - stream, err := c.cc.NewStream(ctx, &CoreRPC_ServiceDesc.Streams[1], "/pb.CoreRPC/PodResourceStream", opts...) +func (c *coreRPCClient) GetPodResource(ctx context.Context, in *GetPodOptions, opts ...grpc.CallOption) (CoreRPC_GetPodResourceClient, error) { + stream, err := c.cc.NewStream(ctx, &CoreRPC_ServiceDesc.Streams[1], "/pb.CoreRPC/GetPodResource", opts...) if err != nil { return nil, err } - x := &coreRPCPodResourceStreamClient{stream} + x := &coreRPCGetPodResourceClient{stream} if err := x.ClientStream.SendMsg(in); err != nil { return nil, err } @@ -205,16 +194,16 @@ func (c *coreRPCClient) PodResourceStream(ctx context.Context, in *GetPodOptions return x, nil } -type CoreRPC_PodResourceStreamClient interface { +type CoreRPC_GetPodResourceClient interface { Recv() (*NodeResource, error) grpc.ClientStream } -type coreRPCPodResourceStreamClient struct { +type coreRPCGetPodResourceClient struct { grpc.ClientStream } -func (x *coreRPCPodResourceStreamClient) Recv() (*NodeResource, error) { +func (x *coreRPCGetPodResourceClient) Recv() (*NodeResource, error) { m := new(NodeResource) if err := x.ClientStream.RecvMsg(m); err != nil { return nil, err @@ -222,39 +211,39 @@ func (x *coreRPCPodResourceStreamClient) Recv() (*NodeResource, error) { return m, nil } -func (c *coreRPCClient) AddNode(ctx context.Context, in *AddNodeOptions, opts ...grpc.CallOption) (*Node, error) { - out := new(Node) - err := c.cc.Invoke(ctx, "/pb.CoreRPC/AddNode", in, out, opts...) +func (c *coreRPCClient) GetNodeResource(ctx context.Context, in *GetNodeResourceOptions, opts ...grpc.CallOption) (*NodeResource, error) { + out := new(NodeResource) + err := c.cc.Invoke(ctx, "/pb.CoreRPC/GetNodeResource", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *coreRPCClient) RemoveNode(ctx context.Context, in *RemoveNodeOptions, opts ...grpc.CallOption) (*Empty, error) { - out := new(Empty) - err := c.cc.Invoke(ctx, "/pb.CoreRPC/RemoveNode", in, out, opts...) +func (c *coreRPCClient) AddNode(ctx context.Context, in *AddNodeOptions, opts ...grpc.CallOption) (*Node, error) { + out := new(Node) + err := c.cc.Invoke(ctx, "/pb.CoreRPC/AddNode", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *coreRPCClient) ListPodNodes(ctx context.Context, in *ListNodesOptions, opts ...grpc.CallOption) (*Nodes, error) { - out := new(Nodes) - err := c.cc.Invoke(ctx, "/pb.CoreRPC/ListPodNodes", in, out, opts...) +func (c *coreRPCClient) RemoveNode(ctx context.Context, in *RemoveNodeOptions, opts ...grpc.CallOption) (*Empty, error) { + out := new(Empty) + err := c.cc.Invoke(ctx, "/pb.CoreRPC/RemoveNode", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *coreRPCClient) PodNodesStream(ctx context.Context, in *ListNodesOptions, opts ...grpc.CallOption) (CoreRPC_PodNodesStreamClient, error) { - stream, err := c.cc.NewStream(ctx, &CoreRPC_ServiceDesc.Streams[2], "/pb.CoreRPC/PodNodesStream", opts...) +func (c *coreRPCClient) ListPodNodes(ctx context.Context, in *ListNodesOptions, opts ...grpc.CallOption) (CoreRPC_ListPodNodesClient, error) { + stream, err := c.cc.NewStream(ctx, &CoreRPC_ServiceDesc.Streams[2], "/pb.CoreRPC/ListPodNodes", opts...) if err != nil { return nil, err } - x := &coreRPCPodNodesStreamClient{stream} + x := &coreRPCListPodNodesClient{stream} if err := x.ClientStream.SendMsg(in); err != nil { return nil, err } @@ -264,16 +253,16 @@ func (c *coreRPCClient) PodNodesStream(ctx context.Context, in *ListNodesOptions return x, nil } -type CoreRPC_PodNodesStreamClient interface { +type CoreRPC_ListPodNodesClient interface { Recv() (*Node, error) grpc.ClientStream } -type coreRPCPodNodesStreamClient struct { +type coreRPCListPodNodesClient struct { grpc.ClientStream } -func (x *coreRPCPodNodesStreamClient) Recv() (*Node, error) { +func (x *coreRPCListPodNodesClient) Recv() (*Node, error) { m := new(Node) if err := x.ClientStream.RecvMsg(m); err != nil { return nil, err @@ -290,9 +279,9 @@ func (c *coreRPCClient) GetNode(ctx context.Context, in *GetNodeOptions, opts .. return out, nil } -func (c *coreRPCClient) GetNodeEngine(ctx context.Context, in *GetNodeOptions, opts ...grpc.CallOption) (*Engine, error) { +func (c *coreRPCClient) GetNodeEngineInfo(ctx context.Context, in *GetNodeOptions, opts ...grpc.CallOption) (*Engine, error) { out := new(Engine) - err := c.cc.Invoke(ctx, "/pb.CoreRPC/GetNodeEngine", in, out, opts...) + err := c.cc.Invoke(ctx, "/pb.CoreRPC/GetNodeEngineInfo", in, out, opts...) if err != nil { return nil, err } @@ -358,15 +347,6 @@ func (x *coreRPCNodeStatusStreamClient) Recv() (*NodeStatusStreamMessage, error) return m, nil } -func (c *coreRPCClient) GetNodeResource(ctx context.Context, in *GetNodeResourceOptions, opts ...grpc.CallOption) (*NodeResource, error) { - out := new(NodeResource) - err := c.cc.Invoke(ctx, "/pb.CoreRPC/GetNodeResource", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - func (c *coreRPCClient) CalculateCapacity(ctx context.Context, in *DeployOptions, opts ...grpc.CallOption) (*CapacityMessage, error) { out := new(CapacityMessage) err := c.cc.Invoke(ctx, "/pb.CoreRPC/CalculateCapacity", in, out, opts...) @@ -953,19 +933,17 @@ type CoreRPCServer interface { RemovePod(context.Context, *RemovePodOptions) (*Empty, error) GetPod(context.Context, *GetPodOptions) (*Pod, error) ListPods(context.Context, *Empty) (*Pods, error) - GetPodResource(context.Context, *GetPodOptions) (*PodResource, error) - PodResourceStream(*GetPodOptions, CoreRPC_PodResourceStreamServer) error + GetPodResource(*GetPodOptions, CoreRPC_GetPodResourceServer) error + GetNodeResource(context.Context, *GetNodeResourceOptions) (*NodeResource, error) AddNode(context.Context, *AddNodeOptions) (*Node, error) RemoveNode(context.Context, *RemoveNodeOptions) (*Empty, error) - ListPodNodes(context.Context, *ListNodesOptions) (*Nodes, error) - PodNodesStream(*ListNodesOptions, CoreRPC_PodNodesStreamServer) error + ListPodNodes(*ListNodesOptions, CoreRPC_ListPodNodesServer) error GetNode(context.Context, *GetNodeOptions) (*Node, error) - GetNodeEngine(context.Context, *GetNodeOptions) (*Engine, error) + GetNodeEngineInfo(context.Context, *GetNodeOptions) (*Engine, error) SetNode(context.Context, *SetNodeOptions) (*Node, error) SetNodeStatus(context.Context, *SetNodeStatusOptions) (*Empty, error) GetNodeStatus(context.Context, *GetNodeStatusOptions) (*NodeStatusStreamMessage, error) NodeStatusStream(*Empty, CoreRPC_NodeStatusStreamServer) error - GetNodeResource(context.Context, *GetNodeResourceOptions) (*NodeResource, error) CalculateCapacity(context.Context, *DeployOptions) (*CapacityMessage, error) GetWorkload(context.Context, *WorkloadID) (*Workload, error) GetWorkloads(context.Context, *WorkloadIDs) (*Workloads, error) @@ -1022,11 +1000,11 @@ func (UnimplementedCoreRPCServer) GetPod(context.Context, *GetPodOptions) (*Pod, func (UnimplementedCoreRPCServer) ListPods(context.Context, *Empty) (*Pods, error) { return nil, status.Errorf(codes.Unimplemented, "method ListPods not implemented") } -func (UnimplementedCoreRPCServer) GetPodResource(context.Context, *GetPodOptions) (*PodResource, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetPodResource not implemented") +func (UnimplementedCoreRPCServer) GetPodResource(*GetPodOptions, CoreRPC_GetPodResourceServer) error { + return status.Errorf(codes.Unimplemented, "method GetPodResource not implemented") } -func (UnimplementedCoreRPCServer) PodResourceStream(*GetPodOptions, CoreRPC_PodResourceStreamServer) error { - return status.Errorf(codes.Unimplemented, "method PodResourceStream not implemented") +func (UnimplementedCoreRPCServer) GetNodeResource(context.Context, *GetNodeResourceOptions) (*NodeResource, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetNodeResource not implemented") } func (UnimplementedCoreRPCServer) AddNode(context.Context, *AddNodeOptions) (*Node, error) { return nil, status.Errorf(codes.Unimplemented, "method AddNode not implemented") @@ -1034,17 +1012,14 @@ func (UnimplementedCoreRPCServer) AddNode(context.Context, *AddNodeOptions) (*No func (UnimplementedCoreRPCServer) RemoveNode(context.Context, *RemoveNodeOptions) (*Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method RemoveNode not implemented") } -func (UnimplementedCoreRPCServer) ListPodNodes(context.Context, *ListNodesOptions) (*Nodes, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListPodNodes not implemented") -} -func (UnimplementedCoreRPCServer) PodNodesStream(*ListNodesOptions, CoreRPC_PodNodesStreamServer) error { - return status.Errorf(codes.Unimplemented, "method PodNodesStream not implemented") +func (UnimplementedCoreRPCServer) ListPodNodes(*ListNodesOptions, CoreRPC_ListPodNodesServer) error { + return status.Errorf(codes.Unimplemented, "method ListPodNodes not implemented") } func (UnimplementedCoreRPCServer) GetNode(context.Context, *GetNodeOptions) (*Node, error) { return nil, status.Errorf(codes.Unimplemented, "method GetNode not implemented") } -func (UnimplementedCoreRPCServer) GetNodeEngine(context.Context, *GetNodeOptions) (*Engine, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetNodeEngine not implemented") +func (UnimplementedCoreRPCServer) GetNodeEngineInfo(context.Context, *GetNodeOptions) (*Engine, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetNodeEngineInfo not implemented") } func (UnimplementedCoreRPCServer) SetNode(context.Context, *SetNodeOptions) (*Node, error) { return nil, status.Errorf(codes.Unimplemented, "method SetNode not implemented") @@ -1058,9 +1033,6 @@ func (UnimplementedCoreRPCServer) GetNodeStatus(context.Context, *GetNodeStatusO func (UnimplementedCoreRPCServer) NodeStatusStream(*Empty, CoreRPC_NodeStatusStreamServer) error { return status.Errorf(codes.Unimplemented, "method NodeStatusStream not implemented") } -func (UnimplementedCoreRPCServer) GetNodeResource(context.Context, *GetNodeResourceOptions) (*NodeResource, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetNodeResource not implemented") -} func (UnimplementedCoreRPCServer) CalculateCapacity(context.Context, *DeployOptions) (*CapacityMessage, error) { return nil, status.Errorf(codes.Unimplemented, "method CalculateCapacity not implemented") } @@ -1307,117 +1279,99 @@ func _CoreRPC_ListPods_Handler(srv interface{}, ctx context.Context, dec func(in return interceptor(ctx, in, info, handler) } -func _CoreRPC_GetPodResource_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetPodOptions) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(CoreRPCServer).GetPodResource(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/pb.CoreRPC/GetPodResource", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(CoreRPCServer).GetPodResource(ctx, req.(*GetPodOptions)) - } - return interceptor(ctx, in, info, handler) -} - -func _CoreRPC_PodResourceStream_Handler(srv interface{}, stream grpc.ServerStream) error { +func _CoreRPC_GetPodResource_Handler(srv interface{}, stream grpc.ServerStream) error { m := new(GetPodOptions) if err := stream.RecvMsg(m); err != nil { return err } - return srv.(CoreRPCServer).PodResourceStream(m, &coreRPCPodResourceStreamServer{stream}) + return srv.(CoreRPCServer).GetPodResource(m, &coreRPCGetPodResourceServer{stream}) } -type CoreRPC_PodResourceStreamServer interface { +type CoreRPC_GetPodResourceServer interface { Send(*NodeResource) error grpc.ServerStream } -type coreRPCPodResourceStreamServer struct { +type coreRPCGetPodResourceServer struct { grpc.ServerStream } -func (x *coreRPCPodResourceStreamServer) Send(m *NodeResource) error { +func (x *coreRPCGetPodResourceServer) Send(m *NodeResource) error { return x.ServerStream.SendMsg(m) } -func _CoreRPC_AddNode_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(AddNodeOptions) +func _CoreRPC_GetNodeResource_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetNodeResourceOptions) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(CoreRPCServer).AddNode(ctx, in) + return srv.(CoreRPCServer).GetNodeResource(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/pb.CoreRPC/AddNode", + FullMethod: "/pb.CoreRPC/GetNodeResource", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(CoreRPCServer).AddNode(ctx, req.(*AddNodeOptions)) + return srv.(CoreRPCServer).GetNodeResource(ctx, req.(*GetNodeResourceOptions)) } return interceptor(ctx, in, info, handler) } -func _CoreRPC_RemoveNode_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(RemoveNodeOptions) +func _CoreRPC_AddNode_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AddNodeOptions) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(CoreRPCServer).RemoveNode(ctx, in) + return srv.(CoreRPCServer).AddNode(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/pb.CoreRPC/RemoveNode", + FullMethod: "/pb.CoreRPC/AddNode", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(CoreRPCServer).RemoveNode(ctx, req.(*RemoveNodeOptions)) + return srv.(CoreRPCServer).AddNode(ctx, req.(*AddNodeOptions)) } return interceptor(ctx, in, info, handler) } -func _CoreRPC_ListPodNodes_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ListNodesOptions) +func _CoreRPC_RemoveNode_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RemoveNodeOptions) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(CoreRPCServer).ListPodNodes(ctx, in) + return srv.(CoreRPCServer).RemoveNode(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/pb.CoreRPC/ListPodNodes", + FullMethod: "/pb.CoreRPC/RemoveNode", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(CoreRPCServer).ListPodNodes(ctx, req.(*ListNodesOptions)) + return srv.(CoreRPCServer).RemoveNode(ctx, req.(*RemoveNodeOptions)) } return interceptor(ctx, in, info, handler) } -func _CoreRPC_PodNodesStream_Handler(srv interface{}, stream grpc.ServerStream) error { +func _CoreRPC_ListPodNodes_Handler(srv interface{}, stream grpc.ServerStream) error { m := new(ListNodesOptions) if err := stream.RecvMsg(m); err != nil { return err } - return srv.(CoreRPCServer).PodNodesStream(m, &coreRPCPodNodesStreamServer{stream}) + return srv.(CoreRPCServer).ListPodNodes(m, &coreRPCListPodNodesServer{stream}) } -type CoreRPC_PodNodesStreamServer interface { +type CoreRPC_ListPodNodesServer interface { Send(*Node) error grpc.ServerStream } -type coreRPCPodNodesStreamServer struct { +type coreRPCListPodNodesServer struct { grpc.ServerStream } -func (x *coreRPCPodNodesStreamServer) Send(m *Node) error { +func (x *coreRPCListPodNodesServer) Send(m *Node) error { return x.ServerStream.SendMsg(m) } @@ -1439,20 +1393,20 @@ func _CoreRPC_GetNode_Handler(srv interface{}, ctx context.Context, dec func(int return interceptor(ctx, in, info, handler) } -func _CoreRPC_GetNodeEngine_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { +func _CoreRPC_GetNodeEngineInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(GetNodeOptions) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(CoreRPCServer).GetNodeEngine(ctx, in) + return srv.(CoreRPCServer).GetNodeEngineInfo(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/pb.CoreRPC/GetNodeEngine", + FullMethod: "/pb.CoreRPC/GetNodeEngineInfo", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(CoreRPCServer).GetNodeEngine(ctx, req.(*GetNodeOptions)) + return srv.(CoreRPCServer).GetNodeEngineInfo(ctx, req.(*GetNodeOptions)) } return interceptor(ctx, in, info, handler) } @@ -1532,24 +1486,6 @@ func (x *coreRPCNodeStatusStreamServer) Send(m *NodeStatusStreamMessage) error { return x.ServerStream.SendMsg(m) } -func _CoreRPC_GetNodeResource_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetNodeResourceOptions) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(CoreRPCServer).GetNodeResource(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/pb.CoreRPC/GetNodeResource", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(CoreRPCServer).GetNodeResource(ctx, req.(*GetNodeResourceOptions)) - } - return interceptor(ctx, in, info, handler) -} - func _CoreRPC_CalculateCapacity_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(DeployOptions) if err := dec(in); err != nil { @@ -2062,8 +1998,8 @@ var CoreRPC_ServiceDesc = grpc.ServiceDesc{ Handler: _CoreRPC_ListPods_Handler, }, { - MethodName: "GetPodResource", - Handler: _CoreRPC_GetPodResource_Handler, + MethodName: "GetNodeResource", + Handler: _CoreRPC_GetNodeResource_Handler, }, { MethodName: "AddNode", @@ -2073,17 +2009,13 @@ var CoreRPC_ServiceDesc = grpc.ServiceDesc{ MethodName: "RemoveNode", Handler: _CoreRPC_RemoveNode_Handler, }, - { - MethodName: "ListPodNodes", - Handler: _CoreRPC_ListPodNodes_Handler, - }, { MethodName: "GetNode", Handler: _CoreRPC_GetNode_Handler, }, { - MethodName: "GetNodeEngine", - Handler: _CoreRPC_GetNodeEngine_Handler, + MethodName: "GetNodeEngineInfo", + Handler: _CoreRPC_GetNodeEngineInfo_Handler, }, { MethodName: "SetNode", @@ -2097,10 +2029,6 @@ var CoreRPC_ServiceDesc = grpc.ServiceDesc{ MethodName: "GetNodeStatus", Handler: _CoreRPC_GetNodeStatus_Handler, }, - { - MethodName: "GetNodeResource", - Handler: _CoreRPC_GetNodeResource_Handler, - }, { MethodName: "CalculateCapacity", Handler: _CoreRPC_CalculateCapacity_Handler, @@ -2137,13 +2065,13 @@ var CoreRPC_ServiceDesc = grpc.ServiceDesc{ ServerStreams: true, }, { - StreamName: "PodResourceStream", - Handler: _CoreRPC_PodResourceStream_Handler, + StreamName: "GetPodResource", + Handler: _CoreRPC_GetPodResource_Handler, ServerStreams: true, }, { - StreamName: "PodNodesStream", - Handler: _CoreRPC_PodNodesStream_Handler, + StreamName: "ListPodNodes", + Handler: _CoreRPC_ListPodNodes_Handler, ServerStreams: true, }, { diff --git a/rpc/rpc.go b/rpc/rpc.go index 67c9b83e6..f99a92518 100644 --- a/rpc/rpc.go +++ b/rpc/rpc.go @@ -159,23 +159,8 @@ func (v *Vibranium) ListPods(ctx context.Context, _ *pb.Empty) (*pb.Pods, error) } // GetPodResource get pod nodes resource usage -func (v *Vibranium) GetPodResource(ctx context.Context, opts *pb.GetPodOptions) (*pb.PodResource, error) { - task := v.newTask(ctx, "GetPodResource", false) - defer task.done() - ch, err := v.cluster.PodResource(task.context, opts.Name) - if err != nil { - return nil, grpcstatus.Error(PodResource, err.Error()) - } - podResource := &pb.PodResource{Name: opts.Name} - for nodeResource := range ch { - podResource.NodesResource = append(podResource.NodesResource, toRPCNodeResource(nodeResource)) - } - return podResource, nil -} - -// PodResourceStream returns a stream of NodeResource -func (v *Vibranium) PodResourceStream(opts *pb.GetPodOptions, stream pb.CoreRPC_PodResourceStreamServer) error { - task := v.newTask(stream.Context(), "PodResourceStream", false) +func (v *Vibranium) GetPodResource(opts *pb.GetPodOptions, stream pb.CoreRPC_GetPodResourceServer) error { + task := v.newTask(stream.Context(), "GetPodResource", false) defer task.done() ch, err := v.cluster.PodResource(task.context, opts.Name) if err != nil { @@ -183,12 +168,24 @@ func (v *Vibranium) PodResourceStream(opts *pb.GetPodOptions, stream pb.CoreRPC_ } for msg := range ch { if err := stream.Send(toRPCNodeResource(msg)); err != nil { - v.logUnsentMessages(task.context, "PodResourceStream", err, msg) + v.logUnsentMessages(task.context, "GetPodResource", err, msg) } } return nil } +// GetNodeResource check node resource +func (v *Vibranium) GetNodeResource(ctx context.Context, opts *pb.GetNodeResourceOptions) (*pb.NodeResource, error) { + task := v.newTask(ctx, "GetNodeResource", false) + defer task.done() + nr, err := v.cluster.NodeResource(task.context, opts.GetOpts().Nodename, opts.Fix) + if err != nil { + return nil, grpcstatus.Error(GetNodeResource, err.Error()) + } + + return toRPCNodeResource(nr), nil +} + // AddNode saves a node and returns it to client // Method must be called synchronously, or nothing will be returned func (v *Vibranium) AddNode(ctx context.Context, opts *pb.AddNodeOptions) (*pb.Node, error) { @@ -214,33 +211,8 @@ func (v *Vibranium) RemoveNode(ctx context.Context, opts *pb.RemoveNodeOptions) } // ListPodNodes returns a list of node for pod -func (v *Vibranium) ListPodNodes(ctx context.Context, opts *pb.ListNodesOptions) (*pb.Nodes, error) { - task := v.newTask(ctx, "ListPodNodes", false) - defer task.done() - - timeout := time.Duration(opts.TimeoutInSecond) * time.Second - if opts.TimeoutInSecond <= 0 { - timeout = v.config.ConnectionTimeout - } - ctx, cancel := context.WithTimeout(task.context, timeout) - defer cancel() - - ch, err := v.cluster.ListPodNodes(ctx, toCoreListNodesOptions(opts)) - if err != nil { - return nil, grpcstatus.Error(ListPodNodes, err.Error()) - } - - nodes := []*pb.Node{} - for n := range ch { - nodes = append(nodes, toRPCNode(n)) - } - - return &pb.Nodes{Nodes: nodes}, nil -} - -// PodNodesStream returns a stream of Node -func (v *Vibranium) PodNodesStream(opts *pb.ListNodesOptions, stream pb.CoreRPC_PodNodesStreamServer) error { - task := v.newTask(stream.Context(), "PodNodesStream", false) +func (v *Vibranium) ListPodNodes(opts *pb.ListNodesOptions, stream pb.CoreRPC_ListPodNodesServer) error { + task := v.newTask(stream.Context(), "ListPodNodes", false) defer task.done() timeout := time.Duration(opts.TimeoutInSecond) * time.Second @@ -267,7 +239,7 @@ func (v *Vibranium) PodNodesStream(opts *pb.ListNodesOptions, stream pb.CoreRPC_ func (v *Vibranium) GetNode(ctx context.Context, opts *pb.GetNodeOptions) (*pb.Node, error) { task := v.newTask(ctx, "GetNode", false) defer task.done() - n, err := v.cluster.GetNode(task.context, opts.Nodename, opts.Plugins) + n, err := v.cluster.GetNode(task.context, opts.Nodename) if err != nil { return nil, grpcstatus.Error(GetNode, err.Error()) } @@ -276,10 +248,10 @@ func (v *Vibranium) GetNode(ctx context.Context, opts *pb.GetNodeOptions) (*pb.N } // GetNodeEngine get a node engine -func (v *Vibranium) GetNodeEngine(ctx context.Context, opts *pb.GetNodeOptions) (*pb.Engine, error) { +func (v *Vibranium) GetNodeEngineInfo(ctx context.Context, opts *pb.GetNodeOptions) (*pb.Engine, error) { task := v.newTask(ctx, "GetNodeEngine", false) defer task.done() - e, err := v.cluster.GetNodeEngine(task.context, opts.Nodename) + e, err := v.cluster.GetNodeEngineInfo(task.context, opts.Nodename) if err != nil { return nil, grpcstatus.Error(GetNodeEngine, err.Error()) } @@ -356,18 +328,6 @@ func (v *Vibranium) NodeStatusStream(_ *pb.Empty, stream pb.CoreRPC_NodeStatusSt } } -// GetNodeResource check node resource -func (v *Vibranium) GetNodeResource(ctx context.Context, opts *pb.GetNodeResourceOptions) (*pb.NodeResource, error) { - task := v.newTask(ctx, "GetNodeResource", false) - defer task.done() - nr, err := v.cluster.NodeResource(task.context, opts.GetOpts().Nodename, opts.Fix) - if err != nil { - return nil, grpcstatus.Error(GetNodeResource, err.Error()) - } - - return toRPCNodeResource(nr), nil -} - // CalculateCapacity calculates capacity for each node func (v *Vibranium) CalculateCapacity(ctx context.Context, opts *pb.DeployOptions) (*pb.CapacityMessage, error) { task := v.newTask(ctx, "CalculateCapacity", true) diff --git a/rpc/transform.go b/rpc/transform.go index 5b71e0d23..17763a62a 100644 --- a/rpc/transform.go +++ b/rpc/transform.go @@ -4,11 +4,8 @@ import ( "bytes" "encoding/json" "fmt" - "strings" "time" - "golang.org/x/exp/maps" - enginetypes "github.com/projecteru2/core/engine/types" "github.com/projecteru2/core/log" pb "github.com/projecteru2/core/rpc/gen" @@ -55,7 +52,6 @@ func toRPCNode(n *types.Node) *pb.Node { ResourceCapacity: toRPCResourceArgs(resourceCapacity), ResourceUsage: toRPCResourceArgs(resourceUsage), } - fillOldNodeMeta(node, resourceCapacity, resourceUsage) return node } @@ -81,16 +77,9 @@ func toRPCNodeResource(nr *types.NodeResource) *pb.NodeResource { resourceUsage[plugin] = types.RawParams(args) } - node := &pb.Node{} - fillOldNodeMeta(node, resourceCapacity, resourceUsage) - return &pb.NodeResource{ Name: nr.Name, Diffs: nr.Diffs, - CpuPercent: node.CpuUsed / float64(len(node.InitCpu)), - MemoryPercent: float64(node.MemoryUsed) / float64(node.InitMemory), - StoragePercent: float64(node.StorageUsed) / float64(node.InitStorage), - VolumePercent: float64(node.VolumeUsed) / float64(utils.Sum(maps.Values(node.InitVolume))), ResourceCapacity: toRPCResourceArgs(resourceCapacity), ResourceUsage: toRPCResourceArgs(resourceUsage), } @@ -146,30 +135,6 @@ func toCoreSendOptions(b *pb.SendOptions) (*types.SendOptions, error) { // nolin } func toCoreAddNodeOptions(b *pb.AddNodeOptions) *types.AddNodeOptions { - if b.ResourceOpts == nil { - b.ResourceOpts = map[string]*pb.RawParam{ - "share": newPBRawParamStr(fmt.Sprintf("%v", b.Share)), - "numa-cpu": newPBRawParamStringSlice(maps.Values(b.Numa)), - "numa-memory": newPBRawParamStringSlice(utils.Map(maps.Values(b.NumaMemory), func(v int64) string { - return fmt.Sprintf("%v", v) - })), - } - if b.Cpu > 0 { - b.ResourceOpts["cpu"] = newPBRawParamStr(fmt.Sprintf("%v", b.Cpu)) - } - if b.Memory > 0 { - b.ResourceOpts["memory"] = newPBRawParamStr(fmt.Sprintf("%v", b.Memory)) - } - if b.Storage > 0 { - b.ResourceOpts["storage"] = newPBRawParamStr(fmt.Sprintf("%v", b.Storage)) - } - volumes := []string{} - for device, size := range b.VolumeMap { - volumes = append(volumes, fmt.Sprintf("%v:%v", device, size)) - } - b.ResourceOpts["volumes"] = newPBRawParamStringSlice(volumes) - } - r := &types.AddNodeOptions{ Nodename: b.Nodename, Endpoint: b.Endpoint, @@ -184,27 +149,6 @@ func toCoreAddNodeOptions(b *pb.AddNodeOptions) *types.AddNodeOptions { } func toCoreSetNodeOptions(b *pb.SetNodeOptions) (*types.SetNodeOptions, error) { // nolint - if b.ResourceOpts == nil { - b.Delta = true - cpuStrs := []string{} - for cpu, delta := range b.DeltaCpu { - cpuStrs = append(cpuStrs, fmt.Sprintf("%v:%v", cpu, delta)) - } - b.ResourceOpts = map[string]*pb.RawParam{ - "cpu": newPBRawParamStr(strings.Join(cpuStrs, ",")), - "memory": newPBRawParamStr(fmt.Sprintf("%v", b.DeltaMemory)), - "numa-cpu": newPBRawParamStringSlice(maps.Values(b.Numa)), - "numa-memory": newPBRawParamStringSlice(utils.Map(maps.Values(b.DeltaNumaMemory), func(v int64) string { - return fmt.Sprintf("%v", v) - })), - "storage": newPBRawParamStr(fmt.Sprintf("%v", b.DeltaStorage)), - } - volumes := []string{} - for device, size := range b.DeltaVolume { - volumes = append(volumes, fmt.Sprintf("%v:%v", device, size)) - } - b.ResourceOpts["volumes"] = newPBRawParamStringSlice(volumes) - } r := &types.SetNodeOptions{ Nodename: b.Nodename, Endpoint: b.Endpoint, @@ -215,7 +159,7 @@ func toCoreSetNodeOptions(b *pb.SetNodeOptions) (*types.SetNodeOptions, error) { ResourceOpts: toCoreRawParams(b.ResourceOpts), Delta: b.Delta, Labels: b.Labels, - BypassOpt: types.TriOptions(b.BypassOpt), + Bypass: types.TriOptions(b.Bypass), } return r, nil } @@ -525,7 +469,7 @@ func toRPCWorkloads(ctx context.Context, workloads []*types.Workload, labels map log.Errorf(ctx, "[toRPCWorkloads] trans to pb workload failed %v", err) continue } - if !utils.FilterWorkload(pWorkload.Labels, labels) { + if !utils.LabelsFilter(pWorkload.Labels, labels) { continue } cs = append(cs, pWorkload) @@ -672,63 +616,45 @@ func toCoreListImageOptions(opts *pb.ListImageOptions) *types.ImageOptions { } } -func newPBRawParamStr(str string) *pb.RawParam { - return &pb.RawParam{ - Value: &pb.RawParam_Str{ - Str: str, - }, - } -} - -func newPBRawParamStringSlice(strs []string) *pb.RawParam { - return &pb.RawParam{ - Value: &pb.RawParam_StringSlice{ - StringSlice: &pb.StringSlice{ - Slice: strs, - }, - }, - } -} - // fillOldNodeMeta fills the old node meta based on the new node resource args. // uses some hard code, should be removed in the future. // TODO remove it! -func fillOldNodeMeta(node *pb.Node, resourceCapacity map[string]types.RawParams, resourceUsage map[string]types.RawParams) { - if capacity, ok := resourceCapacity["cpumem"]; ok { - usage := resourceUsage["cpumem"] - node.Cpu = map[string]int32{} - node.InitCpu = types.ConvertRawParamsToMap[int32](capacity.RawParams("cpu_map")) - node.CpuUsed = usage.Float64("cpu") - node.InitMemory = capacity.Int64("memory") - node.MemoryUsed = usage.Int64("memory") - node.Memory = node.InitMemory - node.MemoryUsed - node.Numa = types.ConvertRawParamsToMap[string](usage.RawParams("numa")) - node.InitNumaMemory = types.ConvertRawParamsToMap[int64](capacity.RawParams("numa_memory")) - node.NumaMemory = map[string]int64{} - - cpuMapUsed := types.ConvertRawParamsToMap[int32](usage.RawParams("cpu_map")) - for cpuID := range node.InitCpu { - node.Cpu[cpuID] = node.InitCpu[cpuID] - cpuMapUsed[cpuID] - } - - numaMemoryUsed := types.ConvertRawParamsToMap[int64](usage.RawParams("numa_memory")) - for numaNodeID := range numaMemoryUsed { - node.NumaMemory[numaNodeID] = node.InitNumaMemory[numaNodeID] - numaMemoryUsed[numaNodeID] - } - } - - if capacity, ok := resourceCapacity["volume"]; ok { - usage := resourceUsage["volume"] - node.InitStorage = capacity.Int64("storage") - node.StorageUsed = usage.Int64("storage") - node.Storage = node.InitStorage - node.StorageUsed - node.InitVolume = types.ConvertRawParamsToMap[int64](capacity.RawParams("volumes")) - node.Volume = map[string]int64{} - - volumeUsed := types.ConvertRawParamsToMap[int64](usage.RawParams("volumes")) - for device, size := range volumeUsed { - node.Volume[device] = node.InitVolume[device] - size - node.VolumeUsed += size - } - } -} +// func fillOldNodeMeta(node *pb.Node, resourceCapacity map[string]types.RawParams, resourceUsage map[string]types.RawParams) { +// if capacity, ok := resourceCapacity["cpumem"]; ok { +// usage := resourceUsage["cpumem"] +// node.Cpu = map[string]int32{} +// node.InitCpu = types.ConvertRawParamsToMap[int32](capacity.RawParams("cpu_map")) +// node.CpuUsed = usage.Float64("cpu") +// node.InitMemory = capacity.Int64("memory") +// node.MemoryUsed = usage.Int64("memory") +// node.Memory = node.InitMemory - node.MemoryUsed +// node.Numa = types.ConvertRawParamsToMap[string](usage.RawParams("numa")) +// node.InitNumaMemory = types.ConvertRawParamsToMap[int64](capacity.RawParams("numa_memory")) +// node.NumaMemory = map[string]int64{} +// +// cpuMapUsed := types.ConvertRawParamsToMap[int32](usage.RawParams("cpu_map")) +// for cpuID := range node.InitCpu { +// node.Cpu[cpuID] = node.InitCpu[cpuID] - cpuMapUsed[cpuID] +// } +// +// numaMemoryUsed := types.ConvertRawParamsToMap[int64](usage.RawParams("numa_memory")) +// for numaNodeID := range numaMemoryUsed { +// node.NumaMemory[numaNodeID] = node.InitNumaMemory[numaNodeID] - numaMemoryUsed[numaNodeID] +// } +// } +// +// if capacity, ok := resourceCapacity["volume"]; ok { +// usage := resourceUsage["volume"] +// node.InitStorage = capacity.Int64("storage") +// node.StorageUsed = usage.Int64("storage") +// node.Storage = node.InitStorage - node.StorageUsed +// node.InitVolume = types.ConvertRawParamsToMap[int64](capacity.RawParams("volumes")) +// node.Volume = map[string]int64{} +// +// volumeUsed := types.ConvertRawParamsToMap[int64](usage.RawParams("volumes")) +// for device, size := range volumeUsed { +// node.Volume[device] = node.InitVolume[device] - size +// node.VolumeUsed += size +// } +// } +// } diff --git a/store/etcdv3/node.go b/store/etcdv3/node.go index aeeebb973..8f747b2b5 100644 --- a/store/etcdv3/node.go +++ b/store/etcdv3/node.go @@ -275,7 +275,6 @@ func (m *Mercury) doAddNode(ctx context.Context, name, endpoint, podname, ca, ce return nil, types.ErrTxnConditionFailed } - // TODO: go metrics.Client.SendNodeInfo(node.Metrics()) return node, nil } @@ -305,14 +304,15 @@ func (m *Mercury) doGetNodes(ctx context.Context, kvs []*mvccpb.KeyValue, labels return nil, err } node.Engine = &fake.Engine{DefaultErr: types.ErrNilEngine} - if utils.FilterWorkload(node.Labels, labels) { + if utils.LabelsFilter(node.Labels, labels) { allNodes = append(allNodes, node) } } wg := &sync.WaitGroup{} wg.Add(len(allNodes)) - nodeChan := make(chan *types.Node, len(allNodes)) + nodesCh := make(chan *types.Node, len(allNodes)) + defer close(nodesCh) for _, node := range allNodes { node := node @@ -328,18 +328,18 @@ func (m *Mercury) doGetNodes(ctx context.Context, kvs []*mvccpb.KeyValue, labels return } - nodeChan <- node + // update engine if client, err := m.makeClient(ctx, node); err != nil { log.Errorf(ctx, "[doGetNodes] failed to make client for %v, err: %v", node.Name, err) } else { node.Engine = client } + nodesCh <- node }) } wg.Wait() - close(nodeChan) - for node := range nodeChan { + for node := range nodesCh { nodes = append(nodes, node) } diff --git a/store/etcdv3/workload.go b/store/etcdv3/workload.go index d073a212e..ac1bf99c4 100644 --- a/store/etcdv3/workload.go +++ b/store/etcdv3/workload.go @@ -101,7 +101,7 @@ func (m *Mercury) ListWorkloads(ctx context.Context, appname, entrypoint, nodena if err := json.Unmarshal(ev.Value, workload); err != nil { return nil, err } - if utils.FilterWorkload(workload.Labels, labels) { + if utils.LabelsFilter(workload.Labels, labels) { workloads = append(workloads, workload) } } @@ -123,7 +123,7 @@ func (m *Mercury) ListNodeWorkloads(ctx context.Context, nodename string, labels if err := json.Unmarshal(ev.Value, workload); err != nil { return nil, err } - if utils.FilterWorkload(workload.Labels, labels) { + if utils.LabelsFilter(workload.Labels, labels) { workloads = append(workloads, workload) } } @@ -163,7 +163,7 @@ func (m *Mercury) WorkloadStatusStream(ctx context.Context, appname, entrypoint, switch { case err != nil: msg.Error = err - case utils.FilterWorkload(workload.Labels, labels): + case utils.LabelsFilter(workload.Labels, labels): log.Debugf(ctx, "[WorkloadStatusStream] workload %s status changed", workload.ID) msg.Workload = workload default: diff --git a/store/redis/node.go b/store/redis/node.go index 848ae2ce1..523b4e603 100644 --- a/store/redis/node.go +++ b/store/redis/node.go @@ -288,7 +288,7 @@ func (r *Rediaron) doGetNodes(ctx context.Context, kvs map[string]string, labels return nil, err } node.Engine = &fake.Engine{DefaultErr: types.ErrNilEngine} - if utils.FilterWorkload(node.Labels, labels) { + if utils.LabelsFilter(node.Labels, labels) { allNodes = append(allNodes, node) } } diff --git a/store/redis/workload.go b/store/redis/workload.go index fb5f2e1e9..58ef2ec7c 100644 --- a/store/redis/workload.go +++ b/store/redis/workload.go @@ -98,7 +98,7 @@ func (r *Rediaron) ListWorkloads(ctx context.Context, appname, entrypoint, noden if err := json.Unmarshal([]byte(v), workload); err != nil { return nil, err } - if utils.FilterWorkload(workload.Labels, labels) { + if utils.LabelsFilter(workload.Labels, labels) { workloads = append(workloads, workload) } } @@ -120,7 +120,7 @@ func (r *Rediaron) ListNodeWorkloads(ctx context.Context, nodename string, label if err := json.Unmarshal([]byte(v), workload); err != nil { return nil, err } - if utils.FilterWorkload(workload.Labels, labels) { + if utils.LabelsFilter(workload.Labels, labels) { workloads = append(workloads, workload) } } @@ -156,7 +156,7 @@ func (r *Rediaron) WorkloadStatusStream(ctx context.Context, appname, entrypoint switch { case err != nil: msg.Error = err - case utils.FilterWorkload(workload.Labels, labels): + case utils.LabelsFilter(workload.Labels, labels): log.Debugf(ctx, "[WorkloadStatusStream] workload %s status changed", workload.ID) msg.Workload = workload default: diff --git a/types/config.go b/types/config.go index 0cc42f0f4..29d7327a3 100644 --- a/types/config.go +++ b/types/config.go @@ -33,18 +33,16 @@ type Config struct { WALFile string `yaml:"wal_file" required:"true" default:"core.wal"` // WAL file path WALOpenTimeout time.Duration `yaml:"wal_open_timeout" required:"true" default:"8s"` // timeout for opening a WAL file - ResourcePluginsDir string `yaml:"resource_plugins_dir" default:"/etc/eru/plugins"` // resource plugins path - ResourcePluginsTimeout time.Duration `yaml:"resource_plugins_timeout" default:"30s"` // timeout for calling resource plugins - - Auth AuthConfig `yaml:"auth"` // grpc auth - GRPCConfig GRPCConfig `yaml:"grpc"` // grpc config - Git GitConfig `yaml:"git"` - Etcd EtcdConfig `yaml:"etcd"` - Redis RedisConfig `yaml:"redis"` - Docker DockerConfig `yaml:"docker"` - Virt VirtConfig `yaml:"virt"` - Systemd SystemdConfig `yaml:"systemd"` - Scheduler SchedulerConfig `yaml:"scheduler"` + Auth AuthConfig `yaml:"auth"` // grpc auth + GRPCConfig GRPCConfig `yaml:"grpc"` // grpc config + Git GitConfig `yaml:"git"` + Etcd EtcdConfig `yaml:"etcd"` + Redis RedisConfig `yaml:"redis"` + Docker DockerConfig `yaml:"docker"` + Virt VirtConfig `yaml:"virt"` + Systemd SystemdConfig `yaml:"systemd"` + Scheduler SchedulerConfig `yaml:"scheduler"` + ResourcePlugin ResourcePluginConfig `yaml:"resource_plugin"` } // Identifier returns the id of this config @@ -133,6 +131,13 @@ type SchedulerConfig struct { MaxDeployCount int `yaml:"max_deploy_count" default:"10000"` // max deploy count of each node } +// ResourcePluginConfig define Plugin config +type ResourcePluginConfig struct { + Dir string `yaml:"dir" default:"/etc/eru/plugins"` // resource plugins path + CallTimeout time.Duration `yaml:"call_timeout" default:"30s"` // timeout for calling resource plugins + Whitelist []string `yaml:"whitelist"` // plugin whitelist +} + // LogConfig define log type type LogConfig struct { Type string `yaml:"type" required:"true" default:"journald"` // Log type, can be "journald", "json-file", "none" diff --git a/types/options.go b/types/options.go index 8f945bb7c..78161ca03 100644 --- a/types/options.go +++ b/types/options.go @@ -217,7 +217,7 @@ type SetNodeOptions struct { ResourceOpts NodeResourceOpts Delta bool Labels map[string]string - BypassOpt TriOptions + Bypass TriOptions Ca string Cert string Key string diff --git a/utils/utils.go b/utils/utils.go index f6099ea92..122873b46 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -166,8 +166,8 @@ func ShortID(workloadID string) string { return workloadID[Max(0, len(workloadID)-shortenLength):] } -// FilterWorkload filter workload by labels -func FilterWorkload(extend map[string]string, labels map[string]string) bool { +// LabelsFilter filter workload by labels +func LabelsFilter(extend map[string]string, labels map[string]string) bool { for k, v := range labels { if n, ok := extend[k]; !ok || n != v { return false diff --git a/utils/utils_test.go b/utils/utils_test.go index 8b14dafa5..32ab77f64 100644 --- a/utils/utils_test.go +++ b/utils/utils_test.go @@ -150,12 +150,12 @@ func TestShortID(t *testing.T) { assert.Equal(t, r2, "2345678") } -func TestFilterWorkload(t *testing.T) { +func TestLabelsFilter(t *testing.T) { e := map[string]string{"a": "b"} l := map[string]string{"a": "b"} - assert.True(t, FilterWorkload(e, l)) + assert.True(t, LabelsFilter(e, l)) l["c"] = "d" - assert.False(t, FilterWorkload(e, l)) + assert.False(t, LabelsFilter(e, l)) } func TestCleanStatsdMetrics(t *testing.T) {