Bläddra i källkod

test and set creates the key if key does not exists. fixes #96

Fabrizio (Misto) Milo 12 år sedan
förälder
incheckning
6345e02d20
1 ändrade filer med 6 tillägg och 2 borttagningar
  1. 6 2
      store/store.go

+ 6 - 2
store/store.go

@@ -465,12 +465,16 @@ func (s *Store) TestAndSet(key string, prevValue string, value string, expireTim
 	resp := s.internalGet(key)
 
 	if resp == nil {
-		return nil, etcdErr.NewError(100, "testandset: "+key)
+		if prevValue != "" {
+			errmsg := fmt.Sprintf("TestAndSet: key not found and previousValue is not empty %s:%s ", key, prevValue)
+			return nil, etcdErr.NewError(100, errmsg)
+		}
+		return s.internalSet(key, value, expireTime, index)
 	}
 
 	if resp.Value == prevValue {
 
-		// If test success, do set
+		// If test succeed, do set
 		return s.internalSet(key, value, expireTime, index)
 	} else {