Merge pull request #11939 from tedyu/chk-ret-from-write

etcdserver: check the error return from Write()
release-3.5
Gyuho Lee 2020-06-03 14:12:50 -07:00 committed by GitHub
commit be0639090d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 15 additions and 8 deletions

View File

@ -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

View File

@ -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})