From af8fc4f62cce356c6a27c54ad7df649344f8650f Mon Sep 17 00:00:00 2001
From: Chelsea Holland Komlo <me@chelseakomlo.com>
Date: Mon, 2 Apr 2018 17:36:19 -0400
Subject: [PATCH] only run health check if driver moves from undetected to
 detected

---
 client/fingerprint_manager.go | 17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)

diff --git a/client/fingerprint_manager.go b/client/fingerprint_manager.go
index 3e8305dba7..68f6fe5f47 100644
--- a/client/fingerprint_manager.go
+++ b/client/fingerprint_manager.go
@@ -284,6 +284,7 @@ func (fm *FingerprintManager) watchDriver(d driver.Driver, name string) {
 		}
 	}
 
+	driverEverDetected := false
 	for {
 		select {
 		case <-fm.shutdownCh:
@@ -292,16 +293,20 @@ func (fm *FingerprintManager) watchDriver(d driver.Driver, name string) {
 			if _, err := fm.fingerprintDriver(name, d); err != nil {
 				fm.logger.Printf("[DEBUG] client.fingerprint_manager: periodic fingerprinting for driver %v failed: %+v", name, err)
 			}
-		case <-healthTicker:
-			// Determine if we should run the health check
+
 			fm.nodeLock.Lock()
 			driver, detected := fm.node.Drivers[name]
-			if detected && driver != nil {
-				detected = driver.Detected
+
+			// Memoize the driver detected status, so that we know whether to run the
+			// health check or not.
+			if detected && driver != nil && driver.Detected {
+				if !driverEverDetected {
+					driverEverDetected = true
+				}
 			}
 			fm.nodeLock.Unlock()
-
-			if detected {
+		case <-healthTicker:
+			if driverEverDetected {
 				if err := fm.runDriverHealthCheck(name, hc); err != nil {
 					fm.logger.Printf("[DEBUG] client.fingerprint_manager: health checking for %v failed: %v", name, err)
 				}
-- 
GitLab