فهرست منبع

client: support PrevIndex in SetOptions & DeleteOptions

Brian Waldon 11 سال پیش
والد
کامیت
bc32060b1d
2فایلهای تغییر یافته به همراه31 افزوده شده و 0 حذف شده
  1. 8 0
      client/keys.go
  2. 23 0
      client/keys_test.go

+ 8 - 0
client/keys.go

@@ -76,11 +76,13 @@ type KeysAPI interface {
 
 type SetOptions struct {
 	PrevValue string
+	PrevIndex uint64
 	PrevExist PrevExistType
 }
 
 type DeleteOptions struct {
 	PrevValue string
+	PrevIndex uint64
 	Recursive bool
 }
 
@@ -287,6 +289,9 @@ func (a *setAction) HTTPRequest(ep url.URL) *http.Request {
 	if a.Options.PrevValue != "" {
 		params.Set("prevValue", a.Options.PrevValue)
 	}
+	if a.Options.PrevIndex != 0 {
+		params.Set("prevIndex", strconv.FormatUint(a.Options.PrevIndex, 10))
+	}
 	if a.Options.PrevExist != PrevIgnore {
 		params.Set("prevExist", string(a.Options.PrevExist))
 	}
@@ -316,6 +321,9 @@ func (a *deleteAction) HTTPRequest(ep url.URL) *http.Request {
 	if a.Options.PrevValue != "" {
 		params.Set("prevValue", a.Options.PrevValue)
 	}
+	if a.Options.PrevIndex != 0 {
+		params.Set("prevIndex", strconv.FormatUint(a.Options.PrevIndex, 10))
+	}
 	if a.Options.Recursive {
 		params.Set("recursive", "true")
 	}

+ 23 - 0
client/keys_test.go

@@ -301,6 +301,18 @@ func TestSetAction(t *testing.T) {
 			wantURL:  "http://example.com/foo?prevValue=bar+baz",
 			wantBody: "value=",
 		},
+
+		// PrevIndex is set
+		{
+			act: setAction{
+				Key: "foo",
+				Options: SetOptions{
+					PrevIndex: uint64(12),
+				},
+			},
+			wantURL:  "http://example.com/foo?prevIndex=12",
+			wantBody: "value=",
+		},
 	}
 
 	for i, tt := range tests {
@@ -398,6 +410,17 @@ func TestDeleteAction(t *testing.T) {
 			},
 			wantURL: "http://example.com/foo?prevValue=bar+baz",
 		},
+
+		// PrevIndex is set
+		{
+			act: deleteAction{
+				Key: "foo",
+				Options: DeleteOptions{
+					PrevIndex: uint64(12),
+				},
+			},
+			wantURL: "http://example.com/foo?prevIndex=12",
+		},
 	}
 
 	for i, tt := range tests {