You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by "chengyouling (via GitHub)" <gi...@apache.org> on 2023/08/25 11:40:20 UTC

[GitHub] [servicecomb-service-center] chengyouling commented on a diff in pull request #1425: multi instances change status by properties

chengyouling commented on code in PR #1425:
URL: https://github.com/apache/servicecomb-service-center/pull/1425#discussion_r1305548773


##########
datasource/mongo/ms.go:
##########
@@ -1677,3 +1680,74 @@ func formatRevision(consumerServiceID string, instances []*discovery.MicroServic
 func (ds *MetadataManager) Statistics(ctx context.Context, withShared bool) (*discovery.Statistics, error) {
 	return statistics(ctx, withShared)
 }
+
+func (ds *MetadataManager) UpdateManyInstanceStatus(ctx context.Context, props map[string]string, status string) error {
+	resp, _ := ds.ListManyInstances(ctx, &discovery.GetAllInstancesRequest{})
+	//remoteIP := util.GetIPFromContext(ctx)
+
+	instances := resp.Instances
+	if len(instances) == 0 {
+		return nil
+	}
+	options := make([]etcdadpt.OpOptions, 0)
+	cmps := make([]etcdadpt.CmpOptions, 0)
+
+	domainProject := util.ParseDomainProject(ctx)
+	filterInstances := make([]*discovery.MicroServiceInstance, 0)
+
+	//microservice, err := eutil.GetService(ctx, domainProject, request.ServiceId)
+	//copyServiceRef := *microservice
+	//copyServiceRef.Properties = {"status":  request.Status}
+	//copyServiceRef.ModTimestamp = strconv.FormatInt(time.Now().Unix(), 10)
+	//
+	//data, err := json.Marshal(copyServiceRef)
+	for _, instance := range instances {
+		var t = true
+		for k, v := range props {
+			value, ok := instance.Properties[k]
+			if ok {
+				if value != v {
+					t = false
+					break
+				}
+			} else {
+				t = false
+				break
+			}
+			if t {
+				filterInstances = append(filterInstances, instance)
+				key := path.GenerateServiceTagKey(domainProject, instance.ServiceId)
+				//更新状态
+				instance.Status = status
+				data, err := json.Marshal(instance)
+				leaseID, err := serviceUtil.GetLeaseID(ctx, domainProject, instance.ServiceId, instance.InstanceId)
+				options = append(options, etcdadpt.Ops(etcdadpt.OpPut(etcdadpt.WithStrKey(key), etcdadpt.WithValue(data), etcdadpt.WithLease(leaseID)))...)
+				if err != nil {
+					log.Error(fmt.Sprintf("get leaseId error"), err)
+				}
+
+				cmps = append(cmps, etcdadpt.If(etcdadpt.NotEqualVer(path.GenerateServiceKey(domainProject, instance.ServiceId), 0))...)
+			}
+		}
+	}
+	//updateStatusFlag := util.StringJoin([]string{request.ServiceId, request.InstanceId, request.Status}, "/")

Review Comment:
   注释的代码如果不需要,不要体现在PR



##########
datasource/mongo/ms.go:
##########
@@ -1677,3 +1680,74 @@ func formatRevision(consumerServiceID string, instances []*discovery.MicroServic
 func (ds *MetadataManager) Statistics(ctx context.Context, withShared bool) (*discovery.Statistics, error) {
 	return statistics(ctx, withShared)
 }
+
+func (ds *MetadataManager) UpdateManyInstanceStatus(ctx context.Context, props map[string]string, status string) error {
+	resp, _ := ds.ListManyInstances(ctx, &discovery.GetAllInstancesRequest{})
+	//remoteIP := util.GetIPFromContext(ctx)
+
+	instances := resp.Instances
+	if len(instances) == 0 {
+		return nil
+	}
+	options := make([]etcdadpt.OpOptions, 0)
+	cmps := make([]etcdadpt.CmpOptions, 0)
+
+	domainProject := util.ParseDomainProject(ctx)
+	filterInstances := make([]*discovery.MicroServiceInstance, 0)
+
+	//microservice, err := eutil.GetService(ctx, domainProject, request.ServiceId)
+	//copyServiceRef := *microservice
+	//copyServiceRef.Properties = {"status":  request.Status}
+	//copyServiceRef.ModTimestamp = strconv.FormatInt(time.Now().Unix(), 10)
+	//
+	//data, err := json.Marshal(copyServiceRef)
+	for _, instance := range instances {
+		var t = true
+		for k, v := range props {
+			value, ok := instance.Properties[k]
+			if ok {
+				if value != v {
+					t = false
+					break
+				}
+			} else {
+				t = false
+				break
+			}
+			if t {
+				filterInstances = append(filterInstances, instance)
+				key := path.GenerateServiceTagKey(domainProject, instance.ServiceId)
+				//更新状态
+				instance.Status = status
+				data, err := json.Marshal(instance)
+				leaseID, err := serviceUtil.GetLeaseID(ctx, domainProject, instance.ServiceId, instance.InstanceId)
+				options = append(options, etcdadpt.Ops(etcdadpt.OpPut(etcdadpt.WithStrKey(key), etcdadpt.WithValue(data), etcdadpt.WithLease(leaseID)))...)
+				if err != nil {
+					log.Error(fmt.Sprintf("get leaseId error"), err)
+				}
+
+				cmps = append(cmps, etcdadpt.If(etcdadpt.NotEqualVer(path.GenerateServiceKey(domainProject, instance.ServiceId), 0))...)
+			}
+		}
+	}
+	//updateStatusFlag := util.StringJoin([]string{request.ServiceId, request.InstanceId, request.Status}, "/")

Review Comment:
   注释的代码如果不需要,不要体现在PR



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@servicecomb.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org