diff --git a/common/extension/service_discovery.go b/common/extension/service_discovery.go
index 456b14c83dcab4189ea287f2e9f3329109e538c3..0227920dc64a7b5f6ad1939fcccbb7384c43f68d 100644
--- a/common/extension/service_discovery.go
+++ b/common/extension/service_discovery.go
@@ -42,7 +42,7 @@ func SetServiceDiscovery(protocol string, creator func(name string) (registry.Se
 func GetServiceDiscovery(protocol string, name string) (registry.ServiceDiscovery, error) {
 	creator, ok := discoveryCreatorMap[protocol]
 	if !ok {
-		return nil, perrors.New("Could not find the service discovery with name: " + name)
+		return nil, perrors.New("Could not find the service discovery with discovery protocol: " + protocol)
 	}
 	return creator(name)
 }
diff --git a/metadata/report/etcd/report.go b/metadata/report/etcd/report.go
index 0d49ff17838e4427613b343d16f00b34bd90a00d..9db0b577bf18918fdf58e818495d7967bef35c58 100644
--- a/metadata/report/etcd/report.go
+++ b/metadata/report/etcd/report.go
@@ -41,7 +41,7 @@ import (
 const DEFAULT_ROOT = "dubbo"
 
 func init() {
-	extension.SetMetadataReportFactory("etcd", func() factory.MetadataReportFactory {
+	extension.SetMetadataReportFactory(constant.ETCDV3_KEY, func() factory.MetadataReportFactory {
 		return &etcdMetadataReportFactory{}
 	})
 }
diff --git a/registry/etcdv3/service_discovery.go b/registry/etcdv3/service_discovery.go
index f47d5324c4a901308fc41f47777ff51d8dda804a..e435a556e5690c0ad6fcdf87c8387f8157ec0d6d 100644
--- a/registry/etcdv3/service_discovery.go
+++ b/registry/etcdv3/service_discovery.go
@@ -89,8 +89,13 @@ func (e *etcdV3ServiceDiscovery) Register(instance registry.ServiceInstance) err
 	if nil != e.client {
 		ins, err := jsonutil.EncodeJSON(instance)
 		if err == nil {
-			e.client.Create(path, string(ins))
-			e.services.Add(instance.GetServiceName())
+			err = e.client.Update(path, string(ins))
+			if err != nil {
+				logger.Errorf("cannot register the instance: %s", string(ins), err)
+			} else {
+				e.services.Add(instance.GetServiceName())
+			}
+
 		}
 	}
 
diff --git a/remoting/etcdv3/client.go b/remoting/etcdv3/client.go
index 93da6402c759583ce7600c474910637e6ed77870..a24a69232eb4bf8d3ad7acc3b3e05eb1eaf3253b 100644
--- a/remoting/etcdv3/client.go
+++ b/remoting/etcdv3/client.go
@@ -144,7 +144,7 @@ func NewServiceDiscoveryClient(opts ...Option) *Client {
 
 	newClient, err := NewClient(options.name, options.endpoints, options.timeout, options.heartbeat)
 	if err != nil {
-		logger.Warnf("new etcd client (name{%s}, etcd addresses{%v}, timeout{%d}) = error{%v}",
+		logger.Errorf("new etcd client (name{%s}, etcd addresses{%v}, timeout{%d}) = error{%v}",
 			options.name, options.endpoints, options.timeout, err)
 		return nil
 	}