Kaynağa Gözat

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

Fabrizio (Misto) Milo 12 yıl önce
ebeveyn
işleme
6345e02d20
1 değiştirilmiş dosya ile 6 ekleme ve 2 silme
  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 {