mirror of
				https://github.com/moby/moby.git
				synced 2022-11-09 12:21:53 -05:00 
			
		
		
		
	lint fixes for volume/*
- comments on exported values - constant string replaced by constant reference - unexport implementation details of VolumeDriver 'local' - add fixed packages to linter list Signed-off-by: Morgan Bauer <mbauer@us.ibm.com>
This commit is contained in:
		
							parent
							
								
									33358f80e5
								
							
						
					
					
						commit
						9af963aba0
					
				
					 5 changed files with 57 additions and 17 deletions
				
			
		| 
						 | 
				
			
			@ -63,6 +63,9 @@ packages=(
 | 
			
		|||
	registry
 | 
			
		||||
	runconfig
 | 
			
		||||
	utils
 | 
			
		||||
	volume
 | 
			
		||||
	volume/local
 | 
			
		||||
	volume/drivers
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
errors=()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,11 +4,13 @@ package volumedrivers
 | 
			
		|||
 | 
			
		||||
import "github.com/docker/docker/volume"
 | 
			
		||||
 | 
			
		||||
// NewVolumeDriver returns a driver has the given name mapped on the given client.
 | 
			
		||||
func NewVolumeDriver(name string, c client) volume.Driver {
 | 
			
		||||
	proxy := &volumeDriverProxy{c}
 | 
			
		||||
	return &volumeDriverAdapter{name, proxy}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// VolumeDriver defines the available functions that volume plugins must implement.
 | 
			
		||||
type VolumeDriver interface {
 | 
			
		||||
	// Create a volume with the given name
 | 
			
		||||
	Create(name string) (err error)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,6 +18,8 @@ type driverExtpoint struct {
 | 
			
		|||
	sync.Mutex
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Register associates the given driver to the given name, checking if
 | 
			
		||||
// the name is already associated
 | 
			
		||||
func Register(extension volume.Driver, name string) bool {
 | 
			
		||||
	drivers.Lock()
 | 
			
		||||
	defer drivers.Unlock()
 | 
			
		||||
| 
						 | 
				
			
			@ -32,6 +34,7 @@ func Register(extension volume.Driver, name string) bool {
 | 
			
		|||
	return true
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Unregister dissociates the name from it's driver, if the association exists.
 | 
			
		||||
func Unregister(name string) bool {
 | 
			
		||||
	drivers.Lock()
 | 
			
		||||
	defer drivers.Unlock()
 | 
			
		||||
| 
						 | 
				
			
			@ -43,6 +46,9 @@ func Unregister(name string) bool {
 | 
			
		|||
	return true
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Lookup returns the driver associated with the given name. If a
 | 
			
		||||
// driver with the given name has not been registered it checks if
 | 
			
		||||
// there is a VolumeDriver plugin available with the given name.
 | 
			
		||||
func Lookup(name string) (volume.Driver, error) {
 | 
			
		||||
	drivers.Lock()
 | 
			
		||||
	defer drivers.Unlock()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,3 +1,6 @@
 | 
			
		|||
// Package local provides the default implementation for volumes. It
 | 
			
		||||
// is used to mount data volume containers and directories local to
 | 
			
		||||
// the host server.
 | 
			
		||||
package local
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
| 
						 | 
				
			
			@ -13,7 +16,7 @@ import (
 | 
			
		|||
)
 | 
			
		||||
 | 
			
		||||
// VolumeDataPathName is the name of the directory where the volume data is stored.
 | 
			
		||||
// It uses a very distintive name to avoid colissions migrating data between
 | 
			
		||||
// It uses a very distintive name to avoid collisions migrating data between
 | 
			
		||||
// Docker versions.
 | 
			
		||||
const (
 | 
			
		||||
	VolumeDataPathName = "_data"
 | 
			
		||||
| 
						 | 
				
			
			@ -22,6 +25,9 @@ const (
 | 
			
		|||
 | 
			
		||||
var oldVfsDir = filepath.Join("vfs", "dir")
 | 
			
		||||
 | 
			
		||||
// New instantiates a new Root instance with the provided scope. Scope
 | 
			
		||||
// is the base path that the Root instance uses to store its
 | 
			
		||||
// volumes. The base path is created here if it does not exist.
 | 
			
		||||
func New(scope string) (*Root, error) {
 | 
			
		||||
	rootDirectory := filepath.Join(scope, volumesPathName)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -32,7 +38,7 @@ func New(scope string) (*Root, error) {
 | 
			
		|||
	r := &Root{
 | 
			
		||||
		scope:   scope,
 | 
			
		||||
		path:    rootDirectory,
 | 
			
		||||
		volumes: make(map[string]*Volume),
 | 
			
		||||
		volumes: make(map[string]*localVolume),
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	dirs, err := ioutil.ReadDir(rootDirectory)
 | 
			
		||||
| 
						 | 
				
			
			@ -42,7 +48,7 @@ func New(scope string) (*Root, error) {
 | 
			
		|||
 | 
			
		||||
	for _, d := range dirs {
 | 
			
		||||
		name := filepath.Base(d.Name())
 | 
			
		||||
		r.volumes[name] = &Volume{
 | 
			
		||||
		r.volumes[name] = &localVolume{
 | 
			
		||||
			driverName: r.Name(),
 | 
			
		||||
			name:       name,
 | 
			
		||||
			path:       r.DataPath(name),
 | 
			
		||||
| 
						 | 
				
			
			@ -51,21 +57,29 @@ func New(scope string) (*Root, error) {
 | 
			
		|||
	return r, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Root implements the Driver interface for the volume package and
 | 
			
		||||
// manages the creation/removal of volumes. It uses only standard vfs
 | 
			
		||||
// commands to create/remove dirs within its provided scope.
 | 
			
		||||
type Root struct {
 | 
			
		||||
	m       sync.Mutex
 | 
			
		||||
	scope   string
 | 
			
		||||
	path    string
 | 
			
		||||
	volumes map[string]*Volume
 | 
			
		||||
	volumes map[string]*localVolume
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// DataPath returns the constructed path of this volume.
 | 
			
		||||
func (r *Root) DataPath(volumeName string) string {
 | 
			
		||||
	return filepath.Join(r.path, volumeName, VolumeDataPathName)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Name returns the name of Root, defined in the volume package in the DefaultDriverName constant.
 | 
			
		||||
func (r *Root) Name() string {
 | 
			
		||||
	return "local"
 | 
			
		||||
	return volume.DefaultDriverName
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Create creates a new volume.Volume with the provided name, creating
 | 
			
		||||
// the underlying directory tree required for this volume in the
 | 
			
		||||
// process.
 | 
			
		||||
func (r *Root) Create(name string) (volume.Volume, error) {
 | 
			
		||||
	r.m.Lock()
 | 
			
		||||
	defer r.m.Unlock()
 | 
			
		||||
| 
						 | 
				
			
			@ -79,7 +93,7 @@ func (r *Root) Create(name string) (volume.Volume, error) {
 | 
			
		|||
			}
 | 
			
		||||
			return nil, err
 | 
			
		||||
		}
 | 
			
		||||
		v = &Volume{
 | 
			
		||||
		v = &localVolume{
 | 
			
		||||
			driverName: r.Name(),
 | 
			
		||||
			name:       name,
 | 
			
		||||
			path:       path,
 | 
			
		||||
| 
						 | 
				
			
			@ -90,10 +104,14 @@ func (r *Root) Create(name string) (volume.Volume, error) {
 | 
			
		|||
	return v, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Remove removes the specified volume and all underlying data. If the
 | 
			
		||||
// given volume does not belong to this driver and an error is
 | 
			
		||||
// returned. The volume is reference counted, if all references are
 | 
			
		||||
// not released then the volume is not removed.
 | 
			
		||||
func (r *Root) Remove(v volume.Volume) error {
 | 
			
		||||
	r.m.Lock()
 | 
			
		||||
	defer r.m.Unlock()
 | 
			
		||||
	lv, ok := v.(*Volume)
 | 
			
		||||
	lv, ok := v.(*localVolume)
 | 
			
		||||
	if !ok {
 | 
			
		||||
		return errors.New("unknown volume type")
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -133,7 +151,9 @@ func (r *Root) scopedPath(realPath string) bool {
 | 
			
		|||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type Volume struct {
 | 
			
		||||
// localVolume implements the Volume interface from the volume package and
 | 
			
		||||
// represents the volumes created by Root.
 | 
			
		||||
type localVolume struct {
 | 
			
		||||
	m         sync.Mutex
 | 
			
		||||
	usedCount int
 | 
			
		||||
	// unique name of the volume
 | 
			
		||||
| 
						 | 
				
			
			@ -144,33 +164,38 @@ type Volume struct {
 | 
			
		|||
	driverName string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (v *Volume) Name() string {
 | 
			
		||||
// Name returns the name of the given Volume.
 | 
			
		||||
func (v *localVolume) Name() string {
 | 
			
		||||
	return v.name
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (v *Volume) DriverName() string {
 | 
			
		||||
// DriverName returns the driver that created the given Volume.
 | 
			
		||||
func (v *localVolume) DriverName() string {
 | 
			
		||||
	return v.driverName
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (v *Volume) Path() string {
 | 
			
		||||
// Path returns the data location.
 | 
			
		||||
func (v *localVolume) Path() string {
 | 
			
		||||
	return v.path
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (v *Volume) Mount() (string, error) {
 | 
			
		||||
// Mount implements the localVolume interface, returning the data location.
 | 
			
		||||
func (v *localVolume) Mount() (string, error) {
 | 
			
		||||
	return v.path, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (v *Volume) Unmount() error {
 | 
			
		||||
// Umount is for satisfying the localVolume interface and does not do anything in this driver.
 | 
			
		||||
func (v *localVolume) Unmount() error {
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (v *Volume) use() {
 | 
			
		||||
func (v *localVolume) use() {
 | 
			
		||||
	v.m.Lock()
 | 
			
		||||
	v.usedCount++
 | 
			
		||||
	v.m.Unlock()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (v *Volume) release() {
 | 
			
		||||
func (v *localVolume) release() {
 | 
			
		||||
	v.m.Lock()
 | 
			
		||||
	v.usedCount--
 | 
			
		||||
	v.m.Unlock()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,10 @@
 | 
			
		|||
package volume
 | 
			
		||||
 | 
			
		||||
const DefaultDriverName = "local"
 | 
			
		||||
// DefaultDriverName is the driver name used for the driver
 | 
			
		||||
// implemented in the local package.
 | 
			
		||||
const DefaultDriverName string = "local"
 | 
			
		||||
 | 
			
		||||
// Driver is for creating and removing volumes.
 | 
			
		||||
type Driver interface {
 | 
			
		||||
	// Name returns the name of the volume driver.
 | 
			
		||||
	Name() string
 | 
			
		||||
| 
						 | 
				
			
			@ -11,6 +14,7 @@ type Driver interface {
 | 
			
		|||
	Remove(Volume) error
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Volume is a place to store data. It is backed by a specific driver, and can be mounted.
 | 
			
		||||
type Volume interface {
 | 
			
		||||
	// Name returns the name of the volume
 | 
			
		||||
	Name() string
 | 
			
		||||
| 
						 | 
				
			
			@ -51,7 +55,7 @@ func ValidateMountMode(mode string) (bool, bool) {
 | 
			
		|||
	return roModes[mode] || rwModes[mode], rwModes[mode]
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ReadOnly tells you if a mode string is a valid read-only mode or not.
 | 
			
		||||
// ReadWrite tells you if a mode string is a valid read-only mode or not.
 | 
			
		||||
func ReadWrite(mode string) bool {
 | 
			
		||||
	return rwModes[mode]
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue