htraced: put query parameters in the URL, not in the GET request body (abe via cmccabe)
diff --git a/htrace-core/src/go/src/org/apache/htrace/client/client.go b/htrace-core/src/go/src/org/apache/htrace/client/client.go
index 52fe78e..82400fe 100644
--- a/htrace-core/src/go/src/org/apache/htrace/client/client.go
+++ b/htrace-core/src/go/src/org/apache/htrace/client/client.go
@@ -113,7 +113,8 @@
 		return nil, errors.New(fmt.Sprintf("Error marshalling query: %s", err.Error()))
 	}
 	var out []byte
-	out, _, err = hcl.makeRestRequest("GET", "query", bytes.NewReader(in))
+	var url = fmt.Sprintf("query?query=%s", in)
+	out, _, err = hcl.makeGetRequest(url)
 	if err != nil {
 		return nil, err
 	}
diff --git a/htrace-core/src/go/src/org/apache/htrace/common/log_test.go b/htrace-core/src/go/src/org/apache/htrace/common/log_test.go
index 64d6a3f..b415ce2 100644
--- a/htrace-core/src/go/src/org/apache/htrace/common/log_test.go
+++ b/htrace-core/src/go/src/org/apache/htrace/common/log_test.go
@@ -53,7 +53,7 @@
 		line := scanner.Text()
 		if !strings.Contains(line, lines[lineIdx]) {
 			t.Fatalf("Error on line %d: didn't find substring '%s' in line '%s'\n",
-					(lineIdx + 1), lines[lineIdx], line)
+				(lineIdx + 1), lines[lineIdx], line)
 		}
 		lineIdx++
 	}
@@ -80,7 +80,7 @@
 	if err != nil {
 		t.Fatalf("failed to open file %s: %s\n", logPath, err.Error())
 	}
-	verifyLines(t, logFile, []string {
+	verifyLines(t, logFile, []string{
 		"problem with the foobar",
 		"and another problem with the foobar",
 	})
@@ -110,7 +110,7 @@
 	}
 	fooLg.Tracef("Fizz buzz2\n")
 	barLg.Tracef("Fizz buzz3\n")
-	verifyLines(t, logFile, []string {
+	verifyLines(t, logFile, []string{
 		"The foo needs maintenance.",
 		"The bar is open",
 		"Fizz buzz",
diff --git a/htrace-core/src/go/src/org/apache/htrace/htraced/client_test.go b/htrace-core/src/go/src/org/apache/htrace/htraced/client_test.go
index 15fbe89..044c7ba 100644
--- a/htrace-core/src/go/src/org/apache/htrace/htraced/client_test.go
+++ b/htrace-core/src/go/src/org/apache/htrace/htraced/client_test.go
@@ -124,4 +124,16 @@
 		t.Fatalf("FindChildren(%d) returned an invalid number of "+
 			"children: expected %d, got %d\n", childlessSpan.Id, 0, len(children))
 	}
+
+	// Test Query
+	var query common.Query
+	query = common.Query{Lim: 10}
+	spans, err := hcl.Query(&query)
+	if err != nil {
+		t.Fatalf("Query({lim: %d}) failed: %s\n", 10, err.Error())
+	}
+	if len(spans) != 10 {
+		t.Fatalf("Query({lim: %d}) returned an invalid number of "+
+			"children: expected %d, got %d\n", 10, 10, len(spans))
+	}
 }
diff --git a/htrace-core/src/go/src/org/apache/htrace/htraced/rest.go b/htrace-core/src/go/src/org/apache/htrace/htraced/rest.go
index 3ecb14b..9cdab20 100644
--- a/htrace-core/src/go/src/org/apache/htrace/htraced/rest.go
+++ b/htrace-core/src/go/src/org/apache/htrace/htraced/rest.go
@@ -20,6 +20,7 @@
 package main
 
 import (
+	"bytes"
 	"encoding/json"
 	"fmt"
 	"github.com/gorilla/mux"
@@ -176,17 +177,20 @@
 }
 
 type queryHandler struct {
+	lg *common.Logger
 	dataStoreHandler
 }
 
 func (hand *queryHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) {
 	setResponseHeaders(w.Header())
-	_, ok := hand.getReqField32("lim", w, req)
-	if !ok {
+	queryString := req.FormValue("query")
+	if queryString == "" {
+		writeError(hand.lg, w, http.StatusBadRequest, "No query provided.\n")
 		return
 	}
 	var query common.Query
-	dec := json.NewDecoder(req.Body)
+	reader := bytes.NewBufferString(queryString)
+	dec := json.NewDecoder(reader)
 	err := dec.Decode(&query)
 	if err != nil {
 		writeError(hand.lg, w, http.StatusBadRequest,
@@ -262,7 +266,7 @@
 		store: store, lg: rsv.lg}}
 	r.Handle("/writeSpans", writeSpansH).Methods("POST")
 
-	queryH := &queryHandler{dataStoreHandler: dataStoreHandler{store: store}}
+	queryH := &queryHandler{lg: rsv.lg, dataStoreHandler: dataStoreHandler{store: store}}
 	r.Handle("/query", queryH).Methods("GET")
 
 	span := r.PathPrefix("/span").Subrouter()