You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficcontrol.apache.org by ne...@apache.org on 2016/11/07 19:30:03 UTC

[17/21] incubator-trafficcontrol git commit: Fix TM2 poll to randomize start, poll precisely.

Fix TM2 poll to randomize start, poll precisely.

Fixes Trafic Monitor 2.0 polling to sleep a random time between 0
and the poll interval. This prevents polling all caches at once
every tick.

Fixes to poll precisely on the interval, by recreating the ticker.
The Go `Ticker` attempts to 'smooth' polls, increasing or decreasing
poll times to compensate for slow poll processing. This fixes it to
poll at precisely the given interval.


Project: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/commit/80a417b4
Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/tree/80a417b4
Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/diff/80a417b4

Branch: refs/heads/master
Commit: 80a417b4ba09f0bf963e00cfb4bc15fa32aedc88
Parents: 10129f3
Author: Robert Butts <ro...@gmail.com>
Authored: Tue Nov 1 16:28:19 2016 -0600
Committer: Dave Neuman <ne...@apache.org>
Committed: Mon Nov 7 12:29:08 2016 -0700

----------------------------------------------------------------------
 traffic_monitor/experimental/common/poller/poller.go | 4 ++++
 1 file changed, 4 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/80a417b4/traffic_monitor/experimental/common/poller/poller.go
----------------------------------------------------------------------
diff --git a/traffic_monitor/experimental/common/poller/poller.go b/traffic_monitor/experimental/common/poller/poller.go
index a78d767..4609f7a 100644
--- a/traffic_monitor/experimental/common/poller/poller.go
+++ b/traffic_monitor/experimental/common/poller/poller.go
@@ -2,6 +2,7 @@ package poller
 
 import (
 	"io/ioutil"
+	"math/rand"
 	"net/http"
 	"os"
 	"sync/atomic"
@@ -235,11 +236,14 @@ func (p FilePoller) Poll() {
 
 // TODO iterationCount and/or p.TickChan?
 func pollHttp(interval time.Duration, id string, url string, fetcher fetcher.Fetcher, die <-chan struct{}) {
+	pollSpread := time.Duration(rand.Float64()*float64(interval/time.Nanosecond)) * time.Nanosecond
+	time.Sleep(pollSpread)
 	tick := time.NewTicker(interval)
 	lastTime := time.Now()
 	for {
 		select {
 		case now := <-tick.C:
+			tick = time.NewTicker(interval) // recreate timer, to avoid Go's "smoothing" nonsense
 			realInterval := now.Sub(lastTime)
 			if realInterval > interval+(time.Millisecond*100) {
 				instr.TimerFail.Inc()