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

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


The following commit(s) were added to refs/heads/dev by this push:
     new 59149cd2 [fix] fix some environment problems (#1475)
59149cd2 is described below

commit 59149cd25ca59b169a4d5e13a3358671dbe8a718
Author: tornado-ssy <[email protected]>
AuthorDate: Thu Jun 6 17:33:26 2024 +0800

    [fix] fix some environment problems (#1475)
    
    Co-authored-by: songshiyuan 00649746 <[email protected]>
---
 datasource/etcd/ms.go                              | 7 ++-----
 datasource/etcd/util/environment_util.go           | 7 +++++++
 server/service/disco/environment.go                | 2 --
 server/service/disco/metadata.go                   | 6 ++++--
 server/service/registry/registry.go                | 2 +-
 server/service/validator/microservice_validator.go | 2 +-
 6 files changed, 15 insertions(+), 11 deletions(-)

diff --git a/datasource/etcd/ms.go b/datasource/etcd/ms.go
index bb0cb71f..be9429a1 100644
--- a/datasource/etcd/ms.go
+++ b/datasource/etcd/ms.go
@@ -48,7 +48,6 @@ import (
        "github.com/apache/servicecomb-service-center/pkg/util"
        "github.com/apache/servicecomb-service-center/server/core"
        "github.com/apache/servicecomb-service-center/server/plugin/uuid"
-       "github.com/apache/servicecomb-service-center/server/service/disco"
        quotasvc 
"github.com/apache/servicecomb-service-center/server/service/quota"
        "github.com/apache/servicecomb-service-center/syncer/service/event"
 )
@@ -1724,10 +1723,11 @@ func (ds *MetadataManager) RegisterEnvironment(ctx 
context.Context, request *ev.
        envIndex := path.GenerateEnvironmentIndexKey(envKey)
        // 产生全局environment id
        requestEnvID := env.ID
-       if len(requestEnvID) == 0 {
+       if len(requestEnvID) == 0 && len(env.Name) != 0 {
                ctx = util.SetContext(ctx, uuid.ContextKey, envIndex)
                env.ID = uuid.Generator().GetEnvID(ctx)
        }
+       envIndex = util.StringJoin([]string{envIndex, env.ID}, "/")
        data, err := json.Marshal(env)
        if err != nil {
                log.Error(fmt.Sprintf("create Environment[%s] failed, json 
marshal environment failed, operator: %s",
@@ -1765,7 +1765,6 @@ func (ds *MetadataManager) RegisterEnvironment(ctx 
context.Context, request *ev.
        if resp.Succeeded {
                log.Info(fmt.Sprintf("create environment[%s][%s] successfully, 
operator: %s",
                        env.ID, envFlag, remoteIP))
-               disco.EnvMap.Store(request.Environment.ID, struct{}{})
                return &ev.CreateEnvironmentResponse{
                        EnvId: env.ID,
                }, nil
@@ -1790,7 +1789,6 @@ func (ds *MetadataManager) RegisterEnvironment(ctx 
context.Context, request *ev.
        existEnvironmentID := util.BytesToStringWithNoCopy(resp.Kvs[0].Value)
        log.Warn(fmt.Sprintf("create environment[%s][%s] failed, environment 
already exists, operator: %s",
                existEnvironmentID, envFlag, remoteIP))
-       disco.EnvMap.Store(request.Environment.ID, struct{}{})
        return &ev.CreateEnvironmentResponse{
                EnvId: existEnvironmentID,
        }, nil
@@ -1916,6 +1914,5 @@ func (ds *MetadataManager) UnregisterEnvironment(ctx 
context.Context, request *e
        quotasvc.RemandEnvironment(ctx)
 
        log.Info(fmt.Sprintf("del environment[%s] successfully, operator: %s", 
environmentId, remoteIP))
-       disco.EnvMap.Delete(environment.ID)
        return nil
 }
diff --git a/datasource/etcd/util/environment_util.go 
b/datasource/etcd/util/environment_util.go
index be730967..a5958b94 100644
--- a/datasource/etcd/util/environment_util.go
+++ b/datasource/etcd/util/environment_util.go
@@ -42,6 +42,13 @@ func getEnvironmentsRawData(ctx context.Context, 
domainProject string) ([]*kvsto
        if err != nil {
                return nil, err
        }
+       opts1 := append(FromContext(ctx),
+               etcdadpt.WithStrKey(key))
+       resp1, err := sd.Environment().Search(ctx, opts1...)
+       if err != nil {
+               return nil, err
+       }
+       resp.Kvs = append(resp.Kvs, resp1.Kvs[0])
        return resp.Kvs, err
 }
 
diff --git a/server/service/disco/environment.go 
b/server/service/disco/environment.go
index e74b3a91..be900c4b 100644
--- a/server/service/disco/environment.go
+++ b/server/service/disco/environment.go
@@ -4,7 +4,6 @@ import (
        "context"
        "fmt"
        "strconv"
-       sync1 "sync"
        "time"
 
        pb "github.com/go-chassis/cari/discovery"
@@ -18,7 +17,6 @@ import (
 )
 
 var PreEnv util.CtxKey = "_pre_env"
-var EnvMap sync1.Map
 
 func ListEnvironments(ctx context.Context) (*ev.GetEnvironmentsResponse, 
error) {
        return datasource.GetMetadataManager().ListEnvironments(ctx)
diff --git a/server/service/disco/metadata.go b/server/service/disco/metadata.go
index 26f43243..06847f2c 100644
--- a/server/service/disco/metadata.go
+++ b/server/service/disco/metadata.go
@@ -28,6 +28,7 @@ import (
        "github.com/go-chassis/foundation/gopool"
 
        "github.com/apache/servicecomb-service-center/datasource"
+       eutil 
"github.com/apache/servicecomb-service-center/datasource/etcd/util"
        "github.com/apache/servicecomb-service-center/pkg/log"
        "github.com/apache/servicecomb-service-center/pkg/util"
        "github.com/apache/servicecomb-service-center/server/core"
@@ -62,8 +63,9 @@ func registerService(ctx context.Context, request 
*pb.CreateServiceRequest) (*pb
        serviceFlag := util.StringJoin([]string{
                service.Environment, service.AppId, service.ServiceName, 
service.Version}, "/")
        if !core.IsSCInstance(ctx) {
-               _, ok := EnvMap.Load(service.Environment)
-               if !ok {
+               domainProject := util.ParseDomainProject(ctx)
+               _, err := eutil.GetEnvironment(ctx, domainProject, 
service.Environment)
+               if err != nil {
                        log.Error(fmt.Sprintf("create micro-service[%s] failed, 
operator: %s", serviceFlag, remoteIP), errors.New("env not exist"))
                        return nil, pb.NewError(pb.ErrInvalidParams, "env not 
exist")
                }
diff --git a/server/service/registry/registry.go 
b/server/service/registry/registry.go
index e12c0a3c..612103d0 100644
--- a/server/service/registry/registry.go
+++ b/server/service/registry/registry.go
@@ -171,7 +171,7 @@ func SelfEnvRegister(ctx context.Context) error {
 func selfEnvRegister(pCtx context.Context) error {
        ctx := addDefaultEnvContextValue(pCtx)
        var req = new(env.CreateEnvironmentRequest)
-       preEnv := env.Environment{Name: ""}
+       preEnv := env.Environment{Name: "", ID: "", Description: "this is 
prepared env,whose id and name are empty"}
        req.Environment = &preEnv
        _, err := discosvc.RegistryEnvironment(ctx, req)
        if err != nil {
diff --git a/server/service/validator/microservice_validator.go 
b/server/service/validator/microservice_validator.go
index d3d9a94e..7dc6ce25 100644
--- a/server/service/validator/microservice_validator.go
+++ b/server/service/validator/microservice_validator.go
@@ -58,7 +58,7 @@ var (
 
 func MicroServiceKeyValidator() *validate.Validator {
        return microServiceKeyValidator.Init(func(v *validate.Validator) {
-               v.AddRule("Environment", &validate.Rule{Min: 1, Max: 128, 
Regexp: envRegex})
+               v.AddRule("Environment", &validate.Rule{Min: 0, Max: 128, 
Regexp: envRegex})
                v.AddRule("AppId", &validate.Rule{Min: 1, Max: 160, Regexp: 
nameRegex})
                v.AddRule("ServiceName", &validate.Rule{Max: 128, Regexp: 
nameRegex})
                v.AddRule("Version", &validate.Rule{Min: 1, Max: 64, Regexp: 
versionRegex})

Reply via email to