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 fe8b622  GetService optimize (#824)
fe8b622 is described below

commit fe8b622a4740780b90edc05ba5797fbc153fad34
Author: yeyiwei <53281955+yeyi...@users.noreply.github.com>
AuthorDate: Wed Jan 13 10:41:36 2021 +0800

    GetService optimize (#824)
---
 datasource/{mongo/client => }/errortypes.go      |  32 +--
 datasource/etcd/dep.go                           |  38 +--
 datasource/etcd/event/instance_event_handler.go  |  11 +-
 datasource/etcd/event/rule_event_handler.go      |  12 +-
 datasource/etcd/event/tag_event_handler.go       |  18 +-
 datasource/etcd/ms.go                            | 299 +++++++++++------------
 datasource/etcd/util.go                          |   3 +-
 datasource/etcd/util/dependency_query.go         |  38 +--
 datasource/etcd/util/dependency_test.go          |  14 +-
 datasource/etcd/util/microservice_util.go        |  17 +-
 datasource/etcd/util/rule_util.go                |  19 +-
 datasource/etcd/util/rule_util_test.go           |  37 ++-
 datasource/etcd/util/util_suite_test.go          |  26 +-
 datasource/mongo/client/errortypes.go            |   2 +-
 datasource/mongo/dep.go                          |  33 +--
 datasource/mongo/dependency_query.go             |  16 +-
 datasource/mongo/event/instance_event_handler.go |  11 +-
 datasource/mongo/ms.go                           | 186 +++++++-------
 server/broker/service.go                         | 103 ++++----
 server/broker/util.go                            |  31 +--
 20 files changed, 484 insertions(+), 462 deletions(-)

diff --git a/datasource/mongo/client/errortypes.go b/datasource/errortypes.go
similarity index 64%
copy from datasource/mongo/client/errortypes.go
copy to datasource/errortypes.go
index 9d7311a..ffc6866 100644
--- a/datasource/mongo/client/errortypes.go
+++ b/datasource/errortypes.go
@@ -13,36 +13,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package client
+package datasource
 
-import (
-       "errors"
-
-       "go.mongodb.org/mongo-driver/mongo"
-)
+import "errors"
 
 var (
-       ErrNoDocuments = errors.New("no doc found")
-)
-
-const (
-       DuplicateKey = 11000
+       ErrNoData = errors.New("no data found")
 )
-
-func IsDuplicateKey(err error) bool {
-       if err != nil {
-               we, ok := err.(mongo.WriteException)
-               if ok {
-                       for _, wr := range we.WriteErrors {
-                               if wr.Code == DuplicateKey {
-                                       return true
-                               }
-                       }
-               }
-       }
-       return false
-}
-
-func IsNoneDoc(err error) bool {
-       return err == ErrNoDocuments
-}
diff --git a/datasource/etcd/dep.go b/datasource/etcd/dep.go
index db51e6e..cc0c887 100644
--- a/datasource/etcd/dep.go
+++ b/datasource/etcd/dep.go
@@ -20,8 +20,10 @@ package etcd
 import (
        "context"
        "encoding/json"
+       "errors"
        "fmt"
 
+       "github.com/apache/servicecomb-service-center/datasource"
        "github.com/apache/servicecomb-service-center/datasource/etcd/client"
        "github.com/apache/servicecomb-service-center/datasource/etcd/path"
        serviceUtil 
"github.com/apache/servicecomb-service-center/datasource/etcd/util"
@@ -36,22 +38,22 @@ func (ds *DataSource) SearchProviderDependency(ctx 
context.Context, request *pb.
        provider, err := serviceUtil.GetService(ctx, domainProject, 
providerServiceID)
 
        if err != nil {
-               log.Errorf(err, "GetProviderDependencies failed, provider is 
%s", providerServiceID)
+               if errors.Is(err, datasource.ErrNoData) {
+                       log.Debug(fmt.Sprintf("provider[%s] does not exist in 
db", providerServiceID))
+                       return &pb.GetProDependenciesResponse{
+                               Response: 
pb.CreateResponse(pb.ErrServiceNotExists, "Provider does not exist"),
+                       }, nil
+               }
+               log.Error(fmt.Sprintf("query provider service from db failed, 
provider is %s", providerServiceID), err)
                return nil, err
        }
-       if provider == nil {
-               log.Errorf(err, "GetProviderDependencies failed for 
provider[%s] does not exist", providerServiceID)
-               return &pb.GetProDependenciesResponse{
-                       Response: pb.CreateResponse(pb.ErrServiceNotExists, 
"Provider does not exist"),
-               }, nil
-       }
 
        dr := serviceUtil.NewProviderDependencyRelation(ctx, domainProject, 
provider)
        services, err := 
dr.GetDependencyConsumers(toDependencyFilterOptions(request)...)
 
        if err != nil {
-               log.Errorf(err, "GetProviderDependencies failed, provider is 
%s/%s/%s/%s",
-                       provider.Environment, provider.AppId, 
provider.ServiceName, provider.Version)
+               log.Error(fmt.Sprintf("query provider failed, provider is 
%s/%s/%s/%s",
+                       provider.Environment, provider.AppId, 
provider.ServiceName, provider.Version), err)
                return &pb.GetProDependenciesResponse{
                        Response: pb.CreateResponse(pb.ErrInternal, 
err.Error()),
                }, err
@@ -69,21 +71,21 @@ func (ds *DataSource) SearchConsumerDependency(ctx 
context.Context, request *pb.
        consumer, err := serviceUtil.GetService(ctx, domainProject, consumerID)
 
        if err != nil {
-               log.Errorf(err, "GetConsumerDependencies failed, consumer is 
%s", consumerID)
+               if errors.Is(err, datasource.ErrNoData) {
+                       log.Debug(fmt.Sprintf("consumer[%s] does not exist", 
consumerID))
+                       return &pb.GetConDependenciesResponse{
+                               Response: 
pb.CreateResponse(pb.ErrServiceNotExists, "Consumer does not exist"),
+                       }, nil
+               }
+               log.Error(fmt.Sprintf("query consumer failed, consumer is %s", 
consumerID), err)
                return nil, err
        }
-       if consumer == nil {
-               log.Errorf(err, "GetConsumerDependencies failed for 
consumer[%s] does not exist", consumerID)
-               return &pb.GetConDependenciesResponse{
-                       Response: pb.CreateResponse(pb.ErrServiceNotExists, 
"Consumer does not exist"),
-               }, nil
-       }
 
        dr := serviceUtil.NewConsumerDependencyRelation(ctx, domainProject, 
consumer)
        services, err := 
dr.GetDependencyProviders(toDependencyFilterOptions(request)...)
        if err != nil {
-               log.Errorf(err, "GetConsumerDependencies failed, consumer is 
%s/%s/%s/%s",
-                       consumer.Environment, consumer.AppId, 
consumer.ServiceName, consumer.Version)
+               log.Error(fmt.Sprintf("query consumer failed, consumer is 
%s/%s/%s/%s",
+                       consumer.Environment, consumer.AppId, 
consumer.ServiceName, consumer.Version), err)
                return &pb.GetConDependenciesResponse{
                        Response: pb.CreateResponse(pb.ErrInternal, 
err.Error()),
                }, err
diff --git a/datasource/etcd/event/instance_event_handler.go 
b/datasource/etcd/event/instance_event_handler.go
index ae5919a..54b78be 100644
--- a/datasource/etcd/event/instance_event_handler.go
+++ b/datasource/etcd/event/instance_event_handler.go
@@ -19,6 +19,7 @@ package event
 
 import (
        "context"
+       "fmt"
        "strings"
 
        "github.com/apache/servicecomb-service-center/datasource/etcd/cache"
@@ -92,9 +93,9 @@ func (h *InstanceEventHandler) OnEvent(evt sd.KvEvent) {
        ctx := util.WithGlobal(util.WithCacheOnly(context.Background()))
        ms, err := serviceUtil.GetService(ctx, domainProject, providerID)
 
-       if ms == nil {
-               log.Errorf(err, "caught [%s] instance[%s/%s] event, endpoints 
%v, get cached provider's file failed",
-                       action, providerID, providerInstanceID, 
instance.Endpoints)
+       if err != nil {
+               log.Error(fmt.Sprintf("caught [%s] instance[%s/%s] event, 
endpoints %v, get cached provider's file failed",
+                       action, providerID, providerInstanceID, 
instance.Endpoints), err)
                return
        }
 
@@ -103,8 +104,8 @@ func (h *InstanceEventHandler) OnEvent(evt sd.KvEvent) {
        }
 
        if notify.Center().Closed() {
-               log.Warnf("caught [%s] instance[%s/%s] event, endpoints %v, but 
notify service is closed",
-                       action, providerID, providerInstanceID, 
instance.Endpoints)
+               log.Warn(fmt.Sprintf("caught [%s] instance[%s/%s] event, 
endpoints %v, but notify service is closed",
+                       action, providerID, providerInstanceID, 
instance.Endpoints))
                return
        }
 
diff --git a/datasource/etcd/event/rule_event_handler.go 
b/datasource/etcd/event/rule_event_handler.go
index 88b5ff5..8b8a866 100644
--- a/datasource/etcd/event/rule_event_handler.go
+++ b/datasource/etcd/event/rule_event_handler.go
@@ -19,8 +19,10 @@ package event
 
 import (
        "context"
+       "errors"
        "fmt"
 
+       "github.com/apache/servicecomb-service-center/datasource"
        "github.com/apache/servicecomb-service-center/datasource/etcd/kv"
        "github.com/apache/servicecomb-service-center/datasource/etcd/path"
        "github.com/apache/servicecomb-service-center/datasource/etcd/sd"
@@ -60,13 +62,13 @@ func (apt *RulesChangedTask) publish(ctx context.Context, 
domainProject, provide
 
        provider, err := serviceUtil.GetService(ctx, domainProject, providerID)
        if err != nil {
-               log.Errorf(err, "get provider[%s] service file failed", 
providerID)
+               if errors.Is(err, datasource.ErrNoData) {
+                       log.Debug(fmt.Sprintf("provider[%s] does not exist", 
providerID))
+               } else {
+                       log.Error(fmt.Sprintf("get provider[%s] service file 
failed", providerID), err)
+               }
                return err
        }
-       if provider == nil {
-               log.Errorf(nil, "provider[%s] does not exist", providerID)
-               return fmt.Errorf("provider %s does not exist", providerID)
-       }
 
        consumerIds, err := serviceUtil.GetConsumerIds(ctx, domainProject, 
provider)
        if err != nil {
diff --git a/datasource/etcd/event/tag_event_handler.go 
b/datasource/etcd/event/tag_event_handler.go
index 585b173..f0c5822 100644
--- a/datasource/etcd/event/tag_event_handler.go
+++ b/datasource/etcd/event/tag_event_handler.go
@@ -19,8 +19,10 @@ package event
 
 import (
        "context"
+       "errors"
        "fmt"
 
+       "github.com/apache/servicecomb-service-center/datasource"
        "github.com/apache/servicecomb-service-center/datasource/etcd/cache"
        "github.com/apache/servicecomb-service-center/datasource/etcd/kv"
        "github.com/apache/servicecomb-service-center/datasource/etcd/path"
@@ -61,13 +63,13 @@ func (apt *TagsChangedTask) publish(ctx context.Context, 
domainProject, consumer
 
        consumer, err := serviceUtil.GetService(ctx, domainProject, consumerID)
        if err != nil {
-               log.Errorf(err, "get consumer[%s] for publish event failed", 
consumerID)
+               if errors.Is(err, datasource.ErrNoData) {
+                       log.Debug(fmt.Sprintf("consumer[%s] does not exist in 
db", consumerID))
+               } else {
+                       log.Error(fmt.Sprintf("get consumer[%s] for publish 
event failed", consumerID), err)
+               }
                return err
        }
-       if consumer == nil {
-               log.Errorf(nil, "consumer[%s] does not exist", consumerID)
-               return fmt.Errorf("consumer[%s] does not exist", consumerID)
-       }
 
        serviceKey := pb.MicroServiceToKey(domainProject, consumer)
        cache.FindInstances.Remove(serviceKey)
@@ -81,9 +83,9 @@ func (apt *TagsChangedTask) publish(ctx context.Context, 
domainProject, consumer
 
        for _, providerID := range providerIDs {
                provider, err := serviceUtil.GetService(ctx, domainProject, 
providerID)
-               if provider == nil {
-                       log.Errorf(err, "get service[%s][%s/%s/%s/%s]'s 
provider[%s] file failed",
-                               consumerID, consumer.Environment, 
consumer.AppId, consumer.ServiceName, consumer.Version, providerID)
+               if err != nil {
+                       log.Error(fmt.Sprintf("get service[%s][%s/%s/%s/%s]'s 
provider[%s] file failed",
+                               consumerID, consumer.Environment, 
consumer.AppId, consumer.ServiceName, consumer.Version, providerID), err)
                        continue
                }
 
diff --git a/datasource/etcd/ms.go b/datasource/etcd/ms.go
index 1527490..3e650c7 100644
--- a/datasource/etcd/ms.go
+++ b/datasource/etcd/ms.go
@@ -66,8 +66,8 @@ func (ds *DataSource) RegisterService(ctx context.Context, 
request *pb.CreateSer
        reporter := checkQuota(ctx, domainProject)
        defer reporter.Close(ctx)
        if reporter != nil && reporter.Err != nil {
-               log.Errorf(reporter.Err, "create micro-service[%s] failed, 
operator: %s",
-                       serviceFlag, remoteIP)
+               log.Error(fmt.Sprintf("create micro-service[%s] failed, 
operator: %s",
+                       serviceFlag, remoteIP), reporter.Err)
                resp := &pb.CreateServiceResponse{
                        Response: pb.CreateResponseWithSCErr(reporter.Err),
                }
@@ -90,8 +90,8 @@ func (ds *DataSource) RegisterService(ctx context.Context, 
request *pb.CreateSer
 
        data, err := json.Marshal(service)
        if err != nil {
-               log.Errorf(err, "create micro-service[%s] failed, json marshal 
service failed, operator: %s",
-                       serviceFlag, remoteIP)
+               log.Error(fmt.Sprintf("create micro-service[%s] failed, json 
marshal service failed, operator: %s",
+                       serviceFlag, remoteIP), err)
                return &pb.CreateServiceResponse{
                        Response: pb.CreateResponse(pb.ErrInternal, 
err.Error()),
                }, err
@@ -123,8 +123,8 @@ func (ds *DataSource) RegisterService(ctx context.Context, 
request *pb.CreateSer
 
        resp, err := client.Instance().TxnWithCmp(ctx, opts, uniqueCmpOpts, 
failOpts)
        if err != nil {
-               log.Errorf(err, "create micro-service[%s] failed, operator: %s",
-                       serviceFlag, remoteIP)
+               log.Error(fmt.Sprintf("create micro-service[%s] failed, 
operator: %s",
+                       serviceFlag, remoteIP), err)
                return &pb.CreateServiceResponse{
                        Response: pb.CreateResponse(pb.ErrUnavailableBackend, 
err.Error()),
                }, err
@@ -133,8 +133,8 @@ func (ds *DataSource) RegisterService(ctx context.Context, 
request *pb.CreateSer
                if len(requestServiceID) != 0 {
                        if len(resp.Kvs) == 0 ||
                                requestServiceID != 
util.BytesToStringWithNoCopy(resp.Kvs[0].Value) {
-                               log.Warnf("create micro-service[%s] failed, 
service already exists, operator: %s",
-                                       serviceFlag, remoteIP)
+                               log.Warn(fmt.Sprintf("create micro-service[%s] 
failed, service already exists, operator: %s",
+                                       serviceFlag, remoteIP))
                                return &pb.CreateServiceResponse{
                                        Response: 
pb.CreateResponse(pb.ErrServiceAlreadyExists,
                                                "ServiceID conflict or found 
the same service with different id."),
@@ -144,16 +144,16 @@ func (ds *DataSource) RegisterService(ctx 
context.Context, request *pb.CreateSer
 
                if len(resp.Kvs) == 0 {
                        // internal error?
-                       log.Errorf(nil, "create micro-service[%s] failed, 
unexpected txn response, operator: %s",
-                               serviceFlag, remoteIP)
+                       log.Error(fmt.Sprintf("create micro-service[%s] failed, 
unexpected txn response, operator: %s",
+                               serviceFlag, remoteIP), nil)
                        return &pb.CreateServiceResponse{
                                Response: pb.CreateResponse(pb.ErrInternal, 
"Unexpected txn response."),
                        }, nil
                }
 
                serviceIDInner := 
util.BytesToStringWithNoCopy(resp.Kvs[0].Value)
-               log.Warnf("create micro-service[%s][%s] failed, service already 
exists, operator: %s",
-                       serviceIDInner, serviceFlag, remoteIP)
+               log.Warn(fmt.Sprintf("create micro-service[%s][%s] failed, 
service already exists, operator: %s",
+                       serviceIDInner, serviceFlag, remoteIP))
                return &pb.CreateServiceResponse{
                        Response:  pb.CreateResponse(pb.ResponseSuccess, 
"register service successfully"),
                        ServiceId: serviceIDInner,
@@ -161,11 +161,11 @@ func (ds *DataSource) RegisterService(ctx 
context.Context, request *pb.CreateSer
        }
 
        if err := reporter.ReportUsedQuota(ctx); err != nil {
-               log.Errorf(err, "report the used quota failed")
+               log.Error("report the used quota failed", err)
        }
 
-       log.Infof("create micro-service[%s][%s] successfully, operator: %s",
-               service.ServiceId, serviceFlag, remoteIP)
+       log.Info(fmt.Sprintf("create micro-service[%s][%s] successfully, 
operator: %s",
+               service.ServiceId, serviceFlag, remoteIP))
        return &pb.CreateServiceResponse{
                Response:  pb.CreateResponse(pb.ResponseSuccess, "Register 
service successfully."),
                ServiceId: service.ServiceId,
@@ -177,7 +177,7 @@ func (ds *DataSource) GetServices(ctx context.Context, 
request *pb.GetServicesRe
        *pb.GetServicesResponse, error) {
        services, err := serviceUtil.GetAllServiceUtil(ctx)
        if err != nil {
-               log.Errorf(err, "get all services by domain failed")
+               log.Error("get all services by domain failed", err)
                return &pb.GetServicesResponse{
                        Response: pb.CreateResponse(pb.ErrInternal, 
err.Error()),
                }, err
@@ -195,17 +195,17 @@ func (ds *DataSource) GetService(ctx context.Context, 
request *pb.GetServiceRequ
        singleService, err := serviceUtil.GetService(ctx, domainProject, 
request.ServiceId)
 
        if err != nil {
-               log.Errorf(err, "get micro-service[%s] failed, get service file 
failed", request.ServiceId)
+               if errors.Is(err, datasource.ErrNoData) {
+                       log.Debug(fmt.Sprintf("get micro-service[%s] failed, 
service does not exist in db", request.ServiceId))
+                       return &pb.GetServiceResponse{
+                               Response: 
pb.CreateResponse(pb.ErrServiceNotExists, "Service does not exist."),
+                       }, nil
+               }
+               log.Error(fmt.Sprintf("get micro-service[%s] failed, get 
service file failed", request.ServiceId), err)
                return &pb.GetServiceResponse{
                        Response: pb.CreateResponse(pb.ErrInternal, 
err.Error()),
                }, err
        }
-       if singleService == nil {
-               log.Errorf(nil, "get micro-service[%s] failed, service does not 
exist", request.ServiceId)
-               return &pb.GetServiceResponse{
-                       Response: pb.CreateResponse(pb.ErrServiceNotExists, 
"Service does not exist."),
-               }, nil
-       }
        return &pb.GetServiceResponse{
                Response: pb.CreateResponse(pb.ResponseSuccess, "Get service 
successfully."),
                Service:  singleService,
@@ -217,12 +217,12 @@ func (ds *DataSource) GetServiceDetail(ctx 
context.Context, request *pb.GetServi
        domainProject := util.ParseDomainProject(ctx)
 
        service, err := serviceUtil.GetService(ctx, domainProject, 
request.ServiceId)
-       if service == nil {
-               return &pb.GetServiceDetailResponse{
-                       Response: pb.CreateResponse(pb.ErrServiceNotExists, 
"Service does not exist."),
-               }, nil
-       }
        if err != nil {
+               if errors.Is(err, datasource.ErrNoData) {
+                       return &pb.GetServiceDetailResponse{
+                               Response: 
pb.CreateResponse(pb.ErrServiceNotExists, "Service does not exist."),
+                       }, nil
+               }
                return &pb.GetServiceDetailResponse{
                        Response: pb.CreateResponse(pb.ErrInternal, 
err.Error()),
                }, err
@@ -237,8 +237,8 @@ func (ds *DataSource) GetServiceDetail(ctx context.Context, 
request *pb.GetServi
        }
        versions, err := getServiceAllVersions(ctx, key)
        if err != nil {
-               log.Errorf(err, "get service[%s/%s/%s] all versions failed",
-                       service.Environment, service.AppId, service.ServiceName)
+               log.Error(fmt.Sprintf("get service[%s/%s/%s] all versions 
failed",
+                       service.Environment, service.AppId, 
service.ServiceName), err)
                return &pb.GetServiceDetailResponse{
                        Response: pb.CreateResponse(pb.ErrInternal, 
err.Error()),
                }, err
@@ -303,7 +303,7 @@ func (ds *DataSource) GetServicesInfo(ctx context.Context, 
request *pb.GetServic
        //获取所有服务
        services, err := serviceUtil.GetAllServiceUtil(ctx)
        if err != nil {
-               log.Errorf(err, "get all services by domain failed")
+               log.Error("get all services by domain failed", err)
                return &pb.GetServicesInfoResponse{
                        Response: pb.CreateResponse(pb.ErrInternal, 
err.Error()),
                }, err
@@ -409,19 +409,19 @@ func (ds *DataSource) ExistService(ctx context.Context, 
request *pb.GetExistence
                Tenant:      domainProject,
        })
        if err != nil {
-               log.Errorf(err, "micro-service[%s] exist failed, find 
serviceIDs failed", serviceFlag)
+               log.Error(fmt.Sprintf("micro-service[%s] exist failed, find 
serviceIDs failed", serviceFlag), err)
                return &pb.GetExistenceResponse{
                        Response: pb.CreateResponse(pb.ErrInternal, 
err.Error()),
                }, err
        }
        if !exist {
-               log.Infof("micro-service[%s] exist failed, service does not 
exist", serviceFlag)
+               log.Info(fmt.Sprintf("micro-service[%s] exist failed, service 
does not exist", serviceFlag))
                return &pb.GetExistenceResponse{
                        Response: pb.CreateResponse(pb.ErrServiceNotExists, 
serviceFlag+" does not exist."),
                }, nil
        }
        if len(ids) == 0 {
-               log.Infof("micro-service[%s] exist failed, version mismatch", 
serviceFlag)
+               log.Info(fmt.Sprintf("micro-service[%s] exist failed, version 
mismatch", serviceFlag))
                return &pb.GetExistenceResponse{
                        Response: 
pb.CreateResponse(pb.ErrServiceVersionNotExists, serviceFlag+" version 
mismatch."),
                }, nil
@@ -440,19 +440,19 @@ func (ds *DataSource) UpdateService(ctx context.Context, 
request *pb.UpdateServi
        key := path.GenerateServiceKey(domainProject, request.ServiceId)
        microservice, err := serviceUtil.GetService(ctx, domainProject, 
request.ServiceId)
        if err != nil {
-               log.Errorf(err, "update service[%s] properties failed, get 
service file failed, operator: %s",
-                       request.ServiceId, remoteIP)
+               if errors.Is(err, datasource.ErrNoData) {
+                       log.Debug(fmt.Sprintf("service does not exist, update 
service[%s] properties failed, operator: %s",
+                               request.ServiceId, remoteIP))
+                       return &pb.UpdateServicePropsResponse{
+                               Response: 
pb.CreateResponse(pb.ErrServiceNotExists, "Service does not exist."),
+                       }, nil
+               }
+               log.Error(fmt.Sprintf("update service[%s] properties failed, 
get service file failed, operator: %s",
+                       request.ServiceId, remoteIP), err)
                return &pb.UpdateServicePropsResponse{
                        Response: pb.CreateResponse(pb.ErrInternal, 
err.Error()),
                }, err
        }
-       if microservice == nil {
-               log.Errorf(nil, "update service[%s] properties failed, service 
does not exist, operator: %s",
-                       request.ServiceId, remoteIP)
-               return &pb.UpdateServicePropsResponse{
-                       Response: pb.CreateResponse(pb.ErrServiceNotExists, 
"Service does not exist."),
-               }, nil
-       }
 
        copyServiceRef := *microservice
        copyServiceRef.Properties = request.Properties
@@ -541,8 +541,8 @@ func (ds *DataSource) RegisterInstance(ctx context.Context, 
request *pb.Register
                }
                switch resp.Response.GetCode() {
                case pb.ResponseSuccess:
-                       log.Infof("register instance successful, reuse 
instance[%s/%s], operator %s",
-                               instance.ServiceId, instance.InstanceId, 
remoteIP)
+                       log.Info(fmt.Sprintf("register instance successful, 
reuse instance[%s/%s], operator %s",
+                               instance.ServiceId, instance.InstanceId, 
remoteIP))
                        return &pb.RegisterInstanceResponse{
                                Response:   resp.Response,
                                InstanceId: instance.InstanceId,
@@ -550,8 +550,8 @@ func (ds *DataSource) RegisterInstance(ctx context.Context, 
request *pb.Register
                case pb.ErrInstanceNotExists:
                        // register a new one
                default:
-                       log.Errorf(err, "register instance failed, reuse 
instance[%s/%s], operator %s",
-                               instance.ServiceId, instance.InstanceId, 
remoteIP)
+                       log.Error(fmt.Sprintf("register instance failed, reuse 
instance[%s/%s], operator %s",
+                               instance.ServiceId, instance.InstanceId, 
remoteIP), err)
                        return &pb.RegisterInstanceResponse{
                                Response: resp.Response,
                        }, err
@@ -559,8 +559,8 @@ func (ds *DataSource) RegisterInstance(ctx context.Context, 
request *pb.Register
        }
 
        if err := preProcessRegisterInstance(ctx, instance); err != nil {
-               log.Errorf(err, "register service[%s]'s instance failed, 
endpoints %v, host '%s', operator %s",
-                       instance.ServiceId, instance.Endpoints, 
instance.HostName, remoteIP)
+               log.Error(fmt.Sprintf("register service[%s]'s instance failed, 
endpoints %v, host '%s', operator %s",
+                       instance.ServiceId, instance.Endpoints, 
instance.HostName, remoteIP), err)
                return &pb.RegisterInstanceResponse{
                        Response: pb.CreateResponseWithSCErr(err),
                }, nil
@@ -584,8 +584,8 @@ func (ds *DataSource) RegisterInstance(ctx context.Context, 
request *pb.Register
                defer reporter.Close(ctx)
 
                if reporter.Err != nil {
-                       log.Errorf(reporter.Err, "register instance failed, %s, 
operator %s",
-                               instanceFlag, remoteIP)
+                       log.Error(fmt.Sprintf("register instance failed, %s, 
operator %s",
+                               instanceFlag, remoteIP), reporter.Err)
                        response := &pb.RegisterInstanceResponse{
                                Response: 
pb.CreateResponseWithSCErr(reporter.Err),
                        }
@@ -599,9 +599,8 @@ func (ds *DataSource) RegisterInstance(ctx context.Context, 
request *pb.Register
        instanceID := instance.InstanceId
        data, err := json.Marshal(instance)
        if err != nil {
-               log.Errorf(err,
-                       "register instance failed, %s, instanceID %s, operator 
%s",
-                       instanceFlag, instanceID, remoteIP)
+               log.Error(fmt.Sprintf("register instance failed, %s, instanceID 
%s, operator %s",
+                       instanceFlag, instanceID, remoteIP), err)
                return &pb.RegisterInstanceResponse{
                        Response: pb.CreateResponse(pb.ErrInternal, 
err.Error()),
                }, err
@@ -609,7 +608,7 @@ func (ds *DataSource) RegisterInstance(ctx context.Context, 
request *pb.Register
 
        leaseID, err := client.Instance().LeaseGrant(ctx, ttl)
        if err != nil {
-               log.Errorf(err, "grant lease failed, %s, operator: %s", 
instanceFlag, remoteIP)
+               log.Error(fmt.Sprintf("grant lease failed, %s, operator: %s", 
instanceFlag, remoteIP), err)
                return &pb.RegisterInstanceResponse{
                        Response: pb.CreateResponse(pb.ErrUnavailableBackend, 
err.Error()),
                }, err
@@ -632,30 +631,27 @@ func (ds *DataSource) RegisterInstance(ctx 
context.Context, request *pb.Register
                        client.CmpNotEqual, 0)},
                nil)
        if err != nil {
-               log.Errorf(err,
-                       "register instance failed, %s, instanceID %s, operator 
%s",
-                       instanceFlag, instanceID, remoteIP)
+               log.Error(fmt.Sprintf("register instance failed, %s, instanceID 
%s, operator %s",
+                       instanceFlag, instanceID, remoteIP), err)
                return &pb.RegisterInstanceResponse{
                        Response: pb.CreateResponse(pb.ErrUnavailableBackend, 
err.Error()),
                }, err
        }
        if !resp.Succeeded {
-               log.Errorf(nil,
-                       "register instance failed, %s, instanceID %s, operator 
%s: service does not exist",
-                       instanceFlag, instanceID, remoteIP)
+               log.Error(fmt.Sprintf("register instance failed, %s, instanceID 
%s, operator %s: service does not exist",
+                       instanceFlag, instanceID, remoteIP), nil)
                return &pb.RegisterInstanceResponse{
                        Response: pb.CreateResponse(pb.ErrServiceNotExists, 
"Service does not exist."),
                }, nil
        }
 
        if err := reporter.ReportUsedQuota(ctx); err != nil {
-               log.Errorf(err,
-                       "register instance failed, %s, instanceID %s, operator 
%s",
-                       instanceFlag, instanceID, remoteIP)
+               log.Error(fmt.Sprintf("register instance failed, %s, instanceID 
%s, operator %s",
+                       instanceFlag, instanceID, remoteIP), err)
        }
 
-       log.Infof("register instance %s, instanceID %s, operator %s",
-               instanceFlag, instanceID, remoteIP)
+       log.Info(fmt.Sprintf("register instance %s, instanceID %s, operator %s",
+               instanceFlag, instanceID, remoteIP))
        return &pb.RegisterInstanceResponse{
                Response:   pb.CreateResponse(pb.ResponseSuccess, "Register 
service instance successfully."),
                InstanceId: instanceID,
@@ -671,38 +667,38 @@ func (ds *DataSource) GetInstance(ctx context.Context, 
request *pb.GetOneInstanc
        if len(request.ConsumerServiceId) > 0 {
                service, err = serviceUtil.GetService(ctx, domainProject, 
request.ConsumerServiceId)
                if err != nil {
-                       log.Errorf(err, "get consumer failed, consumer[%s] find 
provider instance[%s/%s]",
-                               request.ConsumerServiceId, 
request.ProviderServiceId, request.ProviderInstanceId)
+                       if errors.Is(err, datasource.ErrNoData) {
+                               log.Debug(fmt.Sprintf("consumer does not exist 
in db, consumer[%s] find provider instance[%s/%s]",
+                                       request.ConsumerServiceId, 
request.ProviderServiceId, request.ProviderInstanceId))
+                               return &pb.GetOneInstanceResponse{
+                                       Response: 
pb.CreateResponse(pb.ErrServiceNotExists,
+                                               fmt.Sprintf("Consumer[%s] does 
not exist.", request.ConsumerServiceId)),
+                               }, nil
+                       }
+                       log.Error(fmt.Sprintf("get consumer failed, 
consumer[%s] find provider instance[%s/%s]",
+                               request.ConsumerServiceId, 
request.ProviderServiceId, request.ProviderInstanceId), err)
                        return &pb.GetOneInstanceResponse{
                                Response: pb.CreateResponse(pb.ErrInternal, 
err.Error()),
                        }, err
                }
-               if service == nil {
-                       log.Errorf(nil, "consumer does not exist, consumer[%s] 
find provider instance[%s/%s]",
-                               request.ConsumerServiceId, 
request.ProviderServiceId, request.ProviderInstanceId)
-                       return &pb.GetOneInstanceResponse{
-                               Response: 
pb.CreateResponse(pb.ErrServiceNotExists,
-                                       fmt.Sprintf("Consumer[%s] does not 
exist.", request.ConsumerServiceId)),
-                       }, nil
-               }
        }
 
        provider, err := serviceUtil.GetService(ctx, domainProject, 
request.ProviderServiceId)
        if err != nil {
-               log.Errorf(err, "get provider failed, consumer[%s] find 
provider instance[%s/%s]",
-                       request.ConsumerServiceId, request.ProviderServiceId, 
request.ProviderInstanceId)
+               if errors.Is(err, datasource.ErrNoData) {
+                       log.Debug(fmt.Sprintf("provider does not exist in db, 
consumer[%s] find provider instance[%s/%s]",
+                               request.ConsumerServiceId, 
request.ProviderServiceId, request.ProviderInstanceId))
+                       return &pb.GetOneInstanceResponse{
+                               Response: 
pb.CreateResponse(pb.ErrServiceNotExists,
+                                       fmt.Sprintf("Provider[%s] does not 
exist.", request.ProviderServiceId)),
+                       }, nil
+               }
+               log.Error(fmt.Sprintf("get provider failed, consumer[%s] find 
provider instance[%s/%s]",
+                       request.ConsumerServiceId, request.ProviderServiceId, 
request.ProviderInstanceId), err)
                return &pb.GetOneInstanceResponse{
                        Response: pb.CreateResponse(pb.ErrInternal, 
err.Error()),
                }, err
        }
-       if provider == nil {
-               log.Errorf(nil, "provider does not exist, consumer[%s] find 
provider instance[%s/%s]",
-                       request.ConsumerServiceId, request.ProviderServiceId, 
request.ProviderInstanceId)
-               return &pb.GetOneInstanceResponse{
-                       Response: pb.CreateResponse(pb.ErrServiceNotExists,
-                               fmt.Sprintf("Provider[%s] does not exist.", 
request.ProviderServiceId)),
-               }, nil
-       }
 
        findFlag := func() string {
                return fmt.Sprintf("Consumer[%s][%s/%s/%s/%s] find 
provider[%s][%s/%s/%s/%s] instance[%s]",
@@ -718,14 +714,14 @@ func (ds *DataSource) GetInstance(ctx context.Context, 
request *pb.GetOneInstanc
                        ServiceId: request.ProviderServiceId, InstanceId: 
request.ProviderInstanceId,
                }, request.Tags, rev)
        if err != nil {
-               log.Errorf(err, "FindInstances.GetWithProviderID failed, %s 
failed", findFlag())
+               log.Error(fmt.Sprintf("find Instances by providerID failed, %s 
failed", findFlag()), err)
                return &pb.GetOneInstanceResponse{
                        Response: pb.CreateResponse(pb.ErrInternal, 
err.Error()),
                }, err
        }
        if item == nil || len(item.Instances) == 0 {
                mes := fmt.Errorf("%s failed, provider instance does not 
exist", findFlag())
-               log.Errorf(mes, "FindInstances.GetWithProviderID failed")
+               log.Error("find Instances by ProviderID failed", mes)
                return &pb.GetOneInstanceResponse{
                        Response: pb.CreateResponse(pb.ErrInstanceNotExists, 
mes.Error()),
                }, nil
@@ -752,38 +748,38 @@ func (ds *DataSource) GetInstances(ctx context.Context, 
request *pb.GetInstances
        if len(request.ConsumerServiceId) > 0 {
                service, err = serviceUtil.GetService(ctx, domainProject, 
request.ConsumerServiceId)
                if err != nil {
-                       log.Errorf(err, "get consumer failed, consumer[%s] find 
provider instances",
-                               request.ConsumerServiceId, 
request.ProviderServiceId)
+                       if errors.Is(err, datasource.ErrNoData) {
+                               log.Debug(fmt.Sprintf("consumer does not exist 
in db, consumer[%s] find provider[%s] instances",
+                                       request.ConsumerServiceId, 
request.ProviderServiceId))
+                               return &pb.GetInstancesResponse{
+                                       Response: 
pb.CreateResponse(pb.ErrServiceNotExists,
+                                               fmt.Sprintf("Consumer[%s] does 
not exist.", request.ConsumerServiceId)),
+                               }, nil
+                       }
+                       log.Error(fmt.Sprintf("get consumer failed, 
consumer[%s] find provider[%s] instances",
+                               request.ConsumerServiceId, 
request.ProviderServiceId), err)
                        return &pb.GetInstancesResponse{
                                Response: pb.CreateResponse(pb.ErrInternal, 
err.Error()),
                        }, err
                }
-               if service == nil {
-                       log.Errorf(nil, "consumer does not exist, consumer[%s] 
find provider instances",
-                               request.ConsumerServiceId, 
request.ProviderServiceId)
-                       return &pb.GetInstancesResponse{
-                               Response: 
pb.CreateResponse(pb.ErrServiceNotExists,
-                                       fmt.Sprintf("Consumer[%s] does not 
exist.", request.ConsumerServiceId)),
-                       }, nil
-               }
        }
 
        provider, err := serviceUtil.GetService(ctx, domainProject, 
request.ProviderServiceId)
        if err != nil {
-               log.Errorf(err, "get provider failed, consumer[%s] find 
provider instances",
-                       request.ConsumerServiceId, request.ProviderServiceId)
+               if errors.Is(err, datasource.ErrNoData) {
+                       log.Debug(fmt.Sprintf("provider does not exist, 
consumer[%s] find provider[%s] instances",
+                               request.ConsumerServiceId, 
request.ProviderServiceId))
+                       return &pb.GetInstancesResponse{
+                               Response: 
pb.CreateResponse(pb.ErrServiceNotExists,
+                                       fmt.Sprintf("Provider[%s] does not 
exist.", request.ProviderServiceId)),
+                       }, nil
+               }
+               log.Error(fmt.Sprintf("get provider failed, consumer[%s] find 
provider[%s] instances",
+                       request.ConsumerServiceId, request.ProviderServiceId), 
err)
                return &pb.GetInstancesResponse{
                        Response: pb.CreateResponse(pb.ErrInternal, 
err.Error()),
                }, err
        }
-       if provider == nil {
-               log.Errorf(nil, "provider does not exist, consumer[%s] find 
provider instances",
-                       request.ConsumerServiceId, request.ProviderServiceId)
-               return &pb.GetInstancesResponse{
-                       Response: pb.CreateResponse(pb.ErrServiceNotExists,
-                               fmt.Sprintf("Provider[%s] does not exist.", 
request.ProviderServiceId)),
-               }, nil
-       }
 
        findFlag := func() string {
                return fmt.Sprintf("Consumer[%s][%s/%s/%s/%s] find 
provider[%s][%s/%s/%s/%s] instances",
@@ -914,20 +910,20 @@ func (ds *DataSource) findInstance(ctx context.Context, 
request *pb.FindInstance
        if len(request.ConsumerServiceId) > 0 {
                service, err = serviceUtil.GetService(ctx, domainProject, 
request.ConsumerServiceId)
                if err != nil {
-                       log.Errorf(err, "get consumer failed, consumer[%s] find 
provider[%s/%s/%s/%s]",
-                               request.ConsumerServiceId, request.Environment, 
request.AppId, request.ServiceName, request.VersionRule)
+                       if errors.Is(err, datasource.ErrNoData) {
+                               log.Debug(fmt.Sprintf("consumer does not exist, 
consumer[%s] find provider[%s/%s/%s/%s]",
+                                       request.ConsumerServiceId, 
request.Environment, request.AppId, request.ServiceName, request.VersionRule))
+                               return &pb.FindInstancesResponse{
+                                       Response: 
pb.CreateResponse(pb.ErrServiceNotExists,
+                                               fmt.Sprintf("Consumer[%s] does 
not exist.", request.ConsumerServiceId)),
+                               }, nil
+                       }
+                       log.Error(fmt.Sprintf("get consumer failed, 
consumer[%s] find provider[%s/%s/%s/%s]",
+                               request.ConsumerServiceId, request.Environment, 
request.AppId, request.ServiceName, request.VersionRule), err)
                        return &pb.FindInstancesResponse{
                                Response: pb.CreateResponse(pb.ErrInternal, 
err.Error()),
                        }, err
                }
-               if service == nil {
-                       log.Errorf(nil, "consumer does not exist, consumer[%s] 
find provider[%s/%s/%s/%s]",
-                               request.ConsumerServiceId, request.Environment, 
request.AppId, request.ServiceName, request.VersionRule)
-                       return &pb.FindInstancesResponse{
-                               Response: 
pb.CreateResponse(pb.ErrServiceNotExists,
-                                       fmt.Sprintf("Consumer[%s] does not 
exist.", request.ConsumerServiceId)),
-                       }, nil
-               }
                provider.Environment = service.Environment
        }
 
@@ -1031,7 +1027,7 @@ func (ds *DataSource) reshapeProviderKey(ctx 
context.Context, provider *pb.Micro
        *pb.MicroServiceKey, error) {
        //维护version的规则,service name 可能是别名,所以重新获取
        providerService, err := serviceUtil.GetService(ctx, provider.Tenant, 
providerID)
-       if providerService == nil {
+       if err != nil {
                return nil, err
        }
 
@@ -1348,23 +1344,23 @@ func (ds *DataSource) ModifySchemas(ctx 
context.Context, request *pb.ModifySchem
 
        serviceInfo, err := serviceUtil.GetService(ctx, domainProject, 
serviceID)
        if err != nil {
-               log.Errorf(err, "modify service[%s] schemas failed, get service 
failed, operator: %s",
-                       serviceID, remoteIP)
+               if errors.Is(err, datasource.ErrNoData) {
+                       log.Debug(fmt.Sprintf("modify service[%s] schemas 
failed, service does not exist in db, operator: %s",
+                               serviceID, remoteIP))
+                       return &pb.ModifySchemasResponse{
+                               Response: 
pb.CreateResponse(pb.ErrServiceNotExists, "Service does not exist."),
+                       }, nil
+               }
+               log.Error(fmt.Sprintf("modify service[%s] schemas failed, get 
service failed, operator: %s",
+                       serviceID, remoteIP), err)
                return &pb.ModifySchemasResponse{
                        Response: pb.CreateResponse(pb.ErrInternal, 
err.Error()),
                }, err
        }
-       if serviceInfo == nil {
-               log.Errorf(nil, "modify service[%s] schemas failed, service 
does not exist, operator: %s",
-                       serviceID, remoteIP)
-               return &pb.ModifySchemasResponse{
-                       Response: pb.CreateResponse(pb.ErrServiceNotExists, 
"Service does not exist."),
-               }, nil
-       }
 
        respErr := ds.modifySchemas(ctx, domainProject, serviceInfo, 
request.Schemas)
        if respErr != nil {
-               log.Errorf(nil, "modify service[%s] schemas failed, operator: 
%s", serviceID, remoteIP)
+               log.Error(fmt.Sprintf("modify service[%s] schemas failed, 
operator: %s", serviceID, remoteIP), nil)
                resp := &pb.ModifySchemasResponse{
                        Response: pb.CreateResponseWithSCErr(respErr),
                }
@@ -1498,17 +1494,17 @@ func (ds *DataSource) GetAllSchemas(ctx 
context.Context, request *pb.GetAllSchem
 
        service, err := serviceUtil.GetService(ctx, domainProject, 
request.ServiceId)
        if err != nil {
-               log.Errorf(err, "get service[%s] all schemas failed, get 
service failed", request.ServiceId)
+               if errors.Is(err, datasource.ErrNoData) {
+                       log.Debug(fmt.Sprintf("get service[%s] all schemas 
failed, service does not exist in db", request.ServiceId))
+                       return &pb.GetAllSchemaResponse{
+                               Response: 
pb.CreateResponse(pb.ErrServiceNotExists, "Service does not exist."),
+                       }, nil
+               }
+               log.Error(fmt.Sprintf("get service[%s] all schemas failed, get 
service failed", request.ServiceId), err)
                return &pb.GetAllSchemaResponse{
                        Response: pb.CreateResponse(pb.ErrInternal, 
err.Error()),
                }, err
        }
-       if service == nil {
-               log.Errorf(nil, "get service[%s] all schemas failed, service 
does not exist", request.ServiceId)
-               return &pb.GetAllSchemaResponse{
-                       Response: pb.CreateResponse(pb.ErrServiceNotExists, 
"Service does not exist."),
-               }, nil
-       }
 
        schemasList := service.Schemas
        if len(schemasList) == 0 {
@@ -2301,15 +2297,15 @@ func (ds *DataSource) modifySchema(ctx context.Context, 
serviceID string, schema
 
        microService, err := serviceUtil.GetService(ctx, domainProject, 
serviceID)
        if err != nil {
-               log.Errorf(err, "modify schema[%s/%s] failed, get `microService 
failed, operator: %s",
-                       serviceID, schemaID, remoteIP)
+               if errors.Is(err, datasource.ErrNoData) {
+                       log.Debug(fmt.Sprintf("microService does not exist, 
modify schema[%s/%s] failed, operator: %s",
+                               serviceID, schemaID, remoteIP))
+                       return pb.NewError(pb.ErrServiceNotExists, "Service 
does not exist")
+               }
+               log.Error(fmt.Sprintf("modify schema[%s/%s] failed, get 
`microService failed, operator: %s",
+                       serviceID, schemaID, remoteIP), err)
                return pb.NewError(pb.ErrInternal, err.Error())
        }
-       if microService == nil {
-               log.Errorf(nil, "modify schema[%s/%s] failed, microService does 
not exist, operator: %s",
-                       serviceID, schemaID, remoteIP)
-               return pb.NewError(pb.ErrServiceNotExists, "Service does not 
exist")
-       }
 
        var pluginOps []client.PluginOp
        isExist := isExistSchemaID(microService, []*pb.Schema{schema})
@@ -2399,23 +2395,22 @@ func (ds *DataSource) DeleteServicePri(ctx 
context.Context, serviceID string, fo
 
        if serviceID == core.Service.ServiceId {
                err := errors.New("not allow to delete service center")
-               log.Errorf(err, "%s micro-service[%s] failed, operator: %s", 
title, serviceID, remoteIP)
+               log.Error(fmt.Sprintf("%s micro-service[%s] failed, operator: 
%s", title, serviceID, remoteIP), err)
                return pb.CreateResponse(pb.ErrInvalidParams, err.Error()), nil
        }
 
        microservice, err := serviceUtil.GetService(ctx, domainProject, 
serviceID)
        if err != nil {
-               log.Errorf(err, "%s micro-service[%s] failed, get service file 
failed, operator: %s",
-                       title, serviceID, remoteIP)
+               if errors.Is(err, datasource.ErrNoData) {
+                       log.Debug(fmt.Sprintf("service does not exist, %s 
micro-service[%s] failed, operator: %s",
+                               title, serviceID, remoteIP))
+                       return pb.CreateResponse(pb.ErrServiceNotExists, 
"Service does not exist."), nil
+               }
+               log.Error(fmt.Sprintf("%s micro-service[%s] failed, get service 
file failed, operator: %s",
+                       title, serviceID, remoteIP), err)
                return pb.CreateResponse(pb.ErrInternal, err.Error()), err
        }
 
-       if microservice == nil {
-               log.Errorf(err, "%s micro-service[%s] failed, service does not 
exist, operator: %s",
-                       title, serviceID, remoteIP)
-               return pb.CreateResponse(pb.ErrServiceNotExists, "Service does 
not exist."), nil
-       }
-
        // 强制删除,则与该服务相关的信息删除,非强制删除: 
如果作为该被依赖(作为provider,提供服务,且不是只存在自依赖)或者存在实例,则不能删除
        if !force {
                dr := serviceUtil.NewProviderDependencyRelation(ctx, 
domainProject, microservice)
diff --git a/datasource/etcd/util.go b/datasource/etcd/util.go
index 4b21e9d..cfb549d 100644
--- a/datasource/etcd/util.go
+++ b/datasource/etcd/util.go
@@ -24,7 +24,6 @@ import (
        "time"
 
        "github.com/apache/servicecomb-service-center/datasource"
-
        "github.com/apache/servicecomb-service-center/datasource/etcd/client"
        "github.com/apache/servicecomb-service-center/datasource/etcd/kv"
        "github.com/apache/servicecomb-service-center/datasource/etcd/path"
@@ -192,7 +191,7 @@ func preProcessRegisterInstance(ctx context.Context, 
instance *pb.MicroServiceIn
 
        domainProject := util.ParseDomainProject(ctx)
        microservice, err := serviceUtil.GetService(ctx, domainProject, 
instance.ServiceId)
-       if microservice == nil || err != nil {
+       if err != nil {
                return pb.NewError(pb.ErrServiceNotExists, "Invalid 'serviceID' 
in request body.")
        }
        instance.Version = microservice.Version
diff --git a/datasource/etcd/util/dependency_query.go 
b/datasource/etcd/util/dependency_query.go
index 4092f97..5e30ede 100644
--- a/datasource/etcd/util/dependency_query.go
+++ b/datasource/etcd/util/dependency_query.go
@@ -19,13 +19,14 @@ package util
 
 import (
        "context"
+       "errors"
        "fmt"
        "strings"
 
-       "github.com/apache/servicecomb-service-center/datasource/etcd/path"
-
+       "github.com/apache/servicecomb-service-center/datasource"
        "github.com/apache/servicecomb-service-center/datasource/etcd/client"
        "github.com/apache/servicecomb-service-center/datasource/etcd/kv"
+       "github.com/apache/servicecomb-service-center/datasource/etcd/path"
        "github.com/apache/servicecomb-service-center/pkg/log"
        "github.com/apache/servicecomb-service-center/pkg/util"
        pb "github.com/go-chassis/cari/discovery"
@@ -90,13 +91,13 @@ func (dr *DependencyRelation) GetDependencyProviders(opts 
...DependencyRelationF
                for _, providerID := range providerIDs {
                        provider, err := GetService(dr.ctx, key.Tenant, 
providerID)
                        if err != nil {
-                               log.Warnf("get provider[%s/%s/%s/%s] failed",
-                                       key.Environment, key.AppId, 
key.ServiceName, key.Version)
-                               continue
-                       }
-                       if provider == nil {
-                               log.Warnf("provider[%s/%s/%s/%s] does not 
exist",
-                                       key.Environment, key.AppId, 
key.ServiceName, key.Version)
+                               if errors.Is(err, datasource.ErrNoData) {
+                                       
log.Warn(fmt.Sprintf("provider[%s/%s/%s/%s] does not exist",
+                                               key.Environment, key.AppId, 
key.ServiceName, key.Version))
+                               } else {
+                                       log.Warn(fmt.Sprintf("get 
provider[%s/%s/%s/%s] failed",
+                                               key.Environment, key.AppId, 
key.ServiceName, key.Version))
+                               }
                                continue
                        }
                        if op.NonSelf && providerID == dr.consumer.ServiceId {
@@ -202,12 +203,13 @@ func (dr *DependencyRelation) GetDependencyConsumers(opts 
...DependencyRelationF
 
                service, err := dr.GetServiceByMicroServiceKey(consumer)
                if err != nil {
-                       return nil, err
-               }
-               if service == nil {
-                       log.Warnf("consumer[%s/%s/%s/%s] does not exist",
-                               consumer.Environment, consumer.AppId, 
consumer.ServiceName, consumer.Version)
-                       continue
+                       if errors.Is(err, datasource.ErrNoData) {
+                               log.Warn(fmt.Sprintf("consumer[%s/%s/%s/%s] 
does not exist",
+                                       consumer.Environment, consumer.AppId, 
consumer.ServiceName, consumer.Version))
+                               continue
+                       } else {
+                               return nil, err
+                       }
                }
 
                if op.NonSelf && service.ServiceId == dr.provider.ServiceId {
@@ -225,9 +227,9 @@ func (dr *DependencyRelation) 
GetServiceByMicroServiceKey(service *pb.MicroServi
                return nil, err
        }
        if len(serviceID) == 0 {
-               log.Warnf("service[%s/%s/%s/%s] not exist",
-                       service.Environment, service.AppId, 
service.ServiceName, service.Version)
-               return nil, nil
+               log.Warn(fmt.Sprintf("service[%s/%s/%s/%s] not exist",
+                       service.Environment, service.AppId, 
service.ServiceName, service.Version))
+               return nil, datasource.ErrNoData
        }
        return GetService(dr.ctx, service.Tenant, serviceID)
 }
diff --git a/datasource/etcd/util/dependency_test.go 
b/datasource/etcd/util/dependency_test.go
index f152b40..1e22306 100644
--- a/datasource/etcd/util/dependency_test.go
+++ b/datasource/etcd/util/dependency_test.go
@@ -19,8 +19,11 @@ package util_test
 
 import (
        "context"
+       "errors"
+       "github.com/stretchr/testify/assert"
        "testing"
 
+       "github.com/apache/servicecomb-service-center/datasource"
        . "github.com/apache/servicecomb-service-center/datasource/etcd/util"
        "github.com/go-chassis/cari/discovery"
 )
@@ -227,10 +230,13 @@ func TestDependency(t *testing.T) {
                t.Fatalf(`DependencyRelation_GetDependencyConsumers failed`)
        }
 
-       _, err = dr.GetServiceByMicroServiceKey(&discovery.MicroServiceKey{})
-       if err != nil {
-               t.Fatalf(`DependencyRelation_getServiceByMicroServiceKey 
failed`)
-       }
+       t.Run("GetServiceByMicroServiceKey when service not exist", func(t 
*testing.T) {
+               _, err = 
dr.GetServiceByMicroServiceKey(&discovery.MicroServiceKey{})
+               if err != nil && !errors.Is(err, datasource.ErrNoData) {
+                       
t.Fatalf(`DependencyRelation_getServiceByMicroServiceKey failed`)
+               }
+               assert.Equal(t, datasource.ErrNoData, err, "service not exist")
+       })
 
        _, err = 
dr.GetConsumerOfSameServiceNameAndAppID(&discovery.MicroServiceKey{})
        if err != nil {
diff --git a/datasource/etcd/util/microservice_util.go 
b/datasource/etcd/util/microservice_util.go
index 5e71c6b..2d76525 100644
--- a/datasource/etcd/util/microservice_util.go
+++ b/datasource/etcd/util/microservice_util.go
@@ -20,12 +20,13 @@ package util
 import (
        "context"
        "encoding/json"
+       "fmt"
        "strings"
 
-       "github.com/apache/servicecomb-service-center/datasource/etcd/path"
-
+       "github.com/apache/servicecomb-service-center/datasource"
        "github.com/apache/servicecomb-service-center/datasource/etcd/client"
        "github.com/apache/servicecomb-service-center/datasource/etcd/kv"
+       "github.com/apache/servicecomb-service-center/datasource/etcd/path"
        "github.com/apache/servicecomb-service-center/datasource/etcd/sd"
        "github.com/apache/servicecomb-service-center/pkg/log"
        "github.com/apache/servicecomb-service-center/pkg/util"
@@ -45,7 +46,7 @@ func GetServiceWithRev(ctx context.Context, domain string, id 
string, rev int64)
                return nil, err
        }
        if len(serviceResp.Kvs) == 0 {
-               return nil, nil
+               return nil, datasource.ErrNoData
        }
        return serviceResp.Kvs[0].Value.(*pb.MicroService), nil
 }
@@ -58,7 +59,7 @@ func GetService(ctx context.Context, domainProject string, 
serviceID string) (*p
                return nil, err
        }
        if len(serviceResp.Kvs) == 0 {
-               return nil, nil
+               return nil, datasource.ErrNoData
        }
        return serviceResp.Kvs[0].Value.(*pb.MicroService), nil
 }
@@ -108,7 +109,7 @@ func GetAllServicesAcrossDomainProject(ctx context.Context) 
(map[string][]*pb.Mi
                domainProject := parts[4] + path.SPLIT + parts[5]
                microService, ok := value.Value.(*pb.MicroService)
                if !ok {
-                       log.Errorf(nil, "backend key[%s]'s value is not type 
*pb.MicroService", prefix)
+                       log.Error(fmt.Sprintf("backend key[%s]'s value is not 
type *pb.MicroService", prefix), nil)
                        continue
                }
                services[domainProject] = append(services[domainProject], 
microService)
@@ -135,8 +136,8 @@ func GetServiceID(ctx context.Context, key 
*pb.MicroServiceKey) (serviceID strin
        }
        if len(serviceID) == 0 {
                // 别名查询
-               log.Debugf("could not search microservice[%s/%s/%s/%s] id by 
'serviceName', now try 'alias'",
-                       key.Environment, key.AppId, key.ServiceName, 
key.Version)
+               log.Debug(fmt.Sprintf("could not search 
microservice[%s/%s/%s/%s] id by 'serviceName', now try 'alias'",
+                       key.Environment, key.AppId, key.ServiceName, 
key.Version))
                return searchServiceIDFromAlias(ctx, key)
        }
        return
@@ -256,7 +257,7 @@ func UpdateService(domainProject string, serviceID string, 
service *pb.MicroServ
        key := path.GenerateServiceKey(domainProject, serviceID)
        data, err := json.Marshal(service)
        if err != nil {
-               log.Errorf(err, "marshal service file failed")
+               log.Error("marshal service file failed", err)
                return
        }
        opt = client.OpPut(client.WithStrKey(key), client.WithValue(data))
diff --git a/datasource/etcd/util/rule_util.go 
b/datasource/etcd/util/rule_util.go
index 8666f4c..f8fb9e2 100644
--- a/datasource/etcd/util/rule_util.go
+++ b/datasource/etcd/util/rule_util.go
@@ -19,15 +19,16 @@ package util
 
 import (
        "context"
+       "errors"
        "fmt"
        "reflect"
        "regexp"
        "strings"
 
-       "github.com/apache/servicecomb-service-center/datasource/etcd/path"
-
+       "github.com/apache/servicecomb-service-center/datasource"
        "github.com/apache/servicecomb-service-center/datasource/etcd/client"
        "github.com/apache/servicecomb-service-center/datasource/etcd/kv"
+       "github.com/apache/servicecomb-service-center/datasource/etcd/path"
        "github.com/apache/servicecomb-service-center/pkg/log"
        "github.com/apache/servicecomb-service-center/pkg/util"
        apt "github.com/apache/servicecomb-service-center/server/core"
@@ -42,7 +43,7 @@ type RuleFilter struct {
 func (rf *RuleFilter) Filter(ctx context.Context, consumerID string) (bool, 
error) {
        copyCtx := util.WithCacheOnly(util.CloneContext(ctx))
        consumer, err := GetService(copyCtx, rf.DomainProject, consumerID)
-       if consumer == nil {
+       if err != nil {
                return false, err
        }
 
@@ -259,20 +260,20 @@ func Accessible(ctx context.Context, consumerID string, 
providerID string) *disc
 
        consumerService, err := GetService(ctx, domainProject, consumerID)
        if err != nil {
+               if errors.Is(err, datasource.ErrNoData) {
+                       return 
discovery.NewError(discovery.ErrServiceNotExists, "consumer serviceID is 
invalid")
+               }
                return discovery.NewErrorf(discovery.ErrInternal, "An error 
occurred in query consumer(%s)", err.Error())
        }
-       if consumerService == nil {
-               return discovery.NewError(discovery.ErrServiceNotExists, 
"consumer serviceID is invalid")
-       }
 
        // 跨应用权限
        providerService, err := GetService(ctx, targetDomainProject, providerID)
        if err != nil {
+               if errors.Is(err, datasource.ErrNoData) {
+                       return 
discovery.NewError(discovery.ErrServiceNotExists, "provider serviceID is 
invalid")
+               }
                return discovery.NewErrorf(discovery.ErrInternal, "An error 
occurred in query provider(%s)", err.Error())
        }
-       if providerService == nil {
-               return discovery.NewError(discovery.ErrServiceNotExists, 
"provider serviceID is invalid")
-       }
 
        err = AllowAcrossDimension(ctx, providerService, consumerService)
        if err != nil {
diff --git a/datasource/etcd/util/rule_util_test.go 
b/datasource/etcd/util/rule_util_test.go
index ba72871..0312eff 100644
--- a/datasource/etcd/util/rule_util_test.go
+++ b/datasource/etcd/util/rule_util_test.go
@@ -19,9 +19,12 @@ package util_test
 
 import (
        "context"
+       "errors"
+       "github.com/stretchr/testify/assert"
        "net/http"
        "testing"
 
+       "github.com/apache/servicecomb-service-center/datasource"
        . "github.com/apache/servicecomb-service-center/datasource/etcd/util"
        "github.com/apache/servicecomb-service-center/pkg/util"
        "github.com/go-chassis/cari/discovery"
@@ -32,21 +35,31 @@ func TestRuleFilter_Filter(t *testing.T) {
                DomainProject: "",
                ProviderRules: []*discovery.ServiceRule{},
        }
-       _, err := rf.Filter(context.Background(), "")
-       if err != nil {
-               t.Fatalf("RuleFilter Filter failed")
-       }
-       _, _, err = rf.FilterAll(context.Background(), []string{""})
-       if err != nil {
-               t.Fatalf("RuleFilter FilterAll failed")
-       }
+       var err error
+       t.Run("when there is no such a customer in db", func(t *testing.T) {
+               _, err = rf.Filter(context.Background(), "")
+               if err != nil && !errors.Is(err, datasource.ErrNoData) {
+                       t.Fatalf("RuleFilter Filter failed")
+               }
+               assert.Equal(t, datasource.ErrNoData, err, "no data found")
+       })
+       t.Run("FilterAll when customer not exist", func(t *testing.T) {
+               _, _, err = rf.FilterAll(context.Background(), []string{""})
+               if err != nil && !errors.Is(err, datasource.ErrNoData) {
+                       t.Fatalf("RuleFilter FilterAll failed")
+               }
+               assert.Equal(t, nil, err, "no customer found err is nil")
+       })
        rf.ProviderRules = []*discovery.ServiceRule{
                {},
        }
-       _, _, err = rf.FilterAll(context.Background(), []string{""})
-       if err != nil {
-               t.Fatalf("RuleFilter FilterAll failed")
-       }
+       t.Run("FilterAll when ProviderRules not nil and service not exist", 
func(t *testing.T) {
+               _, _, err = rf.FilterAll(context.Background(), []string{""})
+               if err != nil && !errors.Is(err, datasource.ErrNoData) {
+                       t.Fatalf("RuleFilter FilterAll failed")
+               }
+               assert.Equal(t, datasource.ErrNoData, err, "no customer found 
when FilterAll")
+       })
 }
 
 func TestGetRulesUtil(t *testing.T) {
diff --git a/datasource/etcd/util/util_suite_test.go 
b/datasource/etcd/util/util_suite_test.go
index 4cb7774..ac69588 100644
--- a/datasource/etcd/util/util_suite_test.go
+++ b/datasource/etcd/util/util_suite_test.go
@@ -20,8 +20,11 @@ package util_test
 // initialize
 import (
        "context"
+       "errors"
+       "github.com/stretchr/testify/assert"
        "testing"
 
+       "github.com/apache/servicecomb-service-center/datasource"
        "github.com/apache/servicecomb-service-center/datasource/etcd/client"
        _ "github.com/apache/servicecomb-service-center/test"
 
@@ -66,10 +69,14 @@ func TestFindServiceIds(t *testing.T) {
 }
 
 func TestGetService(t *testing.T) {
-       _, err := serviceUtil.GetService(context.Background(), "", "")
-       if err != nil {
-               t.Fatalf("TestGetService failed")
-       }
+       var err error
+       t.Run("when there is no such a service in db", func(t *testing.T) {
+               _, err = serviceUtil.GetService(context.Background(), "", "")
+               if err != nil && !errors.Is(err, datasource.ErrNoData) {
+                       t.Fatalf("TestGetService failed")
+               }
+               assert.Equal(t, datasource.ErrNoData, err)
+       })
 
        _, err = serviceUtil.GetServicesByDomainProject(context.Background(), 
"")
        if err != nil {
@@ -81,10 +88,13 @@ func TestGetService(t *testing.T) {
                t.Fatalf("TestGetService failed")
        }
 
-       _, err = serviceUtil.GetServiceWithRev(context.Background(), "", "", 0)
-       if err != nil {
-               t.Fatalf("TestGetService failed")
-       }
+       t.Run("when there is no such a service in db", func(t *testing.T) {
+               _, err = serviceUtil.GetServiceWithRev(context.Background(), 
"", "", 0)
+               if err != nil && !errors.Is(err, datasource.ErrNoData) {
+                       t.Fatalf("TestGetService failed")
+               }
+               assert.Equal(t, datasource.ErrNoData, err)
+       })
 
        //_, err = serviceUtil.GetServiceWithRev(context.Background(), "", "", 
1)
        //if err != nil {
diff --git a/datasource/mongo/client/errortypes.go 
b/datasource/mongo/client/errortypes.go
index 9d7311a..3c86420 100644
--- a/datasource/mongo/client/errortypes.go
+++ b/datasource/mongo/client/errortypes.go
@@ -43,6 +43,6 @@ func IsDuplicateKey(err error) bool {
        return false
 }
 
-func IsNoneDoc(err error) bool {
+func IsNoneDocErr(err error) bool {
        return err == ErrNoDocuments
 }
diff --git a/datasource/mongo/dep.go b/datasource/mongo/dep.go
index 0566c5b..fe0467d 100644
--- a/datasource/mongo/dep.go
+++ b/datasource/mongo/dep.go
@@ -19,6 +19,7 @@ package mongo
 
 import (
        "context"
+       "errors"
        "fmt"
 
        pb "github.com/go-chassis/cari/discovery"
@@ -36,15 +37,15 @@ func (ds *DataSource) SearchProviderDependency(ctx 
context.Context, request *pb.
        filter := GeneratorServiceFilter(ctx, providerServiceID)
        provider, err := GetService(ctx, filter)
        if err != nil {
-               log.Error("GetProviderDependencies failed, provider is 
"+providerServiceID, err)
+               if errors.Is(err, datasource.ErrNoData) {
+                       log.Debug(fmt.Sprintf("query provider service failed, 
there is no provider %s in db", providerServiceID))
+                       return &pb.GetProDependenciesResponse{
+                               Response: 
pb.CreateResponse(pb.ErrServiceNotExists, "Provider does not exist"),
+                       }, nil
+               }
+               log.Error(fmt.Sprintf("query provider from db error, provider 
is %s", providerServiceID), err)
                return nil, err
        }
-       if provider == nil {
-               log.Error(fmt.Sprintf("GetProviderDependencies failed for 
provider %s", providerServiceID), err)
-               return &pb.GetProDependenciesResponse{
-                       Response: pb.CreateResponse(pb.ErrServiceNotExists, 
"Provider does not exist"),
-               }, nil
-       }
 
        dr := NewProviderDependencyRelation(ctx, domainProject, 
provider.ServiceInfo)
        services, err := 
dr.GetDependencyConsumers(ToDependencyFilterOptions(request)...)
@@ -69,20 +70,20 @@ func (ds *DataSource) SearchConsumerDependency(ctx 
context.Context, request *pb.
        filter := GeneratorServiceFilter(ctx, consumerID)
        consumer, err := GetService(ctx, filter)
        if err != nil {
-               log.Error(fmt.Sprintf("GetConsumerDependencies failed, consumer 
is %s", consumerID), err)
+               if errors.Is(err, datasource.ErrNoData) {
+                       log.Debug(fmt.Sprintf("query consumer service failed, 
there is no consumer %s in db", consumerID))
+                       return &pb.GetConDependenciesResponse{
+                               Response: 
pb.CreateResponse(pb.ErrServiceNotExists, "Consumer does not exist"),
+                       }, nil
+               }
+               log.Error(fmt.Sprintf("query consumer from db error, consumer 
is %s", consumerID), err)
                return nil, err
        }
-       if consumer == nil {
-               log.Error(fmt.Sprintf("GetConsumerDependencies failed for 
consumer %s does not exist", consumerID), err)
-               return &pb.GetConDependenciesResponse{
-                       Response: pb.CreateResponse(pb.ErrServiceNotExists, 
"Consumer does not exist"),
-               }, nil
-       }
 
        dr := NewConsumerDependencyRelation(ctx, domainProject, 
consumer.ServiceInfo)
        services, err := 
dr.GetDependencyProviders(ToDependencyFilterOptions(request)...)
        if err != nil {
-               log.Error(fmt.Sprintf("GetConsumerDependencies failed, consumer 
is %s/%s/%s/%s",
+               log.Error(fmt.Sprintf("query consumer failed, consumer is 
%s/%s/%s/%s",
                        consumer.ServiceInfo.Environment, 
consumer.ServiceInfo.AppId, consumer.ServiceInfo.ServiceName, 
consumer.ServiceInfo.Version), err)
                return &pb.GetConDependenciesResponse{
                        Response: pb.CreateResponse(pb.ErrInternal, 
err.Error()),
@@ -90,7 +91,7 @@ func (ds *DataSource) SearchConsumerDependency(ctx 
context.Context, request *pb.
        }
 
        return &pb.GetConDependenciesResponse{
-               Response:  pb.CreateResponse(pb.ResponseSuccess, "Get all 
providers successfully."),
+               Response:  pb.CreateResponse(pb.ResponseSuccess, "get all 
providers successfully."),
                Providers: services,
        }, nil
 }
diff --git a/datasource/mongo/dependency_query.go 
b/datasource/mongo/dependency_query.go
index 8025aba..db91d47 100644
--- a/datasource/mongo/dependency_query.go
+++ b/datasource/mongo/dependency_query.go
@@ -19,9 +19,11 @@ package mongo
 
 import (
        "context"
+       "errors"
        "fmt"
        "strings"
 
+       "github.com/apache/servicecomb-service-center/datasource"
        "github.com/apache/servicecomb-service-center/datasource/mongo/client"
        "github.com/apache/servicecomb-service-center/pkg/log"
        pb "github.com/go-chassis/cari/discovery"
@@ -86,13 +88,13 @@ func (dr *DependencyRelation) GetDependencyProviders(opts 
...DependencyRelationF
                        filter := GeneratorServiceFilter(dr.ctx, providerID)
                        provider, err := GetService(dr.ctx, filter)
                        if err != nil {
-                               log.Warn(fmt.Sprintf("get provider[%s/%s/%s/%s] 
failed",
-                                       key.Environment, key.AppId, 
key.ServiceName, key.Version))
-                               continue
-                       }
-                       if provider == nil {
-                               log.Warn(fmt.Sprintf("provider[%s/%s/%s/%s] 
does not exist",
-                                       key.Environment, key.AppId, 
key.ServiceName, key.Version))
+                               if errors.Is(err, datasource.ErrNoData) {
+                                       
log.Warn(fmt.Sprintf("provider[%s/%s/%s/%s] does not exist",
+                                               key.Environment, key.AppId, 
key.ServiceName, key.Version))
+                               } else {
+                                       log.Warn(fmt.Sprintf("get 
provider[%s/%s/%s/%s] failed",
+                                               key.Environment, key.AppId, 
key.ServiceName, key.Version))
+                               }
                                continue
                        }
                        if op.NonSelf && providerID == dr.consumer.ServiceId {
diff --git a/datasource/mongo/event/instance_event_handler.go 
b/datasource/mongo/event/instance_event_handler.go
index e9ecf12..c870b8a 100644
--- a/datasource/mongo/event/instance_event_handler.go
+++ b/datasource/mongo/event/instance_event_handler.go
@@ -19,6 +19,7 @@ package event
 
 import (
        "context"
+       "errors"
        "fmt"
 
        "github.com/apache/servicecomb-service-center/datasource"
@@ -56,11 +57,11 @@ func (h InstanceEventHandler) OnEvent(evt sd.MongoEvent) {
                log.Info("get cached service failed, then get from database")
                service, err := mongo.GetService(context.Background(), 
bson.M{"serviceinfo.serviceid": providerID})
                if err != nil {
-                       log.Error("query database error", err)
-                       return
-               }
-               if service == nil {
-                       log.Warn(fmt.Sprintf("there is no service with id [%s] 
in the database", providerID))
+                       if errors.Is(err, datasource.ErrNoData) {
+                               log.Warn(fmt.Sprintf("there is no service with 
id [%s] in the database", providerID))
+                       } else {
+                               log.Error("query database error", err)
+                       }
                        return
                }
                microService = service.ServiceInfo // service in the cache may 
not ready, query from db once
diff --git a/datasource/mongo/ms.go b/datasource/mongo/ms.go
index 6911e66..d60a9d8 100644
--- a/datasource/mongo/ms.go
+++ b/datasource/mongo/ms.go
@@ -173,19 +173,20 @@ func (ds *DataSource) GetService(ctx context.Context, 
request *discovery.GetServ
        *discovery.GetServiceResponse, error) {
        svc, err := GetServiceByID(ctx, request.ServiceId)
        if err != nil {
+               if errors.Is(err, datasource.ErrNoData) {
+                       log.Debug(fmt.Sprintf("service %s not exist in db", 
request.ServiceId))
+                       return &discovery.GetServiceResponse{
+                               Response: 
discovery.CreateResponse(discovery.ErrServiceNotExists, "Service not exist."),
+                       }, nil
+               }
                log.Error(fmt.Sprintf("failed to get single service %s from 
mongo", request.ServiceId), err)
                return &discovery.GetServiceResponse{
                        Response: 
discovery.CreateResponse(discovery.ErrInternal, "get service data from mongodb 
failed."),
                }, err
        }
-       if svc != nil {
-               return &discovery.GetServiceResponse{
-                       Response: 
discovery.CreateResponse(discovery.ResponseSuccess, "Get service 
successfully."),
-                       Service:  svc.ServiceInfo,
-               }, nil
-       }
        return &discovery.GetServiceResponse{
-               Response: 
discovery.CreateResponse(discovery.ErrServiceNotExists, "Service not exist."),
+               Response: discovery.CreateResponse(discovery.ResponseSuccess, 
"Get service successfully."),
+               Service:  svc.ServiceInfo,
        }, nil
 }
 
@@ -266,17 +267,17 @@ func (ds *DataSource) DelServicePri(ctx context.Context, 
serviceID string, force
                log.Error(fmt.Sprintf("%s micro-service %s failed, operator: 
%s", title, serviceID, remoteIP), ErrNotAllowDeleteSC)
                return discovery.CreateResponse(discovery.ErrInvalidParams, 
ErrNotAllowDeleteSC.Error()), nil
        }
-       microservice, err := GetService(ctx, GeneratorServiceFilter(ctx, 
serviceID))
+       _, err := GetService(ctx, GeneratorServiceFilter(ctx, serviceID))
        if err != nil {
+               if errors.Is(err, datasource.ErrNoData) {
+                       log.Debug(fmt.Sprintf("%s micro-service %s failed, 
service does not exist, operator: %s",
+                               title, serviceID, remoteIP))
+                       return 
discovery.CreateResponse(discovery.ErrServiceNotExists, "Service does not 
exist."), nil
+               }
                log.Error(fmt.Sprintf("%s micro-service %s failed, get service 
file failed, operator: %s",
                        title, serviceID, remoteIP), err)
                return discovery.CreateResponse(discovery.ErrInternal, 
err.Error()), err
        }
-       if microservice == nil {
-               log.Error(fmt.Sprintf("%s micro-service %s failed, service does 
not exist, operator: %s",
-                       title, serviceID, remoteIP), err)
-               return discovery.CreateResponse(discovery.ErrServiceNotExists, 
"Service does not exist."), nil
-       }
        // 强制删除,则与该服务相关的信息删除,非强制删除: 
如果作为该被依赖(作为provider,提供服务,且不是只存在自依赖)或者存在实例,则不能删除
        if !force {
                //todo wait for dep interface
@@ -347,15 +348,15 @@ func (ds *DataSource) GetServiceDetail(ctx 
context.Context, request *discovery.G
        *discovery.GetServiceDetailResponse, error) {
        mgSvc, err := GetService(ctx, GeneratorServiceFilter(ctx, 
request.ServiceId))
        if err != nil {
+               if errors.Is(err, datasource.ErrNoData) {
+                       return &discovery.GetServiceDetailResponse{
+                               Response: 
discovery.CreateResponse(discovery.ErrServiceNotExists, "Service does not 
exist."),
+                       }, nil
+               }
                return &discovery.GetServiceDetailResponse{
                        Response: 
discovery.CreateResponse(discovery.ErrInternal, err.Error()),
                }, err
        }
-       if mgSvc == nil {
-               return &discovery.GetServiceDetailResponse{
-                       Response: 
discovery.CreateResponse(discovery.ErrServiceNotExists, "Service does not 
exist."),
-               }, nil
-       }
        svc := mgSvc.ServiceInfo
        key := &discovery.MicroServiceKey{
                Environment: svc.Environment,
@@ -460,14 +461,15 @@ func (ds *DataSource) AddTags(ctx context.Context, 
request *discovery.AddService
        remoteIP := util.GetIPFromContext(ctx)
        service, err := GetService(ctx, GeneratorServiceFilter(ctx, 
request.ServiceId))
        if err != nil {
+               if errors.Is(err, datasource.ErrNoData) {
+                       log.Debug(fmt.Sprintf("service %s not exist in db", 
request.ServiceId))
+                       return &discovery.AddServiceTagsResponse{Response: 
discovery.CreateResponse(discovery.ErrServiceNotExists, "Service not exist")}, 
nil
+               }
                log.Error(fmt.Sprintf("failed to add tags for service %s for 
get service failed", request.ServiceId), err)
                return &discovery.AddServiceTagsResponse{
                        Response: 
discovery.CreateResponse(discovery.ErrInternal, "Failed to check service 
exist"),
                }, nil
        }
-       if service == nil {
-               return &discovery.AddServiceTagsResponse{Response: 
discovery.CreateResponse(discovery.ErrServiceNotExists, "Service not exist")}, 
nil
-       }
        tags := request.Tags
        res := quota.NewApplyQuotaResource(quota.TagQuotaType, 
util.ParseDomainProject(ctx), request.ServiceId, int64(len(tags)))
        rst := quota.Apply(ctx, res)
@@ -504,16 +506,17 @@ func (ds *DataSource) AddTags(ctx context.Context, 
request *discovery.AddService
 func (ds *DataSource) GetTags(ctx context.Context, request 
*discovery.GetServiceTagsRequest) (*discovery.GetServiceTagsResponse, error) {
        svc, err := GetService(ctx, GeneratorServiceFilter(ctx, 
request.ServiceId))
        if err != nil {
+               if errors.Is(err, datasource.ErrNoData) {
+                       log.Debug(fmt.Sprintf("service %s not exist in db", 
request.ServiceId))
+                       return &discovery.GetServiceTagsResponse{
+                               Response: 
discovery.CreateResponse(discovery.ErrServiceNotExists, "Service does not 
exist"),
+                       }, nil
+               }
                log.Error(fmt.Sprintf("failed to get service %s tags", 
request.ServiceId), err)
                return &discovery.GetServiceTagsResponse{
                        Response: 
discovery.CreateResponse(discovery.ErrInternal, err.Error()),
                }, nil
        }
-       if svc == nil {
-               return &discovery.GetServiceTagsResponse{
-                       Response: 
discovery.CreateResponse(discovery.ErrServiceNotExists, "Service does not 
exist"),
-               }, nil
-       }
        return &discovery.GetServiceTagsResponse{
                Response: discovery.CreateResponse(discovery.ResponseSuccess, 
"Get service tags successfully."),
                Tags:     svc.Tags,
@@ -523,16 +526,17 @@ func (ds *DataSource) GetTags(ctx context.Context, 
request *discovery.GetService
 func (ds *DataSource) UpdateTag(ctx context.Context, request 
*discovery.UpdateServiceTagRequest) (*discovery.UpdateServiceTagResponse, 
error) {
        svc, err := GetService(ctx, GeneratorServiceFilter(ctx, 
request.ServiceId))
        if err != nil {
+               if errors.Is(err, datasource.ErrNoData) {
+                       log.Debug(fmt.Sprintf("service %s not exist in db", 
request.ServiceId))
+                       return &discovery.UpdateServiceTagResponse{
+                               Response: 
discovery.CreateResponse(discovery.ErrServiceNotExists, "Service does not 
exist"),
+                       }, nil
+               }
                log.Error(fmt.Sprintf("failed to get %s tags", 
request.ServiceId), err)
                return &discovery.UpdateServiceTagResponse{
                        Response: 
discovery.CreateResponse(discovery.ErrInternal, err.Error()),
                }, nil
        }
-       if svc == nil {
-               return &discovery.UpdateServiceTagResponse{
-                       Response: 
discovery.CreateResponse(discovery.ErrServiceNotExists, "Service does not 
exist"),
-               }, nil
-       }
        dataTags := svc.Tags
        if len(dataTags) > 0 {
                if _, ok := dataTags[request.Key]; !ok {
@@ -562,16 +566,17 @@ func (ds *DataSource) UpdateTag(ctx context.Context, 
request *discovery.UpdateSe
 func (ds *DataSource) DeleteTags(ctx context.Context, request 
*discovery.DeleteServiceTagsRequest) (*discovery.DeleteServiceTagsResponse, 
error) {
        svc, err := GetService(ctx, GeneratorServiceFilter(ctx, 
request.ServiceId))
        if err != nil {
+               if errors.Is(err, datasource.ErrNoData) {
+                       log.Debug(fmt.Sprintf("service %s not exist in db", 
request.ServiceId))
+                       return &discovery.DeleteServiceTagsResponse{
+                               Response: 
discovery.CreateResponse(discovery.ErrServiceNotExists, "Service does not 
exist"),
+                       }, nil
+               }
                log.Error(fmt.Sprintf("failed to get service %s tags", 
request.ServiceId), err)
                return &discovery.DeleteServiceTagsResponse{
                        Response: 
discovery.CreateResponse(discovery.ErrInternal, err.Error()),
                }, nil
        }
-       if svc == nil {
-               return &discovery.DeleteServiceTagsResponse{
-                       Response: 
discovery.CreateResponse(discovery.ErrServiceNotExists, "Service does not 
exist"),
-               }, nil
-       }
        dataTags := svc.Tags
        newTags := make(map[string]string, len(dataTags))
        for k, v := range dataTags {
@@ -632,16 +637,17 @@ func (ds *DataSource) GetSchema(ctx context.Context, 
request *discovery.GetSchem
 func (ds *DataSource) GetAllSchemas(ctx context.Context, request 
*discovery.GetAllSchemaRequest) (*discovery.GetAllSchemaResponse, error) {
        svc, err := GetService(ctx, GeneratorServiceFilter(ctx, 
request.ServiceId))
        if err != nil {
+               if errors.Is(err, datasource.ErrNoData) {
+                       log.Debug(fmt.Sprintf("service %s not exist in db", 
request.ServiceId))
+                       return &discovery.GetAllSchemaResponse{
+                               Response: 
discovery.CreateResponse(discovery.ErrServiceNotExists, "GetAllSchemas failed 
for service not exist"),
+                       }, nil
+               }
                log.Error(fmt.Sprintf("get service[%s] all schemas failed, get 
service failed", request.ServiceId), err)
                return &discovery.GetAllSchemaResponse{
                        Response: 
discovery.CreateResponse(discovery.ErrInternal, err.Error()),
                }, err
        }
-       if svc == nil {
-               return &discovery.GetAllSchemaResponse{
-                       Response: 
discovery.CreateResponse(discovery.ErrServiceNotExists, "GetAllSchemas failed 
for service not exist"),
-               }, nil
-       }
        schemasList := svc.ServiceInfo.Schemas
        if len(schemasList) == 0 {
                return &discovery.GetAllSchemaResponse{
@@ -764,11 +770,11 @@ func (ds *DataSource) ModifySchema(ctx context.Context, 
request *discovery.Modif
 func (ds *DataSource) ModifySchemas(ctx context.Context, request 
*discovery.ModifySchemasRequest) (*discovery.ModifySchemasResponse, error) {
        svc, err := GetService(ctx, GeneratorServiceFilter(ctx, 
request.ServiceId))
        if err != nil {
+               if errors.Is(err, datasource.ErrNoData) {
+                       return &discovery.ModifySchemasResponse{Response: 
discovery.CreateResponse(discovery.ErrServiceNotExists, "Service not exist")}, 
nil
+               }
                return &discovery.ModifySchemasResponse{Response: 
discovery.CreateResponse(discovery.ErrInternal, err.Error())}, err
        }
-       if svc == nil {
-               return &discovery.ModifySchemasResponse{Response: 
discovery.CreateResponse(discovery.ErrServiceNotExists, "Service not exist")}, 
nil
-       }
        respErr := ds.modifySchemas(ctx, svc.ServiceInfo, request.Schemas)
        if respErr != nil {
                resp := &discovery.ModifySchemasResponse{
@@ -905,11 +911,11 @@ func (ds *DataSource) modifySchema(ctx context.Context, 
serviceID string, schema
        remoteIP := util.GetIPFromContext(ctx)
        svc, err := GetService(ctx, GeneratorServiceFilter(ctx, serviceID))
        if err != nil {
+               if errors.Is(err, datasource.ErrNoData) {
+                       return 
discovery.NewError(discovery.ErrServiceNotExists, "Service does not exist.")
+               }
                return discovery.NewError(discovery.ErrInternal, err.Error())
        }
-       if svc == nil {
-               return discovery.NewError(discovery.ErrServiceNotExists, 
"Service does not exist.")
-       }
        microservice := svc.ServiceInfo
        var isExist bool
        for _, sid := range microservice.Schemas {
@@ -1188,7 +1194,7 @@ func GetService(ctx context.Context, filter bson.M) 
(*Service, error) {
        var svc *Service
        if findRes.Err() != nil {
                //not get any service,not db err
-               return nil, nil
+               return nil, datasource.ErrNoData
        }
        err = findRes.Decode(&svc)
        if err != nil {
@@ -1529,39 +1535,39 @@ func (ds *DataSource) GetInstance(ctx context.Context, 
request *discovery.GetOne
                filter := GeneratorServiceFilter(ctx, request.ConsumerServiceId)
                service, err = GetService(ctx, filter)
                if err != nil {
+                       if errors.Is(err, datasource.ErrNoData) {
+                               log.Debug(fmt.Sprintf("consumer does not exist, 
consumer %s find provider instance %s %s",
+                                       request.ConsumerServiceId, 
request.ProviderServiceId, request.ProviderInstanceId))
+                               return &discovery.GetOneInstanceResponse{
+                                       Response: 
discovery.CreateResponse(discovery.ErrServiceNotExists,
+                                               fmt.Sprintf("Consumer[%s] does 
not exist.", request.ConsumerServiceId)),
+                               }, nil
+                       }
                        log.Error(fmt.Sprintf(" get consumer failed, consumer 
%s find provider instance %s",
                                request.ConsumerServiceId, 
request.ProviderInstanceId), err)
                        return &discovery.GetOneInstanceResponse{
                                Response: 
discovery.CreateResponse(discovery.ErrInternal, err.Error()),
                        }, err
                }
-               if service == nil {
-                       log.Error(fmt.Sprintf("consumer does not exist, 
consumer %s find provider instance %s %s",
-                               request.ConsumerServiceId, 
request.ProviderServiceId, request.ProviderInstanceId), err)
-                       return &discovery.GetOneInstanceResponse{
-                               Response: 
discovery.CreateResponse(discovery.ErrServiceNotExists,
-                                       fmt.Sprintf("Consumer[%s] does not 
exist.", request.ConsumerServiceId)),
-                       }, nil
-               }
        }
 
        filter := GeneratorServiceFilter(ctx, request.ProviderServiceId)
        provider, err := GetService(ctx, filter)
        if err != nil {
+               if errors.Is(err, datasource.ErrNoData) {
+                       log.Debug(fmt.Sprintf("provider does not exist, 
consumer %s find provider instance %s %s",
+                               request.ConsumerServiceId, 
request.ProviderServiceId, request.ProviderInstanceId))
+                       return &discovery.GetOneInstanceResponse{
+                               Response: 
discovery.CreateResponse(discovery.ErrServiceNotExists,
+                                       fmt.Sprintf("Provider[%s] does not 
exist.", request.ProviderServiceId)),
+                       }, nil
+               }
                log.Error(fmt.Sprintf("get provider failed, consumer %s find 
provider instance %s %s",
                        request.ConsumerServiceId, request.ProviderServiceId, 
request.ProviderInstanceId), err)
                return &discovery.GetOneInstanceResponse{
                        Response: 
discovery.CreateResponse(discovery.ErrInternal, err.Error()),
                }, err
        }
-       if provider == nil {
-               log.Error(fmt.Sprintf("provider does not exist, consumer %s 
find provider instance %s %s",
-                       request.ConsumerServiceId, request.ProviderServiceId, 
request.ProviderInstanceId), err)
-               return &discovery.GetOneInstanceResponse{
-                       Response: 
discovery.CreateResponse(discovery.ErrServiceNotExists,
-                               fmt.Sprintf("Provider[%s] does not exist.", 
request.ProviderServiceId)),
-               }, nil
-       }
        findFlag := func() string {
                return fmt.Sprintf("consumer[%s][%s/%s/%s/%s] find 
provider[%s][%s/%s/%s/%s] instance[%s]",
                        request.ConsumerServiceId, 
service.ServiceInfo.Environment, service.ServiceInfo.AppId, 
service.ServiceInfo.ServiceName, service.ServiceInfo.Version,
@@ -1608,38 +1614,38 @@ func (ds *DataSource) GetInstances(ctx context.Context, 
request *discovery.GetIn
        if len(request.ConsumerServiceId) > 0 {
                service, err = GetServiceByID(ctx, request.ConsumerServiceId)
                if err != nil {
+                       if errors.Is(err, datasource.ErrNoData) {
+                               log.Debug(fmt.Sprintf("consumer does not exist, 
consumer %s find provider %s instances",
+                                       request.ConsumerServiceId, 
request.ProviderServiceId))
+                               return &discovery.GetInstancesResponse{
+                                       Response: 
discovery.CreateResponse(discovery.ErrServiceNotExists,
+                                               fmt.Sprintf("Consumer[%s] does 
not exist.", request.ConsumerServiceId)),
+                               }, nil
+                       }
                        log.Error(fmt.Sprintf("get consumer failed, consumer %s 
find provider %s instances",
                                request.ConsumerServiceId, 
request.ProviderServiceId), err)
                        return &discovery.GetInstancesResponse{
                                Response: 
discovery.CreateResponse(discovery.ErrInternal, err.Error()),
                        }, err
                }
-               if service == nil {
-                       log.Error(fmt.Sprintf("consumer does not exist, 
consumer %s find provider %s instances",
-                               request.ConsumerServiceId, 
request.ProviderServiceId), err)
-                       return &discovery.GetInstancesResponse{
-                               Response: 
discovery.CreateResponse(discovery.ErrServiceNotExists,
-                                       fmt.Sprintf("Consumer[%s] does not 
exist.", request.ConsumerServiceId)),
-                       }, nil
-               }
        }
 
        provider, err := GetServiceByID(ctx, request.ProviderServiceId)
        if err != nil {
+               if errors.Is(err, datasource.ErrNoData) {
+                       log.Debug(fmt.Sprintf("provider does not exist, 
consumer %s find provider %s  instances",
+                               request.ConsumerServiceId, 
request.ProviderServiceId))
+                       return &discovery.GetInstancesResponse{
+                               Response: 
discovery.CreateResponse(discovery.ErrServiceNotExists,
+                                       fmt.Sprintf("provider[%s] does not 
exist.", request.ProviderServiceId)),
+                       }, nil
+               }
                log.Error(fmt.Sprintf("get provider failed, consumer %s find 
provider instances %s",
                        request.ConsumerServiceId, request.ProviderServiceId), 
err)
                return &discovery.GetInstancesResponse{
                        Response: 
discovery.CreateResponse(discovery.ErrInternal, err.Error()),
                }, err
        }
-       if provider == nil {
-               log.Error(fmt.Sprintf("provider does not exist, consumer %s 
find provider %s  instances",
-                       request.ConsumerServiceId, request.ProviderServiceId), 
err)
-               return &discovery.GetInstancesResponse{
-                       Response: 
discovery.CreateResponse(discovery.ErrServiceNotExists,
-                               fmt.Sprintf("provider[%s] does not exist.", 
request.ProviderServiceId)),
-               }, nil
-       }
 
        findFlag := func() string {
                return fmt.Sprintf("consumer[%s][%s/%s/%s/%s] find 
provider[%s][%s/%s/%s/%s] instances",
@@ -2052,20 +2058,20 @@ func (ds *DataSource) findInstance(ctx context.Context, 
request *discovery.FindI
                filter := GeneratorServiceFilter(ctx, request.ConsumerServiceId)
                service, err = GetService(ctx, filter)
                if err != nil {
+                       if errors.Is(err, datasource.ErrNoData) {
+                               log.Debug(fmt.Sprintf("consumer does not exist, 
consumer %s find provider %s/%s/%s/%s",
+                                       request.ConsumerServiceId, 
request.Environment, request.AppId, request.ServiceName, request.VersionRule))
+                               return &discovery.FindInstancesResponse{
+                                       Response: 
discovery.CreateResponse(discovery.ErrServiceNotExists,
+                                               fmt.Sprintf("Consumer[%s] does 
not exist.", request.ConsumerServiceId)),
+                               }, nil
+                       }
                        log.Error(fmt.Sprintf("get consumer failed, consumer %s 
find provider %s/%s/%s/%s",
                                request.ConsumerServiceId, request.Environment, 
request.AppId, request.ServiceName, request.VersionRule), err)
                        return &discovery.FindInstancesResponse{
                                Response: 
discovery.CreateResponse(discovery.ErrInternal, err.Error()),
                        }, err
                }
-               if service == nil {
-                       log.Error(fmt.Sprintf("consumer does not exist, 
consumer %s find provider %s/%s/%s/%s",
-                               request.ConsumerServiceId, request.Environment, 
request.AppId, request.ServiceName, request.VersionRule), err)
-                       return &discovery.FindInstancesResponse{
-                               Response: 
discovery.CreateResponse(discovery.ErrServiceNotExists,
-                                       fmt.Sprintf("Consumer[%s] does not 
exist.", request.ConsumerServiceId)),
-                       }, nil
-               }
                provider.Environment = service.ServiceInfo.Environment
        }
 
@@ -2142,7 +2148,7 @@ func (ds *DataSource) reshapeProviderKey(ctx 
context.Context, provider *discover
        //维护version的规则,service name 可能是别名,所以重新获取
        filter := GeneratorServiceFilter(ctx, providerID)
        providerService, err := GetService(ctx, filter)
-       if providerService == nil {
+       if err != nil {
                return nil, err
        }
 
@@ -2369,7 +2375,7 @@ func preProcessRegisterInstance(ctx context.Context, 
instance *discovery.MicroSe
 
        filter := GeneratorServiceFilter(ctx, instance.ServiceId)
        microservice, err := GetService(ctx, filter)
-       if microservice == nil || err != nil {
+       if err != nil {
                return discovery.NewError(discovery.ErrServiceNotExists, 
"invalid 'serviceID' in request body.")
        }
        instance.Version = microservice.ServiceInfo.Version
diff --git a/server/broker/service.go b/server/broker/service.go
index d7055a8..58eec98 100644
--- a/server/broker/service.go
+++ b/server/broker/service.go
@@ -18,15 +18,17 @@
 package broker
 
 import (
+       "context"
        "crypto/sha1"
        "encoding/json"
+       "errors"
+       "fmt"
        "math"
        "strconv"
        "strings"
        "time"
 
-       "context"
-
+       "github.com/apache/servicecomb-service-center/datasource"
        "github.com/apache/servicecomb-service-center/datasource/etcd/client"
        serviceUtil 
"github.com/apache/servicecomb-service-center/datasource/etcd/util"
        "github.com/apache/servicecomb-service-center/pkg/log"
@@ -117,17 +119,17 @@ func (*Service) RetrieveProviderPacts(ctx context.Context,
 
        provider, err := serviceUtil.GetService(ctx, tenant, in.ProviderId)
        if err != nil {
-               PactLogger.Errorf(err, "all provider pact retrieve failed, 
providerId is %s: query provider failed.", in.ProviderId)
+               if errors.Is(err, datasource.ErrNoData) {
+                       PactLogger.Debug(fmt.Sprintf("all provider pact 
retrieve failed, providerId is %s: provider not exist.", in.ProviderId))
+                       return &brokerpb.GetAllProviderPactsResponse{
+                               Response: 
pb.CreateResponse(pb.ErrInvalidParams, "Provider does not exist."),
+                       }, nil
+               }
+               PactLogger.Error(fmt.Sprintf("all provider pact retrieve 
failed, providerId is %s: query provider failed.", in.ProviderId), err)
                return &brokerpb.GetAllProviderPactsResponse{
                        Response: pb.CreateResponse(pb.ErrInvalidParams, "Query 
provider failed."),
                }, err
        }
-       if provider == nil {
-               PactLogger.Errorf(nil, "all provider pact retrieve failed, 
providerId is %s: provider not exist.", in.ProviderId)
-               return &brokerpb.GetAllProviderPactsResponse{
-                       Response: pb.CreateResponse(pb.ErrInvalidParams, 
"Provider does not exist."),
-               }, nil
-       }
        // Get the provider participant
        //providerParticipantKey := apt.GenerateBrokerParticipantKey(tenant, 
provider.AppId, provider.ServiceName)
        providerParticipant, err := GetParticipant(ctx, tenant, provider.AppId, 
provider.ServiceName)
@@ -270,17 +272,17 @@ func (*Service) GetAllProviderPacts(ctx context.Context,
 
        provider, err := serviceUtil.GetService(ctx, tenant, in.ProviderId)
        if err != nil {
-               PactLogger.Errorf(err, "all provider pact retrieve failed, 
providerId is %s: query provider failed.", in.ProviderId)
+               if errors.Is(err, datasource.ErrNoData) {
+                       PactLogger.Debug(fmt.Sprintf("all provider pact 
retrieve failed, providerId is %s: provider not exist.", in.ProviderId))
+                       return &brokerpb.GetAllProviderPactsResponse{
+                               Response: 
pb.CreateResponse(pb.ErrInvalidParams, "Provider does not exist."),
+                       }, nil
+               }
+               PactLogger.Error(fmt.Sprintf("all provider pact retrieve 
failed, providerId is %s: query provider failed.", in.ProviderId), err)
                return &brokerpb.GetAllProviderPactsResponse{
                        Response: pb.CreateResponse(pb.ErrInvalidParams, "Query 
provider failed."),
                }, err
        }
-       if provider == nil {
-               PactLogger.Errorf(nil, "all provider pact retrieve failed, 
providerId is %s: provider not exist.", in.ProviderId)
-               return &brokerpb.GetAllProviderPactsResponse{
-                       Response: pb.CreateResponse(pb.ErrInvalidParams, 
"Provider does not exist."),
-               }, nil
-       }
        // Get the provider participant
        //providerParticipantKey := apt.GenerateBrokerParticipantKey(tenant, 
provider.AppId, provider.ServiceName)
        providerParticipant, err := GetParticipant(ctx, tenant, provider.AppId, 
provider.ServiceName)
@@ -420,17 +422,17 @@ func (*Service) RetrieveVerificationResults(ctx 
context.Context, in *brokerpb.Re
        tenant := GetDefaultTenantProject()
        consumer, err := serviceUtil.GetService(ctx, tenant, in.ConsumerId)
        if err != nil {
-               PactLogger.Errorf(err, "verification result retrieve request 
failed, consumerID is %s: query consumer failed.", in.ConsumerId)
+               if errors.Is(err, datasource.ErrNoData) {
+                       PactLogger.Debug(fmt.Sprintf("verification result 
retrieve request failed, consumerID is %s: consumer not exist.", in.ConsumerId))
+                       return &brokerpb.RetrieveVerificationResponse{
+                               Response: 
pb.CreateResponse(pb.ErrInvalidParams, "Consumer does not exist."),
+                       }, nil
+               }
+               PactLogger.Error(fmt.Sprintf("verification result retrieve 
request failed, consumerID is %s: query consumer failed.", in.ConsumerId), err)
                return &brokerpb.RetrieveVerificationResponse{
                        Response: pb.CreateResponse(pb.ErrInvalidParams, "Query 
consumer failed."),
                }, err
        }
-       if consumer == nil {
-               PactLogger.Errorf(nil, "verification result retrieve request 
failed, consumerID is %s: consumer not exist.", in.ConsumerId)
-               return &brokerpb.RetrieveVerificationResponse{
-                       Response: pb.CreateResponse(pb.ErrInvalidParams, 
"Consumer does not exist."),
-               }, nil
-       }
        PactLogger.Infof("Consumer service found: (%s, %s, %s, %s)", 
consumer.ServiceId, consumer.AppId, consumer.ServiceName, consumer.Version)
        // Get consumer participant
        consumerParticipant, err := GetParticipant(ctx, tenant, consumer.AppId, 
consumer.ServiceName)
@@ -595,18 +597,18 @@ func (*Service) PublishVerificationResults(ctx 
context.Context, in *brokerpb.Pub
        tenant := GetDefaultTenantProject()
        consumer, err := serviceUtil.GetService(ctx, tenant, in.ConsumerId)
        if err != nil {
-               PactLogger.Errorf(err, "verification result publish request 
failed, consumerID is %s: query consumer failed.", in.ConsumerId)
+               if errors.Is(err, datasource.ErrNoData) {
+                       PactLogger.Debug(fmt.Sprintf("verification result 
publish request failed, consumerID is %s: consumer not exist.", in.ConsumerId))
+                       return &brokerpb.PublishVerificationResponse{
+                               Response: 
pb.CreateResponse(pb.ErrInvalidParams, "Consumer does not exist."),
+                       }, nil
+               }
+               PactLogger.Error(fmt.Sprintf("verification result publish 
request failed, consumerID is %s: query consumer failed.", in.ConsumerId), err)
                return &brokerpb.PublishVerificationResponse{
                        Response: pb.CreateResponse(pb.ErrInvalidParams, "Query 
consumer failed."),
                }, err
        }
-       if consumer == nil {
-               PactLogger.Errorf(nil, "verification result publish request 
failed, consumerID is %s: consumer not exist.", in.ConsumerId)
-               return &brokerpb.PublishVerificationResponse{
-                       Response: pb.CreateResponse(pb.ErrInvalidParams, 
"Consumer does not exist."),
-               }, nil
-       }
-       PactLogger.Infof("Consumer service found: (%s, %s, %s, %s)", 
consumer.ServiceId, consumer.AppId, consumer.ServiceName, consumer.Version)
+       PactLogger.Info(fmt.Sprintf("consumer service found: (%s, %s, %s, %s)", 
consumer.ServiceId, consumer.AppId, consumer.ServiceName, consumer.Version))
        // Get consumer participant
        consumerParticipant, err := GetParticipant(ctx, tenant, consumer.AppId, 
consumer.ServiceName)
        if err != nil || consumerParticipant == nil {
@@ -615,7 +617,7 @@ func (*Service) PublishVerificationResults(ctx 
context.Context, in *brokerpb.Pub
                        Response: pb.CreateResponse(pb.ErrInvalidParams, 
"consumer participant cannot be searched."),
                }, err
        }
-       PactLogger.Infof("Consumer participant found: (%d, %s, %s)", 
consumerParticipant.Id, consumerParticipant.AppId, 
consumerParticipant.ServiceName)
+       PactLogger.Info(fmt.Sprintf("Consumer participant found: (%d, %s, %s)", 
consumerParticipant.Id, consumerParticipant.AppId, 
consumerParticipant.ServiceName))
        // Get version
        version, err := GetVersion(ctx, tenant, consumer.Version, 
consumerParticipant.Id)
        if err != nil || version == nil {
@@ -744,47 +746,46 @@ func (*Service) PublishPact(ctx context.Context, in 
*brokerpb.PublishPactRequest
 
        provider, err := serviceUtil.GetService(ctx, tenant, in.ProviderId)
        if err != nil {
-               PactLogger.Errorf(err, "pact publish failed, providerId is %s: 
query provider failed.", in.ProviderId)
+               if errors.Is(err, datasource.ErrNoData) {
+                       PactLogger.Debug(fmt.Sprintf("pact publish failed, 
providerId is %s: provider not exist.", in.ProviderId))
+                       return &brokerpb.PublishPactResponse{
+                               Response: 
pb.CreateResponse(pb.ErrInvalidParams, "Provider does not exist."),
+                       }, nil
+               }
+               PactLogger.Error(fmt.Sprintf("pact publish failed, providerId 
is %s: query provider failed.", in.ProviderId), err)
                return &brokerpb.PublishPactResponse{
                        Response: pb.CreateResponse(pb.ErrInvalidParams, "Query 
provider failed."),
                }, err
        }
-       if provider == nil {
-               PactLogger.Errorf(nil, "pact publish failed, providerId is %s: 
provider not exist.", in.ProviderId)
-               return &brokerpb.PublishPactResponse{
-                       Response: pb.CreateResponse(pb.ErrInvalidParams, 
"Provider does not exist."),
-               }, nil
-       }
-       PactLogger.Infof("Provider service found: (%s, %s, %s, %s)", 
provider.ServiceId, provider.AppId, provider.ServiceName, provider.Version)
+       PactLogger.Info(fmt.Sprintf("provider service found: (%s, %s, %s, %s)", 
provider.ServiceId, provider.AppId, provider.ServiceName, provider.Version))
        consumer, err := serviceUtil.GetService(ctx, tenant, in.ConsumerId)
        if err != nil {
-               PactLogger.Errorf(err, "pact publish failed, consumerID is %s: 
query consumer failed.", in.ConsumerId)
+               if errors.Is(err, datasource.ErrNoData) {
+                       PactLogger.Debug(fmt.Sprintf("pact publish failed, 
consumerID is %s: consumer not exist.", in.ConsumerId))
+                       return &brokerpb.PublishPactResponse{
+                               Response: 
pb.CreateResponse(pb.ErrInvalidParams, "Consumer does not exist."),
+                       }, nil
+               }
+               PactLogger.Error(fmt.Sprintf("pact publish failed, consumerID 
is %s: query consumer failed.", in.ConsumerId), err)
                return &brokerpb.PublishPactResponse{
                        Response: pb.CreateResponse(pb.ErrInvalidParams, "Query 
consumer failed."),
                }, err
        }
-       if consumer == nil {
-               PactLogger.Errorf(nil, "pact publish failed, consumerID is %s: 
consumer not exist.", in.ConsumerId)
-               return &brokerpb.PublishPactResponse{
-                       Response: pb.CreateResponse(pb.ErrInvalidParams, 
"Consumer does not exist."),
-               }, nil
-       }
 
        // check that the consumer has that vesion in the url
        if strings.Compare(consumer.Version, in.Version) != 0 {
-               log.Errorf(nil,
-                       "pact publish failed, version (%s) does not exist for 
consmer", in.Version)
+               log.Error(fmt.Sprintf("pact publish failed, version (%s) does 
not exist for consmer", in.Version), nil)
                return &brokerpb.PublishPactResponse{
                        Response: pb.CreateResponse(pb.ErrInvalidParams, 
"Consumer Version does not exist."),
                }, nil
        }
 
-       PactLogger.Infof("Consumer service found: (%s, %s, %s, %s)", 
consumer.ServiceId, consumer.AppId, consumer.ServiceName, consumer.Version)
+       PactLogger.Info(fmt.Sprintf("consumer service found: (%s, %s, %s, %s)", 
consumer.ServiceId, consumer.AppId, consumer.ServiceName, consumer.Version))
        // Get or create provider participant
        providerParticipantKey := GenerateBrokerParticipantKey(tenant, 
provider.AppId, provider.ServiceName)
        providerParticipant, err := GetParticipant(ctx, tenant, provider.AppId, 
provider.ServiceName)
        if err != nil {
-               PactLogger.Errorf(nil, "pact publish failed, provider 
participant cannot be searched.", in.ProviderId)
+               PactLogger.Error(fmt.Sprintf("pact publish failed, provider[%s] 
participant cannot be searched.", in.ProviderId), nil)
                return &brokerpb.PublishPactResponse{
                        Response: pb.CreateResponse(pb.ErrInvalidParams, 
"Provider participant cannot be searched."),
                }, err
diff --git a/server/broker/util.go b/server/broker/util.go
index f97a94b..66bec20 100644
--- a/server/broker/util.go
+++ b/server/broker/util.go
@@ -20,11 +20,14 @@ package broker
 import (
        "context"
        "encoding/json"
+       "errors"
+       "fmt"
        "math"
        "net/url"
        "strconv"
        "strings"
 
+       "github.com/apache/servicecomb-service-center/datasource"
        "github.com/apache/servicecomb-service-center/datasource/etcd/client"
        serviceUtil 
"github.com/apache/servicecomb-service-center/datasource/etcd/util"
        "github.com/apache/servicecomb-service-center/pkg/log"
@@ -438,31 +441,31 @@ func RetrieveProviderConsumerPact(ctx context.Context,
        // Get provider microservice
        provider, err := serviceUtil.GetService(ctx, tenant, in.ProviderId)
        if err != nil {
-               PactLogger.Errorf(err, "pact retrieve failed, providerId is %s: 
query provider failed.", in.ProviderId)
+               if errors.Is(err, datasource.ErrNoData) {
+                       PactLogger.Debug(fmt.Sprintf("pact retrieve failed, 
providerId is %s: provider not exist.", in.ProviderId))
+                       return &brokerpb.GetProviderConsumerVersionPactResponse{
+                               Response: pb.CreateResponse(pb.ErrInternal, 
"Provider does not exist."),
+                       }, -1, nil
+               }
+               PactLogger.Error(fmt.Sprintf("pact retrieve failed, providerId 
is %s: query provider failed.", in.ProviderId), err)
                return &brokerpb.GetProviderConsumerVersionPactResponse{
                        Response: pb.CreateResponse(pb.ErrInternal, "Query 
provider failed."),
                }, -1, err
        }
-       if provider == nil {
-               PactLogger.Errorf(nil, "pact retrieve failed, providerId is %s: 
provider not exist.", in.ProviderId)
-               return &brokerpb.GetProviderConsumerVersionPactResponse{
-                       Response: pb.CreateResponse(pb.ErrInternal, "Provider 
does not exist."),
-               }, -1, nil
-       }
        // Get consumer microservice
        consumer, err := serviceUtil.GetService(ctx, tenant, in.ConsumerId)
        if err != nil {
-               PactLogger.Errorf(err, "pact retrieve failed, consumerId is %s: 
query consumer failed.", in.ConsumerId)
+               if errors.Is(err, datasource.ErrNoData) {
+                       PactLogger.Debug(fmt.Sprintf("pact retrieve failed, 
consumerId is %s: consumer not exist.", in.ConsumerId))
+                       return &brokerpb.GetProviderConsumerVersionPactResponse{
+                               Response: pb.CreateResponse(pb.ErrInternal, 
"Consumer does not exist."),
+                       }, -1, nil
+               }
+               PactLogger.Error(fmt.Sprintf("pact retrieve failed, consumerId 
is %s: query consumer failed.", in.ConsumerId), err)
                return &brokerpb.GetProviderConsumerVersionPactResponse{
                        Response: pb.CreateResponse(pb.ErrInternal, "Query 
consumer failed."),
                }, -1, err
        }
-       if consumer == nil {
-               PactLogger.Errorf(nil, "pact retrieve failed, consumerId is %s: 
consumer not exist.", in.ConsumerId)
-               return &brokerpb.GetProviderConsumerVersionPactResponse{
-                       Response: pb.CreateResponse(pb.ErrInternal, "Consumer 
does not exist."),
-               }, -1, nil
-       }
        // Get provider participant
        //providerParticipantKey := apt.GenerateBrokerParticipantKey(tenant, 
provider.AppId, provider.ServiceName)
        providerParticipant, err := GetParticipant(ctx, tenant, provider.AppId, 
provider.ServiceName)

Reply via email to