From cd8a7923aedc3a96dde0438fb1eb2d18e12e8626 Mon Sep 17 00:00:00 2001 From: Katie Knister Date: Tue, 16 Dec 2014 17:29:14 -0800 Subject: [PATCH] Caches container info for 5 seconds before updating it --- manager/container.go | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/manager/container.go b/manager/container.go index 2696fdda..f6980276 100644 --- a/manager/container.go +++ b/manager/container.go @@ -44,6 +44,8 @@ type containerData struct { storageDriver storage.StorageDriver lock sync.Mutex housekeepingInterval time.Duration + lastUpdatedTime time.Time + // Whether to log the usage of this container when it is updated. logUsage bool @@ -63,17 +65,18 @@ func (c *containerData) Stop() error { } func (c *containerData) GetInfo() (*containerInfo, error) { - // TODO(vmarmol): Consider caching this. // Get spec and subcontainers. - err := c.updateSpec() - if err != nil { - return nil, err - } - err = c.updateSubcontainers() - if err != nil { - return nil, err - } - + if time.Since(c.lastUpdatedTime) > 5 * time.Second { + err := c.updateSpec() + if err != nil { + return nil, err + } + err = c.updateSubcontainers() + if err != nil { + return nil, err + } + c.lastUpdatedTime = time.Now() + } // Make a copy of the info for the user. c.lock.Lock() defer c.lock.Unlock()