From 0e1d1646fd623835b2ffc72f3a84f4a68a14a8f2 Mon Sep 17 00:00:00 2001 From: Yicheng Qin Date: Fri, 24 Oct 2014 15:40:40 -0700 Subject: [PATCH] etcdhttp: parse quorum field from http request --- etcdserver/etcdhttp/http.go | 17 ++++++++++++----- etcdserver/etcdhttp/http_test.go | 22 ++++++++++++++++++++++ 2 files changed, 34 insertions(+), 5 deletions(-) diff --git a/etcdserver/etcdhttp/http.go b/etcdserver/etcdhttp/http.go index 322665d01..4a8977274 100644 --- a/etcdserver/etcdhttp/http.go +++ b/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, - Since: wIdx, - Sorted: sort, - Stream: stream, Wait: wait, + Since: wIdx, + Recursive: rec, + Sorted: sort, + Quorum: quorum, + Stream: stream, } if pe != nil { diff --git a/etcdserver/etcdhttp/http_test.go b/etcdserver/etcdhttp/http_test.go index e6aada492..284aa078e 100644 --- a/etcdserver/etcdhttp/http_test.go +++ b/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"),