From 5c95114190b21c9ecd72b0a934ff393e43083628 Mon Sep 17 00:00:00 2001 From: Ted Yu Date: Sun, 31 May 2020 09:27:01 -0700 Subject: [PATCH] etcdserver: check the error return from Write() Signed-off-by: Ted Yu --- etcdserver/api/v2store/store.go | 8 ++++++-- etcdserver/api/v2store/store_ttl_test.go | 15 +++++++++------ 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/etcdserver/api/v2store/store.go b/etcdserver/api/v2store/store.go index 9812ebd41..a2dca7118 100644 --- a/etcdserver/api/v2store/store.go +++ b/etcdserver/api/v2store/store.go @@ -311,7 +311,9 @@ func (s *store) CompareAndSwap(nodePath string, prevValue string, prevIndex uint eNode := e.Node // if test succeed, write the value - n.Write(value, s.CurrentIndex) + if err := n.Write(value, s.CurrentIndex); err != nil { + return nil, err + } n.UpdateTTL(expireOpts.ExpireTime) // copy the value for safety @@ -532,7 +534,9 @@ func (s *store) Update(nodePath string, newValue string, expireOpts TTLOptionSet e.PrevNode = n.Repr(false, false, s.clock) eNode := e.Node - n.Write(newValue, nextIndex) + if err := n.Write(newValue, nextIndex); err != nil { + return nil, fmt.Errorf("nodePath %v : %v", nodePath, err) + } if n.IsDir() { eNode.Dir = true diff --git a/etcdserver/api/v2store/store_ttl_test.go b/etcdserver/api/v2store/store_ttl_test.go index 792f6165a..05e0db50e 100644 --- a/etcdserver/api/v2store/store_ttl_test.go +++ b/etcdserver/api/v2store/store_ttl_test.go @@ -120,14 +120,16 @@ func TestStoreUpdateDirTTL(t *testing.T) { s.clock = fc var eidx uint64 = 3 - s.Create("/foo", true, "", false, TTLOptionSet{ExpireTime: Permanent}) - s.Create("/foo/bar", false, "baz", false, TTLOptionSet{ExpireTime: Permanent}) - e, err := s.Update("/foo", "", TTLOptionSet{ExpireTime: fc.Now().Add(500 * time.Millisecond)}) + _, err := s.Create("/foo", true, "", false, TTLOptionSet{ExpireTime: Permanent}) testutil.AssertNil(t, err) - testutil.AssertEqual(t, e.Node.Dir, true) + _, err = s.Create("/foo/bar", false, "baz", false, TTLOptionSet{ExpireTime: Permanent}) + testutil.AssertNil(t, err) + e, err := s.Update("/foo/bar", "", TTLOptionSet{ExpireTime: fc.Now().Add(500 * time.Millisecond)}) + testutil.AssertNil(t, err) + testutil.AssertEqual(t, e.Node.Dir, false) testutil.AssertEqual(t, e.EtcdIndex, eidx) e, _ = s.Get("/foo/bar", false, false) - testutil.AssertEqual(t, *e.Node.Value, "baz") + testutil.AssertEqual(t, *e.Node.Value, "") testutil.AssertEqual(t, e.EtcdIndex, eidx) fc.Advance(600 * time.Millisecond) @@ -270,13 +272,14 @@ func TestStoreRefresh(t *testing.T) { s.Create("/foo", false, "bar", false, TTLOptionSet{ExpireTime: fc.Now().Add(500 * time.Millisecond)}) s.Create("/bar", true, "bar", false, TTLOptionSet{ExpireTime: fc.Now().Add(500 * time.Millisecond)}) + s.Create("/bar/z", false, "bar", false, TTLOptionSet{ExpireTime: fc.Now().Add(500 * time.Millisecond)}) _, err := s.Update("/foo", "", TTLOptionSet{ExpireTime: fc.Now().Add(500 * time.Millisecond), Refresh: true}) testutil.AssertNil(t, err) _, err = s.Set("/foo", false, "", TTLOptionSet{ExpireTime: fc.Now().Add(500 * time.Millisecond), Refresh: true}) testutil.AssertNil(t, err) - _, err = s.Update("/bar", "", TTLOptionSet{ExpireTime: fc.Now().Add(500 * time.Millisecond), Refresh: true}) + _, err = s.Update("/bar/z", "", TTLOptionSet{ExpireTime: fc.Now().Add(500 * time.Millisecond), Refresh: true}) testutil.AssertNil(t, err) _, err = s.CompareAndSwap("/foo", "bar", 0, "", TTLOptionSet{ExpireTime: fc.Now().Add(500 * time.Millisecond), Refresh: true})