mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Storage: Watch tests (#85496)
* basic watch tests working * refactor to read previous event within poller * add watch test files * cleanup * watch tests passing * debug cleanup * special handling for canceled context * cleanup * fix wire * fix sqlite_sequence cleanup issue * move watch tests to integration, wait for provisioned dashboards * handle context deadline exceeded and eof errors * add comment about sleep
This commit is contained in:
@@ -132,6 +132,7 @@ import (
|
|||||||
"github.com/grafana/grafana/pkg/services/star/starimpl"
|
"github.com/grafana/grafana/pkg/services/star/starimpl"
|
||||||
"github.com/grafana/grafana/pkg/services/stats/statsimpl"
|
"github.com/grafana/grafana/pkg/services/stats/statsimpl"
|
||||||
"github.com/grafana/grafana/pkg/services/store"
|
"github.com/grafana/grafana/pkg/services/store"
|
||||||
|
entityStore "github.com/grafana/grafana/pkg/services/store/entity"
|
||||||
entityDB "github.com/grafana/grafana/pkg/services/store/entity/db"
|
entityDB "github.com/grafana/grafana/pkg/services/store/entity/db"
|
||||||
"github.com/grafana/grafana/pkg/services/store/entity/db/dbimpl"
|
"github.com/grafana/grafana/pkg/services/store/entity/db/dbimpl"
|
||||||
"github.com/grafana/grafana/pkg/services/store/entity/sqlstash"
|
"github.com/grafana/grafana/pkg/services/store/entity/sqlstash"
|
||||||
@@ -336,6 +337,7 @@ var wireBasicSet = wire.NewSet(
|
|||||||
dbimpl.ProvideEntityDB,
|
dbimpl.ProvideEntityDB,
|
||||||
wire.Bind(new(entityDB.EntityDBInterface), new(*dbimpl.EntityDB)),
|
wire.Bind(new(entityDB.EntityDBInterface), new(*dbimpl.EntityDB)),
|
||||||
sqlstash.ProvideSQLEntityServer,
|
sqlstash.ProvideSQLEntityServer,
|
||||||
|
wire.Bind(new(entityStore.EntityStoreServer), new(sqlstash.SqlEntityServer)),
|
||||||
resolver.ProvideEntityReferenceResolver,
|
resolver.ProvideEntityReferenceResolver,
|
||||||
teamimpl.ProvideService,
|
teamimpl.ProvideService,
|
||||||
teamapi.ProvideTeamAPI,
|
teamapi.ProvideTeamAPI,
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"log"
|
|
||||||
"reflect"
|
"reflect"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
@@ -28,6 +27,7 @@ import (
|
|||||||
"k8s.io/apiserver/pkg/storage"
|
"k8s.io/apiserver/pkg/storage"
|
||||||
"k8s.io/apiserver/pkg/storage/storagebackend"
|
"k8s.io/apiserver/pkg/storage/storagebackend"
|
||||||
"k8s.io/apiserver/pkg/storage/storagebackend/factory"
|
"k8s.io/apiserver/pkg/storage/storagebackend/factory"
|
||||||
|
"k8s.io/klog/v2"
|
||||||
|
|
||||||
entityStore "github.com/grafana/grafana/pkg/services/store/entity"
|
entityStore "github.com/grafana/grafana/pkg/services/store/entity"
|
||||||
)
|
)
|
||||||
@@ -171,21 +171,13 @@ func (s *Storage) Watch(ctx context.Context, key string, opts storage.ListOption
|
|||||||
|
|
||||||
if opts.Predicate.Field != nil {
|
if opts.Predicate.Field != nil {
|
||||||
// check for metadata.name field selector
|
// check for metadata.name field selector
|
||||||
if v, ok := opts.Predicate.Field.RequiresExactMatch("metadata.name"); ok {
|
if v, ok := opts.Predicate.Field.RequiresExactMatch("metadata.name"); ok && k.Name == "" {
|
||||||
if k.Name != "" && k.Name != v {
|
|
||||||
return nil, apierrors.NewBadRequest("name field selector does not match key")
|
|
||||||
}
|
|
||||||
|
|
||||||
// just watch the specific key if we have a name field selector
|
// just watch the specific key if we have a name field selector
|
||||||
k.Name = v
|
k.Name = v
|
||||||
}
|
}
|
||||||
|
|
||||||
// check for metadata.namespace field selector
|
// check for metadata.namespace field selector
|
||||||
if v, ok := opts.Predicate.Field.RequiresExactMatch("metadata.namespace"); ok {
|
if v, ok := opts.Predicate.Field.RequiresExactMatch("metadata.namespace"); ok && k.Namespace == "" {
|
||||||
if k.Namespace != "" && k.Namespace != v {
|
|
||||||
return nil, apierrors.NewBadRequest("namespace field selector does not match key")
|
|
||||||
}
|
|
||||||
|
|
||||||
// just watch the specific namespace if we have a namespace field selector
|
// just watch the specific namespace if we have a namespace field selector
|
||||||
k.Namespace = v
|
k.Namespace = v
|
||||||
}
|
}
|
||||||
@@ -209,12 +201,30 @@ func (s *Storage) Watch(ctx context.Context, key string, opts storage.ListOption
|
|||||||
}
|
}
|
||||||
|
|
||||||
req := &entityStore.EntityWatchRequest{
|
req := &entityStore.EntityWatchRequest{
|
||||||
|
Action: entityStore.EntityWatchRequest_START,
|
||||||
Key: []string{
|
Key: []string{
|
||||||
k.String(),
|
k.String(),
|
||||||
},
|
},
|
||||||
Labels: map[string]string{},
|
Labels: map[string]string{},
|
||||||
WithBody: true,
|
WithBody: true,
|
||||||
WithStatus: true,
|
WithStatus: true,
|
||||||
|
SendInitialEvents: false,
|
||||||
|
AllowWatchBookmarks: opts.Predicate.AllowWatchBookmarks,
|
||||||
|
}
|
||||||
|
|
||||||
|
if opts.ResourceVersion != "" {
|
||||||
|
rv, err := strconv.ParseInt(opts.ResourceVersion, 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
return nil, apierrors.NewBadRequest(fmt.Sprintf("invalid resource version: %s", opts.ResourceVersion))
|
||||||
|
}
|
||||||
|
|
||||||
|
req.Since = rv
|
||||||
|
}
|
||||||
|
|
||||||
|
if opts.SendInitialEvents == nil && req.Since == 0 {
|
||||||
|
req.SendInitialEvents = true
|
||||||
|
} else if opts.SendInitialEvents != nil {
|
||||||
|
req.SendInitialEvents = *opts.SendInitialEvents
|
||||||
}
|
}
|
||||||
|
|
||||||
if requirements.Folder != nil {
|
if requirements.Folder != nil {
|
||||||
@@ -233,24 +243,35 @@ func (s *Storage) Watch(ctx context.Context, key string, opts storage.ListOption
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if opts.ResourceVersion != "" {
|
client, err := s.store.Watch(ctx)
|
||||||
rv, err := strconv.ParseInt(opts.ResourceVersion, 10, 64)
|
if err != nil {
|
||||||
if err != nil {
|
// if the context was canceled, just return a new empty watch
|
||||||
return nil, apierrors.NewBadRequest(fmt.Sprintf("invalid resource version: %s", opts.ResourceVersion))
|
if errors.Is(err, context.Canceled) || errors.Is(err, context.DeadlineExceeded) || errors.Is(err, io.EOF) {
|
||||||
|
return watch.NewEmptyWatch(), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
req.Since = rv
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
result, err := s.store.Watch(ctx, req)
|
err = client.Send(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
err2 := client.CloseSend()
|
||||||
|
if err2 != nil {
|
||||||
|
klog.Errorf("watch close failed: %s\n", err2)
|
||||||
|
}
|
||||||
|
|
||||||
|
// if the context was canceled, just return a new empty watch
|
||||||
|
if errors.Is(err, context.Canceled) || errors.Is(err, context.DeadlineExceeded) || errors.Is(err, io.EOF) {
|
||||||
|
return watch.NewEmptyWatch(), nil
|
||||||
|
}
|
||||||
|
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
reporter := apierrors.NewClientErrorReporter(500, "WATCH", "")
|
reporter := apierrors.NewClientErrorReporter(500, "WATCH", "")
|
||||||
|
|
||||||
decoder := &Decoder{
|
decoder := &Decoder{
|
||||||
client: result,
|
client: client,
|
||||||
newFunc: s.newFunc,
|
newFunc: s.newFunc,
|
||||||
opts: opts,
|
opts: opts,
|
||||||
codec: s.codec,
|
codec: s.codec,
|
||||||
@@ -613,49 +634,148 @@ type Decoder struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (d *Decoder) Decode() (action watch.EventType, object runtime.Object, err error) {
|
func (d *Decoder) Decode() (action watch.EventType, object runtime.Object, err error) {
|
||||||
|
decode:
|
||||||
for {
|
for {
|
||||||
|
err := d.client.Context().Err()
|
||||||
|
if err != nil {
|
||||||
|
klog.Errorf("client: context error: %s\n", err)
|
||||||
|
return watch.Error, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
resp, err := d.client.Recv()
|
resp, err := d.client.Recv()
|
||||||
if errors.Is(err, io.EOF) {
|
if errors.Is(err, io.EOF) {
|
||||||
log.Printf("watch is done")
|
|
||||||
return watch.Error, nil, err
|
return watch.Error, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if grpcStatus.Code(err) == grpcCodes.Canceled {
|
if grpcStatus.Code(err) == grpcCodes.Canceled {
|
||||||
log.Printf("watch was canceled")
|
|
||||||
return watch.Error, nil, err
|
return watch.Error, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("error receiving result: %s", err)
|
klog.Errorf("client: error receiving result: %s", err)
|
||||||
return watch.Error, nil, err
|
return watch.Error, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if resp.Entity == nil {
|
||||||
|
klog.Errorf("client: received nil entity\n")
|
||||||
|
continue decode
|
||||||
|
}
|
||||||
|
|
||||||
obj := d.newFunc()
|
obj := d.newFunc()
|
||||||
|
|
||||||
err = entityToResource(resp.Entity, obj, d.codec)
|
if resp.Entity.Action == entityStore.Entity_BOOKMARK {
|
||||||
if err != nil {
|
// here k8s expects an empty object with just resource version and k8s.io/initial-events-end annotation
|
||||||
log.Printf("error decoding entity: %s", err)
|
accessor, err := meta.Accessor(obj)
|
||||||
return watch.Error, nil, err
|
if err != nil {
|
||||||
|
klog.Errorf("error getting object accessor: %s", err)
|
||||||
|
return watch.Error, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
accessor.SetResourceVersion(fmt.Sprintf("%d", resp.Entity.ResourceVersion))
|
||||||
|
accessor.SetAnnotations(map[string]string{"k8s.io/initial-events-end": "true"})
|
||||||
|
return watch.Bookmark, obj, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// apply any predicates not handled in storage
|
err = entityToResource(resp.Entity, obj, d.codec)
|
||||||
matches, err := d.opts.Predicate.Matches(obj)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("error matching object: %s", err)
|
klog.Errorf("error decoding entity: %s", err)
|
||||||
return watch.Error, nil, err
|
return watch.Error, nil, err
|
||||||
}
|
}
|
||||||
if !matches {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
var watchAction watch.EventType
|
var watchAction watch.EventType
|
||||||
switch resp.Entity.Action {
|
switch resp.Entity.Action {
|
||||||
case entityStore.Entity_CREATED:
|
case entityStore.Entity_CREATED:
|
||||||
|
// apply any predicates not handled in storage
|
||||||
|
matches, err := d.opts.Predicate.Matches(obj)
|
||||||
|
if err != nil {
|
||||||
|
klog.Errorf("error matching object: %s", err)
|
||||||
|
return watch.Error, nil, err
|
||||||
|
}
|
||||||
|
if !matches {
|
||||||
|
continue decode
|
||||||
|
}
|
||||||
|
|
||||||
watchAction = watch.Added
|
watchAction = watch.Added
|
||||||
case entityStore.Entity_UPDATED:
|
case entityStore.Entity_UPDATED:
|
||||||
watchAction = watch.Modified
|
watchAction = watch.Modified
|
||||||
|
|
||||||
|
// apply any predicates not handled in storage
|
||||||
|
matches, err := d.opts.Predicate.Matches(obj)
|
||||||
|
if err != nil {
|
||||||
|
klog.Errorf("error matching object: %s", err)
|
||||||
|
return watch.Error, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// if we have a previous object, check if it matches
|
||||||
|
prevMatches := false
|
||||||
|
prevObj := d.newFunc()
|
||||||
|
if resp.Previous != nil {
|
||||||
|
err = entityToResource(resp.Previous, prevObj, d.codec)
|
||||||
|
if err != nil {
|
||||||
|
klog.Errorf("error decoding entity: %s", err)
|
||||||
|
return watch.Error, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// apply any predicates not handled in storage
|
||||||
|
prevMatches, err = d.opts.Predicate.Matches(prevObj)
|
||||||
|
if err != nil {
|
||||||
|
klog.Errorf("error matching object: %s", err)
|
||||||
|
return watch.Error, nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if !matches {
|
||||||
|
if !prevMatches {
|
||||||
|
continue decode
|
||||||
|
}
|
||||||
|
|
||||||
|
// if the object didn't match, send a Deleted event
|
||||||
|
watchAction = watch.Deleted
|
||||||
|
|
||||||
|
// here k8s expects the previous object but with the new resource version
|
||||||
|
obj = prevObj
|
||||||
|
|
||||||
|
accessor, err := meta.Accessor(obj)
|
||||||
|
if err != nil {
|
||||||
|
klog.Errorf("error getting object accessor: %s", err)
|
||||||
|
return watch.Error, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
accessor.SetResourceVersion(fmt.Sprintf("%d", resp.Entity.ResourceVersion))
|
||||||
|
} else if !prevMatches {
|
||||||
|
// if the object didn't previously match, send an Added event
|
||||||
|
watchAction = watch.Added
|
||||||
|
}
|
||||||
case entityStore.Entity_DELETED:
|
case entityStore.Entity_DELETED:
|
||||||
watchAction = watch.Deleted
|
watchAction = watch.Deleted
|
||||||
|
|
||||||
|
// if we have a previous object, return that in the deleted event
|
||||||
|
if resp.Previous != nil {
|
||||||
|
err = entityToResource(resp.Previous, obj, d.codec)
|
||||||
|
if err != nil {
|
||||||
|
klog.Errorf("error decoding entity: %s", err)
|
||||||
|
return watch.Error, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// here k8s expects the previous object but with the new resource version
|
||||||
|
accessor, err := meta.Accessor(obj)
|
||||||
|
if err != nil {
|
||||||
|
klog.Errorf("error getting object accessor: %s", err)
|
||||||
|
return watch.Error, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
accessor.SetResourceVersion(fmt.Sprintf("%d", resp.Entity.ResourceVersion))
|
||||||
|
}
|
||||||
|
|
||||||
|
// apply any predicates not handled in storage
|
||||||
|
matches, err := d.opts.Predicate.Matches(obj)
|
||||||
|
if err != nil {
|
||||||
|
klog.Errorf("error matching object: %s", err)
|
||||||
|
return watch.Error, nil, err
|
||||||
|
}
|
||||||
|
if !matches {
|
||||||
|
continue decode
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
watchAction = watch.Error
|
watchAction = watch.Error
|
||||||
}
|
}
|
||||||
@@ -665,7 +785,10 @@ func (d *Decoder) Decode() (action watch.EventType, object runtime.Object, err e
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (d *Decoder) Close() {
|
func (d *Decoder) Close() {
|
||||||
_ = d.client.CloseSend()
|
err := d.client.CloseSend()
|
||||||
|
if err != nil {
|
||||||
|
klog.Errorf("error closing watch stream: %s", err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ watch.Decoder = (*Decoder)(nil)
|
var _ watch.Decoder = (*Decoder)(nil)
|
||||||
|
|||||||
166
pkg/services/apiserver/storage/entity/test/requestinfo.go
Normal file
166
pkg/services/apiserver/storage/entity/test/requestinfo.go
Normal file
@@ -0,0 +1,166 @@
|
|||||||
|
package test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
|
"k8s.io/apimachinery/pkg/watch"
|
||||||
|
"k8s.io/apiserver/pkg/endpoints/request"
|
||||||
|
"k8s.io/apiserver/pkg/storage"
|
||||||
|
|
||||||
|
"github.com/grafana/grafana/pkg/infra/appcontext"
|
||||||
|
"github.com/grafana/grafana/pkg/services/user"
|
||||||
|
)
|
||||||
|
|
||||||
|
var _ storage.Interface = &RequestInfoWrapper{}
|
||||||
|
|
||||||
|
type RequestInfoWrapper struct {
|
||||||
|
store storage.Interface
|
||||||
|
gr schema.GroupResource
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *RequestInfoWrapper) setRequestInfo(ctx context.Context, key string) (context.Context, error) {
|
||||||
|
pkey, err := convertToParsedKey(key)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx = appcontext.WithUser(ctx, &user.SignedInUser{
|
||||||
|
Login: "admin",
|
||||||
|
UserID: 1,
|
||||||
|
OrgID: 1,
|
||||||
|
})
|
||||||
|
|
||||||
|
return request.WithRequestInfo(ctx, &request.RequestInfo{
|
||||||
|
APIGroup: pkey.Group,
|
||||||
|
APIVersion: "v1",
|
||||||
|
Resource: pkey.Resource,
|
||||||
|
Subresource: "",
|
||||||
|
Namespace: pkey.Namespace,
|
||||||
|
Name: pkey.Name,
|
||||||
|
Parts: strings.Split(key, "/"),
|
||||||
|
IsResourceRequest: true,
|
||||||
|
}), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *RequestInfoWrapper) Create(ctx context.Context, key string, obj runtime.Object, out runtime.Object, ttl uint64) error {
|
||||||
|
ctx, err := r.setRequestInfo(ctx, key)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return r.store.Create(ctx, key, obj, out, ttl)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *RequestInfoWrapper) Delete(ctx context.Context, key string, out runtime.Object, preconditions *storage.Preconditions, validateDeletion storage.ValidateObjectFunc, cachedExistingObject runtime.Object) error {
|
||||||
|
ctx, err := r.setRequestInfo(ctx, key)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return r.store.Delete(ctx, key, out, preconditions, validateDeletion, cachedExistingObject)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *RequestInfoWrapper) Watch(ctx context.Context, key string, opts storage.ListOptions) (watch.Interface, error) {
|
||||||
|
ctx, err := r.setRequestInfo(ctx, key)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return r.store.Watch(ctx, key, opts)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *RequestInfoWrapper) Get(ctx context.Context, key string, opts storage.GetOptions, objPtr runtime.Object) error {
|
||||||
|
ctx, err := r.setRequestInfo(ctx, key)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return r.store.Get(ctx, key, opts, objPtr)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *RequestInfoWrapper) GetList(ctx context.Context, key string, opts storage.ListOptions, listObj runtime.Object) error {
|
||||||
|
ctx, err := r.setRequestInfo(ctx, key)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return r.store.GetList(ctx, key, opts, listObj)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *RequestInfoWrapper) GuaranteedUpdate(ctx context.Context, key string, destination runtime.Object, ignoreNotFound bool, preconditions *storage.Preconditions, tryUpdate storage.UpdateFunc, cachedExistingObject runtime.Object) error {
|
||||||
|
ctx, err := r.setRequestInfo(ctx, key)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return r.store.GuaranteedUpdate(ctx, key, destination, ignoreNotFound, preconditions, tryUpdate, cachedExistingObject)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *RequestInfoWrapper) Count(key string) (int64, error) {
|
||||||
|
return r.store.Count(key)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *RequestInfoWrapper) Versioner() storage.Versioner {
|
||||||
|
return r.store.Versioner()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *RequestInfoWrapper) RequestWatchProgress(ctx context.Context) error {
|
||||||
|
return r.store.RequestWatchProgress(ctx)
|
||||||
|
}
|
||||||
|
|
||||||
|
type Key struct {
|
||||||
|
Group string
|
||||||
|
Resource string
|
||||||
|
Namespace string
|
||||||
|
Name string
|
||||||
|
}
|
||||||
|
|
||||||
|
func convertToParsedKey(key string) (*Key, error) {
|
||||||
|
// NOTE: the following supports the watcher tests that run against v1/pods
|
||||||
|
// Other than that, there are ambiguities in the key format that only field selector
|
||||||
|
// when set to use metadata.name can be used to bring clarity in the 3-segment case
|
||||||
|
|
||||||
|
// Cases handled below:
|
||||||
|
// namespace scoped:
|
||||||
|
// /<resource>/[<namespace>]/[<name>]
|
||||||
|
// /<resource>/[<namespace>]
|
||||||
|
//
|
||||||
|
// cluster scoped:
|
||||||
|
// /<resource>/[<name>]
|
||||||
|
// /<resource>
|
||||||
|
k := &Key{}
|
||||||
|
|
||||||
|
if !strings.HasPrefix(key, "/") {
|
||||||
|
key = "/" + key
|
||||||
|
}
|
||||||
|
|
||||||
|
parts := strings.SplitN(key, "/", 5)
|
||||||
|
if len(parts) < 2 {
|
||||||
|
return nil, fmt.Errorf("invalid key format: %s", key)
|
||||||
|
}
|
||||||
|
|
||||||
|
k.Resource = parts[1]
|
||||||
|
if len(parts) < 3 {
|
||||||
|
return k, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// figure out whether the key is namespace scoped or cluster scoped
|
||||||
|
if isTestNs(parts[2]) {
|
||||||
|
k.Namespace = parts[2]
|
||||||
|
if len(parts) >= 4 {
|
||||||
|
k.Name = parts[3]
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
k.Name = parts[2]
|
||||||
|
}
|
||||||
|
|
||||||
|
return k, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func isTestNs(part string) bool {
|
||||||
|
return strings.HasPrefix(part, "test-ns-") || strings.HasPrefix(part, "ns-") || strings.Index(part, "-ns") > 0
|
||||||
|
}
|
||||||
351
pkg/services/apiserver/storage/entity/test/watch_test.go
Normal file
351
pkg/services/apiserver/storage/entity/test/watch_test.go
Normal file
@@ -0,0 +1,351 @@
|
|||||||
|
// SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
// Provenance-includes-location: https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apiserver/pkg/storage/etcd3/watcher_test.go
|
||||||
|
// Provenance-includes-license: Apache-2.0
|
||||||
|
// Provenance-includes-copyright: The Kubernetes Authors.
|
||||||
|
|
||||||
|
package test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
"k8s.io/apimachinery/pkg/api/apitesting"
|
||||||
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
|
"k8s.io/apimachinery/pkg/runtime/serializer"
|
||||||
|
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
|
||||||
|
"k8s.io/apiserver/pkg/apis/example"
|
||||||
|
examplev1 "k8s.io/apiserver/pkg/apis/example/v1"
|
||||||
|
"k8s.io/apiserver/pkg/storage"
|
||||||
|
"k8s.io/apiserver/pkg/storage/storagebackend"
|
||||||
|
"k8s.io/apiserver/pkg/storage/storagebackend/factory"
|
||||||
|
storagetesting "k8s.io/apiserver/pkg/storage/testing"
|
||||||
|
|
||||||
|
"github.com/grafana/grafana/pkg/services/apiserver/storage/entity"
|
||||||
|
"github.com/grafana/grafana/pkg/services/featuremgmt"
|
||||||
|
"github.com/grafana/grafana/pkg/services/sqlstore"
|
||||||
|
entityStore "github.com/grafana/grafana/pkg/services/store/entity"
|
||||||
|
"github.com/grafana/grafana/pkg/services/store/entity/db/dbimpl"
|
||||||
|
"github.com/grafana/grafana/pkg/services/store/entity/sqlstash"
|
||||||
|
"github.com/grafana/grafana/pkg/setting"
|
||||||
|
"github.com/grafana/grafana/pkg/tests/testinfra"
|
||||||
|
"github.com/grafana/grafana/pkg/tests/testsuite"
|
||||||
|
)
|
||||||
|
|
||||||
|
var scheme = runtime.NewScheme()
|
||||||
|
var codecs = serializer.NewCodecFactory(scheme)
|
||||||
|
|
||||||
|
func TestMain(m *testing.M) {
|
||||||
|
testsuite.Run(m)
|
||||||
|
}
|
||||||
|
|
||||||
|
func createTestContext(t *testing.T) (entityStore.EntityStoreClient, factory.DestroyFunc) {
|
||||||
|
t.Helper()
|
||||||
|
|
||||||
|
grafDir, cfgPath := testinfra.CreateGrafDir(t, testinfra.GrafanaOpts{
|
||||||
|
EnableFeatureToggles: []string{
|
||||||
|
featuremgmt.FlagGrpcServer,
|
||||||
|
featuremgmt.FlagUnifiedStorage,
|
||||||
|
},
|
||||||
|
AppModeProduction: false, // required for migrations to run
|
||||||
|
GRPCServerAddress: "127.0.0.1:0", // :0 for choosing the port automatically
|
||||||
|
})
|
||||||
|
|
||||||
|
cfg, err := setting.NewCfgFromArgs(setting.CommandLineArgs{Config: cfgPath, HomePath: grafDir})
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
featureManager, err := featuremgmt.ProvideManagerService(cfg)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
featureToggles := featuremgmt.ProvideToggles(featureManager)
|
||||||
|
|
||||||
|
db := sqlstore.InitTestDBWithMigration(t, nil, sqlstore.InitTestDBOpt{EnsureDefaultOrgAndUser: false})
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
eDB, err := dbimpl.ProvideEntityDB(db, cfg, featureToggles)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
err = eDB.Init()
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
store, err := sqlstash.ProvideSQLEntityServer(eDB)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
client := entityStore.NewEntityStoreClientLocal(store)
|
||||||
|
|
||||||
|
return client, func() { store.Stop() }
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
metav1.AddToGroupVersion(scheme, metav1.SchemeGroupVersion)
|
||||||
|
utilruntime.Must(example.AddToScheme(scheme))
|
||||||
|
utilruntime.Must(examplev1.AddToScheme(scheme))
|
||||||
|
}
|
||||||
|
|
||||||
|
type setupOptions struct {
|
||||||
|
codec runtime.Codec
|
||||||
|
newFunc func() runtime.Object
|
||||||
|
newListFunc func() runtime.Object
|
||||||
|
prefix string
|
||||||
|
resourcePrefix string
|
||||||
|
groupResource schema.GroupResource
|
||||||
|
}
|
||||||
|
|
||||||
|
type setupOption func(*setupOptions, *testing.T)
|
||||||
|
|
||||||
|
func withDefaults(options *setupOptions, t *testing.T) {
|
||||||
|
options.codec = apitesting.TestCodec(codecs, examplev1.SchemeGroupVersion)
|
||||||
|
options.newFunc = newPod
|
||||||
|
options.newListFunc = newPodList
|
||||||
|
options.prefix = t.TempDir()
|
||||||
|
options.resourcePrefix = "/pods"
|
||||||
|
options.groupResource = schema.GroupResource{Resource: "pods"}
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ setupOption = withDefaults
|
||||||
|
|
||||||
|
func testSetup(t *testing.T, opts ...setupOption) (context.Context, storage.Interface, factory.DestroyFunc, error) {
|
||||||
|
setupOpts := setupOptions{}
|
||||||
|
opts = append([]setupOption{withDefaults}, opts...)
|
||||||
|
for _, opt := range opts {
|
||||||
|
opt(&setupOpts, t)
|
||||||
|
}
|
||||||
|
|
||||||
|
config := storagebackend.NewDefaultConfig(setupOpts.prefix, setupOpts.codec)
|
||||||
|
|
||||||
|
client, destroyFunc := createTestContext(t)
|
||||||
|
|
||||||
|
store, _, err := entity.NewStorage(
|
||||||
|
config.ForResource(setupOpts.groupResource),
|
||||||
|
setupOpts.groupResource,
|
||||||
|
client,
|
||||||
|
setupOpts.codec,
|
||||||
|
func(obj runtime.Object) (string, error) {
|
||||||
|
return storage.NamespaceKeyFunc(setupOpts.resourcePrefix, obj)
|
||||||
|
},
|
||||||
|
setupOpts.newFunc,
|
||||||
|
setupOpts.newListFunc,
|
||||||
|
storage.DefaultNamespaceScopedAttr,
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx := context.Background()
|
||||||
|
|
||||||
|
wrappedStore := &RequestInfoWrapper{
|
||||||
|
store: store,
|
||||||
|
gr: setupOpts.groupResource,
|
||||||
|
}
|
||||||
|
|
||||||
|
return ctx, wrappedStore, destroyFunc, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestIntegrationWatch(t *testing.T) {
|
||||||
|
if testing.Short() {
|
||||||
|
t.Skip("skipping integration test")
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx, store, destroyFunc, err := testSetup(t)
|
||||||
|
defer destroyFunc()
|
||||||
|
assert.NoError(t, err)
|
||||||
|
storagetesting.RunTestWatch(ctx, t, store)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestIntegrationClusterScopedWatch(t *testing.T) {
|
||||||
|
if testing.Short() {
|
||||||
|
t.Skip("skipping integration test")
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx, store, destroyFunc, err := testSetup(t)
|
||||||
|
defer destroyFunc()
|
||||||
|
assert.NoError(t, err)
|
||||||
|
storagetesting.RunTestClusterScopedWatch(ctx, t, store)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestIntegrationNamespaceScopedWatch(t *testing.T) {
|
||||||
|
if testing.Short() {
|
||||||
|
t.Skip("skipping integration test")
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx, store, destroyFunc, err := testSetup(t)
|
||||||
|
defer destroyFunc()
|
||||||
|
assert.NoError(t, err)
|
||||||
|
storagetesting.RunTestNamespaceScopedWatch(ctx, t, store)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestIntegrationDeleteTriggerWatch(t *testing.T) {
|
||||||
|
if testing.Short() {
|
||||||
|
t.Skip("skipping integration test")
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx, store, destroyFunc, err := testSetup(t)
|
||||||
|
defer destroyFunc()
|
||||||
|
assert.NoError(t, err)
|
||||||
|
storagetesting.RunTestDeleteTriggerWatch(ctx, t, store)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestIntegrationWatchFromZero(t *testing.T) {
|
||||||
|
if testing.Short() {
|
||||||
|
t.Skip("skipping integration test")
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx, store, destroyFunc, err := testSetup(t)
|
||||||
|
defer destroyFunc()
|
||||||
|
assert.NoError(t, err)
|
||||||
|
storagetesting.RunTestWatchFromZero(ctx, t, store, nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
// TestWatchFromNonZero tests that
|
||||||
|
// - watch from non-0 should just watch changes after given version
|
||||||
|
func TestIntegrationWatchFromNonZero(t *testing.T) {
|
||||||
|
if testing.Short() {
|
||||||
|
t.Skip("skipping integration test")
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx, store, destroyFunc, err := testSetup(t)
|
||||||
|
defer destroyFunc()
|
||||||
|
assert.NoError(t, err)
|
||||||
|
storagetesting.RunTestWatchFromNonZero(ctx, t, store)
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
// TODO this times out, we need to buffer events
|
||||||
|
func TestIntegrationDelayedWatchDelivery(t *testing.T) {
|
||||||
|
if testing.Short() {
|
||||||
|
t.Skip("skipping integration test")
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx, store, destroyFunc, err := testSetup(t)
|
||||||
|
defer destroyFunc()
|
||||||
|
assert.NoError(t, err)
|
||||||
|
storagetesting.RunTestDelayedWatchDelivery(ctx, t, store)
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* func TestIntegrationWatchError(t *testing.T) {
|
||||||
|
if testing.Short() {
|
||||||
|
t.Skip("skipping integration test")
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx, store, _ := testSetup(t)
|
||||||
|
storagetesting.RunTestWatchError(ctx, t, &storeWithPrefixTransformer{store})
|
||||||
|
} */
|
||||||
|
|
||||||
|
func TestIntegrationWatchContextCancel(t *testing.T) {
|
||||||
|
if testing.Short() {
|
||||||
|
t.Skip("skipping integration test")
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx, store, destroyFunc, err := testSetup(t)
|
||||||
|
defer destroyFunc()
|
||||||
|
assert.NoError(t, err)
|
||||||
|
storagetesting.RunTestWatchContextCancel(ctx, t, store)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestIntegrationWatcherTimeout(t *testing.T) {
|
||||||
|
if testing.Short() {
|
||||||
|
t.Skip("skipping integration test")
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx, store, destroyFunc, err := testSetup(t)
|
||||||
|
defer destroyFunc()
|
||||||
|
assert.NoError(t, err)
|
||||||
|
storagetesting.RunTestWatcherTimeout(ctx, t, store)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestIntegrationWatchDeleteEventObjectHaveLatestRV(t *testing.T) {
|
||||||
|
if testing.Short() {
|
||||||
|
t.Skip("skipping integration test")
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx, store, destroyFunc, err := testSetup(t)
|
||||||
|
defer destroyFunc()
|
||||||
|
assert.NoError(t, err)
|
||||||
|
storagetesting.RunTestWatchDeleteEventObjectHaveLatestRV(ctx, t, store)
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: enable when we support flow control and priority fairness
|
||||||
|
/* func TestIntegrationWatchInitializationSignal(t *testing.T) {
|
||||||
|
if testing.Short() {
|
||||||
|
t.Skip("skipping integration test")
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx, store, destroyFunc, err := testSetup(t)
|
||||||
|
defer destroyFunc()
|
||||||
|
assert.NoError(t, err)
|
||||||
|
storagetesting.RunTestWatchInitializationSignal(ctx, t, store)
|
||||||
|
} */
|
||||||
|
|
||||||
|
/* func TestIntegrationProgressNotify(t *testing.T) {
|
||||||
|
if testing.Short() {
|
||||||
|
t.Skip("skipping integration test")
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx, store, destroyFunc, err := testSetup(t)
|
||||||
|
defer destroyFunc()
|
||||||
|
assert.NoError(t, err)
|
||||||
|
storagetesting.RunOptionalTestProgressNotify(ctx, t, store)
|
||||||
|
} */
|
||||||
|
|
||||||
|
// TestWatchDispatchBookmarkEvents makes sure that
|
||||||
|
// setting allowWatchBookmarks query param against
|
||||||
|
// etcd implementation doesn't have any effect.
|
||||||
|
func TestIntegrationWatchDispatchBookmarkEvents(t *testing.T) {
|
||||||
|
if testing.Short() {
|
||||||
|
t.Skip("skipping integration test")
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx, store, destroyFunc, err := testSetup(t)
|
||||||
|
defer destroyFunc()
|
||||||
|
assert.NoError(t, err)
|
||||||
|
storagetesting.RunTestWatchDispatchBookmarkEvents(ctx, t, store, false)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestIntegrationSendInitialEventsBackwardCompatibility(t *testing.T) {
|
||||||
|
if testing.Short() {
|
||||||
|
t.Skip("skipping integration test")
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx, store, destroyFunc, err := testSetup(t)
|
||||||
|
defer destroyFunc()
|
||||||
|
assert.NoError(t, err)
|
||||||
|
storagetesting.RunSendInitialEventsBackwardCompatibility(ctx, t, store)
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO this test times out
|
||||||
|
func TestIntegrationEtcdWatchSemantics(t *testing.T) {
|
||||||
|
if testing.Short() {
|
||||||
|
t.Skip("skipping integration test")
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx, store, destroyFunc, err := testSetup(t)
|
||||||
|
defer destroyFunc()
|
||||||
|
assert.NoError(t, err)
|
||||||
|
storagetesting.RunWatchSemantics(ctx, t, store)
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
// TODO this test times out
|
||||||
|
func TestIntegrationEtcdWatchSemanticInitialEventsExtended(t *testing.T) {
|
||||||
|
if testing.Short() {
|
||||||
|
t.Skip("skipping integration test")
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx, store, destroyFunc, err := testSetup(t)
|
||||||
|
defer destroyFunc()
|
||||||
|
assert.NoError(t, err)
|
||||||
|
storagetesting.RunWatchSemanticInitialEventsExtended(ctx, t, store)
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
func newPod() runtime.Object {
|
||||||
|
return &example.Pod{}
|
||||||
|
}
|
||||||
|
|
||||||
|
func newPodList() runtime.Object {
|
||||||
|
return &example.PodList{}
|
||||||
|
}
|
||||||
@@ -210,7 +210,9 @@ func (mg *Migrator) run() (err error) {
|
|||||||
err := mg.InTransaction(func(sess *xorm.Session) error {
|
err := mg.InTransaction(func(sess *xorm.Session) error {
|
||||||
err := mg.exec(m, sess)
|
err := mg.exec(m, sess)
|
||||||
// if we get an sqlite busy/locked error, sleep 100ms and try again
|
// if we get an sqlite busy/locked error, sleep 100ms and try again
|
||||||
if errors.Is(err, sqlite3.ErrLocked) || errors.Is(err, sqlite3.ErrBusy) {
|
cnt := 0
|
||||||
|
for cnt < 3 && (errors.Is(err, sqlite3.ErrLocked) || errors.Is(err, sqlite3.ErrBusy)) {
|
||||||
|
cnt++
|
||||||
mg.Logger.Debug("Database locked, sleeping then retrying", "error", err, "sql", sql)
|
mg.Logger.Debug("Database locked, sleeping then retrying", "error", err, "sql", sql)
|
||||||
time.Sleep(100 * time.Millisecond)
|
time.Sleep(100 * time.Millisecond)
|
||||||
err = mg.exec(m, sess)
|
err = mg.exec(m, sess)
|
||||||
|
|||||||
@@ -122,7 +122,11 @@ func (db *SQLite3) TruncateDBTables(engine *xorm.Engine) error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if _, err := sess.Exec("UPDATE sqlite_sequence SET seq = 0 WHERE name != 'dashboard_acl';"); err != nil {
|
if _, err := sess.Exec("UPDATE sqlite_sequence SET seq = 0 WHERE name != 'dashboard_acl';"); err != nil {
|
||||||
return fmt.Errorf("failed to cleanup sqlite_sequence: %w", err)
|
// if we have not created any autoincrement columns in the database this will fail, the error is expected and we can ignore it
|
||||||
|
// we can't discriminate based on code because sqlite returns a generic error code
|
||||||
|
if err.Error() != "no such table: sqlite_sequence" {
|
||||||
|
return fmt.Errorf("failed to cleanup sqlite_sequence: %w", err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -151,7 +151,7 @@ func newSQLStore(cfg *setting.Cfg, engine *xorm.Engine,
|
|||||||
// Has to be done in a second phase (after initialization), since other services can register migrations during
|
// Has to be done in a second phase (after initialization), since other services can register migrations during
|
||||||
// the initialization phase.
|
// the initialization phase.
|
||||||
func (ss *SQLStore) Migrate(isDatabaseLockingEnabled bool) error {
|
func (ss *SQLStore) Migrate(isDatabaseLockingEnabled bool) error {
|
||||||
if ss.dbCfg.SkipMigrations {
|
if ss.dbCfg.SkipMigrations || ss.migrations == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ func (i fakeEntityStore) List(ctx context.Context, r *entity.EntityListRequest)
|
|||||||
return nil, fmt.Errorf("unimplemented")
|
return nil, fmt.Errorf("unimplemented")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (i fakeEntityStore) Watch(*entity.EntityWatchRequest, entity.EntityStore_WatchServer) error {
|
func (i fakeEntityStore) Watch(entity.EntityStore_WatchServer) error {
|
||||||
return fmt.Errorf("unimplemented")
|
return fmt.Errorf("unimplemented")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -24,11 +24,12 @@ const (
|
|||||||
type Entity_Action int32
|
type Entity_Action int32
|
||||||
|
|
||||||
const (
|
const (
|
||||||
Entity_UNKNOWN Entity_Action = 0
|
Entity_UNKNOWN Entity_Action = 0
|
||||||
Entity_CREATED Entity_Action = 1
|
Entity_CREATED Entity_Action = 1
|
||||||
Entity_UPDATED Entity_Action = 2
|
Entity_UPDATED Entity_Action = 2
|
||||||
Entity_DELETED Entity_Action = 3
|
Entity_DELETED Entity_Action = 3
|
||||||
Entity_ERROR Entity_Action = 4
|
Entity_ERROR Entity_Action = 4
|
||||||
|
Entity_BOOKMARK Entity_Action = 5
|
||||||
)
|
)
|
||||||
|
|
||||||
// Enum value maps for Entity_Action.
|
// Enum value maps for Entity_Action.
|
||||||
@@ -39,13 +40,15 @@ var (
|
|||||||
2: "UPDATED",
|
2: "UPDATED",
|
||||||
3: "DELETED",
|
3: "DELETED",
|
||||||
4: "ERROR",
|
4: "ERROR",
|
||||||
|
5: "BOOKMARK",
|
||||||
}
|
}
|
||||||
Entity_Action_value = map[string]int32{
|
Entity_Action_value = map[string]int32{
|
||||||
"UNKNOWN": 0,
|
"UNKNOWN": 0,
|
||||||
"CREATED": 1,
|
"CREATED": 1,
|
||||||
"UPDATED": 2,
|
"UPDATED": 2,
|
||||||
"DELETED": 3,
|
"DELETED": 3,
|
||||||
"ERROR": 4,
|
"ERROR": 4,
|
||||||
|
"BOOKMARK": 5,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -223,6 +226,52 @@ func (DeleteEntityResponse_Status) EnumDescriptor() ([]byte, []int) {
|
|||||||
return file_entity_proto_rawDescGZIP(), []int{9, 0}
|
return file_entity_proto_rawDescGZIP(), []int{9, 0}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type EntityWatchRequest_WatchAction int32
|
||||||
|
|
||||||
|
const (
|
||||||
|
EntityWatchRequest_START EntityWatchRequest_WatchAction = 0
|
||||||
|
EntityWatchRequest_STOP EntityWatchRequest_WatchAction = 1
|
||||||
|
)
|
||||||
|
|
||||||
|
// Enum value maps for EntityWatchRequest_WatchAction.
|
||||||
|
var (
|
||||||
|
EntityWatchRequest_WatchAction_name = map[int32]string{
|
||||||
|
0: "START",
|
||||||
|
1: "STOP",
|
||||||
|
}
|
||||||
|
EntityWatchRequest_WatchAction_value = map[string]int32{
|
||||||
|
"START": 0,
|
||||||
|
"STOP": 1,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
func (x EntityWatchRequest_WatchAction) Enum() *EntityWatchRequest_WatchAction {
|
||||||
|
p := new(EntityWatchRequest_WatchAction)
|
||||||
|
*p = x
|
||||||
|
return p
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x EntityWatchRequest_WatchAction) String() string {
|
||||||
|
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (EntityWatchRequest_WatchAction) Descriptor() protoreflect.EnumDescriptor {
|
||||||
|
return file_entity_proto_enumTypes[4].Descriptor()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (EntityWatchRequest_WatchAction) Type() protoreflect.EnumType {
|
||||||
|
return &file_entity_proto_enumTypes[4]
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x EntityWatchRequest_WatchAction) Number() protoreflect.EnumNumber {
|
||||||
|
return protoreflect.EnumNumber(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Deprecated: Use EntityWatchRequest_WatchAction.Descriptor instead.
|
||||||
|
func (EntityWatchRequest_WatchAction) EnumDescriptor() ([]byte, []int) {
|
||||||
|
return file_entity_proto_rawDescGZIP(), []int{15, 0}
|
||||||
|
}
|
||||||
|
|
||||||
// The canonical entity/document data -- this represents the raw bytes and storage level metadata
|
// The canonical entity/document data -- this represents the raw bytes and storage level metadata
|
||||||
type Entity struct {
|
type Entity struct {
|
||||||
state protoimpl.MessageState
|
state protoimpl.MessageState
|
||||||
@@ -1092,8 +1141,12 @@ type EntityHistoryRequest struct {
|
|||||||
|
|
||||||
// Entity identifier
|
// Entity identifier
|
||||||
Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
|
Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
|
||||||
|
// return the history from before this version
|
||||||
|
Before int64 `protobuf:"varint,2,opt,name=before,proto3" json:"before,omitempty"`
|
||||||
// Maximum number of items to return
|
// Maximum number of items to return
|
||||||
Limit int64 `protobuf:"varint,3,opt,name=limit,proto3" json:"limit,omitempty"`
|
Limit int64 `protobuf:"varint,3,opt,name=limit,proto3" json:"limit,omitempty"`
|
||||||
|
// guid of the entity
|
||||||
|
Guid string `protobuf:"bytes,4,opt,name=guid,proto3" json:"guid,omitempty"`
|
||||||
// Starting from the requested page
|
// Starting from the requested page
|
||||||
NextPageToken string `protobuf:"bytes,5,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"`
|
NextPageToken string `protobuf:"bytes,5,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"`
|
||||||
// Sorting instructions `field ASC/DESC`
|
// Sorting instructions `field ASC/DESC`
|
||||||
@@ -1143,6 +1196,13 @@ func (x *EntityHistoryRequest) GetKey() string {
|
|||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (x *EntityHistoryRequest) GetBefore() int64 {
|
||||||
|
if x != nil {
|
||||||
|
return x.Before
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
func (x *EntityHistoryRequest) GetLimit() int64 {
|
func (x *EntityHistoryRequest) GetLimit() int64 {
|
||||||
if x != nil {
|
if x != nil {
|
||||||
return x.Limit
|
return x.Limit
|
||||||
@@ -1150,6 +1210,13 @@ func (x *EntityHistoryRequest) GetLimit() int64 {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (x *EntityHistoryRequest) GetGuid() string {
|
||||||
|
if x != nil {
|
||||||
|
return x.Guid
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
func (x *EntityHistoryRequest) GetNextPageToken() string {
|
func (x *EntityHistoryRequest) GetNextPageToken() string {
|
||||||
if x != nil {
|
if x != nil {
|
||||||
return x.NextPageToken
|
return x.NextPageToken
|
||||||
@@ -1561,6 +1628,8 @@ type EntityWatchRequest struct {
|
|||||||
sizeCache protoimpl.SizeCache
|
sizeCache protoimpl.SizeCache
|
||||||
unknownFields protoimpl.UnknownFields
|
unknownFields protoimpl.UnknownFields
|
||||||
|
|
||||||
|
// Start or stop the watch
|
||||||
|
Action EntityWatchRequest_WatchAction `protobuf:"varint,8,opt,name=action,proto3,enum=entity.EntityWatchRequest_WatchAction" json:"action,omitempty"`
|
||||||
// ResourceVersion of last changes. Empty will default to full history
|
// ResourceVersion of last changes. Empty will default to full history
|
||||||
Since int64 `protobuf:"varint,1,opt,name=since,proto3" json:"since,omitempty"`
|
Since int64 `protobuf:"varint,1,opt,name=since,proto3" json:"since,omitempty"`
|
||||||
// Watch specific entities
|
// Watch specific entities
|
||||||
@@ -1575,6 +1644,9 @@ type EntityWatchRequest struct {
|
|||||||
WithBody bool `protobuf:"varint,6,opt,name=with_body,json=withBody,proto3" json:"with_body,omitempty"`
|
WithBody bool `protobuf:"varint,6,opt,name=with_body,json=withBody,proto3" json:"with_body,omitempty"`
|
||||||
// Return the full status in each payload
|
// Return the full status in each payload
|
||||||
WithStatus bool `protobuf:"varint,7,opt,name=with_status,json=withStatus,proto3" json:"with_status,omitempty"`
|
WithStatus bool `protobuf:"varint,7,opt,name=with_status,json=withStatus,proto3" json:"with_status,omitempty"`
|
||||||
|
// Return initial events
|
||||||
|
SendInitialEvents bool `protobuf:"varint,9,opt,name=send_initial_events,json=sendInitialEvents,proto3" json:"send_initial_events,omitempty"`
|
||||||
|
AllowWatchBookmarks bool `protobuf:"varint,10,opt,name=allow_watch_bookmarks,json=allowWatchBookmarks,proto3" json:"allow_watch_bookmarks,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *EntityWatchRequest) Reset() {
|
func (x *EntityWatchRequest) Reset() {
|
||||||
@@ -1609,6 +1681,13 @@ func (*EntityWatchRequest) Descriptor() ([]byte, []int) {
|
|||||||
return file_entity_proto_rawDescGZIP(), []int{15}
|
return file_entity_proto_rawDescGZIP(), []int{15}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (x *EntityWatchRequest) GetAction() EntityWatchRequest_WatchAction {
|
||||||
|
if x != nil {
|
||||||
|
return x.Action
|
||||||
|
}
|
||||||
|
return EntityWatchRequest_START
|
||||||
|
}
|
||||||
|
|
||||||
func (x *EntityWatchRequest) GetSince() int64 {
|
func (x *EntityWatchRequest) GetSince() int64 {
|
||||||
if x != nil {
|
if x != nil {
|
||||||
return x.Since
|
return x.Since
|
||||||
@@ -1658,6 +1737,20 @@ func (x *EntityWatchRequest) GetWithStatus() bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (x *EntityWatchRequest) GetSendInitialEvents() bool {
|
||||||
|
if x != nil {
|
||||||
|
return x.SendInitialEvents
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *EntityWatchRequest) GetAllowWatchBookmarks() bool {
|
||||||
|
if x != nil {
|
||||||
|
return x.AllowWatchBookmarks
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
type EntityWatchResponse struct {
|
type EntityWatchResponse struct {
|
||||||
state protoimpl.MessageState
|
state protoimpl.MessageState
|
||||||
sizeCache protoimpl.SizeCache
|
sizeCache protoimpl.SizeCache
|
||||||
@@ -1667,6 +1760,8 @@ type EntityWatchResponse struct {
|
|||||||
Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
|
Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
|
||||||
// Entity that was created, updated, or deleted
|
// Entity that was created, updated, or deleted
|
||||||
Entity *Entity `protobuf:"bytes,2,opt,name=entity,proto3" json:"entity,omitempty"`
|
Entity *Entity `protobuf:"bytes,2,opt,name=entity,proto3" json:"entity,omitempty"`
|
||||||
|
// previous version of the entity
|
||||||
|
Previous *Entity `protobuf:"bytes,3,opt,name=previous,proto3" json:"previous,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *EntityWatchResponse) Reset() {
|
func (x *EntityWatchResponse) Reset() {
|
||||||
@@ -1715,6 +1810,13 @@ func (x *EntityWatchResponse) GetEntity() *Entity {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (x *EntityWatchResponse) GetPrevious() *Entity {
|
||||||
|
if x != nil {
|
||||||
|
return x.Previous
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
type EntitySummary struct {
|
type EntitySummary struct {
|
||||||
state protoimpl.MessageState
|
state protoimpl.MessageState
|
||||||
sizeCache protoimpl.SizeCache
|
sizeCache protoimpl.SizeCache
|
||||||
@@ -1924,7 +2026,7 @@ var File_entity_proto protoreflect.FileDescriptor
|
|||||||
|
|
||||||
var file_entity_proto_rawDesc = []byte{
|
var file_entity_proto_rawDesc = []byte{
|
||||||
0x0a, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x06,
|
0x0a, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x06,
|
||||||
0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0x9f, 0x08, 0x0a, 0x06, 0x45, 0x6e, 0x74, 0x69, 0x74,
|
0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0xad, 0x08, 0x0a, 0x06, 0x45, 0x6e, 0x74, 0x69, 0x74,
|
||||||
0x79, 0x12, 0x12, 0x0a, 0x04, 0x67, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
|
0x79, 0x12, 0x12, 0x0a, 0x04, 0x67, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
|
||||||
0x04, 0x67, 0x75, 0x69, 0x64, 0x12, 0x29, 0x0a, 0x10, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63,
|
0x04, 0x67, 0x75, 0x69, 0x64, 0x12, 0x29, 0x0a, 0x10, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63,
|
||||||
0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52,
|
0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52,
|
||||||
@@ -1986,55 +2088,75 @@ var file_entity_proto_rawDesc = []byte{
|
|||||||
0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
|
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,
|
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,
|
0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22,
|
||||||
0x47, 0x0a, 0x06, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b,
|
0x55, 0x0a, 0x06, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b,
|
||||||
0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45,
|
0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45,
|
||||||
0x44, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x44, 0x10, 0x02,
|
0x44, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x44, 0x10, 0x02,
|
||||||
0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x03, 0x12, 0x09, 0x0a,
|
0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x03, 0x12, 0x09, 0x0a,
|
||||||
0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x04, 0x22, 0x50, 0x0a, 0x10, 0x45, 0x6e, 0x74, 0x69,
|
0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x04, 0x12, 0x0c, 0x0a, 0x08, 0x42, 0x4f, 0x4f, 0x4b,
|
||||||
0x74, 0x79, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06,
|
0x4d, 0x41, 0x52, 0x4b, 0x10, 0x05, 0x22, 0x50, 0x0a, 0x10, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79,
|
||||||
0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f,
|
0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f,
|
||||||
0x75, 0x72, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28,
|
0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72,
|
||||||
0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03,
|
0x63, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
|
||||||
0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x22, 0x62, 0x0a, 0x0f, 0x45, 0x6e,
|
0x03, 0x6b, 0x65, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01,
|
||||||
0x74, 0x69, 0x74, 0x79, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a,
|
0x28, 0x03, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x22, 0x62, 0x0a, 0x0f, 0x45, 0x6e, 0x74, 0x69,
|
||||||
0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x63, 0x6f, 0x64,
|
0x74, 0x79, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x63,
|
||||||
0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01,
|
0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12,
|
||||||
0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64,
|
0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
|
||||||
0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28,
|
0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x65, 0x74,
|
||||||
0x0c, 0x52, 0x0b, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x4a, 0x73, 0x6f, 0x6e, 0x22, 0x8e,
|
0x61, 0x69, 0x6c, 0x73, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52,
|
||||||
0x01, 0x0a, 0x11, 0x52, 0x65, 0x61, 0x64, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71,
|
0x0b, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x4a, 0x73, 0x6f, 0x6e, 0x22, 0x8e, 0x01, 0x0a,
|
||||||
0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28,
|
0x11, 0x52, 0x65, 0x61, 0x64, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65,
|
||||||
0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x29, 0x0a, 0x10, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72,
|
0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
|
||||||
0x63, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03,
|
0x03, 0x6b, 0x65, 0x79, 0x12, 0x29, 0x0a, 0x10, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
|
||||||
0x52, 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f,
|
0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f,
|
||||||
0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x04,
|
0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12,
|
||||||
0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x77, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x1f,
|
0x1b, 0x0a, 0x09, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x04, 0x20, 0x01,
|
||||||
0x0a, 0x0b, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20,
|
0x28, 0x08, 0x52, 0x08, 0x77, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x1f, 0x0a, 0x0b,
|
||||||
0x01, 0x28, 0x08, 0x52, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22,
|
0x77, 0x69, 0x74, 0x68, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28,
|
||||||
0x3d, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52,
|
0x08, 0x52, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x3d, 0x0a,
|
||||||
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79,
|
0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71,
|
||||||
0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e,
|
|
||||||
0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0xcc,
|
|
||||||
0x01, 0x0a, 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52,
|
|
||||||
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72,
|
|
||||||
0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e,
|
|
||||||
0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52,
|
|
||||||
0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x26, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79,
|
|
||||||
0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e,
|
|
||||||
0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x3b,
|
|
||||||
0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23,
|
|
||||||
0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x6e,
|
|
||||||
0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x74, 0x61,
|
|
||||||
0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x20, 0x0a, 0x06, 0x53,
|
|
||||||
0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x00,
|
|
||||||
0x12, 0x0b, 0x0a, 0x07, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x10, 0x01, 0x22, 0x68, 0x0a,
|
|
||||||
0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71,
|
|
||||||
0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01,
|
0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01,
|
||||||
0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x45, 0x6e,
|
0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x45, 0x6e,
|
||||||
0x74, 0x69, 0x74, 0x79, 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x29, 0x0a, 0x10,
|
0x74, 0x69, 0x74, 0x79, 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0xcc, 0x01, 0x0a,
|
||||||
|
0x14, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73,
|
||||||
|
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01,
|
||||||
|
0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x45, 0x6e,
|
||||||
|
0x74, 0x69, 0x74, 0x79, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x65,
|
||||||
|
0x72, 0x72, 0x6f, 0x72, 0x12, 0x26, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x02,
|
||||||
|
0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x45, 0x6e,
|
||||||
|
0x74, 0x69, 0x74, 0x79, 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x3b, 0x0a, 0x06,
|
||||||
|
0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x65,
|
||||||
|
0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69,
|
||||||
|
0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75,
|
||||||
|
0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x20, 0x0a, 0x06, 0x53, 0x74, 0x61,
|
||||||
|
0x74, 0x75, 0x73, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x00, 0x12, 0x0b,
|
||||||
|
0x0a, 0x07, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x10, 0x01, 0x22, 0x68, 0x0a, 0x13, 0x55,
|
||||||
|
0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65,
|
||||||
|
0x73, 0x74, 0x12, 0x26, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01,
|
||||||
|
0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x45, 0x6e, 0x74, 0x69,
|
||||||
|
0x74, 0x79, 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x29, 0x0a, 0x10, 0x70, 0x72,
|
||||||
|
0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02,
|
||||||
|
0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x56, 0x65,
|
||||||
|
0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xdb, 0x01, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
|
||||||
|
0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d,
|
||||||
|
0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e,
|
||||||
|
0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x72, 0x72,
|
||||||
|
0x6f, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x26, 0x0a,
|
||||||
|
0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e,
|
||||||
|
0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x06, 0x65,
|
||||||
|
0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x3b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18,
|
||||||
|
0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x55,
|
||||||
|
0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f,
|
||||||
|
0x6e, 0x73, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74,
|
||||||
|
0x75, 0x73, 0x22, 0x2f, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x09, 0x0a, 0x05,
|
||||||
|
0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x50, 0x44, 0x41, 0x54,
|
||||||
|
0x45, 0x44, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x55, 0x4e, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45,
|
||||||
|
0x44, 0x10, 0x02, 0x22, 0x52, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x6e, 0x74,
|
||||||
|
0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65,
|
||||||
|
0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x29, 0x0a, 0x10,
|
||||||
0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
|
0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
|
||||||
0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73,
|
0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73,
|
||||||
0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xdb, 0x01, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61,
|
0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xda, 0x01, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65,
|
||||||
0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
|
0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
|
||||||
0x12, 0x2d, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
|
0x12, 0x2d, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
|
||||||
0x17, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45,
|
0x17, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45,
|
||||||
@@ -2043,200 +2165,199 @@ var file_entity_proto_rawDesc = []byte{
|
|||||||
0x0e, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52,
|
0x0e, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52,
|
||||||
0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x3b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75,
|
0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x3b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75,
|
||||||
0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79,
|
0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79,
|
||||||
0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73,
|
0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73,
|
||||||
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74,
|
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74,
|
||||||
0x61, 0x74, 0x75, 0x73, 0x22, 0x2f, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x09,
|
0x61, 0x74, 0x75, 0x73, 0x22, 0x2e, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x09,
|
||||||
0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x50, 0x44,
|
0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x4c,
|
||||||
0x41, 0x54, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x55, 0x4e, 0x43, 0x48, 0x41, 0x4e,
|
0x45, 0x54, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x4e, 0x4f, 0x54, 0x46, 0x4f, 0x55,
|
||||||
0x47, 0x45, 0x44, 0x10, 0x02, 0x22, 0x52, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x45,
|
0x4e, 0x44, 0x10, 0x02, 0x22, 0xe4, 0x01, 0x0a, 0x14, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x48,
|
||||||
0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03,
|
0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a,
|
||||||
0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x29,
|
0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12,
|
||||||
0x0a, 0x10, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69,
|
0x16, 0x0a, 0x06, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52,
|
||||||
0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f,
|
0x06, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74,
|
||||||
0x75, 0x73, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xda, 0x01, 0x0a, 0x14, 0x44, 0x65,
|
0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x12, 0x0a,
|
||||||
0x6c, 0x65, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
|
0x04, 0x67, 0x75, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x67, 0x75, 0x69,
|
||||||
0x73, 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28,
|
0x64, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74,
|
||||||
0x0b, 0x32, 0x17, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74,
|
0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74,
|
||||||
0x79, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f,
|
0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6f, 0x72,
|
||||||
0x72, 0x12, 0x26, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28,
|
0x74, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x12, 0x1b, 0x0a,
|
||||||
0x0b, 0x32, 0x0e, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74,
|
0x09, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08,
|
||||||
0x79, 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x3b, 0x0a, 0x06, 0x73, 0x74, 0x61,
|
0x52, 0x08, 0x77, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x77, 0x69,
|
||||||
0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x65, 0x6e, 0x74, 0x69,
|
0x74, 0x68, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52,
|
||||||
0x74, 0x79, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52,
|
0x0a, 0x77, 0x69, 0x74, 0x68, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xa8, 0x01, 0x0a, 0x15,
|
||||||
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06,
|
0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73,
|
||||||
0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x2e, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
|
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01,
|
||||||
0x12, 0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x44,
|
0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2a, 0x0a, 0x08, 0x76, 0x65, 0x72, 0x73, 0x69,
|
||||||
0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x4e, 0x4f, 0x54, 0x46,
|
0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x65, 0x6e, 0x74, 0x69,
|
||||||
0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x22, 0xb8, 0x01, 0x0a, 0x14, 0x45, 0x6e, 0x74, 0x69, 0x74,
|
0x74, 0x79, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, 0x76, 0x65, 0x72, 0x73, 0x69,
|
||||||
0x79, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
|
0x6f, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65,
|
||||||
0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65,
|
0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65,
|
||||||
0x79, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03,
|
0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x29, 0x0a, 0x10, 0x72,
|
||||||
0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f,
|
0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18,
|
||||||
0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09,
|
0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56,
|
||||||
|
0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xa9, 0x03, 0x0a, 0x11, 0x45, 0x6e, 0x74, 0x69, 0x74,
|
||||||
|
0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0f,
|
||||||
|
0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18,
|
||||||
|
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54,
|
||||||
|
0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20,
|
||||||
|
0x01, 0x28, 0x03, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75,
|
||||||
|
0x65, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79,
|
||||||
|
0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52,
|
||||||
|
0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72,
|
||||||
|
0x63, 0x65, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72,
|
||||||
|
0x63, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x09, 0x52,
|
||||||
|
0x03, 0x6b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x18, 0x05,
|
||||||
|
0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x12, 0x3d, 0x0a, 0x06,
|
||||||
|
0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x65,
|
||||||
|
0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4c, 0x69, 0x73, 0x74,
|
||||||
|
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e,
|
||||||
|
0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x73,
|
||||||
|
0x6f, 0x72, 0x74, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x12,
|
||||||
|
0x1b, 0x0a, 0x09, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x08, 0x20, 0x01,
|
||||||
|
0x28, 0x08, 0x52, 0x08, 0x77, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x1f, 0x0a, 0x0b,
|
||||||
|
0x77, 0x69, 0x74, 0x68, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28,
|
||||||
|
0x08, 0x52, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a,
|
||||||
|
0x07, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07,
|
||||||
|
0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 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, 0xb4, 0x01, 0x0a, 0x10, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65,
|
||||||
|
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f,
|
||||||
|
0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
|
||||||
0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12,
|
0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12,
|
||||||
0x12, 0x0a, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x73,
|
0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05,
|
||||||
0x6f, 0x72, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x62, 0x6f, 0x64, 0x79,
|
0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61,
|
||||||
0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x77, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79,
|
0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70,
|
||||||
0x12, 0x1f, 0x0a, 0x0b, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18,
|
0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x06, 0x20, 0x01,
|
||||||
0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x53, 0x74, 0x61, 0x74, 0x75,
|
0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73,
|
||||||
0x73, 0x22, 0xa8, 0x01, 0x0a, 0x15, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x48, 0x69, 0x73, 0x74,
|
0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x73,
|
||||||
0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b,
|
0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20,
|
||||||
0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2a, 0x0a,
|
0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x91, 0x01, 0x0a, 0x12, 0x45, 0x6e,
|
||||||
0x08, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32,
|
0x74, 0x69, 0x74, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
|
||||||
0x0e, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52,
|
0x12, 0x28, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28,
|
||||||
0x08, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78,
|
0x0b, 0x32, 0x0e, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74,
|
||||||
0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01,
|
0x79, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65,
|
||||||
0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65,
|
0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20,
|
||||||
0x6e, 0x12, 0x29, 0x0a, 0x10, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x76, 0x65,
|
0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b,
|
||||||
0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x72, 0x65, 0x73,
|
0x65, 0x6e, 0x12, 0x29, 0x0a, 0x10, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x76,
|
||||||
0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xa9, 0x03, 0x0a,
|
0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x72, 0x65,
|
||||||
0x11, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65,
|
0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xf1, 0x03,
|
||||||
0x73, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f,
|
0x0a, 0x12, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71,
|
||||||
0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78,
|
0x75, 0x65, 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x08,
|
||||||
0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69,
|
0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x45, 0x6e,
|
||||||
0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74,
|
0x74, 0x69, 0x74, 0x79, 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
|
||||||
0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
|
0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63,
|
||||||
0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18,
|
0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20,
|
||||||
0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1a, 0x0a, 0x08,
|
0x01, 0x28, 0x03, 0x52, 0x05, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65,
|
||||||
0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08,
|
0x79, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x1a, 0x0a, 0x08,
|
||||||
0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18,
|
0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08,
|
||||||
0x0b, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6f,
|
0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6f, 0x6c, 0x64,
|
||||||
0x6c, 0x64, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x6f, 0x6c, 0x64,
|
0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72,
|
||||||
0x65, 0x72, 0x12, 0x3d, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x06, 0x20, 0x03,
|
0x12, 0x3e, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b,
|
||||||
0x28, 0x0b, 0x32, 0x25, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x45, 0x6e, 0x74, 0x69,
|
0x32, 0x26, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79,
|
||||||
0x74, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x61,
|
0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x61, 0x62,
|
||||||
0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c,
|
0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73,
|
||||||
0x73, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52,
|
0x12, 0x1b, 0x0a, 0x09, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x06, 0x20,
|
||||||
0x04, 0x73, 0x6f, 0x72, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x62, 0x6f,
|
0x01, 0x28, 0x08, 0x52, 0x08, 0x77, 0x69, 0x74, 0x68, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x1f, 0x0a,
|
||||||
0x64, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x77, 0x69, 0x74, 0x68, 0x42, 0x6f,
|
0x0b, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, 0x20, 0x01,
|
||||||
0x64, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75,
|
0x28, 0x08, 0x52, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2e,
|
||||||
0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x53, 0x74, 0x61,
|
0x0a, 0x13, 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x65,
|
||||||
0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x0c,
|
0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x73, 0x65, 0x6e,
|
||||||
0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x1a, 0x39, 0x0a,
|
0x64, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x32,
|
||||||
0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03,
|
0x0a, 0x15, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x77, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x62, 0x6f,
|
||||||
0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14,
|
0x6f, 0x6b, 0x6d, 0x61, 0x72, 0x6b, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x61,
|
||||||
0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76,
|
0x6c, 0x6c, 0x6f, 0x77, 0x57, 0x61, 0x74, 0x63, 0x68, 0x42, 0x6f, 0x6f, 0x6b, 0x6d, 0x61, 0x72,
|
||||||
0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xb4, 0x01, 0x0a, 0x10, 0x52, 0x65, 0x66,
|
0x6b, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72,
|
||||||
0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a,
|
0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03,
|
||||||
0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e,
|
0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01,
|
||||||
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65,
|
0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x22, 0x0a,
|
||||||
0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02,
|
0x0b, 0x57, 0x61, 0x74, 0x63, 0x68, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x09, 0x0a, 0x05,
|
||||||
0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6e,
|
0x53, 0x54, 0x41, 0x52, 0x54, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x54, 0x4f, 0x50, 0x10,
|
||||||
0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09,
|
0x01, 0x22, 0x87, 0x01, 0x0a, 0x13, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x57, 0x61, 0x74, 0x63,
|
||||||
0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f,
|
0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d,
|
||||||
0x75, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12,
|
0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69,
|
||||||
0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28,
|
0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x26, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74,
|
||||||
0x09, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e,
|
0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79,
|
||||||
0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22,
|
0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12,
|
||||||
0x91, 0x01, 0x0a, 0x12, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65,
|
0x2a, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28,
|
||||||
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74,
|
0x0b, 0x32, 0x0e, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74,
|
||||||
0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79,
|
0x79, 0x52, 0x08, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x22, 0xa2, 0x04, 0x0a, 0x0d,
|
||||||
0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73,
|
0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x10, 0x0a,
|
||||||
0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f,
|
0x03, 0x55, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x55, 0x49, 0x44, 0x12,
|
||||||
0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50,
|
0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b,
|
||||||
0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x29, 0x0a, 0x10, 0x72, 0x65, 0x73, 0x6f,
|
0x69, 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28,
|
||||||
0x75, 0x72, 0x63, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01,
|
0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72,
|
||||||
0x28, 0x03, 0x52, 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x65, 0x72, 0x73,
|
0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65,
|
||||||
0x69, 0x6f, 0x6e, 0x22, 0xa9, 0x02, 0x0a, 0x12, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x57, 0x61,
|
0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x39, 0x0a, 0x06, 0x6c, 0x61, 0x62,
|
||||||
0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x69,
|
0x65, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x65, 0x6e, 0x74, 0x69,
|
||||||
0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x73, 0x69, 0x6e, 0x63, 0x65,
|
0x74, 0x79, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79,
|
||||||
0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x6b,
|
0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61,
|
||||||
0x65, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03,
|
0x62, 0x65, 0x6c, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x18, 0x06,
|
||||||
0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x16,
|
0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04,
|
||||||
0x0a, 0x06, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
|
0x73, 0x6c, 0x75, 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x73, 0x6c, 0x75, 0x67,
|
||||||
0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x12, 0x3e, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73,
|
0x12, 0x2d, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32,
|
||||||
0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e,
|
0x17, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45,
|
||||||
0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65,
|
0x72, 0x72, 0x6f, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12,
|
||||||
0x73, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06,
|
0x39, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32,
|
||||||
0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x62,
|
0x21, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x53,
|
||||||
0x6f, 0x64, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x77, 0x69, 0x74, 0x68, 0x42,
|
0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74,
|
||||||
0x6f, 0x64, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x73, 0x74, 0x61, 0x74,
|
0x72, 0x79, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x2d, 0x0a, 0x06, 0x6e, 0x65,
|
||||||
0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x53, 0x74,
|
0x73, 0x74, 0x65, 0x64, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x65, 0x6e, 0x74,
|
||||||
0x61, 0x74, 0x75, 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,
|
|
||||||
0x5b, 0x0a, 0x13, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65,
|
|
||||||
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74,
|
|
||||||
0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73,
|
|
||||||
0x74, 0x61, 0x6d, 0x70, 0x12, 0x26, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x02,
|
|
||||||
0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x45, 0x6e,
|
|
||||||
0x74, 0x69, 0x74, 0x79, 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0xa2, 0x04, 0x0a,
|
|
||||||
0x0d, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x10,
|
|
||||||
0x0a, 0x03, 0x55, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x55, 0x49, 0x44,
|
|
||||||
0x12, 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
|
|
||||||
0x6b, 0x69, 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01,
|
|
||||||
0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63,
|
|
||||||
0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64,
|
|
||||||
0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x39, 0x0a, 0x06, 0x6c, 0x61,
|
|
||||||
0x62, 0x65, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x65, 0x6e, 0x74,
|
|
||||||
0x69, 0x74, 0x79, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72,
|
0x69, 0x74, 0x79, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72,
|
||||||
0x79, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c,
|
0x79, 0x52, 0x06, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x3f, 0x0a, 0x0a, 0x72, 0x65, 0x66,
|
||||||
0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x18,
|
0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e,
|
||||||
0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x12, 0x12, 0x0a,
|
0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x78, 0x74,
|
||||||
0x04, 0x73, 0x6c, 0x75, 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x73, 0x6c, 0x75,
|
0x65, 0x72, 0x6e, 0x61, 0x6c, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x0a,
|
||||||
0x67, 0x12, 0x2d, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b,
|
0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61,
|
||||||
0x32, 0x17, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79,
|
0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79,
|
||||||
0x45, 0x72, 0x72, 0x6f, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72,
|
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76,
|
||||||
0x12, 0x39, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b,
|
0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75,
|
||||||
0x32, 0x21, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79,
|
0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x39, 0x0a, 0x0b, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x45,
|
||||||
0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x45, 0x6e,
|
0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28,
|
||||||
0x74, 0x72, 0x79, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x2d, 0x0a, 0x06, 0x6e,
|
0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,
|
||||||
0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x65, 0x6e,
|
0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01,
|
||||||
0x74, 0x69, 0x74, 0x79, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x53, 0x75, 0x6d, 0x6d, 0x61,
|
0x22, 0x65, 0x0a, 0x17, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e,
|
||||||
0x72, 0x79, 0x52, 0x06, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x3f, 0x0a, 0x0a, 0x72, 0x65,
|
0x61, 0x6c, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x66,
|
||||||
0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f,
|
0x61, 0x6d, 0x69, 0x6c, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x61, 0x6d,
|
||||||
0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x78,
|
0x69, 0x6c, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
|
||||||
0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52,
|
0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74,
|
||||||
0x0a, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c,
|
0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x64, 0x65,
|
||||||
0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65,
|
0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x32, 0xdc, 0x03, 0x0a, 0x0b, 0x45, 0x6e, 0x74, 0x69,
|
||||||
0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05,
|
0x74, 0x79, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x31, 0x0a, 0x04, 0x52, 0x65, 0x61, 0x64, 0x12,
|
||||||
0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c,
|
0x19, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x45, 0x6e, 0x74,
|
||||||
0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x39, 0x0a, 0x0b, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73,
|
0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0e, 0x2e, 0x65, 0x6e, 0x74,
|
||||||
0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01,
|
0x69, 0x74, 0x79, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x43, 0x0a, 0x06, 0x43, 0x72,
|
||||||
0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
|
0x65, 0x61, 0x74, 0x65, 0x12, 0x1b, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x43, 0x72,
|
||||||
0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38,
|
0x65, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
|
||||||
0x01, 0x22, 0x65, 0x0a, 0x17, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x78, 0x74, 0x65, 0x72,
|
0x74, 0x1a, 0x1c, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74,
|
||||||
0x6e, 0x61, 0x6c, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06,
|
0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
|
||||||
0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x61,
|
0x43, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x1b, 0x2e, 0x65, 0x6e, 0x74, 0x69,
|
||||||
0x6d, 0x69, 0x6c, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01,
|
0x74, 0x79, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52,
|
||||||
0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x64, 0x65, 0x6e,
|
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e,
|
||||||
0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x64,
|
0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70,
|
||||||
0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x32, 0xda, 0x03, 0x0a, 0x0b, 0x45, 0x6e, 0x74,
|
0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x1b,
|
||||||
0x69, 0x74, 0x79, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x31, 0x0a, 0x04, 0x52, 0x65, 0x61, 0x64,
|
0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x6e,
|
||||||
0x12, 0x19, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x45, 0x6e,
|
0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x65, 0x6e,
|
||||||
0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0e, 0x2e, 0x65, 0x6e,
|
0x74, 0x69, 0x74, 0x79, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74,
|
||||||
0x74, 0x69, 0x74, 0x79, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x43, 0x0a, 0x06, 0x43,
|
0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x07, 0x48, 0x69, 0x73,
|
||||||
0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x1b, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x43,
|
0x74, 0x6f, 0x72, 0x79, 0x12, 0x1c, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x45, 0x6e,
|
||||||
0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65,
|
0x74, 0x69, 0x74, 0x79, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65,
|
||||||
0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61,
|
0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x45, 0x6e, 0x74, 0x69,
|
||||||
0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
|
0x74, 0x79, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
|
||||||
0x12, 0x43, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x1b, 0x2e, 0x65, 0x6e, 0x74,
|
0x65, 0x12, 0x3d, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x19, 0x2e, 0x65, 0x6e, 0x74, 0x69,
|
||||||
0x69, 0x74, 0x79, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79,
|
0x74, 0x79, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71,
|
||||||
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79,
|
0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x45, 0x6e,
|
||||||
0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73,
|
0x74, 0x69, 0x74, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
|
||||||
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12,
|
0x12, 0x44, 0x0a, 0x05, 0x57, 0x61, 0x74, 0x63, 0x68, 0x12, 0x1a, 0x2e, 0x65, 0x6e, 0x74, 0x69,
|
||||||
0x1b, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x45,
|
0x74, 0x79, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65,
|
||||||
0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x65,
|
0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x45,
|
||||||
0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69,
|
0x6e, 0x74, 0x69, 0x74, 0x79, 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
|
||||||
0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x07, 0x48, 0x69,
|
0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x42, 0x36, 0x5a, 0x34, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62,
|
||||||
0x73, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x1c, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x45,
|
0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x61, 0x66, 0x61, 0x6e, 0x61, 0x2f, 0x67, 0x72, 0x61,
|
||||||
0x6e, 0x74, 0x69, 0x74, 0x79, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75,
|
0x66, 0x61, 0x6e, 0x61, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
|
||||||
0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x45, 0x6e, 0x74,
|
0x73, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x62, 0x06,
|
||||||
0x69, 0x74, 0x79, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
|
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||||
0x73, 0x65, 0x12, 0x3d, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x19, 0x2e, 0x65, 0x6e, 0x74,
|
|
||||||
0x69, 0x74, 0x79, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65,
|
|
||||||
0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x45,
|
|
||||||
0x6e, 0x74, 0x69, 0x74, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
|
|
||||||
0x65, 0x12, 0x42, 0x0a, 0x05, 0x57, 0x61, 0x74, 0x63, 0x68, 0x12, 0x1a, 0x2e, 0x65, 0x6e, 0x74,
|
|
||||||
0x69, 0x74, 0x79, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x57, 0x61, 0x74, 0x63, 0x68, 0x52,
|
|
||||||
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e,
|
|
||||||
0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f,
|
|
||||||
0x6e, 0x73, 0x65, 0x30, 0x01, 0x42, 0x36, 0x5a, 0x34, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e,
|
|
||||||
0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x61, 0x66, 0x61, 0x6e, 0x61, 0x2f, 0x67, 0x72, 0x61, 0x66,
|
|
||||||
0x61, 0x6e, 0x61, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73,
|
|
||||||
0x2f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x62, 0x06, 0x70,
|
|
||||||
0x72, 0x6f, 0x74, 0x6f, 0x33,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@@ -2251,85 +2372,88 @@ func file_entity_proto_rawDescGZIP() []byte {
|
|||||||
return file_entity_proto_rawDescData
|
return file_entity_proto_rawDescData
|
||||||
}
|
}
|
||||||
|
|
||||||
var file_entity_proto_enumTypes = make([]protoimpl.EnumInfo, 4)
|
var file_entity_proto_enumTypes = make([]protoimpl.EnumInfo, 5)
|
||||||
var file_entity_proto_msgTypes = make([]protoimpl.MessageInfo, 25)
|
var file_entity_proto_msgTypes = make([]protoimpl.MessageInfo, 25)
|
||||||
var file_entity_proto_goTypes = []interface{}{
|
var file_entity_proto_goTypes = []interface{}{
|
||||||
(Entity_Action)(0), // 0: entity.Entity.Action
|
(Entity_Action)(0), // 0: entity.Entity.Action
|
||||||
(CreateEntityResponse_Status)(0), // 1: entity.CreateEntityResponse.Status
|
(CreateEntityResponse_Status)(0), // 1: entity.CreateEntityResponse.Status
|
||||||
(UpdateEntityResponse_Status)(0), // 2: entity.UpdateEntityResponse.Status
|
(UpdateEntityResponse_Status)(0), // 2: entity.UpdateEntityResponse.Status
|
||||||
(DeleteEntityResponse_Status)(0), // 3: entity.DeleteEntityResponse.Status
|
(DeleteEntityResponse_Status)(0), // 3: entity.DeleteEntityResponse.Status
|
||||||
(*Entity)(nil), // 4: entity.Entity
|
(EntityWatchRequest_WatchAction)(0), // 4: entity.EntityWatchRequest.WatchAction
|
||||||
(*EntityOriginInfo)(nil), // 5: entity.EntityOriginInfo
|
(*Entity)(nil), // 5: entity.Entity
|
||||||
(*EntityErrorInfo)(nil), // 6: entity.EntityErrorInfo
|
(*EntityOriginInfo)(nil), // 6: entity.EntityOriginInfo
|
||||||
(*ReadEntityRequest)(nil), // 7: entity.ReadEntityRequest
|
(*EntityErrorInfo)(nil), // 7: entity.EntityErrorInfo
|
||||||
(*CreateEntityRequest)(nil), // 8: entity.CreateEntityRequest
|
(*ReadEntityRequest)(nil), // 8: entity.ReadEntityRequest
|
||||||
(*CreateEntityResponse)(nil), // 9: entity.CreateEntityResponse
|
(*CreateEntityRequest)(nil), // 9: entity.CreateEntityRequest
|
||||||
(*UpdateEntityRequest)(nil), // 10: entity.UpdateEntityRequest
|
(*CreateEntityResponse)(nil), // 10: entity.CreateEntityResponse
|
||||||
(*UpdateEntityResponse)(nil), // 11: entity.UpdateEntityResponse
|
(*UpdateEntityRequest)(nil), // 11: entity.UpdateEntityRequest
|
||||||
(*DeleteEntityRequest)(nil), // 12: entity.DeleteEntityRequest
|
(*UpdateEntityResponse)(nil), // 12: entity.UpdateEntityResponse
|
||||||
(*DeleteEntityResponse)(nil), // 13: entity.DeleteEntityResponse
|
(*DeleteEntityRequest)(nil), // 13: entity.DeleteEntityRequest
|
||||||
(*EntityHistoryRequest)(nil), // 14: entity.EntityHistoryRequest
|
(*DeleteEntityResponse)(nil), // 14: entity.DeleteEntityResponse
|
||||||
(*EntityHistoryResponse)(nil), // 15: entity.EntityHistoryResponse
|
(*EntityHistoryRequest)(nil), // 15: entity.EntityHistoryRequest
|
||||||
(*EntityListRequest)(nil), // 16: entity.EntityListRequest
|
(*EntityHistoryResponse)(nil), // 16: entity.EntityHistoryResponse
|
||||||
(*ReferenceRequest)(nil), // 17: entity.ReferenceRequest
|
(*EntityListRequest)(nil), // 17: entity.EntityListRequest
|
||||||
(*EntityListResponse)(nil), // 18: entity.EntityListResponse
|
(*ReferenceRequest)(nil), // 18: entity.ReferenceRequest
|
||||||
(*EntityWatchRequest)(nil), // 19: entity.EntityWatchRequest
|
(*EntityListResponse)(nil), // 19: entity.EntityListResponse
|
||||||
(*EntityWatchResponse)(nil), // 20: entity.EntityWatchResponse
|
(*EntityWatchRequest)(nil), // 20: entity.EntityWatchRequest
|
||||||
(*EntitySummary)(nil), // 21: entity.EntitySummary
|
(*EntityWatchResponse)(nil), // 21: entity.EntityWatchResponse
|
||||||
(*EntityExternalReference)(nil), // 22: entity.EntityExternalReference
|
(*EntitySummary)(nil), // 22: entity.EntitySummary
|
||||||
nil, // 23: entity.Entity.LabelsEntry
|
(*EntityExternalReference)(nil), // 23: entity.EntityExternalReference
|
||||||
nil, // 24: entity.Entity.FieldsEntry
|
nil, // 24: entity.Entity.LabelsEntry
|
||||||
nil, // 25: entity.EntityListRequest.LabelsEntry
|
nil, // 25: entity.Entity.FieldsEntry
|
||||||
nil, // 26: entity.EntityWatchRequest.LabelsEntry
|
nil, // 26: entity.EntityListRequest.LabelsEntry
|
||||||
nil, // 27: entity.EntitySummary.LabelsEntry
|
nil, // 27: entity.EntityWatchRequest.LabelsEntry
|
||||||
nil, // 28: entity.EntitySummary.FieldsEntry
|
nil, // 28: entity.EntitySummary.LabelsEntry
|
||||||
|
nil, // 29: entity.EntitySummary.FieldsEntry
|
||||||
}
|
}
|
||||||
var file_entity_proto_depIdxs = []int32{
|
var file_entity_proto_depIdxs = []int32{
|
||||||
5, // 0: entity.Entity.origin:type_name -> entity.EntityOriginInfo
|
6, // 0: entity.Entity.origin:type_name -> entity.EntityOriginInfo
|
||||||
23, // 1: entity.Entity.labels:type_name -> entity.Entity.LabelsEntry
|
24, // 1: entity.Entity.labels:type_name -> entity.Entity.LabelsEntry
|
||||||
24, // 2: entity.Entity.fields:type_name -> entity.Entity.FieldsEntry
|
25, // 2: entity.Entity.fields:type_name -> entity.Entity.FieldsEntry
|
||||||
6, // 3: entity.Entity.errors:type_name -> entity.EntityErrorInfo
|
7, // 3: entity.Entity.errors:type_name -> entity.EntityErrorInfo
|
||||||
0, // 4: entity.Entity.action:type_name -> entity.Entity.Action
|
0, // 4: entity.Entity.action:type_name -> entity.Entity.Action
|
||||||
4, // 5: entity.CreateEntityRequest.entity:type_name -> entity.Entity
|
5, // 5: entity.CreateEntityRequest.entity:type_name -> entity.Entity
|
||||||
6, // 6: entity.CreateEntityResponse.error:type_name -> entity.EntityErrorInfo
|
7, // 6: entity.CreateEntityResponse.error:type_name -> entity.EntityErrorInfo
|
||||||
4, // 7: entity.CreateEntityResponse.entity:type_name -> entity.Entity
|
5, // 7: entity.CreateEntityResponse.entity:type_name -> entity.Entity
|
||||||
1, // 8: entity.CreateEntityResponse.status:type_name -> entity.CreateEntityResponse.Status
|
1, // 8: entity.CreateEntityResponse.status:type_name -> entity.CreateEntityResponse.Status
|
||||||
4, // 9: entity.UpdateEntityRequest.entity:type_name -> entity.Entity
|
5, // 9: entity.UpdateEntityRequest.entity:type_name -> entity.Entity
|
||||||
6, // 10: entity.UpdateEntityResponse.error:type_name -> entity.EntityErrorInfo
|
7, // 10: entity.UpdateEntityResponse.error:type_name -> entity.EntityErrorInfo
|
||||||
4, // 11: entity.UpdateEntityResponse.entity:type_name -> entity.Entity
|
5, // 11: entity.UpdateEntityResponse.entity:type_name -> entity.Entity
|
||||||
2, // 12: entity.UpdateEntityResponse.status:type_name -> entity.UpdateEntityResponse.Status
|
2, // 12: entity.UpdateEntityResponse.status:type_name -> entity.UpdateEntityResponse.Status
|
||||||
6, // 13: entity.DeleteEntityResponse.error:type_name -> entity.EntityErrorInfo
|
7, // 13: entity.DeleteEntityResponse.error:type_name -> entity.EntityErrorInfo
|
||||||
4, // 14: entity.DeleteEntityResponse.entity:type_name -> entity.Entity
|
5, // 14: entity.DeleteEntityResponse.entity:type_name -> entity.Entity
|
||||||
3, // 15: entity.DeleteEntityResponse.status:type_name -> entity.DeleteEntityResponse.Status
|
3, // 15: entity.DeleteEntityResponse.status:type_name -> entity.DeleteEntityResponse.Status
|
||||||
4, // 16: entity.EntityHistoryResponse.versions:type_name -> entity.Entity
|
5, // 16: entity.EntityHistoryResponse.versions:type_name -> entity.Entity
|
||||||
25, // 17: entity.EntityListRequest.labels:type_name -> entity.EntityListRequest.LabelsEntry
|
26, // 17: entity.EntityListRequest.labels:type_name -> entity.EntityListRequest.LabelsEntry
|
||||||
4, // 18: entity.EntityListResponse.results:type_name -> entity.Entity
|
5, // 18: entity.EntityListResponse.results:type_name -> entity.Entity
|
||||||
26, // 19: entity.EntityWatchRequest.labels:type_name -> entity.EntityWatchRequest.LabelsEntry
|
4, // 19: entity.EntityWatchRequest.action:type_name -> entity.EntityWatchRequest.WatchAction
|
||||||
4, // 20: entity.EntityWatchResponse.entity:type_name -> entity.Entity
|
27, // 20: entity.EntityWatchRequest.labels:type_name -> entity.EntityWatchRequest.LabelsEntry
|
||||||
27, // 21: entity.EntitySummary.labels:type_name -> entity.EntitySummary.LabelsEntry
|
5, // 21: entity.EntityWatchResponse.entity:type_name -> entity.Entity
|
||||||
6, // 22: entity.EntitySummary.error:type_name -> entity.EntityErrorInfo
|
5, // 22: entity.EntityWatchResponse.previous:type_name -> entity.Entity
|
||||||
28, // 23: entity.EntitySummary.fields:type_name -> entity.EntitySummary.FieldsEntry
|
28, // 23: entity.EntitySummary.labels:type_name -> entity.EntitySummary.LabelsEntry
|
||||||
21, // 24: entity.EntitySummary.nested:type_name -> entity.EntitySummary
|
7, // 24: entity.EntitySummary.error:type_name -> entity.EntityErrorInfo
|
||||||
22, // 25: entity.EntitySummary.references:type_name -> entity.EntityExternalReference
|
29, // 25: entity.EntitySummary.fields:type_name -> entity.EntitySummary.FieldsEntry
|
||||||
7, // 26: entity.EntityStore.Read:input_type -> entity.ReadEntityRequest
|
22, // 26: entity.EntitySummary.nested:type_name -> entity.EntitySummary
|
||||||
8, // 27: entity.EntityStore.Create:input_type -> entity.CreateEntityRequest
|
23, // 27: entity.EntitySummary.references:type_name -> entity.EntityExternalReference
|
||||||
10, // 28: entity.EntityStore.Update:input_type -> entity.UpdateEntityRequest
|
8, // 28: entity.EntityStore.Read:input_type -> entity.ReadEntityRequest
|
||||||
12, // 29: entity.EntityStore.Delete:input_type -> entity.DeleteEntityRequest
|
9, // 29: entity.EntityStore.Create:input_type -> entity.CreateEntityRequest
|
||||||
14, // 30: entity.EntityStore.History:input_type -> entity.EntityHistoryRequest
|
11, // 30: entity.EntityStore.Update:input_type -> entity.UpdateEntityRequest
|
||||||
16, // 31: entity.EntityStore.List:input_type -> entity.EntityListRequest
|
13, // 31: entity.EntityStore.Delete:input_type -> entity.DeleteEntityRequest
|
||||||
19, // 32: entity.EntityStore.Watch:input_type -> entity.EntityWatchRequest
|
15, // 32: entity.EntityStore.History:input_type -> entity.EntityHistoryRequest
|
||||||
4, // 33: entity.EntityStore.Read:output_type -> entity.Entity
|
17, // 33: entity.EntityStore.List:input_type -> entity.EntityListRequest
|
||||||
9, // 34: entity.EntityStore.Create:output_type -> entity.CreateEntityResponse
|
20, // 34: entity.EntityStore.Watch:input_type -> entity.EntityWatchRequest
|
||||||
11, // 35: entity.EntityStore.Update:output_type -> entity.UpdateEntityResponse
|
5, // 35: entity.EntityStore.Read:output_type -> entity.Entity
|
||||||
13, // 36: entity.EntityStore.Delete:output_type -> entity.DeleteEntityResponse
|
10, // 36: entity.EntityStore.Create:output_type -> entity.CreateEntityResponse
|
||||||
15, // 37: entity.EntityStore.History:output_type -> entity.EntityHistoryResponse
|
12, // 37: entity.EntityStore.Update:output_type -> entity.UpdateEntityResponse
|
||||||
18, // 38: entity.EntityStore.List:output_type -> entity.EntityListResponse
|
14, // 38: entity.EntityStore.Delete:output_type -> entity.DeleteEntityResponse
|
||||||
20, // 39: entity.EntityStore.Watch:output_type -> entity.EntityWatchResponse
|
16, // 39: entity.EntityStore.History:output_type -> entity.EntityHistoryResponse
|
||||||
33, // [33:40] is the sub-list for method output_type
|
19, // 40: entity.EntityStore.List:output_type -> entity.EntityListResponse
|
||||||
26, // [26:33] is the sub-list for method input_type
|
21, // 41: entity.EntityStore.Watch:output_type -> entity.EntityWatchResponse
|
||||||
26, // [26:26] is the sub-list for extension type_name
|
35, // [35:42] is the sub-list for method output_type
|
||||||
26, // [26:26] is the sub-list for extension extendee
|
28, // [28:35] is the sub-list for method input_type
|
||||||
0, // [0:26] is the sub-list for field type_name
|
28, // [28:28] is the sub-list for extension type_name
|
||||||
|
28, // [28:28] is the sub-list for extension extendee
|
||||||
|
0, // [0:28] is the sub-list for field type_name
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() { file_entity_proto_init() }
|
func init() { file_entity_proto_init() }
|
||||||
@@ -2572,7 +2696,7 @@ func file_entity_proto_init() {
|
|||||||
File: protoimpl.DescBuilder{
|
File: protoimpl.DescBuilder{
|
||||||
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
||||||
RawDescriptor: file_entity_proto_rawDesc,
|
RawDescriptor: file_entity_proto_rawDesc,
|
||||||
NumEnums: 4,
|
NumEnums: 5,
|
||||||
NumMessages: 25,
|
NumMessages: 25,
|
||||||
NumExtensions: 0,
|
NumExtensions: 0,
|
||||||
NumServices: 1,
|
NumServices: 1,
|
||||||
|
|||||||
@@ -92,6 +92,7 @@ message Entity {
|
|||||||
UPDATED = 2;
|
UPDATED = 2;
|
||||||
DELETED = 3;
|
DELETED = 3;
|
||||||
ERROR = 4;
|
ERROR = 4;
|
||||||
|
BOOKMARK = 5;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -232,9 +233,15 @@ message EntityHistoryRequest {
|
|||||||
// Entity identifier
|
// Entity identifier
|
||||||
string key = 1;
|
string key = 1;
|
||||||
|
|
||||||
|
// return the history from before this version
|
||||||
|
int64 before = 2;
|
||||||
|
|
||||||
// Maximum number of items to return
|
// Maximum number of items to return
|
||||||
int64 limit = 3;
|
int64 limit = 3;
|
||||||
|
|
||||||
|
// guid of the entity
|
||||||
|
string guid = 4;
|
||||||
|
|
||||||
// Starting from the requested page
|
// Starting from the requested page
|
||||||
string next_page_token = 5;
|
string next_page_token = 5;
|
||||||
|
|
||||||
@@ -338,6 +345,14 @@ message EntityListResponse {
|
|||||||
//-----------------------------------------------
|
//-----------------------------------------------
|
||||||
|
|
||||||
message EntityWatchRequest {
|
message EntityWatchRequest {
|
||||||
|
enum WatchAction {
|
||||||
|
START = 0;
|
||||||
|
STOP = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Start or stop the watch
|
||||||
|
WatchAction action = 8;
|
||||||
|
|
||||||
// ResourceVersion of last changes. Empty will default to full history
|
// ResourceVersion of last changes. Empty will default to full history
|
||||||
int64 since = 1;
|
int64 since = 1;
|
||||||
|
|
||||||
@@ -358,6 +373,11 @@ message EntityWatchRequest {
|
|||||||
|
|
||||||
// Return the full status in each payload
|
// Return the full status in each payload
|
||||||
bool with_status = 7;
|
bool with_status = 7;
|
||||||
|
|
||||||
|
// Return initial events
|
||||||
|
bool send_initial_events = 9;
|
||||||
|
|
||||||
|
bool allow_watch_bookmarks = 10;
|
||||||
}
|
}
|
||||||
|
|
||||||
message EntityWatchResponse {
|
message EntityWatchResponse {
|
||||||
@@ -366,6 +386,9 @@ message EntityWatchResponse {
|
|||||||
|
|
||||||
// Entity that was created, updated, or deleted
|
// Entity that was created, updated, or deleted
|
||||||
Entity entity = 2;
|
Entity entity = 2;
|
||||||
|
|
||||||
|
// previous version of the entity
|
||||||
|
Entity previous = 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
message EntitySummary {
|
message EntitySummary {
|
||||||
@@ -426,5 +449,5 @@ service EntityStore {
|
|||||||
rpc Delete(DeleteEntityRequest) returns (DeleteEntityResponse);
|
rpc Delete(DeleteEntityRequest) returns (DeleteEntityResponse);
|
||||||
rpc History(EntityHistoryRequest) returns (EntityHistoryResponse);
|
rpc History(EntityHistoryRequest) returns (EntityHistoryResponse);
|
||||||
rpc List(EntityListRequest) returns (EntityListResponse);
|
rpc List(EntityListRequest) returns (EntityListResponse);
|
||||||
rpc Watch(EntityWatchRequest) returns (stream EntityWatchResponse);
|
rpc Watch(stream EntityWatchRequest) returns (stream EntityWatchResponse);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ type EntityStoreClient interface {
|
|||||||
Delete(ctx context.Context, in *DeleteEntityRequest, opts ...grpc.CallOption) (*DeleteEntityResponse, error)
|
Delete(ctx context.Context, in *DeleteEntityRequest, opts ...grpc.CallOption) (*DeleteEntityResponse, error)
|
||||||
History(ctx context.Context, in *EntityHistoryRequest, opts ...grpc.CallOption) (*EntityHistoryResponse, error)
|
History(ctx context.Context, in *EntityHistoryRequest, opts ...grpc.CallOption) (*EntityHistoryResponse, error)
|
||||||
List(ctx context.Context, in *EntityListRequest, opts ...grpc.CallOption) (*EntityListResponse, error)
|
List(ctx context.Context, in *EntityListRequest, opts ...grpc.CallOption) (*EntityListResponse, error)
|
||||||
Watch(ctx context.Context, in *EntityWatchRequest, opts ...grpc.CallOption) (EntityStore_WatchClient, error)
|
Watch(ctx context.Context, opts ...grpc.CallOption) (EntityStore_WatchClient, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
type entityStoreClient struct {
|
type entityStoreClient struct {
|
||||||
@@ -103,22 +103,17 @@ func (c *entityStoreClient) List(ctx context.Context, in *EntityListRequest, opt
|
|||||||
return out, nil
|
return out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *entityStoreClient) Watch(ctx context.Context, in *EntityWatchRequest, opts ...grpc.CallOption) (EntityStore_WatchClient, error) {
|
func (c *entityStoreClient) Watch(ctx context.Context, opts ...grpc.CallOption) (EntityStore_WatchClient, error) {
|
||||||
stream, err := c.cc.NewStream(ctx, &EntityStore_ServiceDesc.Streams[0], EntityStore_Watch_FullMethodName, opts...)
|
stream, err := c.cc.NewStream(ctx, &EntityStore_ServiceDesc.Streams[0], EntityStore_Watch_FullMethodName, opts...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
x := &entityStoreWatchClient{stream}
|
x := &entityStoreWatchClient{stream}
|
||||||
if err := x.ClientStream.SendMsg(in); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
if err := x.ClientStream.CloseSend(); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return x, nil
|
return x, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
type EntityStore_WatchClient interface {
|
type EntityStore_WatchClient interface {
|
||||||
|
Send(*EntityWatchRequest) error
|
||||||
Recv() (*EntityWatchResponse, error)
|
Recv() (*EntityWatchResponse, error)
|
||||||
grpc.ClientStream
|
grpc.ClientStream
|
||||||
}
|
}
|
||||||
@@ -127,6 +122,10 @@ type entityStoreWatchClient struct {
|
|||||||
grpc.ClientStream
|
grpc.ClientStream
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (x *entityStoreWatchClient) Send(m *EntityWatchRequest) error {
|
||||||
|
return x.ClientStream.SendMsg(m)
|
||||||
|
}
|
||||||
|
|
||||||
func (x *entityStoreWatchClient) Recv() (*EntityWatchResponse, error) {
|
func (x *entityStoreWatchClient) Recv() (*EntityWatchResponse, error) {
|
||||||
m := new(EntityWatchResponse)
|
m := new(EntityWatchResponse)
|
||||||
if err := x.ClientStream.RecvMsg(m); err != nil {
|
if err := x.ClientStream.RecvMsg(m); err != nil {
|
||||||
@@ -145,7 +144,7 @@ type EntityStoreServer interface {
|
|||||||
Delete(context.Context, *DeleteEntityRequest) (*DeleteEntityResponse, error)
|
Delete(context.Context, *DeleteEntityRequest) (*DeleteEntityResponse, error)
|
||||||
History(context.Context, *EntityHistoryRequest) (*EntityHistoryResponse, error)
|
History(context.Context, *EntityHistoryRequest) (*EntityHistoryResponse, error)
|
||||||
List(context.Context, *EntityListRequest) (*EntityListResponse, error)
|
List(context.Context, *EntityListRequest) (*EntityListResponse, error)
|
||||||
Watch(*EntityWatchRequest, EntityStore_WatchServer) error
|
Watch(EntityStore_WatchServer) error
|
||||||
}
|
}
|
||||||
|
|
||||||
// UnimplementedEntityStoreServer should be embedded to have forward compatible implementations.
|
// UnimplementedEntityStoreServer should be embedded to have forward compatible implementations.
|
||||||
@@ -170,7 +169,7 @@ func (UnimplementedEntityStoreServer) History(context.Context, *EntityHistoryReq
|
|||||||
func (UnimplementedEntityStoreServer) List(context.Context, *EntityListRequest) (*EntityListResponse, error) {
|
func (UnimplementedEntityStoreServer) List(context.Context, *EntityListRequest) (*EntityListResponse, error) {
|
||||||
return nil, status.Errorf(codes.Unimplemented, "method List not implemented")
|
return nil, status.Errorf(codes.Unimplemented, "method List not implemented")
|
||||||
}
|
}
|
||||||
func (UnimplementedEntityStoreServer) Watch(*EntityWatchRequest, EntityStore_WatchServer) error {
|
func (UnimplementedEntityStoreServer) Watch(EntityStore_WatchServer) error {
|
||||||
return status.Errorf(codes.Unimplemented, "method Watch not implemented")
|
return status.Errorf(codes.Unimplemented, "method Watch not implemented")
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -294,15 +293,12 @@ func _EntityStore_List_Handler(srv interface{}, ctx context.Context, dec func(in
|
|||||||
}
|
}
|
||||||
|
|
||||||
func _EntityStore_Watch_Handler(srv interface{}, stream grpc.ServerStream) error {
|
func _EntityStore_Watch_Handler(srv interface{}, stream grpc.ServerStream) error {
|
||||||
m := new(EntityWatchRequest)
|
return srv.(EntityStoreServer).Watch(&entityStoreWatchServer{stream})
|
||||||
if err := stream.RecvMsg(m); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return srv.(EntityStoreServer).Watch(m, &entityStoreWatchServer{stream})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type EntityStore_WatchServer interface {
|
type EntityStore_WatchServer interface {
|
||||||
Send(*EntityWatchResponse) error
|
Send(*EntityWatchResponse) error
|
||||||
|
Recv() (*EntityWatchRequest, error)
|
||||||
grpc.ServerStream
|
grpc.ServerStream
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -314,6 +310,14 @@ func (x *entityStoreWatchServer) Send(m *EntityWatchResponse) error {
|
|||||||
return x.ServerStream.SendMsg(m)
|
return x.ServerStream.SendMsg(m)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (x *entityStoreWatchServer) Recv() (*EntityWatchRequest, error) {
|
||||||
|
m := new(EntityWatchRequest)
|
||||||
|
if err := x.ServerStream.RecvMsg(m); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return m, nil
|
||||||
|
}
|
||||||
|
|
||||||
// EntityStore_ServiceDesc is the grpc.ServiceDesc for EntityStore service.
|
// EntityStore_ServiceDesc is the grpc.ServiceDesc for EntityStore service.
|
||||||
// It's only intended for direct use with grpc.RegisterService,
|
// It's only intended for direct use with grpc.RegisterService,
|
||||||
// and not to be introspected or modified (even as a copy)
|
// and not to be introspected or modified (even as a copy)
|
||||||
@@ -351,6 +355,7 @@ var EntityStore_ServiceDesc = grpc.ServiceDesc{
|
|||||||
StreamName: "Watch",
|
StreamName: "Watch",
|
||||||
Handler: _EntityStore_Watch_Handler,
|
Handler: _EntityStore_Watch_Handler,
|
||||||
ServerStreams: true,
|
ServerStreams: true,
|
||||||
|
ClientStreams: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Metadata: "entity.proto",
|
Metadata: "entity.proto",
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -168,6 +168,10 @@ providers:
|
|||||||
Login: "admin",
|
Login: "admin",
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// give provisioner some time since we don't have a way to know when provisioning is complete
|
||||||
|
// TODO https://github.com/grafana/grafana/issues/85617
|
||||||
|
time.Sleep(1 * time.Second)
|
||||||
|
|
||||||
type errorResponseBody struct {
|
type errorResponseBody struct {
|
||||||
Message string `json:"message"`
|
Message string `json:"message"`
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user