fiddle - Fix leaky requests.
Bug: skia:
Change-Id: Ie6e700ef90e73be345641a3e13ce91c74dab26f9
Reviewed-on: https://skia-review.googlesource.com/c/181380
Auto-Submit: Joe Gregorio <jcgregorio@google.com>
Reviewed-by: Ravi Mistry <rmistry@google.com>
Commit-Queue: Ravi Mistry <rmistry@google.com>
diff --git a/fiddlek/go/fiddle/main.go b/fiddlek/go/fiddle/main.go
index ba58552..81ff513 100644
--- a/fiddlek/go/fiddle/main.go
+++ b/fiddlek/go/fiddle/main.go
@@ -10,7 +10,6 @@
"html/template"
ttemplate "html/template"
"net/http"
- _ "net/http/pprof"
"path/filepath"
"regexp"
"strconv"
diff --git a/fiddlek/go/runner/runner.go b/fiddlek/go/runner/runner.go
index 9af35c0..54ee8da 100644
--- a/fiddlek/go/runner/runner.go
+++ b/fiddlek/go/runner/runner.go
@@ -8,7 +8,6 @@
"errors"
"fmt"
"io"
- "io/ioutil"
"math/rand"
"net/http"
"path/filepath"
@@ -69,7 +68,6 @@
type Runner struct {
sourceDir string
- client *http.Client
local bool
clientset *kubernetes.Clientset
rand *rand.Rand
@@ -82,7 +80,6 @@
func New(local bool, sourceDir string) (*Runner, error) {
ret := &Runner{
sourceDir: sourceDir,
- client: httputils.NewTimeoutClient(),
local: local,
rand: rand.New(rand.NewSource(time.Now().UnixNano())),
fiddlerIPs: []string{},
@@ -207,8 +204,17 @@
}
func (r *Runner) singleRun(url string, body io.Reader) (*types.Result, error) {
+ client := httputils.NewTimeoutClient()
var output bytes.Buffer
- resp, err := r.client.Post(url, "application/json", body)
+
+ req, err := http.NewRequest("POST", url, body)
+ if err != nil {
+ sklog.Errorf("Failed to create POST request: %s", err)
+ return nil, failedToSendErr
+ }
+ // Pods come and go, so don't keep the connection alive.
+ req.Close = true
+ resp, err := client.Do(req)
if err != nil {
sklog.Errorf("Failed to POST to %q: %s", url, err)
return nil, failedToSendErr
@@ -307,6 +313,32 @@
return ret
}
+func singlePodVersion(client *http.Client, address string) (string, bool) {
+ rootURL := fmt.Sprintf("http://%s:8000", address)
+ req, err := http.NewRequest("GET", rootURL, nil)
+ if err != nil {
+ sklog.Infof("Failed to create request for fiddler status: %s", err)
+ return "", false
+ }
+ // Pods come and go, so don't keep the connection alive.
+ req.Close = true
+ resp, err := client.Do(req)
+ if err != nil {
+ sklog.Infof("Failed to request fiddler status: %s", err)
+ return "", false
+ }
+ defer util.Close(resp.Body)
+ var fiddlerResp types.FiddlerMainResponse
+ if err := json.NewDecoder(resp.Body).Decode(&fiddlerResp); err != nil {
+ sklog.Warningf("Failed to read status body: %s", err)
+ return "", false
+ }
+ if fiddlerResp.State == types.IDLE {
+ return fiddlerResp.Version, true
+ }
+ return "", false
+}
+
func (r *Runner) metricsSingleStep() {
idleCount := 0
// What versions of skia are all the fiddlers running.
@@ -314,28 +346,8 @@
ips := r.podIPs()
fastClient := httputils.NewFastTimeoutClient()
for _, address := range ips {
- rootURL := fmt.Sprintf("http://%s:8000", address)
- resp, err := fastClient.Get(rootURL)
- if err != nil {
- sklog.Infof("Failed to request fiddler status: %s", err)
- continue
- }
- b, err := ioutil.ReadAll(resp.Body)
- if err != nil {
- sklog.Warningf("Failed to read status body: %s", err)
- continue
- }
- util.Close(resp.Body)
- if resp.Header.Get("Content-Type") == "application/json" {
- var fiddlerResp types.FiddlerMainResponse
- if err := json.Unmarshal(b, &fiddlerResp); err != nil {
- sklog.Warningf("Failed to read status: %s", err)
- continue
- }
- if fiddlerResp.State == types.IDLE {
- idleCount += 1
- }
- versions[fiddlerResp.Version] += 1
+ if ver, ok := singlePodVersion(fastClient, address); ok {
+ versions[ver] += 1
}
}
// Report the version that appears the most. Usually there will only be one
@@ -357,7 +369,7 @@
func (r *Runner) Metrics() {
metricsLiveness := metrics2.NewLiveness("metrics")
r.metricsSingleStep()
- for _ = range time.Tick(10 * time.Second) {
+ for _ = range time.Tick(30 * time.Second) {
r.metricsSingleStep()
metricsLiveness.Reset()
}