From d4db3cf00b5de8f4c495b3505d1e454f1103671e Mon Sep 17 00:00:00 2001 From: "Matt T. Proud" Date: Wed, 5 Jun 2013 16:29:05 +0200 Subject: [PATCH] Code Review: Last replacement wins. --- retrieval/targetpool.go | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/retrieval/targetpool.go b/retrieval/targetpool.go index aa884a4820..6a3b39d4d5 100644 --- a/retrieval/targetpool.go +++ b/retrieval/targetpool.go @@ -26,7 +26,7 @@ const ( intervalKey = "interval" targetAddQueueSize = 100 - targetReplaceQueueSize = 100 + targetReplaceQueueSize = 1 ) type TargetPool struct { @@ -82,7 +82,16 @@ func (p *TargetPool) addTarget(target Target) { } func (p *TargetPool) ReplaceTargets(newTargets []Target) { - p.replaceTargetsQueue <- newTargets + p.Lock() + defer p.Unlock() + + // If there is anything remaining in the queue for effectuation, clear it out, + // because the last mutation should win. + select { + case <-p.replaceTargetsQueue: + default: + p.replaceTargetsQueue <- newTargets + } } func (p *TargetPool) replaceTargets(newTargets []Target) {