This is an automated email from the ASF dual-hosted git repository.

tianxiaoliang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-service-center.git


The following commit(s) were added to refs/heads/master by this push:
     new 575cb2e  change proto depedency (#840)
575cb2e is described below

commit 575cb2e685db59d42c53c5e5f318b735874a34f7
Author: yeyiwei <53281955+yeyi...@users.noreply.github.com>
AuthorDate: Thu Jan 28 17:20:51 2021 +0800

    change proto depedency (#840)
---
 go.mod                                    |    2 +-
 syncer/plugins/servicecenter/service.go   |   17 +-
 syncer/plugins/servicecenter/transform.go |  228 +++++-
 syncer/proto/sc/servicecenter.pb.go       | 1039 ++++++++++++++++++++++++
 syncer/proto/sc/servicecenter.proto       |   77 ++
 syncer/proto/syncer.pb.go                 | 1223 +++++++++++++++++++++--------
 syncer/server/transform.go                |   12 +-
 syncer/servicecenter/storage/storage.go   |    2 +-
 8 files changed, 2270 insertions(+), 330 deletions(-)

diff --git a/go.mod b/go.mod
index 3638573..2ab6604 100644
--- a/go.mod
+++ b/go.mod
@@ -22,7 +22,6 @@ require (
        github.com/go-chassis/go-archaius v1.3.6-0.20201130023516-387922b408d0
        github.com/go-chassis/go-chassis/v2 v2.1.1-0.20201208095114-93feb76fd997
        github.com/go-chassis/kie-client v0.0.0-20210122061843-eee856b0a9af
-       github.com/gogo/protobuf v1.3.1
        github.com/golang/protobuf v1.4.2
        github.com/gorilla/websocket v1.4.2
        github.com/grpc-ecosystem/go-grpc-middleware v1.2.2 // indirect
@@ -65,6 +64,7 @@ require (
        golang.org/x/text v0.3.5 // indirect
        golang.org/x/time v0.0.0-20190308202827-9d24e82272b4
        google.golang.org/grpc v1.33.1
+       google.golang.org/protobuf v1.23.0
        gopkg.in/cheggaaa/pb.v1 v1.0.28 // indirect
        gopkg.in/yaml.v2 v2.3.0
        k8s.io/api v0.17.0
diff --git a/syncer/plugins/servicecenter/service.go 
b/syncer/plugins/servicecenter/service.go
index 35b8d04..8776ddd 100644
--- a/syncer/plugins/servicecenter/service.go
+++ b/syncer/plugins/servicecenter/service.go
@@ -19,12 +19,14 @@ package servicecenter
 
 import (
        "context"
+       "fmt"
 
        "github.com/apache/servicecomb-service-center/pkg/log"
        "github.com/apache/servicecomb-service-center/pkg/util"
        pb "github.com/apache/servicecomb-service-center/syncer/proto"
+       pbsc "github.com/apache/servicecomb-service-center/syncer/proto/sc"
        scpb "github.com/go-chassis/cari/discovery"
-       "github.com/gogo/protobuf/proto"
+       "google.golang.org/protobuf/proto"
 )
 
 // CreateService creates the service of servicecenter
@@ -42,13 +44,18 @@ func (c *Client) CreateService(ctx context.Context, 
domainProject string, syncSe
        if len(matches) > 0 {
                schemas := make([]*scpb.Schema, 0, len(matches))
                for _, expansion := range matches {
-                       schema := &scpb.Schema{}
+                       schema := &pbsc.Schema{}
                        err1 := proto.Unmarshal(expansion.Bytes, schema)
                        if err1 != nil {
-                               log.Errorf(err1, "proto unmarshal %s service 
schema, serviceID = %s, kind = %v, content = %v failed",
-                                       PluginName, serviceID, expansion.Kind, 
expansion.Bytes)
+                               log.Error(fmt.Sprintf("proto unmarshal %s 
service schema, serviceID = %s, kind = %v, content = %v failed",
+                                       PluginName, serviceID, expansion.Kind, 
expansion.Bytes), err1)
                        }
-                       schemas = append(schemas, schema)
+                       schematised := &scpb.Schema{
+                               SchemaId: schema.SchemaId,
+                               Summary:  schema.Summary,
+                               Schema:   schema.Schema,
+                       }
+                       schemas = append(schemas, schematised)
                }
                err2 := c.CreateSchemas(ctx, domain, project, serviceID, 
schemas)
                if err2 != nil {
diff --git a/syncer/plugins/servicecenter/transform.go 
b/syncer/plugins/servicecenter/transform.go
index 921a29a..67d88c8 100644
--- a/syncer/plugins/servicecenter/transform.go
+++ b/syncer/plugins/servicecenter/transform.go
@@ -18,16 +18,17 @@
 package servicecenter
 
 import (
+       "fmt"
        "net/url"
        "strconv"
        "strings"
 
        "github.com/apache/servicecomb-service-center/pkg/dump"
-
        "github.com/apache/servicecomb-service-center/pkg/log"
        pb "github.com/apache/servicecomb-service-center/syncer/proto"
+       pbsc "github.com/apache/servicecomb-service-center/syncer/proto/sc"
        scpb "github.com/go-chassis/cari/discovery"
-       "github.com/gogo/protobuf/proto"
+       "google.golang.org/protobuf/proto"
 )
 
 const (
@@ -81,7 +82,8 @@ func toSyncService(service *scpb.MicroService) (syncService 
*pb.SyncService) {
                syncService.Status = pb.SyncService_UNKNOWN
        }
 
-       content, err := proto.Marshal(service)
+       serviceInpbsc := ServiceCopy(service)
+       content, err := proto.Marshal(serviceInpbsc)
        if err != nil {
                log.Errorf(err, "transform sc service to syncer service failed: 
%s", err)
                return
@@ -159,7 +161,8 @@ func toSyncInstance(serviceID string, instance 
*scpb.MicroServiceInstance) (sync
                }
        }
 
-       content, err := proto.Marshal(instance)
+       instaceInpbsc := InstanceCopy(instance)
+       content, err := proto.Marshal(instaceInpbsc)
        if err != nil {
                log.Errorf(err, "transform sc instance to syncer instance 
failed: %s", err)
                return
@@ -179,10 +182,11 @@ func schemaExpansions(service *scpb.MicroService, schemas 
[]*scpb.Schema) (expan
                        continue
                }
 
-               content, err := proto.Marshal(val)
+               schemaInpbsc := SchemaCopy(val)
+               content, err := proto.Marshal(schemaInpbsc)
                if err != nil {
-                       log.Errorf(err, "proto marshal schemas failed, app = 
%s, service = %s, version = %s datasource = %s",
-                               service.AppId, service.ServiceName, 
service.Version, expansionSchema)
+                       log.Error(fmt.Sprintf("proto marshal schemas failed, 
app = %s, service = %s, version = %s datasource = %s",
+                               service.AppId, service.ServiceName, 
service.Version, expansionSchema), err)
                        continue
                }
                expansions = append(expansions, &pb.Expansion{
@@ -197,17 +201,19 @@ func schemaExpansions(service *scpb.MicroService, schemas 
[]*scpb.Schema) (expan
 // toService transform SyncService to service-center service
 func toService(syncService *pb.SyncService) (service *scpb.MicroService) {
        service = &scpb.MicroService{}
+       serviceInpbsc := &pbsc.MicroService{}
        var err error
        if syncService.PluginName == PluginName && len(syncService.Expansions) 
> 0 {
                matches := 
pb.Expansions(syncService.Expansions).Find(expansionDatasource, 
map[string]string{})
                if len(matches) > 0 {
-                       err = proto.Unmarshal(matches[0].Bytes, service)
+                       err = proto.Unmarshal(matches[0].Bytes, serviceInpbsc)
                        if err == nil {
+                               service = ServiceCopyRe(serviceInpbsc)
                                service.ServiceId = syncService.ServiceId
                                return
                        }
-                       log.Errorf(err, "proto unmarshal %s service, serviceID 
= %s, kind = %v, content = %v failed",
-                               PluginName, service.ServiceId, matches[0].Kind, 
matches[0].Bytes)
+                       log.Error(fmt.Sprintf("proto unmarshal %s service, 
serviceID = %s, kind = %v, content = %v failed",
+                               PluginName, serviceInpbsc.ServiceId, 
matches[0].Kind, matches[0].Bytes), err)
                }
        }
        service.AppId = syncService.App
@@ -222,17 +228,19 @@ func toService(syncService *pb.SyncService) (service 
*scpb.MicroService) {
 // toInstance transform SyncInstance to service-center instance
 func toInstance(syncInstance *pb.SyncInstance) (instance 
*scpb.MicroServiceInstance) {
        instance = &scpb.MicroServiceInstance{}
+       instaceInpbsc := &pbsc.MicroServiceInstance{}
        if syncInstance.PluginName == PluginName && 
len(syncInstance.Expansions) > 0 {
                matches := 
pb.Expansions(syncInstance.Expansions).Find(expansionDatasource, 
map[string]string{})
                if len(matches) > 0 {
-                       err := proto.Unmarshal(matches[0].Bytes, instance)
+                       err := proto.Unmarshal(matches[0].Bytes, instaceInpbsc)
                        if err == nil {
+                               instance = InstanceCopyRe(instaceInpbsc)
                                instance.InstanceId = syncInstance.InstanceId
                                instance.ServiceId = syncInstance.ServiceId
                                return
                        }
-                       log.Errorf(err, "proto unmarshal %s instance, 
instanceID = %s, kind = %v, content = %v failed",
-                               PluginName, instance.InstanceId, 
matches[0].Kind, matches[0].Bytes)
+                       log.Error(fmt.Sprintf("proto unmarshal %s instance, 
instanceID = %s, kind = %v, content = %v failed",
+                               PluginName, instance.InstanceId, 
matches[0].Kind, matches[0].Bytes), err)
 
                }
        }
@@ -289,3 +297,197 @@ func inSlice(slice []string, val string) bool {
        }
        return false
 }
+
+func ServiceCopy(service *scpb.MicroService) *pbsc.MicroService {
+       var serviceInpbsc pbsc.MicroService
+       if service != nil {
+               paths := []*pbsc.ServicePath{}
+               if len(service.Paths) > 0 {
+                       for i, path := range service.Paths {
+                               paths[i].Path = path.Path
+                               paths[i].Property = path.Property
+                       }
+               }
+               providers := []*pbsc.MicroServiceKey{}
+               if len(service.Providers) > 0 {
+                       for i, provider := range service.Providers {
+                               providers[i].Tenant = provider.Tenant
+                               providers[i].Environment = provider.Environment
+                               providers[i].AppId = provider.AppId
+                               providers[i].ServiceName = provider.ServiceName
+                               providers[i].Alias = provider.Alias
+                               providers[i].Version = provider.Version
+                       }
+               }
+               var frameWorkProperty pbsc.FrameWorkProperty
+               if service.Framework != nil {
+                       frameWorkProperty = pbsc.FrameWorkProperty{
+                               Name:    service.Framework.Name,
+                               Version: service.Framework.Version,
+                       }
+               }
+               serviceInpbsc = pbsc.MicroService{
+                       ServiceId:    service.ServiceId,
+                       AppId:        service.AppId,
+                       ServiceName:  service.ServiceName,
+                       Version:      service.Version,
+                       Description:  service.Description,
+                       Level:        service.Level,
+                       Schemas:      service.Schemas,
+                       Paths:        paths,
+                       Status:       service.Status,
+                       Properties:   service.Properties,
+                       Timestamp:    service.Timestamp,
+                       Providers:    providers,
+                       Alias:        service.Alias,
+                       LBStrategy:   service.LBStrategy,
+                       ModTimestamp: service.ModTimestamp,
+                       Environment:  service.Environment,
+                       RegisterBy:   service.RegisterBy,
+                       Framework:    &frameWorkProperty,
+               }
+       }
+       return &serviceInpbsc
+}
+
+func ServiceCopyRe(service *pbsc.MicroService) *scpb.MicroService {
+       var serviceInpbsc scpb.MicroService
+       if service != nil {
+               paths := []*scpb.ServicePath{}
+               if len(service.Paths) > 0 {
+                       for i, path := range service.Paths {
+                               paths[i].Path = path.Path
+                               paths[i].Property = path.Property
+                       }
+               }
+               providers := []*scpb.MicroServiceKey{}
+               if len(service.Providers) > 0 {
+                       for i, provider := range service.Providers {
+                               providers[i].Tenant = provider.Tenant
+                               providers[i].Environment = provider.Environment
+                               providers[i].AppId = provider.AppId
+                               providers[i].ServiceName = provider.ServiceName
+                               providers[i].Alias = provider.Alias
+                               providers[i].Version = provider.Version
+                       }
+               }
+               var frameWorkProperty scpb.FrameWorkProperty
+               if service.Framework != nil {
+                       frameWorkProperty = scpb.FrameWorkProperty{
+                               Name:    service.Framework.Name,
+                               Version: service.Framework.Version,
+                       }
+               }
+               serviceInpbsc = scpb.MicroService{
+                       ServiceId:    service.ServiceId,
+                       AppId:        service.AppId,
+                       ServiceName:  service.ServiceName,
+                       Version:      service.Version,
+                       Description:  service.Description,
+                       Level:        service.Level,
+                       Schemas:      service.Schemas,
+                       Paths:        paths,
+                       Status:       service.Status,
+                       Properties:   service.Properties,
+                       Timestamp:    service.Timestamp,
+                       Providers:    providers,
+                       Alias:        service.Alias,
+                       LBStrategy:   service.LBStrategy,
+                       ModTimestamp: service.ModTimestamp,
+                       Environment:  service.Environment,
+                       RegisterBy:   service.RegisterBy,
+                       Framework:    &frameWorkProperty,
+               }
+       }
+       return &serviceInpbsc
+}
+
+func InstanceCopy(instance *scpb.MicroServiceInstance) 
*pbsc.MicroServiceInstance {
+       var instanceInpbs pbsc.MicroServiceInstance
+       if instance != nil {
+               var healthCheck pbsc.HealthCheck
+               if instance.HealthCheck != nil {
+                       healthCheck = pbsc.HealthCheck{
+                               Mode:     instance.HealthCheck.Mode,
+                               Port:     instance.HealthCheck.Port,
+                               Interval: instance.HealthCheck.Interval,
+                               Times:    instance.HealthCheck.Times,
+                               Url:      instance.HealthCheck.Url,
+                       }
+               }
+               var dataCenterInfo pbsc.DataCenterInfo
+               if instance.DataCenterInfo != nil {
+                       dataCenterInfo = pbsc.DataCenterInfo{
+                               Name:          instance.DataCenterInfo.Name,
+                               Region:        instance.DataCenterInfo.Region,
+                               AvailableZone: 
instance.DataCenterInfo.AvailableZone,
+                       }
+               }
+               instanceInpbs = pbsc.MicroServiceInstance{
+                       InstanceId:     instance.InstanceId,
+                       ServiceId:      instance.ServiceId,
+                       Endpoints:      instance.Endpoints,
+                       HostName:       instance.HostName,
+                       Status:         instance.Status,
+                       Properties:     instance.Properties,
+                       HealthCheck:    &healthCheck,
+                       Timestamp:      instance.Timestamp,
+                       DataCenterInfo: &dataCenterInfo,
+                       ModTimestamp:   instance.ModTimestamp,
+                       Version:        instance.Version,
+               }
+       }
+       return &instanceInpbs
+}
+
+func InstanceCopyRe(instance *pbsc.MicroServiceInstance) 
*scpb.MicroServiceInstance {
+       var instanceInpbs scpb.MicroServiceInstance
+       if instance != nil {
+               var healthCheck scpb.HealthCheck
+               if instance.HealthCheck != nil {
+                       healthCheck = scpb.HealthCheck{
+                               Mode:     instance.HealthCheck.Mode,
+                               Port:     instance.HealthCheck.Port,
+                               Interval: instance.HealthCheck.Interval,
+                               Times:    instance.HealthCheck.Times,
+                               Url:      instance.HealthCheck.Url,
+                       }
+               }
+               var dataCenterInfo scpb.DataCenterInfo
+               if instance.DataCenterInfo != nil {
+                       dataCenterInfo = scpb.DataCenterInfo{
+                               Name:          instance.DataCenterInfo.Name,
+                               Region:        instance.DataCenterInfo.Region,
+                               AvailableZone: 
instance.DataCenterInfo.AvailableZone,
+                       }
+               }
+               instanceInpbs = scpb.MicroServiceInstance{
+                       InstanceId:   instance.InstanceId,
+                       ServiceId:    instance.ServiceId,
+                       Endpoints:    instance.Endpoints,
+                       HostName:     instance.HostName,
+                       Status:       instance.Status,
+                       Properties:   instance.Properties,
+                       HealthCheck:  &healthCheck,
+                       Timestamp:    instance.Timestamp,
+                       ModTimestamp: instance.ModTimestamp,
+                       Version:      instance.Version,
+               }
+               if instance.DataCenterInfo.Name != "" {
+                       instanceInpbs.DataCenterInfo = &dataCenterInfo
+               }
+       }
+       return &instanceInpbs
+}
+
+func SchemaCopy(schema *scpb.Schema) *pbsc.Schema {
+       var schemaInpbsc pbsc.Schema
+       if schema != nil {
+               schemaInpbsc = pbsc.Schema{
+                       SchemaId: schema.SchemaId,
+                       Summary:  schema.Summary,
+                       Schema:   schema.Schema,
+               }
+       }
+       return &schemaInpbsc
+}
diff --git a/syncer/proto/sc/servicecenter.pb.go 
b/syncer/proto/sc/servicecenter.pb.go
new file mode 100644
index 0000000..d5c195e
--- /dev/null
+++ b/syncer/proto/sc/servicecenter.pb.go
@@ -0,0 +1,1039 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+//     protoc-gen-go v1.25.0
+//     protoc        v3.11.0
+// source: servicecenter.proto
+
+package sc
+
+import (
+       proto "github.com/golang/protobuf/proto"
+       protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+       protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+       reflect "reflect"
+       sync "sync"
+)
+
+const (
+       // Verify that this generated code is sufficiently up-to-date.
+       _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+       // Verify that runtime/protoimpl is sufficiently up-to-date.
+       _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+// This is a compile-time assertion that a sufficiently up-to-date version
+// of the legacy proto package is being used.
+const _ = proto.ProtoPackageIsVersion4
+
+type Schema struct {
+       state         protoimpl.MessageState
+       sizeCache     protoimpl.SizeCache
+       unknownFields protoimpl.UnknownFields
+
+       SchemaId string `protobuf:"bytes,1,opt,name=schemaId,proto3" 
json:"schemaId,omitempty"`
+       Summary  string `protobuf:"bytes,2,opt,name=summary,proto3" 
json:"summary,omitempty"`
+       Schema   string `protobuf:"bytes,3,opt,name=schema,proto3" 
json:"schema,omitempty"`
+}
+
+func (x *Schema) Reset() {
+       *x = Schema{}
+       if protoimpl.UnsafeEnabled {
+               mi := &file_servicecenter_proto_msgTypes[0]
+               ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+               ms.StoreMessageInfo(mi)
+       }
+}
+
+func (x *Schema) String() string {
+       return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Schema) ProtoMessage() {}
+
+func (x *Schema) ProtoReflect() protoreflect.Message {
+       mi := &file_servicecenter_proto_msgTypes[0]
+       if protoimpl.UnsafeEnabled && x != nil {
+               ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+               if ms.LoadMessageInfo() == nil {
+                       ms.StoreMessageInfo(mi)
+               }
+               return ms
+       }
+       return mi.MessageOf(x)
+}
+
+// Deprecated: Use Schema.ProtoReflect.Descriptor instead.
+func (*Schema) Descriptor() ([]byte, []int) {
+       return file_servicecenter_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *Schema) GetSchemaId() string {
+       if x != nil {
+               return x.SchemaId
+       }
+       return ""
+}
+
+func (x *Schema) GetSummary() string {
+       if x != nil {
+               return x.Summary
+       }
+       return ""
+}
+
+func (x *Schema) GetSchema() string {
+       if x != nil {
+               return x.Schema
+       }
+       return ""
+}
+
+type MicroService struct {
+       state         protoimpl.MessageState
+       sizeCache     protoimpl.SizeCache
+       unknownFields protoimpl.UnknownFields
+
+       ServiceId    string             
`protobuf:"bytes,1,opt,name=serviceId,proto3" json:"serviceId,omitempty"`
+       AppId        string             
`protobuf:"bytes,2,opt,name=appId,proto3" json:"appId,omitempty"`
+       ServiceName  string             
`protobuf:"bytes,3,opt,name=serviceName,proto3" json:"serviceName,omitempty"`
+       Version      string             
`protobuf:"bytes,4,opt,name=version,proto3" json:"version,omitempty"`
+       Description  string             
`protobuf:"bytes,5,opt,name=description,proto3" json:"description,omitempty"`
+       Level        string             
`protobuf:"bytes,6,opt,name=level,proto3" json:"level,omitempty"`
+       Schemas      []string           
`protobuf:"bytes,7,rep,name=schemas,proto3" json:"schemas,omitempty"`
+       Paths        []*ServicePath     
`protobuf:"bytes,10,rep,name=paths,proto3" json:"paths,omitempty"`
+       Status       string             
`protobuf:"bytes,8,opt,name=status,proto3" json:"status,omitempty"`
+       Properties   map[string]string  
`protobuf:"bytes,9,rep,name=properties,proto3" json:"properties,omitempty" 
protobuf_key:"bytes,1,opt,name=key,proto3" 
protobuf_val:"bytes,2,opt,name=value,proto3"`
+       Timestamp    string             
`protobuf:"bytes,11,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
+       Providers    []*MicroServiceKey 
`protobuf:"bytes,12,rep,name=providers,proto3" json:"providers,omitempty"`
+       Alias        string             
`protobuf:"bytes,13,opt,name=alias,proto3" json:"alias,omitempty"`
+       LBStrategy   map[string]string  
`protobuf:"bytes,14,rep,name=LBStrategy,proto3" json:"LBStrategy,omitempty" 
protobuf_key:"bytes,1,opt,name=key,proto3" 
protobuf_val:"bytes,2,opt,name=value,proto3"`
+       ModTimestamp string             
`protobuf:"bytes,15,opt,name=modTimestamp,proto3" json:"modTimestamp,omitempty"`
+       Environment  string             
`protobuf:"bytes,16,opt,name=environment,proto3" json:"environment,omitempty"`
+       RegisterBy   string             
`protobuf:"bytes,17,opt,name=registerBy,proto3" json:"registerBy,omitempty"`
+       Framework    *FrameWorkProperty 
`protobuf:"bytes,18,opt,name=framework,proto3" json:"framework,omitempty"`
+}
+
+func (x *MicroService) Reset() {
+       *x = MicroService{}
+       if protoimpl.UnsafeEnabled {
+               mi := &file_servicecenter_proto_msgTypes[1]
+               ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+               ms.StoreMessageInfo(mi)
+       }
+}
+
+func (x *MicroService) String() string {
+       return protoimpl.X.MessageStringOf(x)
+}
+
+func (*MicroService) ProtoMessage() {}
+
+func (x *MicroService) ProtoReflect() protoreflect.Message {
+       mi := &file_servicecenter_proto_msgTypes[1]
+       if protoimpl.UnsafeEnabled && x != nil {
+               ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+               if ms.LoadMessageInfo() == nil {
+                       ms.StoreMessageInfo(mi)
+               }
+               return ms
+       }
+       return mi.MessageOf(x)
+}
+
+// Deprecated: Use MicroService.ProtoReflect.Descriptor instead.
+func (*MicroService) Descriptor() ([]byte, []int) {
+       return file_servicecenter_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *MicroService) GetServiceId() string {
+       if x != nil {
+               return x.ServiceId
+       }
+       return ""
+}
+
+func (x *MicroService) GetAppId() string {
+       if x != nil {
+               return x.AppId
+       }
+       return ""
+}
+
+func (x *MicroService) GetServiceName() string {
+       if x != nil {
+               return x.ServiceName
+       }
+       return ""
+}
+
+func (x *MicroService) GetVersion() string {
+       if x != nil {
+               return x.Version
+       }
+       return ""
+}
+
+func (x *MicroService) GetDescription() string {
+       if x != nil {
+               return x.Description
+       }
+       return ""
+}
+
+func (x *MicroService) GetLevel() string {
+       if x != nil {
+               return x.Level
+       }
+       return ""
+}
+
+func (x *MicroService) GetSchemas() []string {
+       if x != nil {
+               return x.Schemas
+       }
+       return nil
+}
+
+func (x *MicroService) GetPaths() []*ServicePath {
+       if x != nil {
+               return x.Paths
+       }
+       return nil
+}
+
+func (x *MicroService) GetStatus() string {
+       if x != nil {
+               return x.Status
+       }
+       return ""
+}
+
+func (x *MicroService) GetProperties() map[string]string {
+       if x != nil {
+               return x.Properties
+       }
+       return nil
+}
+
+func (x *MicroService) GetTimestamp() string {
+       if x != nil {
+               return x.Timestamp
+       }
+       return ""
+}
+
+func (x *MicroService) GetProviders() []*MicroServiceKey {
+       if x != nil {
+               return x.Providers
+       }
+       return nil
+}
+
+func (x *MicroService) GetAlias() string {
+       if x != nil {
+               return x.Alias
+       }
+       return ""
+}
+
+func (x *MicroService) GetLBStrategy() map[string]string {
+       if x != nil {
+               return x.LBStrategy
+       }
+       return nil
+}
+
+func (x *MicroService) GetModTimestamp() string {
+       if x != nil {
+               return x.ModTimestamp
+       }
+       return ""
+}
+
+func (x *MicroService) GetEnvironment() string {
+       if x != nil {
+               return x.Environment
+       }
+       return ""
+}
+
+func (x *MicroService) GetRegisterBy() string {
+       if x != nil {
+               return x.RegisterBy
+       }
+       return ""
+}
+
+func (x *MicroService) GetFramework() *FrameWorkProperty {
+       if x != nil {
+               return x.Framework
+       }
+       return nil
+}
+
+type MicroServiceInstance struct {
+       state         protoimpl.MessageState
+       sizeCache     protoimpl.SizeCache
+       unknownFields protoimpl.UnknownFields
+
+       InstanceId     string            
`protobuf:"bytes,1,opt,name=instanceId,proto3" json:"instanceId,omitempty"`
+       ServiceId      string            
`protobuf:"bytes,2,opt,name=serviceId,proto3" json:"serviceId,omitempty"`
+       Endpoints      []string          
`protobuf:"bytes,3,rep,name=endpoints,proto3" json:"endpoints,omitempty"`
+       HostName       string            
`protobuf:"bytes,4,opt,name=hostName,proto3" json:"hostName,omitempty"`
+       Status         string            
`protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"`
+       Properties     map[string]string 
`protobuf:"bytes,6,rep,name=properties,proto3" json:"properties,omitempty" 
protobuf_key:"bytes,1,opt,name=key,proto3" 
protobuf_val:"bytes,2,opt,name=value,proto3"`
+       HealthCheck    *HealthCheck      
`protobuf:"bytes,7,opt,name=healthCheck,proto3" json:"healthCheck,omitempty"`
+       Timestamp      string            
`protobuf:"bytes,8,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
+       DataCenterInfo *DataCenterInfo   
`protobuf:"bytes,9,opt,name=dataCenterInfo,proto3" 
json:"dataCenterInfo,omitempty"`
+       ModTimestamp   string            
`protobuf:"bytes,10,opt,name=modTimestamp,proto3" json:"modTimestamp,omitempty"`
+       Version        string            
`protobuf:"bytes,11,opt,name=version,proto3" json:"version,omitempty"`
+}
+
+func (x *MicroServiceInstance) Reset() {
+       *x = MicroServiceInstance{}
+       if protoimpl.UnsafeEnabled {
+               mi := &file_servicecenter_proto_msgTypes[2]
+               ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+               ms.StoreMessageInfo(mi)
+       }
+}
+
+func (x *MicroServiceInstance) String() string {
+       return protoimpl.X.MessageStringOf(x)
+}
+
+func (*MicroServiceInstance) ProtoMessage() {}
+
+func (x *MicroServiceInstance) ProtoReflect() protoreflect.Message {
+       mi := &file_servicecenter_proto_msgTypes[2]
+       if protoimpl.UnsafeEnabled && x != nil {
+               ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+               if ms.LoadMessageInfo() == nil {
+                       ms.StoreMessageInfo(mi)
+               }
+               return ms
+       }
+       return mi.MessageOf(x)
+}
+
+// Deprecated: Use MicroServiceInstance.ProtoReflect.Descriptor instead.
+func (*MicroServiceInstance) Descriptor() ([]byte, []int) {
+       return file_servicecenter_proto_rawDescGZIP(), []int{2}
+}
+
+func (x *MicroServiceInstance) GetInstanceId() string {
+       if x != nil {
+               return x.InstanceId
+       }
+       return ""
+}
+
+func (x *MicroServiceInstance) GetServiceId() string {
+       if x != nil {
+               return x.ServiceId
+       }
+       return ""
+}
+
+func (x *MicroServiceInstance) GetEndpoints() []string {
+       if x != nil {
+               return x.Endpoints
+       }
+       return nil
+}
+
+func (x *MicroServiceInstance) GetHostName() string {
+       if x != nil {
+               return x.HostName
+       }
+       return ""
+}
+
+func (x *MicroServiceInstance) GetStatus() string {
+       if x != nil {
+               return x.Status
+       }
+       return ""
+}
+
+func (x *MicroServiceInstance) GetProperties() map[string]string {
+       if x != nil {
+               return x.Properties
+       }
+       return nil
+}
+
+func (x *MicroServiceInstance) GetHealthCheck() *HealthCheck {
+       if x != nil {
+               return x.HealthCheck
+       }
+       return nil
+}
+
+func (x *MicroServiceInstance) GetTimestamp() string {
+       if x != nil {
+               return x.Timestamp
+       }
+       return ""
+}
+
+func (x *MicroServiceInstance) GetDataCenterInfo() *DataCenterInfo {
+       if x != nil {
+               return x.DataCenterInfo
+       }
+       return nil
+}
+
+func (x *MicroServiceInstance) GetModTimestamp() string {
+       if x != nil {
+               return x.ModTimestamp
+       }
+       return ""
+}
+
+func (x *MicroServiceInstance) GetVersion() string {
+       if x != nil {
+               return x.Version
+       }
+       return ""
+}
+
+type ServicePath struct {
+       state         protoimpl.MessageState
+       sizeCache     protoimpl.SizeCache
+       unknownFields protoimpl.UnknownFields
+
+       Path     string            `protobuf:"bytes,1,opt,name=path,proto3" 
json:"path,omitempty"`
+       Property map[string]string `protobuf:"bytes,2,rep,name=property,proto3" 
json:"property,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" 
protobuf_val:"bytes,2,opt,name=value,proto3"`
+}
+
+func (x *ServicePath) Reset() {
+       *x = ServicePath{}
+       if protoimpl.UnsafeEnabled {
+               mi := &file_servicecenter_proto_msgTypes[3]
+               ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+               ms.StoreMessageInfo(mi)
+       }
+}
+
+func (x *ServicePath) String() string {
+       return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ServicePath) ProtoMessage() {}
+
+func (x *ServicePath) ProtoReflect() protoreflect.Message {
+       mi := &file_servicecenter_proto_msgTypes[3]
+       if protoimpl.UnsafeEnabled && x != nil {
+               ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+               if ms.LoadMessageInfo() == nil {
+                       ms.StoreMessageInfo(mi)
+               }
+               return ms
+       }
+       return mi.MessageOf(x)
+}
+
+// Deprecated: Use ServicePath.ProtoReflect.Descriptor instead.
+func (*ServicePath) Descriptor() ([]byte, []int) {
+       return file_servicecenter_proto_rawDescGZIP(), []int{3}
+}
+
+func (x *ServicePath) GetPath() string {
+       if x != nil {
+               return x.Path
+       }
+       return ""
+}
+
+func (x *ServicePath) GetProperty() map[string]string {
+       if x != nil {
+               return x.Property
+       }
+       return nil
+}
+
+type MicroServiceKey struct {
+       state         protoimpl.MessageState
+       sizeCache     protoimpl.SizeCache
+       unknownFields protoimpl.UnknownFields
+
+       Tenant      string `protobuf:"bytes,1,opt,name=tenant,proto3" 
json:"tenant,omitempty"`
+       Environment string `protobuf:"bytes,2,opt,name=environment,proto3" 
json:"environment,omitempty"`
+       AppId       string `protobuf:"bytes,3,opt,name=appId,proto3" 
json:"appId,omitempty"`
+       ServiceName string `protobuf:"bytes,4,opt,name=serviceName,proto3" 
json:"serviceName,omitempty"`
+       Alias       string `protobuf:"bytes,5,opt,name=alias,proto3" 
json:"alias,omitempty"`
+       Version     string `protobuf:"bytes,6,opt,name=version,proto3" 
json:"version,omitempty"`
+}
+
+func (x *MicroServiceKey) Reset() {
+       *x = MicroServiceKey{}
+       if protoimpl.UnsafeEnabled {
+               mi := &file_servicecenter_proto_msgTypes[4]
+               ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+               ms.StoreMessageInfo(mi)
+       }
+}
+
+func (x *MicroServiceKey) String() string {
+       return protoimpl.X.MessageStringOf(x)
+}
+
+func (*MicroServiceKey) ProtoMessage() {}
+
+func (x *MicroServiceKey) ProtoReflect() protoreflect.Message {
+       mi := &file_servicecenter_proto_msgTypes[4]
+       if protoimpl.UnsafeEnabled && x != nil {
+               ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+               if ms.LoadMessageInfo() == nil {
+                       ms.StoreMessageInfo(mi)
+               }
+               return ms
+       }
+       return mi.MessageOf(x)
+}
+
+// Deprecated: Use MicroServiceKey.ProtoReflect.Descriptor instead.
+func (*MicroServiceKey) Descriptor() ([]byte, []int) {
+       return file_servicecenter_proto_rawDescGZIP(), []int{4}
+}
+
+func (x *MicroServiceKey) GetTenant() string {
+       if x != nil {
+               return x.Tenant
+       }
+       return ""
+}
+
+func (x *MicroServiceKey) GetEnvironment() string {
+       if x != nil {
+               return x.Environment
+       }
+       return ""
+}
+
+func (x *MicroServiceKey) GetAppId() string {
+       if x != nil {
+               return x.AppId
+       }
+       return ""
+}
+
+func (x *MicroServiceKey) GetServiceName() string {
+       if x != nil {
+               return x.ServiceName
+       }
+       return ""
+}
+
+func (x *MicroServiceKey) GetAlias() string {
+       if x != nil {
+               return x.Alias
+       }
+       return ""
+}
+
+func (x *MicroServiceKey) GetVersion() string {
+       if x != nil {
+               return x.Version
+       }
+       return ""
+}
+
+type FrameWorkProperty struct {
+       state         protoimpl.MessageState
+       sizeCache     protoimpl.SizeCache
+       unknownFields protoimpl.UnknownFields
+
+       Name    string `protobuf:"bytes,1,opt,name=name,proto3" 
json:"name,omitempty"`
+       Version string `protobuf:"bytes,2,opt,name=version,proto3" 
json:"version,omitempty"`
+}
+
+func (x *FrameWorkProperty) Reset() {
+       *x = FrameWorkProperty{}
+       if protoimpl.UnsafeEnabled {
+               mi := &file_servicecenter_proto_msgTypes[5]
+               ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+               ms.StoreMessageInfo(mi)
+       }
+}
+
+func (x *FrameWorkProperty) String() string {
+       return protoimpl.X.MessageStringOf(x)
+}
+
+func (*FrameWorkProperty) ProtoMessage() {}
+
+func (x *FrameWorkProperty) ProtoReflect() protoreflect.Message {
+       mi := &file_servicecenter_proto_msgTypes[5]
+       if protoimpl.UnsafeEnabled && x != nil {
+               ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+               if ms.LoadMessageInfo() == nil {
+                       ms.StoreMessageInfo(mi)
+               }
+               return ms
+       }
+       return mi.MessageOf(x)
+}
+
+// Deprecated: Use FrameWorkProperty.ProtoReflect.Descriptor instead.
+func (*FrameWorkProperty) Descriptor() ([]byte, []int) {
+       return file_servicecenter_proto_rawDescGZIP(), []int{5}
+}
+
+func (x *FrameWorkProperty) GetName() string {
+       if x != nil {
+               return x.Name
+       }
+       return ""
+}
+
+func (x *FrameWorkProperty) GetVersion() string {
+       if x != nil {
+               return x.Version
+       }
+       return ""
+}
+
+type HealthCheck struct {
+       state         protoimpl.MessageState
+       sizeCache     protoimpl.SizeCache
+       unknownFields protoimpl.UnknownFields
+
+       Mode     string `protobuf:"bytes,1,opt,name=mode,proto3" 
json:"mode,omitempty"`
+       Port     int32  `protobuf:"varint,2,opt,name=port,proto3" 
json:"port,omitempty"`
+       Interval int32  `protobuf:"varint,3,opt,name=interval,proto3" 
json:"interval,omitempty"`
+       Times    int32  `protobuf:"varint,4,opt,name=times,proto3" 
json:"times,omitempty"`
+       Url      string `protobuf:"bytes,5,opt,name=url,proto3" 
json:"url,omitempty"`
+}
+
+func (x *HealthCheck) Reset() {
+       *x = HealthCheck{}
+       if protoimpl.UnsafeEnabled {
+               mi := &file_servicecenter_proto_msgTypes[6]
+               ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+               ms.StoreMessageInfo(mi)
+       }
+}
+
+func (x *HealthCheck) String() string {
+       return protoimpl.X.MessageStringOf(x)
+}
+
+func (*HealthCheck) ProtoMessage() {}
+
+func (x *HealthCheck) ProtoReflect() protoreflect.Message {
+       mi := &file_servicecenter_proto_msgTypes[6]
+       if protoimpl.UnsafeEnabled && x != nil {
+               ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+               if ms.LoadMessageInfo() == nil {
+                       ms.StoreMessageInfo(mi)
+               }
+               return ms
+       }
+       return mi.MessageOf(x)
+}
+
+// Deprecated: Use HealthCheck.ProtoReflect.Descriptor instead.
+func (*HealthCheck) Descriptor() ([]byte, []int) {
+       return file_servicecenter_proto_rawDescGZIP(), []int{6}
+}
+
+func (x *HealthCheck) GetMode() string {
+       if x != nil {
+               return x.Mode
+       }
+       return ""
+}
+
+func (x *HealthCheck) GetPort() int32 {
+       if x != nil {
+               return x.Port
+       }
+       return 0
+}
+
+func (x *HealthCheck) GetInterval() int32 {
+       if x != nil {
+               return x.Interval
+       }
+       return 0
+}
+
+func (x *HealthCheck) GetTimes() int32 {
+       if x != nil {
+               return x.Times
+       }
+       return 0
+}
+
+func (x *HealthCheck) GetUrl() string {
+       if x != nil {
+               return x.Url
+       }
+       return ""
+}
+
+type DataCenterInfo struct {
+       state         protoimpl.MessageState
+       sizeCache     protoimpl.SizeCache
+       unknownFields protoimpl.UnknownFields
+
+       Name          string `protobuf:"bytes,1,opt,name=name,proto3" 
json:"name,omitempty"`
+       Region        string `protobuf:"bytes,2,opt,name=region,proto3" 
json:"region,omitempty"`
+       AvailableZone string `protobuf:"bytes,3,opt,name=availableZone,proto3" 
json:"availableZone,omitempty"`
+}
+
+func (x *DataCenterInfo) Reset() {
+       *x = DataCenterInfo{}
+       if protoimpl.UnsafeEnabled {
+               mi := &file_servicecenter_proto_msgTypes[7]
+               ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+               ms.StoreMessageInfo(mi)
+       }
+}
+
+func (x *DataCenterInfo) String() string {
+       return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DataCenterInfo) ProtoMessage() {}
+
+func (x *DataCenterInfo) ProtoReflect() protoreflect.Message {
+       mi := &file_servicecenter_proto_msgTypes[7]
+       if protoimpl.UnsafeEnabled && x != nil {
+               ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+               if ms.LoadMessageInfo() == nil {
+                       ms.StoreMessageInfo(mi)
+               }
+               return ms
+       }
+       return mi.MessageOf(x)
+}
+
+// Deprecated: Use DataCenterInfo.ProtoReflect.Descriptor instead.
+func (*DataCenterInfo) Descriptor() ([]byte, []int) {
+       return file_servicecenter_proto_rawDescGZIP(), []int{7}
+}
+
+func (x *DataCenterInfo) GetName() string {
+       if x != nil {
+               return x.Name
+       }
+       return ""
+}
+
+func (x *DataCenterInfo) GetRegion() string {
+       if x != nil {
+               return x.Region
+       }
+       return ""
+}
+
+func (x *DataCenterInfo) GetAvailableZone() string {
+       if x != nil {
+               return x.AvailableZone
+       }
+       return ""
+}
+
+var File_servicecenter_proto protoreflect.FileDescriptor
+
+var file_servicecenter_proto_rawDesc = []byte{
+       0x0a, 0x13, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x63, 0x65, 0x6e, 
0x74, 0x65, 0x72, 0x2e,
+       0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x02, 0x73, 0x63, 0x22, 0x56, 0x0a, 
0x06, 0x53, 0x63, 0x68,
+       0x65, 0x6d, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x63, 0x68, 0x65, 0x6d, 
0x61, 0x49, 0x64, 0x18,
+       0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x63, 0x68, 0x65, 0x6d, 
0x61, 0x49, 0x64, 0x12,
+       0x18, 0x0a, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x02, 
0x20, 0x01, 0x28, 0x09,
+       0x52, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x16, 0x0a, 
0x06, 0x73, 0x63, 0x68,
+       0x65, 0x6d, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 
0x63, 0x68, 0x65, 0x6d,
+       0x61, 0x22, 0x93, 0x06, 0x0a, 0x0c, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x53, 
0x65, 0x72, 0x76, 0x69,
+       0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 
0x65, 0x49, 0x64, 0x18,
+       0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x72, 0x76, 0x69, 
0x63, 0x65, 0x49, 0x64,
+       0x12, 0x14, 0x0a, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x18, 0x02, 0x20, 
0x01, 0x28, 0x09, 0x52,
+       0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x65, 
0x72, 0x76, 0x69, 0x63,
+       0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 
0x0b, 0x73, 0x65, 0x72,
+       0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 
0x76, 0x65, 0x72, 0x73,
+       0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 
0x65, 0x72, 0x73, 0x69,
+       0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 
0x70, 0x74, 0x69, 0x6f,
+       0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 
0x63, 0x72, 0x69, 0x70,
+       0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 
0x6c, 0x18, 0x06, 0x20,
+       0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x18, 
0x0a, 0x07, 0x73, 0x63,
+       0x68, 0x65, 0x6d, 0x61, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 
0x07, 0x73, 0x63, 0x68,
+       0x65, 0x6d, 0x61, 0x73, 0x12, 0x25, 0x0a, 0x05, 0x70, 0x61, 0x74, 0x68, 
0x73, 0x18, 0x0a, 0x20,
+       0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x73, 0x63, 0x2e, 0x53, 0x65, 0x72, 
0x76, 0x69, 0x63, 0x65,
+       0x50, 0x61, 0x74, 0x68, 0x52, 0x05, 0x70, 0x61, 0x74, 0x68, 0x73, 0x12, 
0x16, 0x0a, 0x06, 0x73,
+       0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 
0x06, 0x73, 0x74, 0x61,
+       0x74, 0x75, 0x73, 0x12, 0x40, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 
0x72, 0x74, 0x69, 0x65,
+       0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x63, 
0x2e, 0x4d, 0x69, 0x63,
+       0x72, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x50, 0x72, 
0x6f, 0x70, 0x65, 0x72,
+       0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 
0x72, 0x6f, 0x70, 0x65,
+       0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 
0x65, 0x73, 0x74, 0x61,
+       0x6d, 0x70, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x69, 
0x6d, 0x65, 0x73, 0x74,
+       0x61, 0x6d, 0x70, 0x12, 0x31, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x76, 0x69, 
0x64, 0x65, 0x72, 0x73,
+       0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x63, 0x2e, 
0x4d, 0x69, 0x63, 0x72,
+       0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x52, 
0x09, 0x70, 0x72, 0x6f,
+       0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x6c, 
0x69, 0x61, 0x73, 0x18,
+       0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 
0x12, 0x40, 0x0a, 0x0a,
+       0x4c, 0x42, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x18, 0x0e, 
0x20, 0x03, 0x28, 0x0b,
+       0x32, 0x20, 0x2e, 0x73, 0x63, 0x2e, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x53, 
0x65, 0x72, 0x76, 0x69,
+       0x63, 0x65, 0x2e, 0x4c, 0x42, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 
0x79, 0x45, 0x6e, 0x74,
+       0x72, 0x79, 0x52, 0x0a, 0x4c, 0x42, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 
0x67, 0x79, 0x12, 0x22,
+       0x0a, 0x0c, 0x6d, 0x6f, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 
0x6d, 0x70, 0x18, 0x0f,
+       0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6d, 0x6f, 0x64, 0x54, 0x69, 0x6d, 
0x65, 0x73, 0x74, 0x61,
+       0x6d, 0x70, 0x12, 0x20, 0x0a, 0x0b, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 
0x6e, 0x6d, 0x65, 0x6e,
+       0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x6e, 0x76, 
0x69, 0x72, 0x6f, 0x6e,
+       0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x65, 0x67, 0x69, 
0x73, 0x74, 0x65, 0x72,
+       0x42, 0x79, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 
0x67, 0x69, 0x73, 0x74,
+       0x65, 0x72, 0x42, 0x79, 0x12, 0x33, 0x0a, 0x09, 0x66, 0x72, 0x61, 0x6d, 
0x65, 0x77, 0x6f, 0x72,
+       0x6b, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x73, 0x63, 
0x2e, 0x46, 0x72, 0x61,
+       0x6d, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 
0x74, 0x79, 0x52, 0x09,
+       0x66, 0x72, 0x61, 0x6d, 0x65, 0x77, 0x6f, 0x72, 0x6b, 0x1a, 0x3d, 0x0a, 
0x0f, 0x50, 0x72, 0x6f,
+       0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 
0x12, 0x10, 0x0a, 0x03,
+       0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 
0x65, 0x79, 0x12, 0x14,
+       0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 
0x09, 0x52, 0x05, 0x76,
+       0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3d, 0x0a, 0x0f, 
0x4c, 0x42, 0x53, 0x74,
+       0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 
0x10, 0x0a, 0x03, 0x6b,
+       0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 
0x79, 0x12, 0x14, 0x0a,
+       0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 
0x52, 0x05, 0x76, 0x61,
+       0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xfa, 0x03, 0x0a, 0x14, 
0x4d, 0x69, 0x63, 0x72,
+       0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x73, 0x74, 
0x61, 0x6e, 0x63, 0x65,
+       0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 
0x49, 0x64, 0x18, 0x01,
+       0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 
0x63, 0x65, 0x49, 0x64,
+       0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 
0x64, 0x18, 0x02, 0x20,
+       0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 
0x49, 0x64, 0x12, 0x1c,
+       0x0a, 0x09, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 
0x03, 0x20, 0x03, 0x28,
+       0x09, 0x52, 0x09, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 
0x12, 0x1a, 0x0a, 0x08,
+       0x68, 0x6f, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 
0x28, 0x09, 0x52, 0x08,
+       0x68, 0x6f, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 
0x73, 0x74, 0x61, 0x74,
+       0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 
0x61, 0x74, 0x75, 0x73,
+       0x12, 0x48, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 
0x65, 0x73, 0x18, 0x06,
+       0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x73, 0x63, 0x2e, 0x4d, 0x69, 
0x63, 0x72, 0x6f, 0x53,
+       0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 
0x63, 0x65, 0x2e, 0x50,
+       0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 
0x72, 0x79, 0x52, 0x0a,
+       0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x31, 
0x0a, 0x0b, 0x68, 0x65,
+       0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x18, 0x07, 0x20, 
0x01, 0x28, 0x0b, 0x32,
+       0x0f, 0x2e, 0x73, 0x63, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 
0x68, 0x65, 0x63, 0x6b,
+       0x52, 0x0b, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 
0x6b, 0x12, 0x1c, 0x0a,
+       0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x08, 
0x20, 0x01, 0x28, 0x09,
+       0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 
0x3a, 0x0a, 0x0e, 0x64,
+       0x61, 0x74, 0x61, 0x43, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x49, 0x6e, 0x66, 
0x6f, 0x18, 0x09, 0x20,
+       0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x63, 0x2e, 0x44, 0x61, 0x74, 
0x61, 0x43, 0x65, 0x6e,
+       0x74, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0e, 0x64, 0x61, 0x74, 
0x61, 0x43, 0x65, 0x6e,
+       0x74, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x22, 0x0a, 0x0c, 0x6d, 
0x6f, 0x64, 0x54, 0x69,
+       0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x0a, 0x20, 0x01, 0x28, 
0x09, 0x52, 0x0c, 0x6d,
+       0x6f, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 
0x18, 0x0a, 0x07, 0x76,
+       0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 
0x52, 0x07, 0x76, 0x65,
+       0x72, 0x73, 0x69, 0x6f, 0x6e, 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 
0x70, 0x65, 0x72, 0x74,
+       0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 
0x6b, 0x65, 0x79, 0x18,
+       0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 
0x0a, 0x05, 0x76, 0x61,
+       0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 
0x61, 0x6c, 0x75, 0x65,
+       0x3a, 0x02, 0x38, 0x01, 0x22, 0x99, 0x01, 0x0a, 0x0b, 0x53, 0x65, 0x72, 
0x76, 0x69, 0x63, 0x65,
+       0x50, 0x61, 0x74, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 
0x18, 0x01, 0x20, 0x01,
+       0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x39, 0x0a, 0x08, 
0x70, 0x72, 0x6f, 0x70,
+       0x65, 0x72, 0x74, 0x79, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 
0x2e, 0x73, 0x63, 0x2e,
+       0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x61, 0x74, 0x68, 0x2e, 
0x50, 0x72, 0x6f, 0x70,
+       0x65, 0x72, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x70, 
0x72, 0x6f, 0x70, 0x65,
+       0x72, 0x74, 0x79, 0x1a, 0x3b, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x70, 0x65, 
0x72, 0x74, 0x79, 0x45,
+       0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 
0x01, 0x20, 0x01, 0x28,
+       0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 
0x6c, 0x75, 0x65, 0x18,
+       0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 
0x3a, 0x02, 0x38, 0x01,
+       0x22, 0xb3, 0x01, 0x0a, 0x0f, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x53, 0x65, 
0x72, 0x76, 0x69, 0x63,
+       0x65, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x65, 0x6e, 0x61, 
0x6e, 0x74, 0x18, 0x01,
+       0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 
0x12, 0x20, 0x0a, 0x0b,
+       0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, 
0x02, 0x20, 0x01, 0x28,
+       0x09, 0x52, 0x0b, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 
0x6e, 0x74, 0x12, 0x14,
+       0x0a, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 
0x09, 0x52, 0x05, 0x61,
+       0x70, 0x70, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 
0x69, 0x63, 0x65, 0x4e,
+       0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 
0x65, 0x72, 0x76, 0x69,
+       0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x6c, 
0x69, 0x61, 0x73, 0x18,
+       0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 
0x12, 0x18, 0x0a, 0x07,
+       0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 
0x09, 0x52, 0x07, 0x76,
+       0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x41, 0x0a, 0x11, 0x46, 0x72, 
0x61, 0x6d, 0x65, 0x57,
+       0x6f, 0x72, 0x6b, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x12, 
0x12, 0x0a, 0x04, 0x6e,
+       0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 
0x61, 0x6d, 0x65, 0x12,
+       0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 
0x20, 0x01, 0x28, 0x09,
+       0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x79, 0x0a, 
0x0b, 0x48, 0x65, 0x61,
+       0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x12, 0x0a, 0x04, 
0x6d, 0x6f, 0x64, 0x65,
+       0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 
0x12, 0x12, 0x0a, 0x04,
+       0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 
0x70, 0x6f, 0x72, 0x74,
+       0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 
0x18, 0x03, 0x20, 0x01,
+       0x28, 0x05, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 
0x12, 0x14, 0x0a, 0x05,
+       0x74, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 
0x05, 0x74, 0x69, 0x6d,
+       0x65, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x05, 0x20, 
0x01, 0x28, 0x09, 0x52,
+       0x03, 0x75, 0x72, 0x6c, 0x22, 0x62, 0x0a, 0x0e, 0x44, 0x61, 0x74, 0x61, 
0x43, 0x65, 0x6e, 0x74,
+       0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 
0x6d, 0x65, 0x18, 0x01,
+       0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 
0x0a, 0x06, 0x72, 0x65,
+       0x67, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 
0x72, 0x65, 0x67, 0x69,
+       0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 
0x62, 0x6c, 0x65, 0x5a,
+       0x6f, 0x6e, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 
0x76, 0x61, 0x69, 0x6c,
+       0x61, 0x62, 0x6c, 0x65, 0x5a, 0x6f, 0x6e, 0x65, 0x42, 0x06, 0x5a, 0x04, 
0x2e, 0x3b, 0x73, 0x63,
+       0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+       file_servicecenter_proto_rawDescOnce sync.Once
+       file_servicecenter_proto_rawDescData = file_servicecenter_proto_rawDesc
+)
+
+func file_servicecenter_proto_rawDescGZIP() []byte {
+       file_servicecenter_proto_rawDescOnce.Do(func() {
+               file_servicecenter_proto_rawDescData = 
protoimpl.X.CompressGZIP(file_servicecenter_proto_rawDescData)
+       })
+       return file_servicecenter_proto_rawDescData
+}
+
+var file_servicecenter_proto_msgTypes = make([]protoimpl.MessageInfo, 12)
+var file_servicecenter_proto_goTypes = []interface{}{
+       (*Schema)(nil),               // 0: sc.Schema
+       (*MicroService)(nil),         // 1: sc.MicroService
+       (*MicroServiceInstance)(nil), // 2: sc.MicroServiceInstance
+       (*ServicePath)(nil),          // 3: sc.ServicePath
+       (*MicroServiceKey)(nil),      // 4: sc.MicroServiceKey
+       (*FrameWorkProperty)(nil),    // 5: sc.FrameWorkProperty
+       (*HealthCheck)(nil),          // 6: sc.HealthCheck
+       (*DataCenterInfo)(nil),       // 7: sc.DataCenterInfo
+       nil,                          // 8: sc.MicroService.PropertiesEntry
+       nil,                          // 9: sc.MicroService.LBStrategyEntry
+       nil,                          // 10: 
sc.MicroServiceInstance.PropertiesEntry
+       nil,                          // 11: sc.ServicePath.PropertyEntry
+}
+var file_servicecenter_proto_depIdxs = []int32{
+       3,  // 0: sc.MicroService.paths:type_name -> sc.ServicePath
+       8,  // 1: sc.MicroService.properties:type_name -> 
sc.MicroService.PropertiesEntry
+       4,  // 2: sc.MicroService.providers:type_name -> sc.MicroServiceKey
+       9,  // 3: sc.MicroService.LBStrategy:type_name -> 
sc.MicroService.LBStrategyEntry
+       5,  // 4: sc.MicroService.framework:type_name -> sc.FrameWorkProperty
+       10, // 5: sc.MicroServiceInstance.properties:type_name -> 
sc.MicroServiceInstance.PropertiesEntry
+       6,  // 6: sc.MicroServiceInstance.healthCheck:type_name -> 
sc.HealthCheck
+       7,  // 7: sc.MicroServiceInstance.dataCenterInfo:type_name -> 
sc.DataCenterInfo
+       11, // 8: sc.ServicePath.property:type_name -> 
sc.ServicePath.PropertyEntry
+       9,  // [9:9] is the sub-list for method output_type
+       9,  // [9:9] is the sub-list for method input_type
+       9,  // [9:9] is the sub-list for extension type_name
+       9,  // [9:9] is the sub-list for extension extendee
+       0,  // [0:9] is the sub-list for field type_name
+}
+
+func init() { file_servicecenter_proto_init() }
+func file_servicecenter_proto_init() {
+       if File_servicecenter_proto != nil {
+               return
+       }
+       if !protoimpl.UnsafeEnabled {
+               file_servicecenter_proto_msgTypes[0].Exporter = func(v 
interface{}, i int) interface{} {
+                       switch v := v.(*Schema); i {
+                       case 0:
+                               return &v.state
+                       case 1:
+                               return &v.sizeCache
+                       case 2:
+                               return &v.unknownFields
+                       default:
+                               return nil
+                       }
+               }
+               file_servicecenter_proto_msgTypes[1].Exporter = func(v 
interface{}, i int) interface{} {
+                       switch v := v.(*MicroService); i {
+                       case 0:
+                               return &v.state
+                       case 1:
+                               return &v.sizeCache
+                       case 2:
+                               return &v.unknownFields
+                       default:
+                               return nil
+                       }
+               }
+               file_servicecenter_proto_msgTypes[2].Exporter = func(v 
interface{}, i int) interface{} {
+                       switch v := v.(*MicroServiceInstance); i {
+                       case 0:
+                               return &v.state
+                       case 1:
+                               return &v.sizeCache
+                       case 2:
+                               return &v.unknownFields
+                       default:
+                               return nil
+                       }
+               }
+               file_servicecenter_proto_msgTypes[3].Exporter = func(v 
interface{}, i int) interface{} {
+                       switch v := v.(*ServicePath); i {
+                       case 0:
+                               return &v.state
+                       case 1:
+                               return &v.sizeCache
+                       case 2:
+                               return &v.unknownFields
+                       default:
+                               return nil
+                       }
+               }
+               file_servicecenter_proto_msgTypes[4].Exporter = func(v 
interface{}, i int) interface{} {
+                       switch v := v.(*MicroServiceKey); i {
+                       case 0:
+                               return &v.state
+                       case 1:
+                               return &v.sizeCache
+                       case 2:
+                               return &v.unknownFields
+                       default:
+                               return nil
+                       }
+               }
+               file_servicecenter_proto_msgTypes[5].Exporter = func(v 
interface{}, i int) interface{} {
+                       switch v := v.(*FrameWorkProperty); i {
+                       case 0:
+                               return &v.state
+                       case 1:
+                               return &v.sizeCache
+                       case 2:
+                               return &v.unknownFields
+                       default:
+                               return nil
+                       }
+               }
+               file_servicecenter_proto_msgTypes[6].Exporter = func(v 
interface{}, i int) interface{} {
+                       switch v := v.(*HealthCheck); i {
+                       case 0:
+                               return &v.state
+                       case 1:
+                               return &v.sizeCache
+                       case 2:
+                               return &v.unknownFields
+                       default:
+                               return nil
+                       }
+               }
+               file_servicecenter_proto_msgTypes[7].Exporter = func(v 
interface{}, i int) interface{} {
+                       switch v := v.(*DataCenterInfo); i {
+                       case 0:
+                               return &v.state
+                       case 1:
+                               return &v.sizeCache
+                       case 2:
+                               return &v.unknownFields
+                       default:
+                               return nil
+                       }
+               }
+       }
+       type x struct{}
+       out := protoimpl.TypeBuilder{
+               File: protoimpl.DescBuilder{
+                       GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+                       RawDescriptor: file_servicecenter_proto_rawDesc,
+                       NumEnums:      0,
+                       NumMessages:   12,
+                       NumExtensions: 0,
+                       NumServices:   0,
+               },
+               GoTypes:           file_servicecenter_proto_goTypes,
+               DependencyIndexes: file_servicecenter_proto_depIdxs,
+               MessageInfos:      file_servicecenter_proto_msgTypes,
+       }.Build()
+       File_servicecenter_proto = out.File
+       file_servicecenter_proto_rawDesc = nil
+       file_servicecenter_proto_goTypes = nil
+       file_servicecenter_proto_depIdxs = nil
+}
diff --git a/syncer/proto/sc/servicecenter.proto 
b/syncer/proto/sc/servicecenter.proto
new file mode 100644
index 0000000..1f42673
--- /dev/null
+++ b/syncer/proto/sc/servicecenter.proto
@@ -0,0 +1,77 @@
+syntax = "proto3";
+package sc;
+option go_package = ".;sc";
+
+message Schema {
+  string schemaId = 1;
+  string summary = 2;
+  string schema = 3;
+}
+
+message MicroService {
+  string serviceId = 1;
+  string appId = 2;
+  string serviceName = 3;
+  string version = 4;
+  string description = 5;
+  string level = 6;
+  repeated string schemas = 7;
+  repeated ServicePath paths = 10;
+  string status = 8;
+  map<string, string> properties = 9;
+  string timestamp = 11;
+  repeated MicroServiceKey providers = 12;
+  string alias = 13;
+  map<string, string> LBStrategy = 14;
+  string modTimestamp = 15;
+  string environment = 16;
+  string registerBy = 17;
+  FrameWorkProperty framework = 18;
+}
+
+message MicroServiceInstance {
+  string instanceId = 1;
+  string serviceId = 2;
+  repeated string endpoints = 3;
+  string hostName = 4;
+  string status = 5;
+  map<string, string> properties = 6;
+  HealthCheck healthCheck = 7;
+  string timestamp = 8;
+  DataCenterInfo dataCenterInfo = 9;
+  string modTimestamp = 10;
+  string version = 11;
+}
+
+message ServicePath {
+  string path = 1;
+  map<string, string> property = 2;
+}
+
+message MicroServiceKey {
+    string tenant = 1;
+    string environment = 2;
+    string appId = 3;
+    string serviceName = 4;
+    string alias = 5;
+    string version = 6;
+}
+
+message FrameWorkProperty {
+  string name = 1;
+  string version = 2;
+}
+
+message HealthCheck {
+  string mode = 1;
+  int32 port = 2;
+  int32 interval = 3;
+  int32 times = 4;
+  string url = 5;
+}
+
+message DataCenterInfo {
+  string name = 1;
+  string region = 2;
+  string availableZone = 3;
+}
\ No newline at end of file
diff --git a/syncer/proto/syncer.pb.go b/syncer/proto/syncer.pb.go
index a0919c5..a4f6d8e 100644
--- a/syncer/proto/syncer.pb.go
+++ b/syncer/proto/syncer.pb.go
@@ -1,42 +1,33 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+//     protoc-gen-go v1.25.0
+//     protoc        v3.11.0
 // source: syncer.proto
 
-/*
-Package proto is a generated protocol buffer package.
-
-It is generated from these files:
-       syncer.proto
-
-It has these top-level messages:
-       PullRequest
-       SyncData
-       SyncService
-       SyncInstance
-       Expansion
-       HealthCheck
-       MappingEntry
-*/
 package proto
 
 import (
        context "context"
-       fmt "fmt"
-       math "math"
-
        proto "github.com/golang/protobuf/proto"
        grpc "google.golang.org/grpc"
+       codes "google.golang.org/grpc/codes"
+       status "google.golang.org/grpc/status"
+       protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+       protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+       reflect "reflect"
+       sync "sync"
 )
 
-// Reference imports to suppress errors if they are not otherwise used.
-var _ = proto.Marshal
-var _ = fmt.Errorf
-var _ = math.Inf
+const (
+       // Verify that this generated code is sufficiently up-to-date.
+       _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+       // Verify that runtime/protoimpl is sufficiently up-to-date.
+       _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
 
-// This is a compile-time assertion to ensure that this generated file
-// is compatible with the proto package it is being compiled against.
-// A compilation error at this line likely means your copy of the
-// proto package needs to be updated.
-const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+// This is a compile-time assertion that a sufficiently up-to-date version
+// of the legacy proto package is being used.
+const _ = proto.ProtoPackageIsVersion4
 
 type SyncService_Status int32
 
@@ -46,24 +37,45 @@ const (
        SyncService_DOWN    SyncService_Status = 2
 )
 
-var SyncService_Status_name = map[int32]string{
-       0: "UNKNOWN",
-       1: "UP",
-       2: "DOWN",
-}
+// Enum value maps for SyncService_Status.
+var (
+       SyncService_Status_name = map[int32]string{
+               0: "UNKNOWN",
+               1: "UP",
+               2: "DOWN",
+       }
+       SyncService_Status_value = map[string]int32{
+               "UNKNOWN": 0,
+               "UP":      1,
+               "DOWN":    2,
+       }
+)
 
-var SyncService_Status_value = map[string]int32{
-       "UNKNOWN": 0,
-       "UP":      1,
-       "DOWN":    2,
+func (x SyncService_Status) Enum() *SyncService_Status {
+       p := new(SyncService_Status)
+       *p = x
+       return p
 }
 
 func (x SyncService_Status) String() string {
-       return proto.EnumName(SyncService_Status_name, int32(x))
+       return protoimpl.X.EnumStringOf(x.Descriptor(), 
protoreflect.EnumNumber(x))
 }
 
+func (SyncService_Status) Descriptor() protoreflect.EnumDescriptor {
+       return file_syncer_proto_enumTypes[0].Descriptor()
+}
+
+func (SyncService_Status) Type() protoreflect.EnumType {
+       return &file_syncer_proto_enumTypes[0]
+}
+
+func (x SyncService_Status) Number() protoreflect.EnumNumber {
+       return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use SyncService_Status.Descriptor instead.
 func (SyncService_Status) EnumDescriptor() ([]byte, []int) {
-       return fileDescriptor_9577b640f2aab197, []int{5, 0}
+       return file_syncer_proto_rawDescGZIP(), []int{5, 0}
 }
 
 type SyncInstance_Status int32
@@ -76,28 +88,49 @@ const (
        SyncInstance_OUTOFSERVICE SyncInstance_Status = 4
 )
 
-var SyncInstance_Status_name = map[int32]string{
-       0: "UNKNOWN",
-       1: "UP",
-       2: "DOWN",
-       3: "STARTING",
-       4: "OUTOFSERVICE",
-}
+// Enum value maps for SyncInstance_Status.
+var (
+       SyncInstance_Status_name = map[int32]string{
+               0: "UNKNOWN",
+               1: "UP",
+               2: "DOWN",
+               3: "STARTING",
+               4: "OUTOFSERVICE",
+       }
+       SyncInstance_Status_value = map[string]int32{
+               "UNKNOWN":      0,
+               "UP":           1,
+               "DOWN":         2,
+               "STARTING":     3,
+               "OUTOFSERVICE": 4,
+       }
+)
 
-var SyncInstance_Status_value = map[string]int32{
-       "UNKNOWN":      0,
-       "UP":           1,
-       "DOWN":         2,
-       "STARTING":     3,
-       "OUTOFSERVICE": 4,
+func (x SyncInstance_Status) Enum() *SyncInstance_Status {
+       p := new(SyncInstance_Status)
+       *p = x
+       return p
 }
 
 func (x SyncInstance_Status) String() string {
-       return proto.EnumName(SyncInstance_Status_name, int32(x))
+       return protoimpl.X.EnumStringOf(x.Descriptor(), 
protoreflect.EnumNumber(x))
 }
 
+func (SyncInstance_Status) Descriptor() protoreflect.EnumDescriptor {
+       return file_syncer_proto_enumTypes[1].Descriptor()
+}
+
+func (SyncInstance_Status) Type() protoreflect.EnumType {
+       return &file_syncer_proto_enumTypes[1]
+}
+
+func (x SyncInstance_Status) Number() protoreflect.EnumNumber {
+       return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use SyncInstance_Status.Descriptor instead.
 func (SyncInstance_Status) EnumDescriptor() ([]byte, []int) {
-       return fileDescriptor_9577b640f2aab197, []int{6, 0}
+       return file_syncer_proto_rawDescGZIP(), []int{6, 0}
 }
 
 type HealthCheck_Modes int32
@@ -108,157 +141,327 @@ const (
        HealthCheck_PULL    HealthCheck_Modes = 2
 )
 
-var HealthCheck_Modes_name = map[int32]string{
-       0: "UNKNOWN",
-       1: "PUSH",
-       2: "PULL",
-}
+// Enum value maps for HealthCheck_Modes.
+var (
+       HealthCheck_Modes_name = map[int32]string{
+               0: "UNKNOWN",
+               1: "PUSH",
+               2: "PULL",
+       }
+       HealthCheck_Modes_value = map[string]int32{
+               "UNKNOWN": 0,
+               "PUSH":    1,
+               "PULL":    2,
+       }
+)
 
-var HealthCheck_Modes_value = map[string]int32{
-       "UNKNOWN": 0,
-       "PUSH":    1,
-       "PULL":    2,
+func (x HealthCheck_Modes) Enum() *HealthCheck_Modes {
+       p := new(HealthCheck_Modes)
+       *p = x
+       return p
 }
 
 func (x HealthCheck_Modes) String() string {
-       return proto.EnumName(HealthCheck_Modes_name, int32(x))
+       return protoimpl.X.EnumStringOf(x.Descriptor(), 
protoreflect.EnumNumber(x))
+}
+
+func (HealthCheck_Modes) Descriptor() protoreflect.EnumDescriptor {
+       return file_syncer_proto_enumTypes[2].Descriptor()
+}
+
+func (HealthCheck_Modes) Type() protoreflect.EnumType {
+       return &file_syncer_proto_enumTypes[2]
 }
 
+func (x HealthCheck_Modes) Number() protoreflect.EnumNumber {
+       return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use HealthCheck_Modes.Descriptor instead.
 func (HealthCheck_Modes) EnumDescriptor() ([]byte, []int) {
-       return fileDescriptor_9577b640f2aab197, []int{8, 0}
+       return file_syncer_proto_rawDescGZIP(), []int{8, 0}
 }
 
 type PullRequest struct {
+       state         protoimpl.MessageState
+       sizeCache     protoimpl.SizeCache
+       unknownFields protoimpl.UnknownFields
+
        ServiceName string `protobuf:"bytes,1,opt,name=serviceName,proto3" 
json:"serviceName,omitempty"`
        Options     string `protobuf:"bytes,2,opt,name=options,proto3" 
json:"options,omitempty"`
        Time        string `protobuf:"bytes,3,opt,name=time,proto3" 
json:"time,omitempty"`
        Addr        string `protobuf:"bytes,4,opt,name=addr,proto3" 
json:"addr,omitempty"`
 }
 
-func (m *PullRequest) Reset()         { *m = PullRequest{} }
-func (m *PullRequest) String() string { return proto.CompactTextString(m) }
-func (*PullRequest) ProtoMessage()    {}
+func (x *PullRequest) Reset() {
+       *x = PullRequest{}
+       if protoimpl.UnsafeEnabled {
+               mi := &file_syncer_proto_msgTypes[0]
+               ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+               ms.StoreMessageInfo(mi)
+       }
+}
+
+func (x *PullRequest) String() string {
+       return protoimpl.X.MessageStringOf(x)
+}
+
+func (*PullRequest) ProtoMessage() {}
+
+func (x *PullRequest) ProtoReflect() protoreflect.Message {
+       mi := &file_syncer_proto_msgTypes[0]
+       if protoimpl.UnsafeEnabled && x != nil {
+               ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+               if ms.LoadMessageInfo() == nil {
+                       ms.StoreMessageInfo(mi)
+               }
+               return ms
+       }
+       return mi.MessageOf(x)
+}
+
+// Deprecated: Use PullRequest.ProtoReflect.Descriptor instead.
 func (*PullRequest) Descriptor() ([]byte, []int) {
-       return fileDescriptor_9577b640f2aab197, []int{0}
+       return file_syncer_proto_rawDescGZIP(), []int{0}
 }
 
-func (m *PullRequest) GetServiceName() string {
-       if m != nil {
-               return m.ServiceName
+func (x *PullRequest) GetServiceName() string {
+       if x != nil {
+               return x.ServiceName
        }
        return ""
 }
 
-func (m *PullRequest) GetOptions() string {
-       if m != nil {
-               return m.Options
+func (x *PullRequest) GetOptions() string {
+       if x != nil {
+               return x.Options
        }
        return ""
 }
 
-func (m *PullRequest) GetTime() string {
-       if m != nil {
-               return m.Time
+func (x *PullRequest) GetTime() string {
+       if x != nil {
+               return x.Time
        }
        return ""
 }
 
-func (m *PullRequest) GetAddr() string {
-       if m != nil {
-               return m.Addr
+func (x *PullRequest) GetAddr() string {
+       if x != nil {
+               return x.Addr
        }
        return ""
 }
 
 type IncrementPullRequest struct {
+       state         protoimpl.MessageState
+       sizeCache     protoimpl.SizeCache
+       unknownFields protoimpl.UnknownFields
+
        Addr   string `protobuf:"bytes,1,opt,name=addr,proto3" 
json:"addr,omitempty"`
        Length int64  `protobuf:"varint,2,opt,name=length,proto3" 
json:"length,omitempty"`
 }
 
-func (m *IncrementPullRequest) Reset()         { *m = IncrementPullRequest{} }
-func (m *IncrementPullRequest) String() string { return 
proto.CompactTextString(m) }
-func (*IncrementPullRequest) ProtoMessage()    {}
+func (x *IncrementPullRequest) Reset() {
+       *x = IncrementPullRequest{}
+       if protoimpl.UnsafeEnabled {
+               mi := &file_syncer_proto_msgTypes[1]
+               ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+               ms.StoreMessageInfo(mi)
+       }
+}
+
+func (x *IncrementPullRequest) String() string {
+       return protoimpl.X.MessageStringOf(x)
+}
+
+func (*IncrementPullRequest) ProtoMessage() {}
+
+func (x *IncrementPullRequest) ProtoReflect() protoreflect.Message {
+       mi := &file_syncer_proto_msgTypes[1]
+       if protoimpl.UnsafeEnabled && x != nil {
+               ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+               if ms.LoadMessageInfo() == nil {
+                       ms.StoreMessageInfo(mi)
+               }
+               return ms
+       }
+       return mi.MessageOf(x)
+}
+
+// Deprecated: Use IncrementPullRequest.ProtoReflect.Descriptor instead.
 func (*IncrementPullRequest) Descriptor() ([]byte, []int) {
-       return fileDescriptor_9577b640f2aab197, []int{1}
+       return file_syncer_proto_rawDescGZIP(), []int{1}
 }
 
-func (m *IncrementPullRequest) GetAddr() string {
-       if m != nil {
-               return m.Addr
+func (x *IncrementPullRequest) GetAddr() string {
+       if x != nil {
+               return x.Addr
        }
        return ""
 }
 
-func (m *IncrementPullRequest) GetLength() int64 {
-       if m != nil {
-               return m.Length
+func (x *IncrementPullRequest) GetLength() int64 {
+       if x != nil {
+               return x.Length
        }
        return 0
 }
 
 type DeclareRequest struct {
+       state         protoimpl.MessageState
+       sizeCache     protoimpl.SizeCache
+       unknownFields protoimpl.UnknownFields
+
        Addr string `protobuf:"bytes,1,opt,name=addr,proto3" 
json:"addr,omitempty"`
 }
 
-func (m *DeclareRequest) Reset()         { *m = DeclareRequest{} }
-func (m *DeclareRequest) String() string { return proto.CompactTextString(m) }
-func (*DeclareRequest) ProtoMessage()    {}
+func (x *DeclareRequest) Reset() {
+       *x = DeclareRequest{}
+       if protoimpl.UnsafeEnabled {
+               mi := &file_syncer_proto_msgTypes[2]
+               ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+               ms.StoreMessageInfo(mi)
+       }
+}
+
+func (x *DeclareRequest) String() string {
+       return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DeclareRequest) ProtoMessage() {}
+
+func (x *DeclareRequest) ProtoReflect() protoreflect.Message {
+       mi := &file_syncer_proto_msgTypes[2]
+       if protoimpl.UnsafeEnabled && x != nil {
+               ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+               if ms.LoadMessageInfo() == nil {
+                       ms.StoreMessageInfo(mi)
+               }
+               return ms
+       }
+       return mi.MessageOf(x)
+}
+
+// Deprecated: Use DeclareRequest.ProtoReflect.Descriptor instead.
 func (*DeclareRequest) Descriptor() ([]byte, []int) {
-       return fileDescriptor_9577b640f2aab197, []int{2}
+       return file_syncer_proto_rawDescGZIP(), []int{2}
 }
 
-func (m *DeclareRequest) GetAddr() string {
-       if m != nil {
-               return m.Addr
+func (x *DeclareRequest) GetAddr() string {
+       if x != nil {
+               return x.Addr
        }
        return ""
 }
 
 type DeclareResponse struct {
+       state         protoimpl.MessageState
+       sizeCache     protoimpl.SizeCache
+       unknownFields protoimpl.UnknownFields
+
        SyncDataLength int64 
`protobuf:"varint,1,opt,name=syncDataLength,proto3" 
json:"syncDataLength,omitempty"`
 }
 
-func (m *DeclareResponse) Reset()         { *m = DeclareResponse{} }
-func (m *DeclareResponse) String() string { return proto.CompactTextString(m) }
-func (*DeclareResponse) ProtoMessage()    {}
+func (x *DeclareResponse) Reset() {
+       *x = DeclareResponse{}
+       if protoimpl.UnsafeEnabled {
+               mi := &file_syncer_proto_msgTypes[3]
+               ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+               ms.StoreMessageInfo(mi)
+       }
+}
+
+func (x *DeclareResponse) String() string {
+       return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DeclareResponse) ProtoMessage() {}
+
+func (x *DeclareResponse) ProtoReflect() protoreflect.Message {
+       mi := &file_syncer_proto_msgTypes[3]
+       if protoimpl.UnsafeEnabled && x != nil {
+               ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+               if ms.LoadMessageInfo() == nil {
+                       ms.StoreMessageInfo(mi)
+               }
+               return ms
+       }
+       return mi.MessageOf(x)
+}
+
+// Deprecated: Use DeclareResponse.ProtoReflect.Descriptor instead.
 func (*DeclareResponse) Descriptor() ([]byte, []int) {
-       return fileDescriptor_9577b640f2aab197, []int{3}
+       return file_syncer_proto_rawDescGZIP(), []int{3}
 }
 
-func (m *DeclareResponse) GetSyncDataLength() int64 {
-       if m != nil {
-               return m.SyncDataLength
+func (x *DeclareResponse) GetSyncDataLength() int64 {
+       if x != nil {
+               return x.SyncDataLength
        }
        return 0
 }
 
 type SyncData struct {
+       state         protoimpl.MessageState
+       sizeCache     protoimpl.SizeCache
+       unknownFields protoimpl.UnknownFields
+
        Services  []*SyncService  `protobuf:"bytes,1,rep,name=services,proto3" 
json:"services,omitempty"`
        Instances []*SyncInstance `protobuf:"bytes,2,rep,name=instances,proto3" 
json:"instances,omitempty"`
 }
 
-func (m *SyncData) Reset()         { *m = SyncData{} }
-func (m *SyncData) String() string { return proto.CompactTextString(m) }
-func (*SyncData) ProtoMessage()    {}
+func (x *SyncData) Reset() {
+       *x = SyncData{}
+       if protoimpl.UnsafeEnabled {
+               mi := &file_syncer_proto_msgTypes[4]
+               ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+               ms.StoreMessageInfo(mi)
+       }
+}
+
+func (x *SyncData) String() string {
+       return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SyncData) ProtoMessage() {}
+
+func (x *SyncData) ProtoReflect() protoreflect.Message {
+       mi := &file_syncer_proto_msgTypes[4]
+       if protoimpl.UnsafeEnabled && x != nil {
+               ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+               if ms.LoadMessageInfo() == nil {
+                       ms.StoreMessageInfo(mi)
+               }
+               return ms
+       }
+       return mi.MessageOf(x)
+}
+
+// Deprecated: Use SyncData.ProtoReflect.Descriptor instead.
 func (*SyncData) Descriptor() ([]byte, []int) {
-       return fileDescriptor_9577b640f2aab197, []int{4}
+       return file_syncer_proto_rawDescGZIP(), []int{4}
 }
 
-func (m *SyncData) GetServices() []*SyncService {
-       if m != nil {
-               return m.Services
+func (x *SyncData) GetServices() []*SyncService {
+       if x != nil {
+               return x.Services
        }
        return nil
 }
 
-func (m *SyncData) GetInstances() []*SyncInstance {
-       if m != nil {
-               return m.Instances
+func (x *SyncData) GetInstances() []*SyncInstance {
+       if x != nil {
+               return x.Instances
        }
        return nil
 }
 
 type SyncService struct {
+       state         protoimpl.MessageState
+       sizeCache     protoimpl.SizeCache
+       unknownFields protoimpl.UnknownFields
+
        ServiceId     string             
`protobuf:"bytes,1,opt,name=serviceId,proto3" json:"serviceId,omitempty"`
        App           string             
`protobuf:"bytes,2,opt,name=app,proto3" json:"app,omitempty"`
        Name          string             
`protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
@@ -270,77 +473,106 @@ type SyncService struct {
        Expansions    []*Expansion       
`protobuf:"bytes,9,rep,name=expansions,proto3" json:"expansions,omitempty"`
 }
 
-func (m *SyncService) Reset()         { *m = SyncService{} }
-func (m *SyncService) String() string { return proto.CompactTextString(m) }
-func (*SyncService) ProtoMessage()    {}
+func (x *SyncService) Reset() {
+       *x = SyncService{}
+       if protoimpl.UnsafeEnabled {
+               mi := &file_syncer_proto_msgTypes[5]
+               ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+               ms.StoreMessageInfo(mi)
+       }
+}
+
+func (x *SyncService) String() string {
+       return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SyncService) ProtoMessage() {}
+
+func (x *SyncService) ProtoReflect() protoreflect.Message {
+       mi := &file_syncer_proto_msgTypes[5]
+       if protoimpl.UnsafeEnabled && x != nil {
+               ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+               if ms.LoadMessageInfo() == nil {
+                       ms.StoreMessageInfo(mi)
+               }
+               return ms
+       }
+       return mi.MessageOf(x)
+}
+
+// Deprecated: Use SyncService.ProtoReflect.Descriptor instead.
 func (*SyncService) Descriptor() ([]byte, []int) {
-       return fileDescriptor_9577b640f2aab197, []int{5}
+       return file_syncer_proto_rawDescGZIP(), []int{5}
 }
 
-func (m *SyncService) GetServiceId() string {
-       if m != nil {
-               return m.ServiceId
+func (x *SyncService) GetServiceId() string {
+       if x != nil {
+               return x.ServiceId
        }
        return ""
 }
 
-func (m *SyncService) GetApp() string {
-       if m != nil {
-               return m.App
+func (x *SyncService) GetApp() string {
+       if x != nil {
+               return x.App
        }
        return ""
 }
 
-func (m *SyncService) GetName() string {
-       if m != nil {
-               return m.Name
+func (x *SyncService) GetName() string {
+       if x != nil {
+               return x.Name
        }
        return ""
 }
 
-func (m *SyncService) GetVersion() string {
-       if m != nil {
-               return m.Version
+func (x *SyncService) GetVersion() string {
+       if x != nil {
+               return x.Version
        }
        return ""
 }
 
-func (m *SyncService) GetStatus() SyncService_Status {
-       if m != nil {
-               return m.Status
+func (x *SyncService) GetStatus() SyncService_Status {
+       if x != nil {
+               return x.Status
        }
        return SyncService_UNKNOWN
 }
 
-func (m *SyncService) GetDomainProject() string {
-       if m != nil {
-               return m.DomainProject
+func (x *SyncService) GetDomainProject() string {
+       if x != nil {
+               return x.DomainProject
        }
        return ""
 }
 
-func (m *SyncService) GetEnvironment() string {
-       if m != nil {
-               return m.Environment
+func (x *SyncService) GetEnvironment() string {
+       if x != nil {
+               return x.Environment
        }
        return ""
 }
 
-func (m *SyncService) GetPluginName() string {
-       if m != nil {
-               return m.PluginName
+func (x *SyncService) GetPluginName() string {
+       if x != nil {
+               return x.PluginName
        }
        return ""
 }
 
-func (m *SyncService) GetExpansions() []*Expansion {
-       if m != nil {
-               return m.Expansions
+func (x *SyncService) GetExpansions() []*Expansion {
+       if x != nil {
+               return x.Expansions
        }
        return nil
 }
 
 type SyncInstance struct {
+       state         protoimpl.MessageState
+       sizeCache     protoimpl.SizeCache
+       unknownFields protoimpl.UnknownFields
+
        InstanceId  string              
`protobuf:"bytes,1,opt,name=instanceId,proto3" json:"instanceId,omitempty"`
        ServiceId   string              
`protobuf:"bytes,2,opt,name=serviceId,proto3" json:"serviceId,omitempty"`
        Endpoints   []string            
`protobuf:"bytes,3,rep,name=endpoints,proto3" json:"endpoints,omitempty"`
@@ -352,111 +584,169 @@ type SyncInstance struct {
        Expansions  []*Expansion        
`protobuf:"bytes,9,rep,name=expansions,proto3" json:"expansions,omitempty"`
 }
 
-func (m *SyncInstance) Reset()         { *m = SyncInstance{} }
-func (m *SyncInstance) String() string { return proto.CompactTextString(m) }
-func (*SyncInstance) ProtoMessage()    {}
+func (x *SyncInstance) Reset() {
+       *x = SyncInstance{}
+       if protoimpl.UnsafeEnabled {
+               mi := &file_syncer_proto_msgTypes[6]
+               ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+               ms.StoreMessageInfo(mi)
+       }
+}
+
+func (x *SyncInstance) String() string {
+       return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SyncInstance) ProtoMessage() {}
+
+func (x *SyncInstance) ProtoReflect() protoreflect.Message {
+       mi := &file_syncer_proto_msgTypes[6]
+       if protoimpl.UnsafeEnabled && x != nil {
+               ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+               if ms.LoadMessageInfo() == nil {
+                       ms.StoreMessageInfo(mi)
+               }
+               return ms
+       }
+       return mi.MessageOf(x)
+}
+
+// Deprecated: Use SyncInstance.ProtoReflect.Descriptor instead.
 func (*SyncInstance) Descriptor() ([]byte, []int) {
-       return fileDescriptor_9577b640f2aab197, []int{6}
+       return file_syncer_proto_rawDescGZIP(), []int{6}
 }
 
-func (m *SyncInstance) GetInstanceId() string {
-       if m != nil {
-               return m.InstanceId
+func (x *SyncInstance) GetInstanceId() string {
+       if x != nil {
+               return x.InstanceId
        }
        return ""
 }
 
-func (m *SyncInstance) GetServiceId() string {
-       if m != nil {
-               return m.ServiceId
+func (x *SyncInstance) GetServiceId() string {
+       if x != nil {
+               return x.ServiceId
        }
        return ""
 }
 
-func (m *SyncInstance) GetEndpoints() []string {
-       if m != nil {
-               return m.Endpoints
+func (x *SyncInstance) GetEndpoints() []string {
+       if x != nil {
+               return x.Endpoints
        }
        return nil
 }
 
-func (m *SyncInstance) GetHostName() string {
-       if m != nil {
-               return m.HostName
+func (x *SyncInstance) GetHostName() string {
+       if x != nil {
+               return x.HostName
        }
        return ""
 }
 
-func (m *SyncInstance) GetStatus() SyncInstance_Status {
-       if m != nil {
-               return m.Status
+func (x *SyncInstance) GetStatus() SyncInstance_Status {
+       if x != nil {
+               return x.Status
        }
        return SyncInstance_UNKNOWN
 }
 
-func (m *SyncInstance) GetHealthCheck() *HealthCheck {
-       if m != nil {
-               return m.HealthCheck
+func (x *SyncInstance) GetHealthCheck() *HealthCheck {
+       if x != nil {
+               return x.HealthCheck
        }
        return nil
 }
 
-func (m *SyncInstance) GetVersion() string {
-       if m != nil {
-               return m.Version
+func (x *SyncInstance) GetVersion() string {
+       if x != nil {
+               return x.Version
        }
        return ""
 }
 
-func (m *SyncInstance) GetPluginName() string {
-       if m != nil {
-               return m.PluginName
+func (x *SyncInstance) GetPluginName() string {
+       if x != nil {
+               return x.PluginName
        }
        return ""
 }
 
-func (m *SyncInstance) GetExpansions() []*Expansion {
-       if m != nil {
-               return m.Expansions
+func (x *SyncInstance) GetExpansions() []*Expansion {
+       if x != nil {
+               return x.Expansions
        }
        return nil
 }
 
 type Expansion struct {
+       state         protoimpl.MessageState
+       sizeCache     protoimpl.SizeCache
+       unknownFields protoimpl.UnknownFields
+
        Kind   string            `protobuf:"bytes,1,opt,name=kind,proto3" 
json:"kind,omitempty"`
        Bytes  []byte            `protobuf:"bytes,2,opt,name=bytes,proto3" 
json:"bytes,omitempty"`
        Labels map[string]string `protobuf:"bytes,3,rep,name=labels,proto3" 
json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" 
protobuf_val:"bytes,2,opt,name=value,proto3"`
 }
 
-func (m *Expansion) Reset()         { *m = Expansion{} }
-func (m *Expansion) String() string { return proto.CompactTextString(m) }
-func (*Expansion) ProtoMessage()    {}
+func (x *Expansion) Reset() {
+       *x = Expansion{}
+       if protoimpl.UnsafeEnabled {
+               mi := &file_syncer_proto_msgTypes[7]
+               ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+               ms.StoreMessageInfo(mi)
+       }
+}
+
+func (x *Expansion) String() string {
+       return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Expansion) ProtoMessage() {}
+
+func (x *Expansion) ProtoReflect() protoreflect.Message {
+       mi := &file_syncer_proto_msgTypes[7]
+       if protoimpl.UnsafeEnabled && x != nil {
+               ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+               if ms.LoadMessageInfo() == nil {
+                       ms.StoreMessageInfo(mi)
+               }
+               return ms
+       }
+       return mi.MessageOf(x)
+}
+
+// Deprecated: Use Expansion.ProtoReflect.Descriptor instead.
 func (*Expansion) Descriptor() ([]byte, []int) {
-       return fileDescriptor_9577b640f2aab197, []int{7}
+       return file_syncer_proto_rawDescGZIP(), []int{7}
 }
 
-func (m *Expansion) GetKind() string {
-       if m != nil {
-               return m.Kind
+func (x *Expansion) GetKind() string {
+       if x != nil {
+               return x.Kind
        }
        return ""
 }
 
-func (m *Expansion) GetBytes() []byte {
-       if m != nil {
-               return m.Bytes
+func (x *Expansion) GetBytes() []byte {
+       if x != nil {
+               return x.Bytes
        }
        return nil
 }
 
-func (m *Expansion) GetLabels() map[string]string {
-       if m != nil {
-               return m.Labels
+func (x *Expansion) GetLabels() map[string]string {
+       if x != nil {
+               return x.Labels
        }
        return nil
 }
 
 type HealthCheck struct {
+       state         protoimpl.MessageState
+       sizeCache     protoimpl.SizeCache
+       unknownFields protoimpl.UnknownFields
+
        Mode     HealthCheck_Modes 
`protobuf:"varint,1,opt,name=mode,proto3,enum=proto.HealthCheck_Modes" 
json:"mode,omitempty"`
        Port     int32             `protobuf:"varint,2,opt,name=port,proto3" 
json:"port,omitempty"`
        Interval int32             
`protobuf:"varint,3,opt,name=interval,proto3" json:"interval,omitempty"`
@@ -464,49 +754,78 @@ type HealthCheck struct {
        Url      string            `protobuf:"bytes,5,opt,name=url,proto3" 
json:"url,omitempty"`
 }
 
-func (m *HealthCheck) Reset()         { *m = HealthCheck{} }
-func (m *HealthCheck) String() string { return proto.CompactTextString(m) }
-func (*HealthCheck) ProtoMessage()    {}
+func (x *HealthCheck) Reset() {
+       *x = HealthCheck{}
+       if protoimpl.UnsafeEnabled {
+               mi := &file_syncer_proto_msgTypes[8]
+               ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+               ms.StoreMessageInfo(mi)
+       }
+}
+
+func (x *HealthCheck) String() string {
+       return protoimpl.X.MessageStringOf(x)
+}
+
+func (*HealthCheck) ProtoMessage() {}
+
+func (x *HealthCheck) ProtoReflect() protoreflect.Message {
+       mi := &file_syncer_proto_msgTypes[8]
+       if protoimpl.UnsafeEnabled && x != nil {
+               ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+               if ms.LoadMessageInfo() == nil {
+                       ms.StoreMessageInfo(mi)
+               }
+               return ms
+       }
+       return mi.MessageOf(x)
+}
+
+// Deprecated: Use HealthCheck.ProtoReflect.Descriptor instead.
 func (*HealthCheck) Descriptor() ([]byte, []int) {
-       return fileDescriptor_9577b640f2aab197, []int{8}
+       return file_syncer_proto_rawDescGZIP(), []int{8}
 }
 
-func (m *HealthCheck) GetMode() HealthCheck_Modes {
-       if m != nil {
-               return m.Mode
+func (x *HealthCheck) GetMode() HealthCheck_Modes {
+       if x != nil {
+               return x.Mode
        }
        return HealthCheck_UNKNOWN
 }
 
-func (m *HealthCheck) GetPort() int32 {
-       if m != nil {
-               return m.Port
+func (x *HealthCheck) GetPort() int32 {
+       if x != nil {
+               return x.Port
        }
        return 0
 }
 
-func (m *HealthCheck) GetInterval() int32 {
-       if m != nil {
-               return m.Interval
+func (x *HealthCheck) GetInterval() int32 {
+       if x != nil {
+               return x.Interval
        }
        return 0
 }
 
-func (m *HealthCheck) GetTimes() int32 {
-       if m != nil {
-               return m.Times
+func (x *HealthCheck) GetTimes() int32 {
+       if x != nil {
+               return x.Times
        }
        return 0
 }
 
-func (m *HealthCheck) GetUrl() string {
-       if m != nil {
-               return m.Url
+func (x *HealthCheck) GetUrl() string {
+       if x != nil {
+               return x.Url
        }
        return ""
 }
 
 type MappingEntry struct {
+       state         protoimpl.MessageState
+       sizeCache     protoimpl.SizeCache
+       unknownFields protoimpl.UnknownFields
+
        ClusterName string `protobuf:"bytes,1,opt,name=clusterName,proto3" 
json:"clusterName,omitempty"`
        //    Tenant tenant = 2;
        DomainProject string `protobuf:"bytes,2,opt,name=domainProject,proto3" 
json:"domainProject,omitempty"`
@@ -516,131 +835,409 @@ type MappingEntry struct {
        CurInstanceID string `protobuf:"bytes,6,opt,name=curInstanceID,proto3" 
json:"curInstanceID,omitempty"`
 }
 
-func (m *MappingEntry) Reset()         { *m = MappingEntry{} }
-func (m *MappingEntry) String() string { return proto.CompactTextString(m) }
-func (*MappingEntry) ProtoMessage()    {}
+func (x *MappingEntry) Reset() {
+       *x = MappingEntry{}
+       if protoimpl.UnsafeEnabled {
+               mi := &file_syncer_proto_msgTypes[9]
+               ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+               ms.StoreMessageInfo(mi)
+       }
+}
+
+func (x *MappingEntry) String() string {
+       return protoimpl.X.MessageStringOf(x)
+}
+
+func (*MappingEntry) ProtoMessage() {}
+
+func (x *MappingEntry) ProtoReflect() protoreflect.Message {
+       mi := &file_syncer_proto_msgTypes[9]
+       if protoimpl.UnsafeEnabled && x != nil {
+               ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+               if ms.LoadMessageInfo() == nil {
+                       ms.StoreMessageInfo(mi)
+               }
+               return ms
+       }
+       return mi.MessageOf(x)
+}
+
+// Deprecated: Use MappingEntry.ProtoReflect.Descriptor instead.
 func (*MappingEntry) Descriptor() ([]byte, []int) {
-       return fileDescriptor_9577b640f2aab197, []int{9}
+       return file_syncer_proto_rawDescGZIP(), []int{9}
 }
 
-func (m *MappingEntry) GetClusterName() string {
-       if m != nil {
-               return m.ClusterName
+func (x *MappingEntry) GetClusterName() string {
+       if x != nil {
+               return x.ClusterName
        }
        return ""
 }
 
-func (m *MappingEntry) GetDomainProject() string {
-       if m != nil {
-               return m.DomainProject
+func (x *MappingEntry) GetDomainProject() string {
+       if x != nil {
+               return x.DomainProject
        }
        return ""
 }
 
-func (m *MappingEntry) GetOrgServiceID() string {
-       if m != nil {
-               return m.OrgServiceID
+func (x *MappingEntry) GetOrgServiceID() string {
+       if x != nil {
+               return x.OrgServiceID
        }
        return ""
 }
 
-func (m *MappingEntry) GetOrgInstanceID() string {
-       if m != nil {
-               return m.OrgInstanceID
+func (x *MappingEntry) GetOrgInstanceID() string {
+       if x != nil {
+               return x.OrgInstanceID
        }
        return ""
 }
 
-func (m *MappingEntry) GetCurServiceID() string {
-       if m != nil {
-               return m.CurServiceID
+func (x *MappingEntry) GetCurServiceID() string {
+       if x != nil {
+               return x.CurServiceID
        }
        return ""
 }
 
-func (m *MappingEntry) GetCurInstanceID() string {
-       if m != nil {
-               return m.CurInstanceID
+func (x *MappingEntry) GetCurInstanceID() string {
+       if x != nil {
+               return x.CurInstanceID
        }
        return ""
 }
 
-func init() {
-       proto.RegisterEnum("proto.SyncService_Status", SyncService_Status_name, 
SyncService_Status_value)
-       proto.RegisterEnum("proto.SyncInstance_Status", 
SyncInstance_Status_name, SyncInstance_Status_value)
-       proto.RegisterEnum("proto.HealthCheck_Modes", HealthCheck_Modes_name, 
HealthCheck_Modes_value)
-       proto.RegisterType((*PullRequest)(nil), "proto.PullRequest")
-       proto.RegisterType((*IncrementPullRequest)(nil), 
"proto.IncrementPullRequest")
-       proto.RegisterType((*DeclareRequest)(nil), "proto.DeclareRequest")
-       proto.RegisterType((*DeclareResponse)(nil), "proto.DeclareResponse")
-       proto.RegisterType((*SyncData)(nil), "proto.SyncData")
-       proto.RegisterType((*SyncService)(nil), "proto.SyncService")
-       proto.RegisterType((*SyncInstance)(nil), "proto.SyncInstance")
-       proto.RegisterType((*Expansion)(nil), "proto.Expansion")
-       proto.RegisterMapType((map[string]string)(nil), 
"proto.Expansion.LabelsEntry")
-       proto.RegisterType((*HealthCheck)(nil), "proto.HealthCheck")
-       proto.RegisterType((*MappingEntry)(nil), "proto.MappingEntry")
-}
-
-func init() { proto.RegisterFile("syncer.proto", 
fileDescriptor_9577b640f2aab197) }
-
-var fileDescriptor_9577b640f2aab197 = []byte{
-       // 868 bytes of a gzipped FileDescriptorProto
-       0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x55, 
0xdd, 0x8e, 0xe3, 0x34,
-       0x14, 0x9e, 0xa4, 0xff, 0x27, 0xdd, 0xd9, 0x62, 0x96, 0x55, 0x28, 0x23, 
0x54, 0x45, 0x2b, 0x98,
-       0x0b, 0xa8, 0xd8, 0xb2, 0x17, 0x2c, 0x5c, 0x20, 0x76, 0x3b, 0xec, 0x56, 
0xcc, 0x76, 0x2a, 0x77,
-       0x0a, 0x12, 0x77, 0x99, 0xd4, 0x6a, 0xc3, 0xa4, 0x76, 0xc6, 0x76, 0x2a, 
0xe6, 0x81, 0xe0, 0x29,
-       0xe0, 0x61, 0xb8, 0xe5, 0x29, 0x90, 0x7f, 0xda, 0x38, 0x9d, 0x0a, 0x71, 
0xc1, 0x55, 0x7c, 0x3e,
-       0x7f, 0x39, 0xf6, 0x39, 0xe7, 0xf3, 0x39, 0xd0, 0x15, 0xf7, 0x34, 0x21, 
0x7c, 0x98, 0x73, 0x26,
-       0x19, 0x6a, 0xe8, 0x4f, 0x74, 0x07, 0xc1, 0xac, 0xc8, 0x32, 0x4c, 0xee, 
0x0a, 0x22, 0x24, 0x1a,
-       0x40, 0x20, 0x08, 0xdf, 0xa6, 0x09, 0x99, 0xc6, 0x1b, 0x12, 0x7a, 0x03, 
0xef, 0xbc, 0x83, 0x5d,
-       0x08, 0x85, 0xd0, 0x62, 0xb9, 0x4c, 0x19, 0x15, 0xa1, 0xaf, 0x77, 0x77, 
0x26, 0x42, 0x50, 0x97,
-       0xe9, 0x86, 0x84, 0x35, 0x0d, 0xeb, 0xb5, 0xc2, 0xe2, 0xe5, 0x92, 0x87, 
0x75, 0x83, 0xa9, 0x75,
-       0xf4, 0x0a, 0x9e, 0x4c, 0x68, 0xc2, 0xc9, 0x86, 0x50, 0xe9, 0x9e, 0xbd, 
0xe3, 0x7a, 0x25, 0x17,
-       0x3d, 0x85, 0x66, 0x46, 0xe8, 0x4a, 0xae, 0xf5, 0x61, 0x35, 0x6c, 0xad, 
0xe8, 0x19, 0x9c, 0x8e,
-       0x49, 0x92, 0xc5, 0x9c, 0xfc, 0xcb, 0xdf, 0xd1, 0x4b, 0x78, 0xbc, 0x67, 
0x89, 0x9c, 0x51, 0x41,
-       0xd0, 0x27, 0x70, 0xaa, 0xd2, 0x30, 0x8e, 0x65, 0x7c, 0x69, 0x1c, 0x7b, 
0xda, 0xf1, 0x01, 0x1a,
-       0x6d, 0xa0, 0x3d, 0xb7, 0x08, 0x1a, 0x42, 0xdb, 0x66, 0x40, 0x84, 0xde, 
0xa0, 0x76, 0x1e, 0x8c,
-       0x90, 0x49, 0xe2, 0x50, 0x51, 0xe6, 0x66, 0x0b, 0xef, 0x39, 0xe8, 0x39, 
0x74, 0x52, 0x2a, 0x64,
-       0x4c, 0xd5, 0x0f, 0xbe, 0xfe, 0xe1, 0x7d, 0xe7, 0x87, 0x89, 0xdd, 0xc3, 
0x25, 0x2b, 0xfa, 0xcb,
-       0x87, 0xc0, 0x71, 0x86, 0xce, 0xa0, 0x63, 0xdd, 0x4d, 0x96, 0x36, 0xa4, 
0x12, 0x40, 0x3d, 0xa8,
-       0xc5, 0x79, 0x6e, 0xf3, 0xaf, 0x96, 0x2a, 0x7a, 0x1a, 0x97, 0xb9, 0xa7, 
0xb6, 0x52, 0x5b, 0xc2,
-       0x45, 0xca, 0xa8, 0x4d, 0xff, 0xce, 0x44, 0xcf, 0xa1, 0x29, 0x64, 0x2c, 
0x0b, 0x11, 0x36, 0x06,
-       0xde, 0xf9, 0xe9, 0xe8, 0xc3, 0x87, 0xe1, 0x0c, 0xe7, 0x9a, 0x80, 0x2d, 
0x11, 0x3d, 0x83, 0x47,
-       0x4b, 0xb6, 0x89, 0x53, 0x3a, 0xe3, 0xec, 0x17, 0x92, 0xc8, 0xb0, 0xa9, 
0x5d, 0x56, 0x41, 0x25,
-       0x1f, 0x42, 0xb7, 0x29, 0x67, 0x54, 0x15, 0x37, 0x6c, 0x19, 0xf9, 0x38, 
0x10, 0xfa, 0x18, 0x20,
-       0xcf, 0x8a, 0x55, 0x4a, 0xb5, 0xbe, 0xda, 0x9a, 0xe0, 0x20, 0xe8, 0x0b, 
0x00, 0xf2, 0x6b, 0x1e,
-       0x53, 0xa1, 0x15, 0xd6, 0xd1, 0xc9, 0xeb, 0xd9, 0xeb, 0x5d, 0xec, 0x36, 
0xb0, 0xc3, 0x89, 0x3e,
-       0x85, 0xa6, 0xb9, 0x2b, 0x0a, 0xa0, 0xb5, 0x98, 0xfe, 0x30, 0xbd, 0xfa, 
0x69, 0xda, 0x3b, 0x41,
-       0x4d, 0xf0, 0x17, 0xb3, 0x9e, 0x87, 0xda, 0x50, 0x1f, 0x2b, 0xc4, 0x8f, 
0x7e, 0xab, 0x41, 0xd7,
-       0xcd, 0xbf, 0xba, 0xcb, 0xae, 0x02, 0xfb, 0x2c, 0x3b, 0x48, 0xb5, 0x08, 
0xfe, 0x61, 0x11, 0xce,
-       0xa0, 0x43, 0xe8, 0x32, 0x67, 0x29, 0x95, 0x22, 0xac, 0x0d, 0x6a, 0x6a, 
0x77, 0x0f, 0xa0, 0x3e,
-       0xb4, 0xd7, 0x4c, 0x48, 0x1d, 0xa5, 0xc9, 0xfe, 0xde, 0x46, 0xa3, 0x83, 
0xf4, 0xf7, 0x8f, 0x88,
-       0xe3, 0x30, 0xff, 0x2f, 0x20, 0x58, 0x93, 0x38, 0x93, 0xeb, 0xd7, 0x6b, 
0x92, 0xdc, 0xea, 0xec,
-       0x97, 0x32, 0x7c, 0x5b, 0xee, 0x60, 0x97, 0xe6, 0x4a, 0xa0, 0x55, 0x95, 
0xc0, 0xff, 0x5f, 0x87,
-       0x37, 0xff, 0xb1, 0x0e, 0xa8, 0x0b, 0xed, 0xf9, 0xf5, 0x77, 0xf8, 0x7a, 
0x32, 0x7d, 0xd3, 0xab,
-       0xa1, 0x1e, 0x74, 0xaf, 0x16, 0xd7, 0x57, 0xdf, 0xcf, 0x2f, 0xf0, 0x8f, 
0x93, 0xd7, 0x17, 0xbd,
-       0x7a, 0xf4, 0xbb, 0x07, 0x9d, 0xfd, 0x11, 0x4a, 0xd9, 0xb7, 0x29, 0xdd, 
0x95, 0x47, 0xaf, 0xd1,
-       0x13, 0x68, 0xdc, 0xdc, 0x4b, 0x62, 0x3a, 0x50, 0x17, 0x1b, 0x03, 0xbd, 
0x80, 0x66, 0x16, 0xdf,
-       0x90, 0xcc, 0x54, 0x23, 0x18, 0x9d, 0x1d, 0x5e, 0x77, 0x78, 0xa9, 0xb7, 
0x2f, 0xa8, 0xe4, 0xf7,
-       0xd8, 0x72, 0xfb, 0x2f, 0x21, 0x70, 0x60, 0xf5, 0xb4, 0x6e, 0xc9, 0xbd, 
0x3d, 0x4d, 0x2d, 0xd5,
-       0x61, 0xdb, 0x38, 0x2b, 0x88, 0x55, 0x80, 0x31, 0xbe, 0xf6, 0xbf, 0xf2, 
0xa2, 0x3f, 0x3d, 0x08,
-       0x9c, 0xd4, 0xa3, 0xcf, 0xa0, 0xbe, 0x61, 0x4b, 0xd3, 0x35, 0x4f, 0x47, 
0xe1, 0xc3, 0xe2, 0x0c,
-       0xdf, 0xb1, 0x25, 0x11, 0x58, 0xb3, 0x54, 0x60, 0x39, 0xe3, 0x52, 0xbb, 
0x6d, 0x60, 0xbd, 0x56,
-       0xaa, 0x49, 0xa9, 0x24, 0x7c, 0x1b, 0x67, 0xfa, 0x29, 0x37, 0xf0, 0xde, 
0x56, 0xf7, 0x50, 0x2d,
-       0x55, 0x68, 0x39, 0x35, 0xb0, 0x31, 0xd4, 0x7d, 0x0b, 0x9e, 0x69, 0x21, 
0x75, 0xb0, 0x5a, 0x46,
-       0xe7, 0xd0, 0xd0, 0xc7, 0x54, 0xcb, 0xd0, 0x86, 0xfa, 0x6c, 0x31, 0x7f, 
0x6b, 0x0a, 0x31, 0x5b,
-       0x5c, 0x5e, 0xf6, 0xfc, 0xe8, 0x6f, 0x0f, 0xba, 0xef, 0xe2, 0x3c, 0x4f, 
0xe9, 0xca, 0x04, 0x3f,
-       0x80, 0x20, 0xc9, 0x0a, 0x21, 0x09, 0x77, 0xbb, 0xbf, 0x03, 0x3d, 0x6c, 
0x03, 0xfe, 0xb1, 0x36,
-       0x10, 0x41, 0x97, 0xf1, 0x95, 0xed, 0x24, 0x93, 0xb1, 0xed, 0x4a, 0x15, 
0x4c, 0x79, 0x62, 0x7c,
-       0xb5, 0x93, 0xfb, 0x64, 0x6c, 0x5f, 0x49, 0x15, 0x54, 0x9e, 0x92, 0x82, 
0x97, 0x9e, 0x4c, 0x9c,
-       0x15, 0x4c, 0x79, 0x4a, 0x0a, 0xee, 0x78, 0xb2, 0xad, 0xa9, 0x02, 0x8e, 
0xfe, 0xf0, 0xa0, 0xae,
-       0x1e, 0x18, 0xfa, 0x1c, 0xea, 0x6a, 0xea, 0xa0, 0xdd, 0xe3, 0x71, 0x46, 
0x50, 0xff, 0xb1, 0xf3,
-       0x12, 0x55, 0xeb, 0x8f, 0x4e, 0xd0, 0x18, 0xde, 0xb3, 0x33, 0xa4, 0x9c, 
0x0e, 0xe8, 0x03, 0xcb,
-       0xab, 0xce, 0xa0, 0xfe, 0xd3, 0x43, 0xd8, 0x0c, 0x9d, 0xe8, 0x04, 0x7d, 
0x0b, 0x8f, 0x2a, 0x33,
-       0x0f, 0x7d, 0x64, 0xa9, 0xc7, 0x26, 0xe1, 0x91, 0x6b, 0xbc, 0xea, 0xfc, 
0xdc, 0x1a, 0x7e, 0xa3,
-       0xd1, 0x9b, 0xa6, 0xfe, 0x7c, 0xf9, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 
0x37, 0x82, 0xde, 0xa9,
-       0xd0, 0x07, 0x00, 0x00,
+var File_syncer_proto protoreflect.FileDescriptor
+
+var file_syncer_proto_rawDesc = []byte{
+       0x0a, 0x0c, 0x73, 0x79, 0x6e, 0x63, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 
0x74, 0x6f, 0x12, 0x05,
+       0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x71, 0x0a, 0x0b, 0x50, 0x75, 0x6c, 
0x6c, 0x52, 0x65, 0x71,
+       0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 
0x69, 0x63, 0x65, 0x4e,
+       0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 
0x65, 0x72, 0x76, 0x69,
+       0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6f, 0x70, 
0x74, 0x69, 0x6f, 0x6e,
+       0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x70, 0x74, 
0x69, 0x6f, 0x6e, 0x73,
+       0x12, 0x12, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 
0x28, 0x09, 0x52, 0x04,
+       0x74, 0x69, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x64, 0x64, 0x72, 
0x18, 0x04, 0x20, 0x01,
+       0x28, 0x09, 0x52, 0x04, 0x61, 0x64, 0x64, 0x72, 0x22, 0x42, 0x0a, 0x14, 
0x49, 0x6e, 0x63, 0x72,
+       0x65, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x75, 0x6c, 0x6c, 0x52, 0x65, 0x71, 
0x75, 0x65, 0x73, 0x74,
+       0x12, 0x12, 0x0a, 0x04, 0x61, 0x64, 0x64, 0x72, 0x18, 0x01, 0x20, 0x01, 
0x28, 0x09, 0x52, 0x04,
+       0x61, 0x64, 0x64, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x6e, 0x67, 
0x74, 0x68, 0x18, 0x02,
+       0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 
0x22, 0x24, 0x0a, 0x0e,
+       0x44, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 
0x73, 0x74, 0x12, 0x12,
+       0x0a, 0x04, 0x61, 0x64, 0x64, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 
0x52, 0x04, 0x61, 0x64,
+       0x64, 0x72, 0x22, 0x39, 0x0a, 0x0f, 0x44, 0x65, 0x63, 0x6c, 0x61, 0x72, 
0x65, 0x52, 0x65, 0x73,
+       0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x73, 0x79, 0x6e, 
0x63, 0x44, 0x61, 0x74,
+       0x61, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 
0x03, 0x52, 0x0e, 0x73,
+       0x79, 0x6e, 0x63, 0x44, 0x61, 0x74, 0x61, 0x4c, 0x65, 0x6e, 0x67, 0x74, 
0x68, 0x22, 0x6d, 0x0a,
+       0x08, 0x53, 0x79, 0x6e, 0x63, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2e, 0x0a, 
0x08, 0x73, 0x65, 0x72,
+       0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 
0x12, 0x2e, 0x70, 0x72,
+       0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x53, 0x65, 0x72, 0x76, 
0x69, 0x63, 0x65, 0x52,
+       0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x31, 0x0a, 
0x09, 0x69, 0x6e, 0x73,
+       0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 
0x32, 0x13, 0x2e, 0x70,
+       0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x49, 0x6e, 0x73, 
0x74, 0x61, 0x6e, 0x63,
+       0x65, 0x52, 0x09, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 
0x22, 0xe1, 0x02, 0x0a,
+       0x0b, 0x53, 0x79, 0x6e, 0x63, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 
0x12, 0x1c, 0x0a, 0x09,
+       0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 
0x01, 0x28, 0x09, 0x52,
+       0x09, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x10, 
0x0a, 0x03, 0x61, 0x70,
+       0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x61, 0x70, 0x70, 
0x12, 0x12, 0x0a, 0x04,
+       0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 
0x6e, 0x61, 0x6d, 0x65,
+       0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 
0x04, 0x20, 0x01, 0x28,
+       0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x31, 
0x0a, 0x06, 0x73, 0x74,
+       0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 
0x2e, 0x70, 0x72, 0x6f,
+       0x74, 0x6f, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x53, 0x65, 0x72, 0x76, 0x69, 
0x63, 0x65, 0x2e, 0x53,
+       0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 
0x73, 0x12, 0x24, 0x0a,
+       0x0d, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 
0x63, 0x74, 0x18, 0x06,
+       0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 
0x50, 0x72, 0x6f, 0x6a,
+       0x65, 0x63, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x65, 0x6e, 0x76, 0x69, 0x72, 
0x6f, 0x6e, 0x6d, 0x65,
+       0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x6e, 
0x76, 0x69, 0x72, 0x6f,
+       0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x6c, 0x75, 
0x67, 0x69, 0x6e, 0x4e,
+       0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 
0x6c, 0x75, 0x67, 0x69,
+       0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x30, 0x0a, 0x0a, 0x65, 0x78, 0x70, 
0x61, 0x6e, 0x73, 0x69,
+       0x6f, 0x6e, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 
0x70, 0x72, 0x6f, 0x74,
+       0x6f, 0x2e, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 
0x0a, 0x65, 0x78, 0x70,
+       0x61, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x27, 0x0a, 0x06, 0x53, 
0x74, 0x61, 0x74, 0x75,
+       0x73, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 
0x10, 0x00, 0x12, 0x06,
+       0x0a, 0x02, 0x55, 0x50, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x4f, 
0x57, 0x4e, 0x10, 0x02,
+       0x22, 0xa5, 0x03, 0x0a, 0x0c, 0x53, 0x79, 0x6e, 0x63, 0x49, 0x6e, 0x73, 
0x74, 0x61, 0x6e, 0x63,
+       0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 
0x65, 0x49, 0x64, 0x18,
+       0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 
0x6e, 0x63, 0x65, 0x49,
+       0x64, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 
0x49, 0x64, 0x18, 0x02,
+       0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 
0x65, 0x49, 0x64, 0x12,
+       0x1c, 0x0a, 0x09, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 
0x18, 0x03, 0x20, 0x03,
+       0x28, 0x09, 0x52, 0x09, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 
0x73, 0x12, 0x1a, 0x0a,
+       0x08, 0x68, 0x6f, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 
0x01, 0x28, 0x09, 0x52,
+       0x08, 0x68, 0x6f, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x32, 0x0a, 
0x06, 0x73, 0x74, 0x61,
+       0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 
0x70, 0x72, 0x6f, 0x74,
+       0x6f, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 
0x63, 0x65, 0x2e, 0x53,
+       0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 
0x73, 0x12, 0x34, 0x0a,
+       0x0b, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 
0x18, 0x06, 0x20, 0x01,
+       0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x48, 
0x65, 0x61, 0x6c, 0x74,
+       0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x0b, 0x68, 0x65, 0x61, 0x6c, 
0x74, 0x68, 0x43, 0x68,
+       0x65, 0x63, 0x6b, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 
0x6f, 0x6e, 0x18, 0x07,
+       0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 
0x6e, 0x12, 0x1e, 0x0a,
+       0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x18, 
0x08, 0x20, 0x01, 0x28,
+       0x09, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 
0x65, 0x12, 0x30, 0x0a,
+       0x0a, 0x65, 0x78, 0x70, 0x61, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 
0x09, 0x20, 0x03, 0x28,
+       0x0b, 0x32, 0x10, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x78, 
0x70, 0x61, 0x6e, 0x73,
+       0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x61, 0x6e, 0x73, 0x69, 
0x6f, 0x6e, 0x73, 0x22,
+       0x47, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0b, 0x0a, 
0x07, 0x55, 0x4e, 0x4b,
+       0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x06, 0x0a, 0x02, 0x55, 0x50, 
0x10, 0x01, 0x12, 0x08,
+       0x0a, 0x04, 0x44, 0x4f, 0x57, 0x4e, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 
0x53, 0x54, 0x41, 0x52,
+       0x54, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x55, 
0x54, 0x4f, 0x46, 0x53,
+       0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x10, 0x04, 0x22, 0xa6, 0x01, 0x0a, 
0x09, 0x45, 0x78, 0x70,
+       0x61, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x69, 
0x6e, 0x64, 0x18, 0x01,
+       0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x14, 
0x0a, 0x05, 0x62, 0x79,
+       0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x62, 
0x79, 0x74, 0x65, 0x73,
+       0x12, 0x34, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x03, 
0x20, 0x03, 0x28, 0x0b,
+       0x32, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x78, 0x70, 
0x61, 0x6e, 0x73, 0x69,
+       0x6f, 0x6e, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 
0x72, 0x79, 0x52, 0x06,
+       0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 
0x62, 0x65, 0x6c, 0x73,
+       0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 
0x18, 0x01, 0x20, 0x01,
+       0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 
0x61, 0x6c, 0x75, 0x65,
+       0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 
0x65, 0x3a, 0x02, 0x38,
+       0x01, 0x22, 0xbd, 0x01, 0x0a, 0x0b, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 
0x43, 0x68, 0x65, 0x63,
+       0x6b, 0x12, 0x2c, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 
0x01, 0x28, 0x0e, 0x32,
+       0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x48, 0x65, 0x61, 0x6c, 
0x74, 0x68, 0x43, 0x68,
+       0x65, 0x63, 0x6b, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x73, 0x52, 0x04, 0x6d, 
0x6f, 0x64, 0x65, 0x12,
+       0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 
0x05, 0x52, 0x04, 0x70,
+       0x6f, 0x72, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 
0x76, 0x61, 0x6c, 0x18,
+       0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 
0x76, 0x61, 0x6c, 0x12,
+       0x14, 0x0a, 0x05, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 
0x28, 0x05, 0x52, 0x05,
+       0x74, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 
0x18, 0x05, 0x20, 0x01,
+       0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x22, 0x28, 0x0a, 0x05, 0x4d, 
0x6f, 0x64, 0x65, 0x73,
+       0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 
0x00, 0x12, 0x08, 0x0a,
+       0x04, 0x50, 0x55, 0x53, 0x48, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x50, 
0x55, 0x4c, 0x4c, 0x10,
+       0x02, 0x22, 0xea, 0x01, 0x0a, 0x0c, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 
0x67, 0x45, 0x6e, 0x74,
+       0x72, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 
0x72, 0x4e, 0x61, 0x6d,
+       0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 
0x73, 0x74, 0x65, 0x72,
+       0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x64, 0x6f, 0x6d, 0x61, 
0x69, 0x6e, 0x50, 0x72,
+       0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 
0x0d, 0x64, 0x6f, 0x6d,
+       0x61, 0x69, 0x6e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x22, 
0x0a, 0x0c, 0x6f, 0x72,
+       0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x44, 0x18, 0x03, 
0x20, 0x01, 0x28, 0x09,
+       0x52, 0x0c, 0x6f, 0x72, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 
0x49, 0x44, 0x12, 0x24,
+       0x0a, 0x0d, 0x6f, 0x72, 0x67, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 
0x65, 0x49, 0x44, 0x18,
+       0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6f, 0x72, 0x67, 0x49, 0x6e, 
0x73, 0x74, 0x61, 0x6e,
+       0x63, 0x65, 0x49, 0x44, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x75, 0x72, 0x53, 
0x65, 0x72, 0x76, 0x69,
+       0x63, 0x65, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 
0x63, 0x75, 0x72, 0x53,
+       0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x44, 0x12, 0x24, 0x0a, 0x0d, 
0x63, 0x75, 0x72, 0x49,
+       0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x44, 0x18, 0x06, 0x20, 
0x01, 0x28, 0x09, 0x52,
+       0x0d, 0x63, 0x75, 0x72, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 
0x49, 0x44, 0x32, 0xbc,
+       0x01, 0x0a, 0x04, 0x53, 0x79, 0x6e, 0x63, 0x12, 0x2d, 0x0a, 0x04, 0x50, 
0x75, 0x6c, 0x6c, 0x12,
+       0x12, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x75, 0x6c, 0x6c, 
0x52, 0x65, 0x71, 0x75,
+       0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 
0x53, 0x79, 0x6e, 0x63,
+       0x44, 0x61, 0x74, 0x61, 0x22, 0x00, 0x12, 0x44, 0x0a, 0x11, 0x44, 0x65, 
0x63, 0x6c, 0x61, 0x72,
+       0x65, 0x44, 0x61, 0x74, 0x61, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 
0x15, 0x2e, 0x70, 0x72,
+       0x6f, 0x74, 0x6f, 0x2e, 0x44, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x65, 0x52, 
0x65, 0x71, 0x75, 0x65,
+       0x73, 0x74, 0x1a, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x44, 
0x65, 0x63, 0x6c, 0x61,
+       0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 
0x12, 0x3f, 0x0a, 0x0d,
+       0x49, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x75, 0x6c, 
0x6c, 0x12, 0x1b, 0x2e,
+       0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x49, 0x6e, 0x63, 0x72, 0x65, 0x6d, 
0x65, 0x6e, 0x74, 0x50,
+       0x75, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 
0x2e, 0x70, 0x72, 0x6f,
+       0x74, 0x6f, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x44, 0x61, 0x74, 0x61, 0x22, 
0x00, 0x42, 0x09, 0x5a,
+       0x07, 0x2e, 0x3b, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 
0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+       file_syncer_proto_rawDescOnce sync.Once
+       file_syncer_proto_rawDescData = file_syncer_proto_rawDesc
+)
+
+func file_syncer_proto_rawDescGZIP() []byte {
+       file_syncer_proto_rawDescOnce.Do(func() {
+               file_syncer_proto_rawDescData = 
protoimpl.X.CompressGZIP(file_syncer_proto_rawDescData)
+       })
+       return file_syncer_proto_rawDescData
+}
+
+var file_syncer_proto_enumTypes = make([]protoimpl.EnumInfo, 3)
+var file_syncer_proto_msgTypes = make([]protoimpl.MessageInfo, 11)
+var file_syncer_proto_goTypes = []interface{}{
+       (SyncService_Status)(0),      // 0: proto.SyncService.Status
+       (SyncInstance_Status)(0),     // 1: proto.SyncInstance.Status
+       (HealthCheck_Modes)(0),       // 2: proto.HealthCheck.Modes
+       (*PullRequest)(nil),          // 3: proto.PullRequest
+       (*IncrementPullRequest)(nil), // 4: proto.IncrementPullRequest
+       (*DeclareRequest)(nil),       // 5: proto.DeclareRequest
+       (*DeclareResponse)(nil),      // 6: proto.DeclareResponse
+       (*SyncData)(nil),             // 7: proto.SyncData
+       (*SyncService)(nil),          // 8: proto.SyncService
+       (*SyncInstance)(nil),         // 9: proto.SyncInstance
+       (*Expansion)(nil),            // 10: proto.Expansion
+       (*HealthCheck)(nil),          // 11: proto.HealthCheck
+       (*MappingEntry)(nil),         // 12: proto.MappingEntry
+       nil,                          // 13: proto.Expansion.LabelsEntry
+}
+var file_syncer_proto_depIdxs = []int32{
+       8,  // 0: proto.SyncData.services:type_name -> proto.SyncService
+       9,  // 1: proto.SyncData.instances:type_name -> proto.SyncInstance
+       0,  // 2: proto.SyncService.status:type_name -> proto.SyncService.Status
+       10, // 3: proto.SyncService.expansions:type_name -> proto.Expansion
+       1,  // 4: proto.SyncInstance.status:type_name -> 
proto.SyncInstance.Status
+       11, // 5: proto.SyncInstance.healthCheck:type_name -> proto.HealthCheck
+       10, // 6: proto.SyncInstance.expansions:type_name -> proto.Expansion
+       13, // 7: proto.Expansion.labels:type_name -> 
proto.Expansion.LabelsEntry
+       2,  // 8: proto.HealthCheck.mode:type_name -> proto.HealthCheck.Modes
+       3,  // 9: proto.Sync.Pull:input_type -> proto.PullRequest
+       5,  // 10: proto.Sync.DeclareDataLength:input_type -> 
proto.DeclareRequest
+       4,  // 11: proto.Sync.IncrementPull:input_type -> 
proto.IncrementPullRequest
+       7,  // 12: proto.Sync.Pull:output_type -> proto.SyncData
+       6,  // 13: proto.Sync.DeclareDataLength:output_type -> 
proto.DeclareResponse
+       7,  // 14: proto.Sync.IncrementPull:output_type -> proto.SyncData
+       12, // [12:15] is the sub-list for method output_type
+       9,  // [9:12] is the sub-list for method input_type
+       9,  // [9:9] is the sub-list for extension type_name
+       9,  // [9:9] is the sub-list for extension extendee
+       0,  // [0:9] is the sub-list for field type_name
+}
+
+func init() { file_syncer_proto_init() }
+func file_syncer_proto_init() {
+       if File_syncer_proto != nil {
+               return
+       }
+       if !protoimpl.UnsafeEnabled {
+               file_syncer_proto_msgTypes[0].Exporter = func(v interface{}, i 
int) interface{} {
+                       switch v := v.(*PullRequest); i {
+                       case 0:
+                               return &v.state
+                       case 1:
+                               return &v.sizeCache
+                       case 2:
+                               return &v.unknownFields
+                       default:
+                               return nil
+                       }
+               }
+               file_syncer_proto_msgTypes[1].Exporter = func(v interface{}, i 
int) interface{} {
+                       switch v := v.(*IncrementPullRequest); i {
+                       case 0:
+                               return &v.state
+                       case 1:
+                               return &v.sizeCache
+                       case 2:
+                               return &v.unknownFields
+                       default:
+                               return nil
+                       }
+               }
+               file_syncer_proto_msgTypes[2].Exporter = func(v interface{}, i 
int) interface{} {
+                       switch v := v.(*DeclareRequest); i {
+                       case 0:
+                               return &v.state
+                       case 1:
+                               return &v.sizeCache
+                       case 2:
+                               return &v.unknownFields
+                       default:
+                               return nil
+                       }
+               }
+               file_syncer_proto_msgTypes[3].Exporter = func(v interface{}, i 
int) interface{} {
+                       switch v := v.(*DeclareResponse); i {
+                       case 0:
+                               return &v.state
+                       case 1:
+                               return &v.sizeCache
+                       case 2:
+                               return &v.unknownFields
+                       default:
+                               return nil
+                       }
+               }
+               file_syncer_proto_msgTypes[4].Exporter = func(v interface{}, i 
int) interface{} {
+                       switch v := v.(*SyncData); i {
+                       case 0:
+                               return &v.state
+                       case 1:
+                               return &v.sizeCache
+                       case 2:
+                               return &v.unknownFields
+                       default:
+                               return nil
+                       }
+               }
+               file_syncer_proto_msgTypes[5].Exporter = func(v interface{}, i 
int) interface{} {
+                       switch v := v.(*SyncService); i {
+                       case 0:
+                               return &v.state
+                       case 1:
+                               return &v.sizeCache
+                       case 2:
+                               return &v.unknownFields
+                       default:
+                               return nil
+                       }
+               }
+               file_syncer_proto_msgTypes[6].Exporter = func(v interface{}, i 
int) interface{} {
+                       switch v := v.(*SyncInstance); i {
+                       case 0:
+                               return &v.state
+                       case 1:
+                               return &v.sizeCache
+                       case 2:
+                               return &v.unknownFields
+                       default:
+                               return nil
+                       }
+               }
+               file_syncer_proto_msgTypes[7].Exporter = func(v interface{}, i 
int) interface{} {
+                       switch v := v.(*Expansion); i {
+                       case 0:
+                               return &v.state
+                       case 1:
+                               return &v.sizeCache
+                       case 2:
+                               return &v.unknownFields
+                       default:
+                               return nil
+                       }
+               }
+               file_syncer_proto_msgTypes[8].Exporter = func(v interface{}, i 
int) interface{} {
+                       switch v := v.(*HealthCheck); i {
+                       case 0:
+                               return &v.state
+                       case 1:
+                               return &v.sizeCache
+                       case 2:
+                               return &v.unknownFields
+                       default:
+                               return nil
+                       }
+               }
+               file_syncer_proto_msgTypes[9].Exporter = func(v interface{}, i 
int) interface{} {
+                       switch v := v.(*MappingEntry); i {
+                       case 0:
+                               return &v.state
+                       case 1:
+                               return &v.sizeCache
+                       case 2:
+                               return &v.unknownFields
+                       default:
+                               return nil
+                       }
+               }
+       }
+       type x struct{}
+       out := protoimpl.TypeBuilder{
+               File: protoimpl.DescBuilder{
+                       GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+                       RawDescriptor: file_syncer_proto_rawDesc,
+                       NumEnums:      3,
+                       NumMessages:   11,
+                       NumExtensions: 0,
+                       NumServices:   1,
+               },
+               GoTypes:           file_syncer_proto_goTypes,
+               DependencyIndexes: file_syncer_proto_depIdxs,
+               EnumInfos:         file_syncer_proto_enumTypes,
+               MessageInfos:      file_syncer_proto_msgTypes,
+       }.Build()
+       File_syncer_proto = out.File
+       file_syncer_proto_rawDesc = nil
+       file_syncer_proto_goTypes = nil
+       file_syncer_proto_depIdxs = nil
 }
 
 // Reference imports to suppress errors if they are not otherwise used.
@@ -702,6 +1299,20 @@ type SyncServer interface {
        IncrementPull(context.Context, *IncrementPullRequest) (*SyncData, error)
 }
 
+// UnimplementedSyncServer can be embedded to have forward compatible 
implementations.
+type UnimplementedSyncServer struct {
+}
+
+func (*UnimplementedSyncServer) Pull(context.Context, *PullRequest) 
(*SyncData, error) {
+       return nil, status.Errorf(codes.Unimplemented, "method Pull not 
implemented")
+}
+func (*UnimplementedSyncServer) DeclareDataLength(context.Context, 
*DeclareRequest) (*DeclareResponse, error) {
+       return nil, status.Errorf(codes.Unimplemented, "method 
DeclareDataLength not implemented")
+}
+func (*UnimplementedSyncServer) IncrementPull(context.Context, 
*IncrementPullRequest) (*SyncData, error) {
+       return nil, status.Errorf(codes.Unimplemented, "method IncrementPull 
not implemented")
+}
+
 func RegisterSyncServer(s *grpc.Server, srv SyncServer) {
        s.RegisterService(&_Sync_serviceDesc, srv)
 }
diff --git a/syncer/server/transform.go b/syncer/server/transform.go
index d25bb02..8661d6e 100644
--- a/syncer/server/transform.go
+++ b/syncer/server/transform.go
@@ -28,9 +28,10 @@ import (
        "github.com/apache/servicecomb-service-center/pkg/dump"
        "github.com/apache/servicecomb-service-center/pkg/log"
        "github.com/apache/servicecomb-service-center/syncer/plugins"
+       
"github.com/apache/servicecomb-service-center/syncer/plugins/servicecenter"
        pb "github.com/apache/servicecomb-service-center/syncer/proto"
        scpb "github.com/go-chassis/cari/discovery"
-       "github.com/gogo/protobuf/proto"
+       "google.golang.org/protobuf/proto"
 )
 
 const (
@@ -94,7 +95,8 @@ func toSyncService(service *scpb.MicroService) (syncService 
*pb.SyncService) {
                syncService.Status = pb.SyncService_UNKNOWN
        }
 
-       content, err := proto.Marshal(service)
+       serviceInpbsc := servicecenter.ServiceCopy(service)
+       content, err := proto.Marshal(serviceInpbsc)
        if err != nil {
                log.Error("transform sc service to syncer service failed: %s", 
err)
                return
@@ -158,7 +160,8 @@ func toSyncInstance(serviceID string, instance 
*scpb.MicroServiceInstance) (sync
                }
        }
 
-       content, err := proto.Marshal(instance)
+       instaceInpbsc := servicecenter.InstanceCopy(instance)
+       content, err := proto.Marshal(instaceInpbsc)
        if err != nil {
                log.Error("transform sc instance to syncer instance failed: 
%s", err)
                return
@@ -178,7 +181,8 @@ func schemaExpansions(service *scpb.MicroService, schemas 
[]*scpb.Schema) (expan
                        continue
                }
 
-               content, err := proto.Marshal(val)
+               schemaInpbsc := servicecenter.SchemaCopy(val)
+               content, err := proto.Marshal(schemaInpbsc)
                if err != nil {
                        log.Error(fmt.Sprintf("proto marshal schemas failed, 
app = %s, service = %s, version = %s datasource = %s",
                                service.AppId, service.ServiceName, 
service.Version, expansionSchema), err)
diff --git a/syncer/servicecenter/storage/storage.go 
b/syncer/servicecenter/storage/storage.go
index 4850175..f80d8f8 100644
--- a/syncer/servicecenter/storage/storage.go
+++ b/syncer/servicecenter/storage/storage.go
@@ -23,7 +23,7 @@ import (
        "github.com/apache/servicecomb-service-center/pkg/log"
        pb "github.com/apache/servicecomb-service-center/syncer/proto"
        "github.com/coreos/etcd/clientv3"
-       "github.com/gogo/protobuf/proto"
+       "google.golang.org/protobuf/proto"
 )
 
 type Storage interface {

Reply via email to