Files
podman/libpod/volume.go
Matthew Heon ca8ae877c1 Remove locks from volumes
I was looking into why we have locks in volumes, and I'm fairly
convinced they're unnecessary.

We don't have a state whose accesses we need to guard with locks
and syncs. The only real purpose for the lock was to prevent
concurrent removal of the same volume.

Looking at the code, concurrent removal ought to be fine with a
bit of reordering - one or the other might fail, but we will
successfully evict the volume from the state.

Also, remove the 'prune' bool from RemoveVolume. None of our
other API functions accept it, and it only served to toggle off
more verbose error messages.

Signed-off-by: Matthew Heon <matthew.heon@pm.me>
2019-02-21 10:51:42 -05:00

63 lines
1.4 KiB
Go

package libpod
// Volume is the type used to create named volumes
// TODO: all volumes should be created using this and the Volume API
type Volume struct {
config *VolumeConfig
valid bool
runtime *Runtime
}
// VolumeConfig holds the volume's config information
//easyjson:json
type VolumeConfig struct {
// Name of the volume
Name string `json:"name"`
Labels map[string]string `json:"labels"`
MountPoint string `json:"mountPoint"`
Driver string `json:"driver"`
Options map[string]string `json:"options"`
Scope string `json:"scope"`
}
// Name retrieves the volume's name
func (v *Volume) Name() string {
return v.config.Name
}
// Labels returns the volume's labels
func (v *Volume) Labels() map[string]string {
labels := make(map[string]string)
for key, value := range v.config.Labels {
labels[key] = value
}
return labels
}
// MountPoint returns the volume's mountpoint on the host
func (v *Volume) MountPoint() string {
return v.config.MountPoint
}
// Driver returns the volume's driver
func (v *Volume) Driver() string {
return v.config.Driver
}
// Options return the volume's options
func (v *Volume) Options() map[string]string {
options := make(map[string]string)
for key, value := range v.config.Options {
options[key] = value
}
return options
}
// Scope returns the scope of the volume
func (v *Volume) Scope() string {
return v.config.Scope
}