From 9a2f46f3324c66ea5a8b4f7d4fbb086ff2b96e30 Mon Sep 17 00:00:00 2001 From: Mahmood Ali Date: Fri, 19 Apr 2019 09:15:25 -0400 Subject: [PATCH] client: log detected driver health state Noticed that `detected drivers` log line was misleading - when a driver doesn't fingerprint before timeout, their health status is empty string `""` which we would mark as detected. Now, we log all drivers along with their state to ease driver fingerprint debugging. --- client/pluginmanager/drivermanager/manager.go | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/client/pluginmanager/drivermanager/manager.go b/client/pluginmanager/drivermanager/manager.go index 6592a2a80..2c0474eea 100644 --- a/client/pluginmanager/drivermanager/manager.go +++ b/client/pluginmanager/drivermanager/manager.go @@ -243,9 +243,18 @@ func (m *manager) waitForFirstFingerprint(ctx context.Context, cancel context.Ca } var mu sync.Mutex - var availDrivers []string + driversByStatus := map[drivers.HealthState][]string{} + var wg sync.WaitGroup + recordDriver := func(name string, lastHeath drivers.HealthState) { + mu.Lock() + defer mu.Unlock() + + updated := append(driversByStatus[lastHeath], name) + driversByStatus[lastHeath] = updated + } + // loop through instances and wait for each to finish initial fingerprint m.instancesMu.RLock() for n, i := range m.instances { @@ -253,16 +262,13 @@ func (m *manager) waitForFirstFingerprint(ctx context.Context, cancel context.Ca go func(name string, instance *instanceManager) { defer wg.Done() instance.WaitForFirstFingerprint(ctx) - if instance.getLastHealth() != drivers.HealthStateUndetected { - mu.Lock() - availDrivers = append(availDrivers, name) - mu.Unlock() - } + recordDriver(name, instance.getLastHealth()) }(n, i) } m.instancesMu.RUnlock() wg.Wait() - m.logger.Debug("detected drivers", "drivers", availDrivers) + + m.logger.Debug("detected drivers", "drivers", driversByStatus) } func (m *manager) loadReattachConfigs() error {