mirror of
https://github.com/containers/podman.git
synced 2025-09-19 23:03:16 +08:00

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>
63 lines
1.4 KiB
Go
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
|
|
}
|