Change container.locked to batched

Signed-off-by: TomSweeneyRedHat <tsweeney@redhat.com>

Closes: #619
Approved by: mheon
This commit is contained in:
TomSweeneyRedHat
2018-04-14 17:32:49 -04:00
committed by Atomic Bot
parent fa8442e4a0
commit 6c5ebb0315
5 changed files with 43 additions and 43 deletions

View File

@ -96,10 +96,10 @@ type Container struct {
state *containerState
// Locked indicates that a container has been locked as part of a
// Batched indicates that a container has been locked as part of a
// Batch() operation
// Functions called on a locked container will not lock or sync
locked bool
// Functions called on a batched container will not lock or sync
batched bool
valid bool
lock storage.Locker
@ -521,7 +521,7 @@ func (c *Container) Hostname() string {
// State returns the current state of the container
func (c *Container) State() (ContainerStatus, error) {
if !c.locked {
if !c.batched {
c.lock.Lock()
defer c.lock.Unlock()
@ -535,7 +535,7 @@ func (c *Container) State() (ContainerStatus, error) {
// Mounted returns a bool as to if the container's storage
// is mounted
func (c *Container) Mounted() (bool, error) {
if !c.locked {
if !c.batched {
c.lock.Lock()
defer c.lock.Unlock()
if err := c.syncContainer(); err != nil {
@ -549,7 +549,7 @@ func (c *Container) Mounted() (bool, error) {
// If the container is not mounted, no error is returned, but the mountpoint
// will be ""
func (c *Container) Mountpoint() (string, error) {
if !c.locked {
if !c.batched {
c.lock.Lock()
defer c.lock.Unlock()
if err := c.syncContainer(); err != nil {
@ -561,7 +561,7 @@ func (c *Container) Mountpoint() (string, error) {
// StartedTime is the time the container was started
func (c *Container) StartedTime() (time.Time, error) {
if !c.locked {
if !c.batched {
c.lock.Lock()
defer c.lock.Unlock()
if err := c.syncContainer(); err != nil {
@ -573,7 +573,7 @@ func (c *Container) StartedTime() (time.Time, error) {
// FinishedTime is the time the container was stopped
func (c *Container) FinishedTime() (time.Time, error) {
if !c.locked {
if !c.batched {
c.lock.Lock()
defer c.lock.Unlock()
if err := c.syncContainer(); err != nil {
@ -586,7 +586,7 @@ func (c *Container) FinishedTime() (time.Time, error) {
// ExitCode returns the exit code of the container as
// an int32
func (c *Container) ExitCode() (int32, error) {
if !c.locked {
if !c.batched {
c.lock.Lock()
defer c.lock.Unlock()
if err := c.syncContainer(); err != nil {
@ -598,7 +598,7 @@ func (c *Container) ExitCode() (int32, error) {
// OOMKilled returns whether the container was killed by an OOM condition
func (c *Container) OOMKilled() (bool, error) {
if !c.locked {
if !c.batched {
c.lock.Lock()
defer c.lock.Unlock()
if err := c.syncContainer(); err != nil {
@ -612,7 +612,7 @@ func (c *Container) OOMKilled() (bool, error) {
// If the container is not running, a pid of 0 will be returned. No error will
// occur.
func (c *Container) PID() (int, error) {
if !c.locked {
if !c.batched {
c.lock.Lock()
defer c.lock.Unlock()
@ -626,7 +626,7 @@ func (c *Container) PID() (int, error) {
// ExecSessions retrieves active exec sessions running in the container
func (c *Container) ExecSessions() ([]string, error) {
if !c.locked {
if !c.batched {
c.lock.Lock()
defer c.lock.Unlock()
@ -646,7 +646,7 @@ func (c *Container) ExecSessions() ([]string, error) {
// ExecSession retrieves detailed information on a single active exec session in
// a container
func (c *Container) ExecSession(id string) (*ExecSession, error) {
if !c.locked {
if !c.batched {
c.lock.Lock()
defer c.lock.Unlock()
@ -672,7 +672,7 @@ func (c *Container) ExecSession(id string) (*ExecSession, error) {
// This will only be populated if the container is configured to created a new
// network namespace, and that namespace is presently active
func (c *Container) IPs() ([]net.IPNet, error) {
if !c.locked {
if !c.batched {
c.lock.Lock()
defer c.lock.Unlock()
@ -698,7 +698,7 @@ func (c *Container) IPs() ([]net.IPNet, error) {
// This will only be populated if the container is configured to created a new
// network namespace, and that namespace is presently active
func (c *Container) Routes() ([]types.Route, error) {
if !c.locked {
if !c.batched {
c.lock.Lock()
defer c.lock.Unlock()
@ -736,7 +736,7 @@ func (c *Container) Routes() ([]types.Route, error) {
// If the container has not been started yet, an empty map will be returned, as
// the files in question are only created when the container is started.
func (c *Container) BindMounts() (map[string]string, error) {
if !c.locked {
if !c.batched {
c.lock.Lock()
defer c.lock.Unlock()
@ -760,7 +760,7 @@ func (c *Container) BindMounts() (map[string]string, error) {
// NamespacePath returns the path of one of the container's namespaces
// If the container is not running, an error will be returned
func (c *Container) NamespacePath(ns LinuxNS) (string, error) {
if !c.locked {
if !c.batched {
c.lock.Lock()
defer c.lock.Unlock()
if err := c.syncContainer(); err != nil {
@ -786,7 +786,7 @@ func (c *Container) CGroupPath() cgroups.Path {
// RootFsSize returns the root FS size of the container
func (c *Container) RootFsSize() (int64, error) {
if !c.locked {
if !c.batched {
c.lock.Lock()
defer c.lock.Unlock()
if err := c.syncContainer(); err != nil {
@ -798,7 +798,7 @@ func (c *Container) RootFsSize() (int64, error) {
// RWSize returns the rw size of the container
func (c *Container) RWSize() (int64, error) {
if !c.locked {
if !c.batched {
c.lock.Lock()
defer c.lock.Unlock()
if err := c.syncContainer(); err != nil {

View File

@ -19,7 +19,7 @@ import (
// Init creates a container in the OCI runtime
func (c *Container) Init() (err error) {
if !c.locked {
if !c.batched {
c.lock.Lock()
defer c.lock.Unlock()
@ -62,7 +62,7 @@ func (c *Container) Init() (err error) {
// Stopped containers will be deleted and re-created in runc, undergoing a fresh
// Init()
func (c *Container) Start() (err error) {
if !c.locked {
if !c.batched {
c.lock.Lock()
defer c.lock.Unlock()
@ -125,7 +125,7 @@ func (c *Container) Start() (err error) {
// The channel will be closed automatically after the result of attach has been
// sent
func (c *Container) StartAndAttach(streams *AttachStreams, keys string, resize <-chan remotecommand.TerminalSize) (attachResChan <-chan error, err error) {
if !c.locked {
if !c.batched {
c.lock.Lock()
defer c.lock.Unlock()
@ -198,7 +198,7 @@ func (c *Container) StartAndAttach(streams *AttachStreams, keys string, resize <
// Default stop timeout is 10 seconds, but can be overridden when the container
// is created
func (c *Container) Stop() error {
if !c.locked {
if !c.batched {
c.lock.Lock()
defer c.lock.Unlock()
@ -224,7 +224,7 @@ func (c *Container) Stop() error {
// manually. If timeout is 0, SIGKILL will be used immediately to kill the
// container.
func (c *Container) StopWithTimeout(timeout uint) error {
if !c.locked {
if !c.batched {
c.lock.Lock()
defer c.lock.Unlock()
@ -248,7 +248,7 @@ func (c *Container) StopWithTimeout(timeout uint) error {
// Kill sends a signal to a container
func (c *Container) Kill(signal uint) error {
if !c.locked {
if !c.batched {
c.lock.Lock()
defer c.lock.Unlock()
@ -271,7 +271,7 @@ func (c *Container) Exec(tty, privileged bool, env, cmd []string, user string) e
var capList []string
locked := false
if !c.locked {
if !c.batched {
locked = true
c.lock.Lock()
@ -377,7 +377,7 @@ func (c *Container) Exec(tty, privileged bool, env, cmd []string, user string) e
logrus.Debugf("Successfully started exec session %s in container %s", sessionID, c.ID())
// Unlock so other processes can use the container
if !c.locked {
if !c.batched {
c.lock.Unlock()
locked = false
}
@ -385,7 +385,7 @@ func (c *Container) Exec(tty, privileged bool, env, cmd []string, user string) e
waitErr := execCmd.Wait()
// Lock again
if !c.locked {
if !c.batched {
locked = true
c.lock.Lock()
}
@ -406,7 +406,7 @@ func (c *Container) Exec(tty, privileged bool, env, cmd []string, user string) e
// Attach attaches to a container
func (c *Container) Attach(streams *AttachStreams, keys string, resize <-chan remotecommand.TerminalSize) error {
if !c.locked {
if !c.batched {
c.lock.Lock()
if err := c.syncContainer(); err != nil {
c.lock.Unlock()
@ -426,7 +426,7 @@ func (c *Container) Attach(streams *AttachStreams, keys string, resize <-chan re
// Mount mounts a container's filesystem on the host
// The path where the container has been mounted is returned
func (c *Container) Mount() (string, error) {
if !c.locked {
if !c.batched {
c.lock.Lock()
defer c.lock.Unlock()
@ -444,7 +444,7 @@ func (c *Container) Mount() (string, error) {
// Unmount unmounts a container's filesystem on the host
func (c *Container) Unmount() error {
if !c.locked {
if !c.batched {
c.lock.Lock()
defer c.lock.Unlock()
@ -467,7 +467,7 @@ func (c *Container) Unmount() error {
// Pause pauses a container
func (c *Container) Pause() error {
if !c.locked {
if !c.batched {
c.lock.Lock()
defer c.lock.Unlock()
@ -495,7 +495,7 @@ func (c *Container) Pause() error {
// Unpause unpauses a container
func (c *Container) Unpause() error {
if !c.locked {
if !c.batched {
c.lock.Lock()
defer c.lock.Unlock()
@ -521,7 +521,7 @@ func (c *Container) Unpause() error {
// Export exports a container's root filesystem as a tar archive
// The archive will be saved as a file at the given path
func (c *Container) Export(path string) error {
if !c.locked {
if !c.batched {
c.lock.Lock()
defer c.lock.Unlock()
@ -562,7 +562,7 @@ func (c *Container) RemoveArtifact(name string) error {
// Inspect a container for low-level information
func (c *Container) Inspect(size bool) (*inspect.ContainerInspectData, error) {
if !c.locked {
if !c.batched {
c.lock.Lock()
defer c.lock.Unlock()
@ -615,7 +615,7 @@ func (c *Container) Wait() (int32, error) {
// Cleanup unmounts all mount points in container and cleans up container storage
// It also cleans up the network stack
func (c *Container) Cleanup() error {
if !c.locked {
if !c.batched {
c.lock.Lock()
defer c.lock.Unlock()
if err := c.syncContainer(); err != nil {
@ -664,13 +664,13 @@ func (c *Container) Batch(batchFunc func(*Container) error) error {
newCtr.lock = c.lock
newCtr.valid = true
newCtr.locked = true
newCtr.batched = true
if err := batchFunc(newCtr); err != nil {
return err
}
newCtr.locked = false
newCtr.batched = false
return c.save()
}
@ -681,7 +681,7 @@ func (c *Container) Batch(batchFunc func(*Container) error) error {
// automatically.
// When called outside Batch(), Sync() is a no-op
func (c *Container) Sync() error {
if !c.locked {
if !c.batched {
return nil
}

View File

@ -25,7 +25,7 @@ type ContainerCommitOptions struct {
// Commit commits the changes between a container and its image, creating a new
// image
func (c *Container) Commit(destImage string, options ContainerCommitOptions) (*image.Image, error) {
if !c.locked {
if !c.batched {
c.lock.Lock()
defer c.lock.Unlock()

View File

@ -334,7 +334,7 @@ func (c *Container) getArtifactPath(name string) string {
// Used with Wait() to determine if a container has exited
func (c *Container) isStopped() (bool, error) {
if !c.locked {
if !c.batched {
c.lock.Lock()
defer c.lock.Unlock()
}

View File

@ -15,7 +15,7 @@ import (
// GetContainerPids reads sysfs to obtain the pids associated with the container's cgroup
// and uses locking
func (c *Container) GetContainerPids() ([]string, error) {
if !c.locked {
if !c.batched {
c.lock.Lock()
defer c.lock.Unlock()
if err := c.syncContainer(); err != nil {
@ -41,7 +41,7 @@ func (c *Container) getContainerPids() ([]string, error) {
// GetContainerPidInformation calls ps with the appropriate options and returns
// the results as a string and the container's PIDs as a []string
func (c *Container) GetContainerPidInformation(args []string) ([]string, error) {
if !c.locked {
if !c.batched {
c.lock.Lock()
defer c.lock.Unlock()
if err := c.syncContainer(); err != nil {