From 5aaee6d792224e160ef4da2e0f003a7273dc314a Mon Sep 17 00:00:00 2001
From: zhengxianle <zhengxianle@gmail.com>
Date: Tue, 23 Jun 2020 00:26:34 +0800
Subject: [PATCH] Fix: EtcdServiceDiscovery replace put with temp kv.

---
 registry/etcdv3/service_discovery.go |  5 ++---
 remoting/etcdv3/client.go            | 11 ++++-------
 remoting/etcdv3/client_test.go       |  2 +-
 3 files changed, 7 insertions(+), 11 deletions(-)

diff --git a/registry/etcdv3/service_discovery.go b/registry/etcdv3/service_discovery.go
index e435a556e..5699f1c42 100644
--- a/registry/etcdv3/service_discovery.go
+++ b/registry/etcdv3/service_discovery.go
@@ -89,13 +89,12 @@ func (e *etcdV3ServiceDiscovery) Register(instance registry.ServiceInstance) err
 	if nil != e.client {
 		ins, err := jsonutil.EncodeJSON(instance)
 		if err == nil {
-			err = e.client.Update(path, string(ins))
+			err = e.client.RegisterTemp(path, string(ins))
 			if err != nil {
 				logger.Errorf("cannot register the instance: %s", string(ins), err)
 			} else {
 				e.services.Add(instance.GetServiceName())
 			}
-
 		}
 	}
 
@@ -109,7 +108,7 @@ func (e *etcdV3ServiceDiscovery) Update(instance registry.ServiceInstance) error
 	if nil != e.client {
 		ins, err := jsonutil.EncodeJSON(instance)
 		if nil == err {
-			e.client.Update(path, string(ins))
+			e.client.RegisterTemp(path, string(ins))
 			e.services.Add(instance.GetServiceName())
 		}
 	}
diff --git a/remoting/etcdv3/client.go b/remoting/etcdv3/client.go
index a24a69232..080c94114 100644
--- a/remoting/etcdv3/client.go
+++ b/remoting/etcdv3/client.go
@@ -19,7 +19,6 @@ package etcdv3
 
 import (
 	"context"
-	"path"
 	"sync"
 	"time"
 )
@@ -520,16 +519,14 @@ func (c *Client) Delete(k string) error {
 }
 
 // RegisterTemp registers a temporary node
-func (c *Client) RegisterTemp(basePath string, node string) (string, error) {
+func (c *Client) RegisterTemp(k, v string) error {
 
-	completeKey := path.Join(basePath, node)
-
-	err := c.keepAliveKV(completeKey, "")
+	err := c.keepAliveKV(k, v)
 	if err != nil {
-		return "", perrors.WithMessagef(err, "keepalive kv (key %s)", completeKey)
+		return perrors.WithMessagef(err, "keepalive kv (key %s)", k)
 	}
 
-	return completeKey, nil
+	return nil
 }
 
 // GetChildrenKVList gets children kv list by @k
diff --git a/remoting/etcdv3/client_test.go b/remoting/etcdv3/client_test.go
index 287d93e30..a321eea9e 100644
--- a/remoting/etcdv3/client_test.go
+++ b/remoting/etcdv3/client_test.go
@@ -384,7 +384,7 @@ func (suite *ClientTestSuite) TestClientRegisterTemp() {
 		assert.Contains(t, events, eDelete)
 	}()
 
-	_, err := c.RegisterTemp("scott", "wang")
+	err := c.RegisterTemp("scott/wang", "test")
 	if err != nil {
 		t.Fatal(err)
 	}
-- 
GitLab