github.com/jiasir/docker@v1.3.3-0.20170609024000-252e610103e7/daemon/getsize_unix.go (about)

     1  // +build linux freebsd solaris
     2  
     3  package daemon
     4  
     5  import (
     6  	"github.com/Sirupsen/logrus"
     7  )
     8  
     9  // getSize returns the real size & virtual size of the container.
    10  func (daemon *Daemon) getSize(containerID string) (int64, int64) {
    11  	var (
    12  		sizeRw, sizeRootfs int64
    13  		err                error
    14  	)
    15  
    16  	rwlayer, err := daemon.layerStore.GetRWLayer(containerID)
    17  	if err != nil {
    18  		logrus.Errorf("Failed to compute size of container rootfs %v: %v", containerID, err)
    19  		return sizeRw, sizeRootfs
    20  	}
    21  	defer daemon.layerStore.ReleaseRWLayer(rwlayer)
    22  
    23  	sizeRw, err = rwlayer.Size()
    24  	if err != nil {
    25  		logrus.Errorf("Driver %s couldn't return diff size of container %s: %s",
    26  			daemon.GraphDriverName(), containerID, err)
    27  		// FIXME: GetSize should return an error. Not changing it now in case
    28  		// there is a side-effect.
    29  		sizeRw = -1
    30  	}
    31  
    32  	if parent := rwlayer.Parent(); parent != nil {
    33  		sizeRootfs, err = parent.Size()
    34  		if err != nil {
    35  			sizeRootfs = -1
    36  		} else if sizeRw != -1 {
    37  			sizeRootfs += sizeRw
    38  		}
    39  	}
    40  	return sizeRw, sizeRootfs
    41  }