Browse Source

etcdhttp: parse quorum field from http request

Yicheng Qin 11 years ago
parent
commit
0e1d1646fd
2 changed files with 32 additions and 3 deletions
  1. 10 3
      etcdserver/etcdhttp/http.go
  2. 22 0
      etcdserver/etcdhttp/http_test.go

+ 10 - 3
etcdserver/etcdhttp/http.go

@@ -358,7 +358,7 @@ func parseKeyRequest(r *http.Request, id uint64, clock clockwork.Clock) (etcdser
 		)
 	}
 
-	var rec, sort, wait, dir, stream bool
+	var rec, sort, wait, dir, quorum, stream bool
 	if rec, err = getBool(r.Form, "recursive"); err != nil {
 		return emptyReq, etcdErr.NewRequestError(
 			etcdErr.EcodeInvalidField,
@@ -384,6 +384,12 @@ func parseKeyRequest(r *http.Request, id uint64, clock clockwork.Clock) (etcdser
 			`invalid value for "dir"`,
 		)
 	}
+	if quorum, err = getBool(r.Form, "quorum"); err != nil {
+		return emptyReq, etcdErr.NewRequestError(
+			etcdErr.EcodeInvalidField,
+			`invalid value for "quorum"`,
+		)
+	}
 	if stream, err = getBool(r.Form, "stream"); err != nil {
 		return emptyReq, etcdErr.NewRequestError(
 			etcdErr.EcodeInvalidField,
@@ -442,11 +448,12 @@ func parseKeyRequest(r *http.Request, id uint64, clock clockwork.Clock) (etcdser
 		PrevValue: pV,
 		PrevIndex: pIdx,
 		PrevExist: pe,
-		Recursive: rec,
+		Wait:      wait,
 		Since:     wIdx,
+		Recursive: rec,
 		Sorted:    sort,
+		Quorum:    quorum,
 		Stream:    stream,
-		Wait:      wait,
 	}
 
 	if pe != nil {

+ 22 - 0
etcdserver/etcdhttp/http_test.go

@@ -167,6 +167,14 @@ func TestBadParseRequest(t *testing.T) {
 			mustNewForm(t, "foo", url.Values{"dir": []string{"file"}}),
 			etcdErr.EcodeInvalidField,
 		},
+		{
+			mustNewForm(t, "foo", url.Values{"quorum": []string{"no"}}),
+			etcdErr.EcodeInvalidField,
+		},
+		{
+			mustNewForm(t, "foo", url.Values{"quorum": []string{"file"}}),
+			etcdErr.EcodeInvalidField,
+		},
 		{
 			mustNewForm(t, "foo", url.Values{"stream": []string{"zzz"}}),
 			etcdErr.EcodeInvalidField,
@@ -305,6 +313,20 @@ func TestGoodParseRequest(t *testing.T) {
 				Path:   path.Join(etcdserver.StoreKeysPrefix, "/foo"),
 			},
 		},
+		{
+			// quorum specified
+			mustNewForm(
+				t,
+				"foo",
+				url.Values{"quorum": []string{"true"}},
+			),
+			etcdserverpb.Request{
+				ID:     1234,
+				Method: "PUT",
+				Quorum: true,
+				Path:   path.Join(etcdserver.StoreKeysPrefix, "/foo"),
+			},
+		},
 		{
 			// wait specified
 			mustNewRequest(t, "foo?wait=true"),