From 3e16b523619a75ee8b8a90eeb3f2a57ed4fe9c28 Mon Sep 17 00:00:00 2001 From: Preetha Appan Date: Wed, 16 Jan 2019 11:04:11 -0600 Subject: [PATCH] clean up read access --- drivers/docker/driver.go | 2 +- drivers/docker/fingerprint.go | 14 +++++++++++--- drivers/exec/driver.go | 10 +++++++++- drivers/rkt/driver.go | 12 ++++++++++-- 4 files changed, 31 insertions(+), 7 deletions(-) diff --git a/drivers/docker/driver.go b/drivers/docker/driver.go index 0de93aba7..3467338c5 100644 --- a/drivers/docker/driver.go +++ b/drivers/docker/driver.go @@ -92,7 +92,7 @@ type Driver struct { // A tri-state boolean to know if the fingerprinting has happened and // whether it has been successful fingerprintSuccess *bool - fingerprintLock sync.Mutex + fingerprintLock sync.RWMutex } // NewDockerDriver returns a docker implementation of a driver plugin diff --git a/drivers/docker/fingerprint.go b/drivers/docker/fingerprint.go index 50d64374c..a84bafd90 100644 --- a/drivers/docker/fingerprint.go +++ b/drivers/docker/fingerprint.go @@ -31,6 +31,14 @@ func (d *Driver) setFingerprintFailure() { d.fingerprintLock.Unlock() } +// fingerprintSuccessful returns true if the driver has +// never fingerprinted or has successfully fingerprinted +func (d *Driver) fingerprintSuccessful() bool { + d.fingerprintLock.Lock() + defer d.fingerprintLock.Unlock() + return d.fingerprintSuccess == nil || *d.fingerprintSuccess +} + func (d *Driver) handleFingerprint(ctx context.Context, ch chan *drivers.Fingerprint) { defer close(ch) ticker := time.NewTimer(0) @@ -55,7 +63,7 @@ func (d *Driver) buildFingerprint() *drivers.Fingerprint { } client, _, err := d.dockerClients() if err != nil { - if d.fingerprintSuccess == nil || *d.fingerprintSuccess { + if d.fingerprintSuccessful() { d.logger.Info("failed to initialize client", "error", err) } d.setFingerprintFailure() @@ -67,7 +75,7 @@ func (d *Driver) buildFingerprint() *drivers.Fingerprint { env, err := client.Version() if err != nil { - if d.fingerprintSuccess == nil || *d.fingerprintSuccess { + if d.fingerprintSuccessful() { d.logger.Debug("could not connect to docker daemon", "endpoint", client.Endpoint(), "error", err) } d.setFingerprintFailure() @@ -105,7 +113,7 @@ func (d *Driver) buildFingerprint() *drivers.Fingerprint { } else { // Docker 17.09.0-ce dropped the Gateway IP from the bridge network // See https://github.com/moby/moby/issues/32648 - if d.fingerprintSuccess == nil || *d.fingerprintSuccess { + if d.fingerprintSuccessful() { d.logger.Debug("bridge_ip could not be discovered") } } diff --git a/drivers/exec/driver.go b/drivers/exec/driver.go index 8aab879ed..d8250d873 100644 --- a/drivers/exec/driver.go +++ b/drivers/exec/driver.go @@ -147,6 +147,14 @@ func (d *Driver) setFingerprintFailure() { d.fingerprintLock.Unlock() } +// fingerprintSuccessful returns true if the driver has +// never fingerprinted or has successfully fingerprinted +func (d *Driver) fingerprintSuccessful() bool { + d.fingerprintLock.Lock() + defer d.fingerprintLock.Unlock() + return d.fingerprintSuccess == nil || *d.fingerprintSuccess +} + func (d *Driver) PluginInfo() (*base.PluginInfoResponse, error) { return pluginInfo, nil } @@ -222,7 +230,7 @@ func (d *Driver) buildFingerprint() *drivers.Fingerprint { if err != nil { fp.Health = drivers.HealthStateUnhealthy fp.HealthDescription = drivers.NoCgroupMountMessage - if d.fingerprintSuccess == nil || *d.fingerprintSuccess { + if d.fingerprintSuccessful() { d.logger.Warn(fp.HealthDescription, "error", err) } d.setFingerprintFailure() diff --git a/drivers/rkt/driver.go b/drivers/rkt/driver.go index 2035327d0..54f0510c1 100644 --- a/drivers/rkt/driver.go +++ b/drivers/rkt/driver.go @@ -280,6 +280,14 @@ func (d *Driver) setFingerprintFailure() { d.fingerprintLock.Unlock() } +// fingerprintSuccessful returns true if the driver has +// never fingerprinted or has successfully fingerprinted +func (d *Driver) fingerprintSuccessful() bool { + d.fingerprintLock.Lock() + defer d.fingerprintLock.Unlock() + return d.fingerprintSuccess == nil || *d.fingerprintSuccess +} + func (d *Driver) buildFingerprint() *drivers.Fingerprint { fingerprint := &drivers.Fingerprint{ Attributes: map[string]*pstructs.Attribute{}, @@ -289,7 +297,7 @@ func (d *Driver) buildFingerprint() *drivers.Fingerprint { // Only enable if we are root if syscall.Geteuid() != 0 { - if d.fingerprintSuccess == nil || *d.fingerprintSuccess { + if d.fingerprintSuccessful() { d.logger.Debug("must run as root user, disabling") } d.setFingerprintFailure() @@ -322,7 +330,7 @@ func (d *Driver) buildFingerprint() *drivers.Fingerprint { // Do not allow ancient rkt versions fingerprint.Health = drivers.HealthStateUndetected fingerprint.HealthDescription = fmt.Sprintf("Unsuported rkt version %s", currentVersion) - if d.fingerprintSuccess == nil || *d.fingerprintSuccess { + if d.fingerprintSuccessful() { d.logger.Warn("unsupported rkt version please upgrade to >= "+minVersion.String(), "rkt_version", currentVersion) }