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 9f3aa12  Change: remove the option 'SchemaNotEditable' (#1272)
9f3aa12 is described below

commit 9f3aa1292c72d7e908f192b555c3fe454bdf04d2
Author: little-cui <[email protected]>
AuthorDate: Wed Feb 23 19:26:44 2022 +0800

    Change: remove the option 'SchemaNotEditable' (#1272)
---
 datasource/etcd/etcd.go     |   1 -
 datasource/etcd/ms.go       | 229 ++++++++++++--------------------------------
 datasource/etcd/util.go     |  12 ---
 datasource/mongo/mongo.go   |   1 -
 datasource/mongo/ms.go      | 183 +++++++++--------------------------
 datasource/options.go       |   3 +-
 datasource/schema_test.go   |  52 +---------
 etc/conf/app.yaml           |   2 -
 examples/dev/conf/app.yaml  |   2 -
 server/config/config.go     |   3 +-
 server/config/server.go     |   2 -
 server/core/microservice.go |   4 -
 server/server.go            |   1 -
 13 files changed, 113 insertions(+), 382 deletions(-)

diff --git a/datasource/etcd/etcd.go b/datasource/etcd/etcd.go
index e4f0cdd..7d88a33 100644
--- a/datasource/etcd/etcd.go
+++ b/datasource/etcd/etcd.go
@@ -104,7 +104,6 @@ func NewDataSource(opts datasource.Options) 
(datasource.DataSource, error) {
                return nil, err
        }
        inst.metadataManager = &MetadataManager{
-               SchemaNotEditable:  opts.SchemaNotEditable,
                InstanceTTL:        opts.InstanceTTL,
                InstanceProperties: opts.InstanceProperties,
        }
diff --git a/datasource/etcd/ms.go b/datasource/etcd/ms.go
index 917f270..470e4de 100644
--- a/datasource/etcd/ms.go
+++ b/datasource/etcd/ms.go
@@ -47,14 +47,7 @@ import (
        "github.com/apache/servicecomb-service-center/syncer/service/event"
 )
 
-var (
-       ErrUndefinedSchemaID    = pb.NewError(pb.ErrUndefinedSchemaID, 
datasource.ErrUndefinedSchemaID.Error())
-       ErrModifySchemaNotAllow = pb.NewError(pb.ErrModifySchemaNotAllow, 
datasource.ErrModifySchemaNotAllow.Error())
-)
-
 type MetadataManager struct {
-       // SchemaNotEditable determines whether schema modification is not 
allowed
-       SchemaNotEditable bool
        // InstanceTTL options
        InstanceTTL        int64
        InstanceProperties map[string]string
@@ -133,35 +126,36 @@ func (ds *MetadataManager) RegisterService(ctx 
context.Context, request *pb.Crea
                        serviceFlag, remoteIP), err)
                return nil, pb.NewError(pb.ErrUnavailableBackend, err.Error())
        }
-       if !resp.Succeeded {
-               if len(requestServiceID) != 0 {
-                       if len(resp.Kvs) == 0 || requestServiceID != 
util.BytesToStringWithNoCopy(resp.Kvs[0].Value) {
-                               log.Warn(fmt.Sprintf("create micro-service[%s] 
failed, service already exists, operator: %s",
-                                       serviceFlag, remoteIP))
-                               return nil, 
pb.NewError(pb.ErrServiceAlreadyExists,
-                                       "ServiceID conflict or found the same 
service with different id.")
-                       }
-               }
-
-               if len(resp.Kvs) == 0 {
-                       // internal error?
-                       log.Error(fmt.Sprintf("create micro-service[%s] failed, 
unexpected txn response, operator: %s",
-                               serviceFlag, remoteIP), nil)
-                       return nil, pb.NewError(pb.ErrInternal, "Unexpected txn 
response.")
-               }
 
-               existServiceID := 
util.BytesToStringWithNoCopy(resp.Kvs[0].Value)
-               log.Warn(fmt.Sprintf("create micro-service[%s][%s] failed, 
service already exists, operator: %s",
-                       existServiceID, serviceFlag, remoteIP))
+       if resp.Succeeded {
+               log.Info(fmt.Sprintf("create micro-service[%s][%s] 
successfully, operator: %s",
+                       service.ServiceId, serviceFlag, remoteIP))
                return &pb.CreateServiceResponse{
-                       ServiceId: existServiceID,
+                       ServiceId: service.ServiceId,
                }, nil
        }
 
-       log.Info(fmt.Sprintf("create micro-service[%s][%s] successfully, 
operator: %s",
-               service.ServiceId, serviceFlag, remoteIP))
+       if len(requestServiceID) != 0 {
+               if len(resp.Kvs) == 0 || requestServiceID != 
util.BytesToStringWithNoCopy(resp.Kvs[0].Value) {
+                       log.Warn(fmt.Sprintf("create micro-service[%s] failed, 
service already exists, operator: %s",
+                               serviceFlag, remoteIP))
+                       return nil, pb.NewError(pb.ErrServiceAlreadyExists,
+                               "ServiceID conflict or found the same service 
with different id.")
+               }
+       }
+
+       if len(resp.Kvs) == 0 {
+               // internal error?
+               log.Error(fmt.Sprintf("create micro-service[%s] failed, 
unexpected txn response, operator: %s",
+                       serviceFlag, remoteIP), nil)
+               return nil, pb.NewError(pb.ErrInternal, "Unexpected txn 
response.")
+       }
+
+       existServiceID := util.BytesToStringWithNoCopy(resp.Kvs[0].Value)
+       log.Warn(fmt.Sprintf("create micro-service[%s][%s] failed, service 
already exists, operator: %s",
+               existServiceID, serviceFlag, remoteIP))
        return &pb.CreateServiceResponse{
-               ServiceId: service.ServiceId,
+               ServiceId: existServiceID,
        }, nil
 }
 
@@ -1415,96 +1409,49 @@ func (ds *MetadataManager) modifySchemas(ctx 
context.Context, domainProject stri
                return pb.NewError(pb.ErrUnavailableBackend, err.Error())
        }
 
-       needUpdateSchemas, needAddSchemas, needDeleteSchemas, nonExistSchemaIds 
:=
+       needUpdateSchemas, needAddSchemas, needDeleteSchemas, _ :=
                datasource.SchemasAnalysis(schemas, schemasFromDatabase, 
service.Schemas)
 
        pluginOps := make([]etcdadpt.OpOptions, 0)
-       if !ds.isSchemaEditable() {
-               if len(service.Schemas) == 0 {
-                       errQuota := quotasvc.ApplySchema(ctx, serviceID, 
int64(len(nonExistSchemaIds)))
-                       if errQuota != nil {
-                               log.Error(fmt.Sprintf("modify service[%s] 
schemas failed, operator: %s", serviceID, remoteIP), errQuota)
-                               return errQuota
-                       }
-
-                       service.Schemas = nonExistSchemaIds
-                       opts, err := eutil.UpdateService(ctx, domainProject, 
serviceID, service)
-                       if err != nil {
-                               log.Error(fmt.Sprintf("modify service[%s] 
schemas failed, update service.Schemas failed, operator: %s",
-                                       serviceID, remoteIP), err)
-                               return pb.NewError(pb.ErrInternal, err.Error())
-                       }
-                       pluginOps = append(pluginOps, opts...)
-               } else {
-                       if len(nonExistSchemaIds) != 0 {
-                               errInfo := fmt.Errorf("non-existent schemaIDs 
%v", nonExistSchemaIds)
-                               log.Error(fmt.Sprintf("modify service[%s] 
schemas failed, operator: %s", serviceID, remoteIP), errInfo)
-                               return pb.NewError(pb.ErrUndefinedSchemaID, 
errInfo.Error())
-                       }
-                       for _, needUpdateSchema := range needUpdateSchemas {
-                               exist, err := isExistSchemaSummary(ctx, 
domainProject, serviceID, needUpdateSchema.SchemaId)
-                               if err != nil {
-                                       return pb.NewError(pb.ErrInternal, 
err.Error())
-                               }
-                               if !exist {
-                                       opts, err := putSchema(ctx, 
domainProject, serviceID, needUpdateSchema)
-                                       if err != nil {
-                                               return 
pb.NewError(pb.ErrInternal, err.Error())
-                                       }
-                                       pluginOps = append(pluginOps, opts...)
-                               } else {
-                                       log.Warn(fmt.Sprintf("schema[%s/%s] and 
it's summary already exist, skip to update, operator: %s",
-                                               serviceID, 
needUpdateSchema.SchemaId, remoteIP))
-                               }
-                       }
-               }
-
-               for _, schema := range needAddSchemas {
-                       log.Info(fmt.Sprintf("add new schema[%s/%s], operator: 
%s", serviceID, schema.SchemaId, remoteIP))
-                       opts, _ := putSchema(ctx, domainProject, 
service.ServiceId, schema)
-                       pluginOps = append(pluginOps, opts...)
-               }
-       } else {
-               quotaSize := len(needAddSchemas) - len(needDeleteSchemas)
-               if quotaSize > 0 {
-                       errQuota := quotasvc.ApplySchema(ctx, serviceID, 
int64(quotaSize))
-                       if errQuota != nil {
-                               log.Error(fmt.Sprintf("modify service[%s] 
schemas failed, operator: %s", serviceID, remoteIP), errQuota)
-                               return errQuota
-                       }
-               }
-
-               var schemaIDs []string
-               for _, schema := range needAddSchemas {
-                       log.Info(fmt.Sprintf("add new schema[%s/%s], operator: 
%s", serviceID, schema.SchemaId, remoteIP))
-                       opts, _ := putSchema(ctx, domainProject, 
service.ServiceId, schema)
-                       pluginOps = append(pluginOps, opts...)
-                       schemaIDs = append(schemaIDs, schema.SchemaId)
+       quotaSize := len(needAddSchemas) - len(needDeleteSchemas)
+       if quotaSize > 0 {
+               errQuota := quotasvc.ApplySchema(ctx, serviceID, 
int64(quotaSize))
+               if errQuota != nil {
+                       log.Error(fmt.Sprintf("modify service[%s] schemas 
failed, operator: %s", serviceID, remoteIP), errQuota)
+                       return errQuota
                }
+       }
 
-               for _, schema := range needUpdateSchemas {
-                       log.Info(fmt.Sprintf("update schema[%s/%s], operator: 
%s", serviceID, schema.SchemaId, remoteIP))
-                       opts, _ := putSchema(ctx, domainProject, serviceID, 
schema)
-                       pluginOps = append(pluginOps, opts...)
-                       schemaIDs = append(schemaIDs, schema.SchemaId)
-               }
+       var schemaIDs []string
+       for _, schema := range needAddSchemas {
+               log.Info(fmt.Sprintf("add new schema[%s/%s], operator: %s", 
serviceID, schema.SchemaId, remoteIP))
+               opts, _ := putSchema(ctx, domainProject, service.ServiceId, 
schema)
+               pluginOps = append(pluginOps, opts...)
+               schemaIDs = append(schemaIDs, schema.SchemaId)
+       }
 
-               for _, schema := range needDeleteSchemas {
-                       log.Info(fmt.Sprintf("delete non-existent 
schema[%s/%s], operator: %s", serviceID, schema.SchemaId, remoteIP))
-                       opts, _ := deleteSchema(ctx, domainProject, serviceID, 
schema)
-                       pluginOps = append(pluginOps, opts...)
-               }
+       for _, schema := range needUpdateSchemas {
+               log.Info(fmt.Sprintf("update schema[%s/%s], operator: %s", 
serviceID, schema.SchemaId, remoteIP))
+               opts, _ := putSchema(ctx, domainProject, serviceID, schema)
+               pluginOps = append(pluginOps, opts...)
+               schemaIDs = append(schemaIDs, schema.SchemaId)
+       }
 
-               service.Schemas = schemaIDs
-               opts, err := eutil.UpdateService(ctx, domainProject, serviceID, 
service)
-               if err != nil {
-                       log.Error(fmt.Sprintf("modify service[%s] schemas 
failed, update service.Schemas failed, operator: %s",
-                               serviceID, remoteIP), err)
-                       return pb.NewError(pb.ErrInternal, err.Error())
-               }
+       for _, schema := range needDeleteSchemas {
+               log.Info(fmt.Sprintf("delete non-existent schema[%s/%s], 
operator: %s", serviceID, schema.SchemaId, remoteIP))
+               opts, _ := deleteSchema(ctx, domainProject, serviceID, schema)
                pluginOps = append(pluginOps, opts...)
        }
 
+       service.Schemas = schemaIDs
+       opts, err := eutil.UpdateService(ctx, domainProject, serviceID, service)
+       if err != nil {
+               log.Error(fmt.Sprintf("modify service[%s] schemas failed, 
update service.Schemas failed, operator: %s",
+                       serviceID, remoteIP), err)
+               return pb.NewError(pb.ErrInternal, err.Error())
+       }
+       pluginOps = append(pluginOps, opts...)
+
        if len(pluginOps) != 0 {
                resp, err := etcdadpt.TxnWithCmp(ctx, pluginOps,
                        
etcdadpt.If(etcdadpt.NotEqualVer(path.GenerateServiceKey(domainProject, 
serviceID), 0)),
@@ -1519,10 +1466,6 @@ func (ds *MetadataManager) modifySchemas(ctx 
context.Context, domainProject stri
        return nil
 }
 
-func (ds *MetadataManager) isSchemaEditable() bool {
-       return !ds.SchemaNotEditable
-}
-
 func (ds *MetadataManager) modifySchema(ctx context.Context, serviceID string, 
schema *pb.Schema) *errsvc.Error {
        remoteIP := util.GetIPFromContext(ctx)
        domainProject := util.ParseDomainProject(ctx)
@@ -1542,61 +1485,15 @@ func (ds *MetadataManager) modifySchema(ctx 
context.Context, serviceID string, s
 
        var pluginOps []etcdadpt.OpOptions
        isExist := isExistSchemaID(microService, []*pb.Schema{schema})
-
-       if !ds.isSchemaEditable() {
-               if len(microService.Schemas) != 0 && !isExist {
-                       return ErrUndefinedSchemaID
-               }
-
-               key := path.GenerateServiceSchemaKey(domainProject, serviceID, 
schemaID)
-               respSchema, err := sd.Schema().Search(ctx, 
etcdadpt.WithStrKey(key), etcdadpt.WithCountOnly())
+       if !isExist {
+               microService.Schemas = append(microService.Schemas, schemaID)
+               opts, err := eutil.UpdateService(ctx, domainProject, serviceID, 
microService)
                if err != nil {
-                       log.Error(fmt.Sprintf("modify schema[%s/%s] failed, get 
schema summary failed, operator: %s",
+                       log.Error(fmt.Sprintf("modify schema[%s/%s] failed, 
update microService.Schemas failed, operator: %s",
                                serviceID, schemaID, remoteIP), err)
-                       return pb.NewError(pb.ErrUnavailableBackend, 
err.Error())
-               }
-
-               if respSchema.Count != 0 {
-                       if len(schema.Summary) == 0 {
-                               log.Error(fmt.Sprintf("schema readonly mode, 
schema[%s/%s] already exists, can not be changed, operator: %s",
-                                       serviceID, schemaID, remoteIP), err)
-                               return ErrModifySchemaNotAllow
-                       }
-
-                       exist, err := isExistSchemaSummary(ctx, domainProject, 
serviceID, schemaID)
-                       if err != nil {
-                               log.Error(fmt.Sprintf("check schema[%s/%s] 
summary existence failed, operator: %s",
-                                       serviceID, schemaID, remoteIP), err)
-                               return pb.NewError(pb.ErrInternal, err.Error())
-                       }
-                       if exist {
-                               log.Error(fmt.Sprintf("schema readonly mode, 
schema[%s/%s] already exist, can not be changed, operator: %s",
-                                       serviceID, schemaID, remoteIP), err)
-                               return ErrModifySchemaNotAllow
-                       }
-               }
-
-               if len(microService.Schemas) == 0 {
-                       microService.Schemas = append(microService.Schemas, 
schemaID)
-                       opts, err := eutil.UpdateService(ctx, domainProject, 
serviceID, microService)
-                       if err != nil {
-                               log.Error(fmt.Sprintf("modify schema[%s/%s] 
failed, update microService.Schemas failed, operator: %s",
-                                       serviceID, schemaID, remoteIP), err)
-                               return pb.NewError(pb.ErrInternal, err.Error())
-                       }
-                       pluginOps = append(pluginOps, opts...)
-               }
-       } else {
-               if !isExist {
-                       microService.Schemas = append(microService.Schemas, 
schemaID)
-                       opts, err := eutil.UpdateService(ctx, domainProject, 
serviceID, microService)
-                       if err != nil {
-                               log.Error(fmt.Sprintf("modify schema[%s/%s] 
failed, update microService.Schemas failed, operator: %s",
-                                       serviceID, schemaID, remoteIP), err)
-                               return pb.NewError(pb.ErrInternal, err.Error())
-                       }
-                       pluginOps = append(pluginOps, opts...)
+                       return pb.NewError(pb.ErrInternal, err.Error())
                }
+               pluginOps = append(pluginOps, opts...)
        }
 
        opts, err := commitSchemaInfo(ctx, domainProject, serviceID, schema)
diff --git a/datasource/etcd/util.go b/datasource/etcd/util.go
index 25e9fd3..6aca94e 100644
--- a/datasource/etcd/util.go
+++ b/datasource/etcd/util.go
@@ -95,18 +95,6 @@ func checkSchemaInfoExist(ctx context.Context, key string) 
(bool, error) {
        return true, nil
 }
 
-func isExistSchemaSummary(ctx context.Context, domainProject, serviceID, 
schemaID string) (bool, error) {
-       key := path.GenerateServiceSchemaSummaryKey(domainProject, serviceID, 
schemaID)
-       resp, err := sd.SchemaSummary().Search(ctx, etcdadpt.WithStrKey(key), 
etcdadpt.WithCountOnly())
-       if err != nil {
-               return true, err
-       }
-       if resp.Count == 0 {
-               return false, nil
-       }
-       return true, nil
-}
-
 func putSchema(ctx context.Context, domainProject string, serviceID string, 
schema *pb.Schema) ([]etcdadpt.OpOptions, error) {
        opts := make([]etcdadpt.OpOptions, 0)
        key := path.GenerateServiceSchemaKey(domainProject, serviceID, 
schema.SchemaId)
diff --git a/datasource/mongo/mongo.go b/datasource/mongo/mongo.go
index bbde3f4..d6c2a2c 100644
--- a/datasource/mongo/mongo.go
+++ b/datasource/mongo/mongo.go
@@ -82,7 +82,6 @@ func NewDataSource(opts datasource.Options) 
(datasource.DataSource, error) {
        inst.depManager = &DepManager{}
        inst.sysManager = &SysManager{}
        inst.metadataManager = &MetadataManager{
-               SchemaNotEditable:  opts.SchemaNotEditable,
                InstanceTTL:        opts.InstanceTTL,
                InstanceProperties: opts.InstanceProperties,
        }
diff --git a/datasource/mongo/ms.go b/datasource/mongo/ms.go
index fd8a837..286207b 100644
--- a/datasource/mongo/ms.go
+++ b/datasource/mongo/ms.go
@@ -55,14 +55,7 @@ import (
 
 const baseTen = 10
 
-var (
-       ErrUndefinedSchemaID    = 
discovery.NewError(discovery.ErrUndefinedSchemaID, 
datasource.ErrUndefinedSchemaID.Error())
-       ErrModifySchemaNotAllow = 
discovery.NewError(discovery.ErrModifySchemaNotAllow, 
datasource.ErrModifySchemaNotAllow.Error())
-)
-
 type MetadataManager struct {
-       // SchemaNotEditable determines whether schema modification is not 
allowed
-       SchemaNotEditable bool
        // InstanceTTL options
        InstanceTTL        int64
        InstanceProperties map[string]string
@@ -746,108 +739,56 @@ func (ds *MetadataManager) modifySchemas(ctx 
context.Context, service *discovery
                return discovery.NewError(discovery.ErrUnavailableBackend, 
err.Error())
        }
 
-       needUpdateSchemas, needAddSchemas, needDeleteSchemas, nonExistSchemaIds 
:=
+       needUpdateSchemas, needAddSchemas, needDeleteSchemas, _ :=
                datasource.SchemasAnalysis(schemas, schemasFromDatabase, 
service.Schemas)
 
        var schemasOps []mongo.WriteModel
        var serviceOps []mongo.WriteModel
-       if !ds.isSchemaEditable() {
-               if len(service.Schemas) == 0 {
-                       errQuota := quotasvc.ApplySchema(ctx, serviceID, 
int64(len(nonExistSchemaIds)))
-                       if errQuota != nil {
-                               log.Error(fmt.Sprintf("modify service[%s] 
schemas failed, operator: %s", serviceID, remoteIP), errQuota)
-                               return errQuota
-                       }
-                       filter = mutil.NewDomainProjectFilter(domain, project, 
mutil.ServiceServiceID(serviceID))
-                       setFilter := 
mutil.NewFilter(mutil.ServiceSchemas(nonExistSchemaIds))
-                       updateFilter := mutil.NewFilter(mutil.Set(setFilter))
-                       serviceOps = append(serviceOps, 
mongo.NewUpdateOneModel().SetUpdate(updateFilter).SetFilter(filter))
-               } else {
-                       if len(nonExistSchemaIds) != 0 {
-                               errInfo := fmt.Errorf("non-existent schemaIDs 
%v", nonExistSchemaIds)
-                               log.Error(fmt.Sprintf("modify service %s 
schemas failed, operator: %s", serviceID, remoteIP), err)
-                               return 
discovery.NewError(discovery.ErrUndefinedSchemaID, errInfo.Error())
-                       }
-                       for _, needUpdateSchema := range needUpdateSchemas {
-                               exist, err := dao.SchemaSummaryExist(ctx, 
serviceID, needUpdateSchema.SchemaId)
-                               if err != nil {
-                                       return 
discovery.NewError(discovery.ErrInternal, err.Error())
-                               }
-                               if !exist {
-                                       filter = 
mutil.NewDomainProjectFilter(domain, project, mutil.ServiceID(serviceID), 
mutil.SchemaID(needUpdateSchema.SchemaId))
-                                       setFilter := mutil.NewFilter(
-                                               
mutil.Schema(needUpdateSchema.Schema),
-                                               
mutil.SchemaSummary(needUpdateSchema.Summary),
-                                       )
-                                       updateFilter := mutil.NewFilter(
-                                               mutil.Set(setFilter),
-                                       )
-                                       schemasOps = append(schemasOps, 
mongo.NewUpdateOneModel().SetFilter(filter).SetUpdate(updateFilter))
-                               } else {
-                                       log.Warn(fmt.Sprintf("schema[%s/%s] and 
it's summary already exist, skip to update, operator: %s",
-                                               serviceID, 
needUpdateSchema.SchemaId, remoteIP))
-                               }
-                       }
-               }
+       quotaSize := len(needAddSchemas) - len(needDeleteSchemas)
+       if quotaSize > 0 {
+               errQuota := quotasvc.ApplySchema(ctx, serviceID, 
int64(quotaSize))
+               if errQuota != nil {
+                       log.Error(fmt.Sprintf("modify service[%s] schemas 
failed, operator: %s", serviceID, remoteIP), errQuota)
+                       return errQuota
+               }
+       }
+       var schemaIDs []string
+       for _, schema := range needAddSchemas {
+               log.Info(fmt.Sprintf("add new schema[%s/%s], operator: %s", 
serviceID, schema.SchemaId, remoteIP))
+               schemasOps = append(schemasOps, 
mongo.NewInsertOneModel().SetDocument(&model.Schema{
+                       Domain:        domain,
+                       Project:       project,
+                       ServiceID:     serviceID,
+                       SchemaID:      schema.SchemaId,
+                       Schema:        schema.Schema,
+                       SchemaSummary: schema.Summary,
+               }))
+               schemaIDs = append(schemaIDs, schema.SchemaId)
+       }
+
+       for _, schema := range needUpdateSchemas {
+               log.Info(fmt.Sprintf("update schema[%s/%s], operator: %s", 
serviceID, schema.SchemaId, remoteIP))
+               filter := mutil.NewDomainProjectFilter(domain, project, 
mutil.ServiceID(serviceID), mutil.SchemaID(schema.SchemaId))
+               setFilter := mutil.NewFilter(
+                       mutil.Schema(schema.Schema),
+                       mutil.SchemaSummary(schema.Summary),
+               )
+               updateFilter := mutil.NewFilter(
+                       mutil.Set(setFilter),
+               )
+               schemasOps = append(schemasOps, 
mongo.NewUpdateOneModel().SetFilter(filter).SetUpdate(updateFilter))
+               schemaIDs = append(schemaIDs, schema.SchemaId)
+       }
 
-               for _, schema := range needAddSchemas {
-                       log.Info(fmt.Sprintf("add new schema[%s/%s], operator: 
%s", serviceID, schema.SchemaId, remoteIP))
-                       schemasOps = append(schemasOps, 
mongo.NewInsertOneModel().SetDocument(&model.Schema{
-                               Domain:        domain,
-                               Project:       project,
-                               ServiceID:     serviceID,
-                               SchemaID:      schema.SchemaId,
-                               Schema:        schema.Schema,
-                               SchemaSummary: schema.Summary,
-                       }))
-               }
-       } else {
-               quotaSize := len(needAddSchemas) - len(needDeleteSchemas)
-               if quotaSize > 0 {
-                       errQuota := quotasvc.ApplySchema(ctx, serviceID, 
int64(quotaSize))
-                       if errQuota != nil {
-                               log.Error(fmt.Sprintf("modify service[%s] 
schemas failed, operator: %s", serviceID, remoteIP), errQuota)
-                               return errQuota
-                       }
-               }
-               var schemaIDs []string
-               for _, schema := range needAddSchemas {
-                       log.Info(fmt.Sprintf("add new schema[%s/%s], operator: 
%s", serviceID, schema.SchemaId, remoteIP))
-                       schemasOps = append(schemasOps, 
mongo.NewInsertOneModel().SetDocument(&model.Schema{
-                               Domain:        domain,
-                               Project:       project,
-                               ServiceID:     serviceID,
-                               SchemaID:      schema.SchemaId,
-                               Schema:        schema.Schema,
-                               SchemaSummary: schema.Summary,
-                       }))
-                       schemaIDs = append(schemaIDs, schema.SchemaId)
-               }
-
-               for _, schema := range needUpdateSchemas {
-                       log.Info(fmt.Sprintf("update schema[%s/%s], operator: 
%s", serviceID, schema.SchemaId, remoteIP))
-                       filter = mutil.NewDomainProjectFilter(domain, project, 
mutil.ServiceID(serviceID), mutil.SchemaID(schema.SchemaId))
-                       setFilter := mutil.NewFilter(
-                               mutil.Schema(schema.Schema),
-                               mutil.SchemaSummary(schema.Summary),
-                       )
-                       updateFilter := mutil.NewFilter(
-                               mutil.Set(setFilter),
-                       )
-                       schemasOps = append(schemasOps, 
mongo.NewUpdateOneModel().SetFilter(filter).SetUpdate(updateFilter))
-                       schemaIDs = append(schemaIDs, schema.SchemaId)
-               }
-
-               for _, schema := range needDeleteSchemas {
-                       log.Info(fmt.Sprintf("delete non-existent 
schema[%s/%s], operator: %s", serviceID, schema.SchemaId, remoteIP))
-                       filter := mutil.NewDomainProjectFilter(domain, project, 
mutil.ServiceID(serviceID), mutil.SchemaID(schema.SchemaId))
-                       schemasOps = append(schemasOps, 
mongo.NewDeleteOneModel().SetFilter(filter))
-               }
-               filter := mutil.NewDomainProjectFilter(domain, project, 
mutil.ServiceServiceID(serviceID))
-               setFilter := mutil.NewFilter(mutil.ServiceSchemas(schemaIDs))
-               updateFilter := mutil.NewFilter(mutil.Set(setFilter))
-               serviceOps = append(serviceOps, 
mongo.NewUpdateOneModel().SetUpdate(updateFilter).SetFilter(filter))
+       for _, schema := range needDeleteSchemas {
+               log.Info(fmt.Sprintf("delete non-existent schema[%s/%s], 
operator: %s", serviceID, schema.SchemaId, remoteIP))
+               filter := mutil.NewDomainProjectFilter(domain, project, 
mutil.ServiceID(serviceID), mutil.SchemaID(schema.SchemaId))
+               schemasOps = append(schemasOps, 
mongo.NewDeleteOneModel().SetFilter(filter))
        }
+       filter = mutil.NewDomainProjectFilter(domain, project, 
mutil.ServiceServiceID(serviceID))
+       setFilter := mutil.NewFilter(mutil.ServiceSchemas(schemaIDs))
+       updateFilter := mutil.NewFilter(mutil.Set(setFilter))
+       serviceOps = append(serviceOps, 
mongo.NewUpdateOneModel().SetUpdate(updateFilter).SetFilter(filter))
        if len(schemasOps) > 0 {
                _, err = 
dmongo.GetClient().GetDB().Collection(model.CollectionSchema).BulkWrite(ctx, 
schemasOps)
                if err != nil {
@@ -871,7 +812,6 @@ func (ds *MetadataManager) modifySchemas(ctx 
context.Context, service *discovery
 func (ds *MetadataManager) modifySchema(ctx context.Context, serviceID string, 
schema *discovery.Schema) *errsvc.Error {
        domain := util.ParseDomain(ctx)
        project := util.ParseProject(ctx)
-       remoteIP := util.GetIPFromContext(ctx)
        svc, err := GetServiceByID(ctx, serviceID)
        if err != nil {
                if errors.Is(err, datasource.ErrNoData) {
@@ -888,35 +828,8 @@ func (ds *MetadataManager) modifySchema(ctx 
context.Context, serviceID string, s
                }
        }
        var newSchemas []string
-       if !ds.isSchemaEditable() {
-               if len(microservice.Schemas) != 0 && !isExist {
-                       return ErrUndefinedSchemaID
-               }
-               filter := mutil.NewDomainProjectFilter(domain, project, 
mutil.ServiceID(serviceID), mutil.SchemaID(schema.SchemaId))
-               respSchema, err := dao.GetSchema(ctx, filter)
-               if err != nil {
-                       return 
discovery.NewError(discovery.ErrUnavailableBackend, err.Error())
-               }
-               if respSchema != nil {
-                       if len(schema.Summary) == 0 {
-                               log.Error(fmt.Sprintf("modify schema %s %s 
failed, get schema summary failed, operator: %s",
-                                       serviceID, schema.SchemaId, remoteIP), 
err)
-                               return ErrModifySchemaNotAllow
-                       }
-                       if len(respSchema.SchemaSummary) != 0 {
-                               log.Error(fmt.Sprintf("mode, schema %s %s 
already exist, can not be changed, operator: %s",
-                                       serviceID, schema.SchemaId, remoteIP), 
err)
-                               return ErrModifySchemaNotAllow
-                       }
-               }
-               if len(microservice.Schemas) == 0 {
-                       copy(newSchemas, microservice.Schemas)
-                       newSchemas = append(newSchemas, schema.SchemaId)
-               }
-       } else {
-               if !isExist {
-                       newSchemas = append(microservice.Schemas, 
schema.SchemaId)
-               }
+       if !isExist {
+               newSchemas = append(microservice.Schemas, schema.SchemaId)
        }
        if len(newSchemas) != 0 {
                filter := mutil.NewDomainProjectFilter(domain, project, 
mutil.ServiceServiceID(serviceID))
@@ -944,10 +857,6 @@ func (ds *MetadataManager) modifySchema(ctx 
context.Context, serviceID string, s
        return nil
 }
 
-func (ds *MetadataManager) isSchemaEditable() bool {
-       return !ds.SchemaNotEditable
-}
-
 func getServiceDetailUtil(ctx context.Context, mgs *model.Service, countOnly 
bool, options []string) (*discovery.ServiceDetail, error) {
        serviceDetail := new(discovery.ServiceDetail)
        serviceID := mgs.Service.ServiceId
diff --git a/datasource/options.go b/datasource/options.go
index e9ce0d7..be36aa4 100644
--- a/datasource/options.go
+++ b/datasource/options.go
@@ -25,8 +25,7 @@ import (
 type Options struct {
        etcdadpt.Config
 
-       EnableCache       bool
-       SchemaNotEditable bool
+       EnableCache bool
        // InstanceTTL: the default ttl of instance lease
        InstanceTTL        int64
        InstanceProperties map[string]string
diff --git a/datasource/schema_test.go b/datasource/schema_test.go
index 93f97c5..8a7e8e6 100644
--- a/datasource/schema_test.go
+++ b/datasource/schema_test.go
@@ -22,36 +22,13 @@ import (
        "testing"
 
        "github.com/apache/servicecomb-service-center/datasource"
-       "github.com/apache/servicecomb-service-center/datasource/etcd"
-       "github.com/apache/servicecomb-service-center/datasource/mongo"
        "github.com/apache/servicecomb-service-center/pkg/log"
        quotasvc 
"github.com/apache/servicecomb-service-center/server/service/quota"
        pb "github.com/go-chassis/cari/discovery"
        "github.com/go-chassis/cari/pkg/errsvc"
-       "github.com/go-chassis/go-archaius"
-       "github.com/little-cui/etcdadpt"
        "github.com/stretchr/testify/assert"
 )
 
-func genLocalDatasource(editable bool) datasource.DataSource {
-       t := archaius.Get("TEST_MODE")
-       if t == nil {
-               t = "etcd"
-       }
-       if t == "etcd" {
-               ds, _ := etcd.NewDataSource(datasource.Options{
-                       Config:            etcdadpt.Config{Kind: "etcd"},
-                       SchemaNotEditable: !editable,
-               })
-
-               return ds
-       }
-       ds, _ := mongo.NewDataSource(datasource.Options{
-               SchemaNotEditable: !editable,
-       })
-       return ds
-}
-
 func TestSchema_Create(t *testing.T) {
        var (
                serviceIdDev string
@@ -426,20 +403,8 @@ func TestSchema_Create(t *testing.T) {
                                Summary:  "second0summary_ms",
                        },
                }
-               log.Info("schema edit not allowed, add a schema with new 
schemaId should fail")
-
-               localMicroServiceDs := 
genLocalDatasource(false).MetadataManager()
-               _, err = localMicroServiceDs.ModifySchemas(getContext(), 
&pb.ModifySchemasRequest{
-                       ServiceId: serviceIdPro1,
-                       Schemas:   schemas,
-               })
-               testErr := err.(*errsvc.Error)
-               assert.Error(t, testErr)
-               assert.Equal(t, pb.ErrUndefinedSchemaID, testErr.Code)
-
                log.Info("schema edit allowed, add a schema with new schemaId, 
should pass")
-               localMicroServiceDs = genLocalDatasource(true).MetadataManager()
-               _, err = localMicroServiceDs.ModifySchemas(getContext(), 
&pb.ModifySchemasRequest{
+               _, err = 
datasource.GetMetadataManager().ModifySchemas(getContext(), 
&pb.ModifySchemasRequest{
                        ServiceId: serviceIdPro1,
                        Schemas:   schemas,
                })
@@ -484,21 +449,8 @@ func TestSchema_Create(t *testing.T) {
                assert.NoError(t, err)
                assert.Equal(t, []string{"first_schemaId_ms"}, service.Schemas)
 
-               log.Info("schema edit not allowed, modify schema should fail")
-               localMicroServiceDs := 
genLocalDatasource(false).MetadataManager()
-               _, err = localMicroServiceDs.ModifySchema(getContext(), 
&pb.ModifySchemaRequest{
-                       ServiceId: serviceIdPro1,
-                       SchemaId:  schemas[0].SchemaId,
-                       Summary:   schemas[0].Summary,
-                       Schema:    schemas[0].SchemaId,
-               })
-               testErr := err.(*errsvc.Error)
-               assert.Error(t, testErr)
-               assert.Equal(t, pb.ErrModifySchemaNotAllow, testErr.Code)
-
                log.Info("schema edit allowed, add a schema with new schemaId, 
should pass")
-               localMicroServiceDs = genLocalDatasource(true).MetadataManager()
-               _, err = localMicroServiceDs.ModifySchema(getContext(), 
&pb.ModifySchemaRequest{
+               _, err = 
datasource.GetMetadataManager().ModifySchema(getContext(), 
&pb.ModifySchemaRequest{
                        ServiceId: serviceIdPro1,
                        SchemaId:  schemas[0].SchemaId,
                        Summary:   schemas[0].Summary,
diff --git a/etc/conf/app.yaml b/etc/conf/app.yaml
index f822961..94b940c 100644
--- a/etc/conf/app.yaml
+++ b/etc/conf/app.yaml
@@ -151,8 +151,6 @@ registry:
   schema:
     # if want disable Test Schema, SchemaDisable set true
     disable: false
-    # if want disable modification of Schema, SchemaNotEditable set true
-    notEditable: false
     # remove the schema without refs every 7d
     retire:
       cron: '0 2 * * *'
diff --git a/examples/dev/conf/app.yaml b/examples/dev/conf/app.yaml
index 2e4a585..2c1853d 100644
--- a/examples/dev/conf/app.yaml
+++ b/examples/dev/conf/app.yaml
@@ -135,8 +135,6 @@ registry:
   schema:
     # if want disable Test Schema, SchemaDisable set true
     disable: false
-    # if want disable modification of Schema, SchemaNotEditable set true
-    notEditable: false
   # enable to register sc itself when startup
   selfRegister: 1
 
diff --git a/server/config/config.go b/server/config/config.go
index 5568dc6..786589a 100644
--- a/server/config/config.go
+++ b/server/config/config.go
@@ -175,8 +175,7 @@ func loadServerConfig() ServerConfig {
                        GlobalVisible: 
GetString("registry.service.globalVisible", "", WithENV("CSE_SHARED_SERVICES")),
                        InstanceTTL:   GetInt64("registry.instance.ttl", 0, 
WithENV("INSTANCE_TTL")),
 
-                       SchemaDisable:     GetBool("registry.schema.disable", 
false, WithENV("SCHEMA_DISABLE")),
-                       SchemaNotEditable: 
GetBool("registry.schema.notEditable", false, WithENV("SCHEMA_NOT_EDITABLE")),
+                       SchemaDisable: GetBool("registry.schema.disable", 
false, WithENV("SCHEMA_DISABLE")),
 
                        EnableRBAC: GetBool("rbac.enable", false, 
WithStandby("rbac_enabled")),
                },
diff --git a/server/config/server.go b/server/config/server.go
index c8c8a7f..8091697 100644
--- a/server/config/server.go
+++ b/server/config/server.go
@@ -70,8 +70,6 @@ type ServerConfigDetail struct {
 
        // if want disable Test Schema, SchemaDisable set true
        SchemaDisable bool `json:"schemaDisable"`
-       // if want disable modification of Schema, SchemaNotEditable set true
-       SchemaNotEditable bool `json:"-"`
 
        // instance ttl in seconds
        InstanceTTL int64 `json:"-"`
diff --git a/server/core/microservice.go b/server/core/microservice.go
index b104c38..ebb04d4 100644
--- a/server/core/microservice.go
+++ b/server/core/microservice.go
@@ -53,10 +53,6 @@ func InitRegistration() {
                Version:     version.Ver().Version,
                Status:      discovery.MS_UP,
                Level:       "BACK",
-               Schemas: []string{
-                       "servicecenter.grpc.api.ServiceCtrl",
-                       "servicecenter.grpc.api.ServiceInstanceCtrl",
-               },
                Properties: map[string]string{
                        discovery.PropAllowCrossApp: "true",
                },
diff --git a/server/server.go b/server/server.go
index fe7672c..34d63dd 100644
--- a/server/server.go
+++ b/server/server.go
@@ -122,7 +122,6 @@ func (s *ServiceCenterServer) initDatasource() {
                        },
                },
                EnableCache:        config.GetRegistry().EnableCache,
-               SchemaNotEditable:  config.GetRegistry().SchemaNotEditable,
                InstanceTTL:        config.GetRegistry().InstanceTTL,
                InstanceProperties: 
config.GetStringMap("registry.instance.properties"),
        }); err != nil {

Reply via email to