You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by li...@apache.org on 2022/01/17 12:59:14 UTC

[servicecomb-service-center] 01/01: Bug: return internal properties when list all microservices

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

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

commit 2de96b03a37450cde71a2fa2cab291f4f4235915
Author: little-cui <su...@qq.com>
AuthorDate: Mon Jan 17 20:58:51 2022 +0800

    Bug: return internal properties when list all microservices
---
 datasource/etcd/etcd.go   |  6 +++++-
 datasource/etcd/ms.go     | 49 +++++++++++++++++++++++++++++++----------------
 datasource/mongo/mongo.go |  6 +++++-
 datasource/mongo/ms.go    |  3 ++-
 datasource/options.go     |  3 ++-
 server/server.go          |  7 ++++---
 6 files changed, 50 insertions(+), 24 deletions(-)

diff --git a/datasource/etcd/etcd.go b/datasource/etcd/etcd.go
index 75ebf72..19ab461 100644
--- a/datasource/etcd/etcd.go
+++ b/datasource/etcd/etcd.go
@@ -94,7 +94,11 @@ func NewDataSource(opts datasource.Options) (datasource.DataSource, error) {
 	if err := inst.initialize(); err != nil {
 		return nil, err
 	}
-	inst.metadataManager = newMetadataManager(opts.SchemaNotEditable, opts.InstanceTTL)
+	inst.metadataManager = &MetadataManager{
+		SchemaNotEditable:  opts.SchemaNotEditable,
+		InstanceTTL:        opts.InstanceTTL,
+		InstanceProperties: opts.InstanceProperties,
+	}
 	inst.sysManager = newSysManager()
 	inst.depManager = &DepManager{}
 	inst.scManager = &SCManager{}
diff --git a/datasource/etcd/ms.go b/datasource/etcd/ms.go
index 355c08d..c20a370 100644
--- a/datasource/etcd/ms.go
+++ b/datasource/etcd/ms.go
@@ -57,14 +57,8 @@ type MetadataManager struct {
 	// SchemaNotEditable determines whether schema modification is not allowed
 	SchemaNotEditable bool
 	// InstanceTTL options
-	InstanceTTL int64
-}
-
-func newMetadataManager(schemaNotEditable bool, instanceTTL int64) datasource.MetadataManager {
-	return &MetadataManager{
-		SchemaNotEditable: schemaNotEditable,
-		InstanceTTL:       instanceTTL,
-	}
+	InstanceTTL        int64
+	InstanceProperties map[string]string
 }
 
 // RegisterService implement:
@@ -299,16 +293,9 @@ func (ds *MetadataManager) ListServiceDetail(ctx context.Context, request *pb.Ge
 			return nil, pb.NewError(pb.ErrInternal, err.Error())
 		}
 		serviceDetail.MicroService = service
-		tmpServiceDetail := &pb.ServiceDetail{}
-		err = copier.CopyWithOption(tmpServiceDetail, serviceDetail, copier.Option{DeepCopy: true})
+		tmpServiceDetail, err := ds.copyOne(serviceDetail)
 		if err != nil {
-			return nil, pb.NewError(pb.ErrInternal, err.Error())
-		}
-		tmpServiceDetail.MicroService.Properties = nil
-		tmpServiceDetail.MicroService.Schemas = nil
-		instances := tmpServiceDetail.Instances
-		for _, instance := range instances {
-			instance.Properties = nil
+			return nil, err
 		}
 		allServiceDetails = append(allServiceDetails, tmpServiceDetail)
 	}
@@ -319,6 +306,34 @@ func (ds *MetadataManager) ListServiceDetail(ctx context.Context, request *pb.Ge
 	}, nil
 }
 
+func (ds *MetadataManager) copyOne(serviceDetail *pb.ServiceDetail) (*pb.ServiceDetail, error) {
+	tmpServiceDetail := &pb.ServiceDetail{}
+	err := copier.CopyWithOption(tmpServiceDetail, serviceDetail, copier.Option{DeepCopy: true})
+	if err != nil {
+		return nil, pb.NewError(pb.ErrInternal, err.Error())
+	}
+	tmpServiceDetail.MicroService.Properties = nil
+	tmpServiceDetail.MicroService.Schemas = nil
+	instances := tmpServiceDetail.Instances
+	for _, instance := range instances {
+		instance.Properties = ds.removeCustomProperties(instance.Properties)
+	}
+	return tmpServiceDetail, nil
+}
+
+func (ds *MetadataManager) removeCustomProperties(properties map[string]string) map[string]string {
+	if len(ds.InstanceProperties) == 0 {
+		return nil
+	}
+	props := make(map[string]string, 0)
+	for k, v := range properties {
+		if _, ok := ds.InstanceProperties[k]; ok {
+			props[k] = v
+		}
+	}
+	return props
+}
+
 func (ds *MetadataManager) filterServices(domainProject string, request *pb.GetServicesInfoRequest, service *pb.MicroService) bool {
 	if !request.WithShared && datasource.IsGlobal(pb.MicroServiceToKey(domainProject, service)) {
 		return false
diff --git a/datasource/mongo/mongo.go b/datasource/mongo/mongo.go
index 8bac3c4..68e6b32 100644
--- a/datasource/mongo/mongo.go
+++ b/datasource/mongo/mongo.go
@@ -74,7 +74,11 @@ func NewDataSource(opts datasource.Options) (datasource.DataSource, error) {
 	inst.scManager = &SCManager{}
 	inst.depManager = &DepManager{}
 	inst.sysManager = &SysManager{}
-	inst.metadataManager = &MetadataManager{SchemaNotEditable: opts.SchemaNotEditable, InstanceTTL: opts.InstanceTTL}
+	inst.metadataManager = &MetadataManager{
+		SchemaNotEditable:  opts.SchemaNotEditable,
+		InstanceTTL:        opts.InstanceTTL,
+		InstanceProperties: opts.InstanceProperties,
+	}
 	inst.metricsManager = &MetricsManager{}
 	return inst, nil
 }
diff --git a/datasource/mongo/ms.go b/datasource/mongo/ms.go
index 45fb2a7..37fe414 100644
--- a/datasource/mongo/ms.go
+++ b/datasource/mongo/ms.go
@@ -61,7 +61,8 @@ type MetadataManager struct {
 	// SchemaNotEditable determines whether schema modification is not allowed
 	SchemaNotEditable bool
 	// InstanceTTL options
-	InstanceTTL int64
+	InstanceTTL        int64
+	InstanceProperties map[string]string
 }
 
 func (ds *MetadataManager) RegisterService(ctx context.Context, request *discovery.CreateServiceRequest) (*discovery.CreateServiceResponse, error) {
diff --git a/datasource/options.go b/datasource/options.go
index 7a136db..e9ce0d7 100644
--- a/datasource/options.go
+++ b/datasource/options.go
@@ -28,5 +28,6 @@ type Options struct {
 	EnableCache       bool
 	SchemaNotEditable bool
 	// InstanceTTL: the default ttl of instance lease
-	InstanceTTL int64
+	InstanceTTL        int64
+	InstanceProperties map[string]string
 }
diff --git a/server/server.go b/server/server.go
index 76a2aea..a26703f 100644
--- a/server/server.go
+++ b/server/server.go
@@ -124,9 +124,10 @@ func (s *ServiceCenterServer) initDatasource() {
 				}
 			},
 		},
-		EnableCache:       config.GetRegistry().EnableCache,
-		InstanceTTL:       config.GetRegistry().InstanceTTL,
-		SchemaNotEditable: config.GetRegistry().SchemaNotEditable,
+		EnableCache:        config.GetRegistry().EnableCache,
+		SchemaNotEditable:  config.GetRegistry().SchemaNotEditable,
+		InstanceTTL:        config.GetRegistry().InstanceTTL,
+		InstanceProperties: config.GetStringMap("registry.instance.properties"),
 	}); err != nil {
 		log.Fatal("init datasource failed", err)
 	}