Procházet zdrojové kódy

Merge pull request #15 from alexlarsson/dm-plugin-explicit-init

Remove devicemapper lazy initialization
Guillaume J. Charmes před 11 roky
rodič
revize
46ab7d1e8a
2 změnil soubory, kde provedl 13 přidání a 57 odebrání
  1. 8 53
      devmapper/deviceset.go
  2. 5 4
      devmapper/driver.go

+ 8 - 53
devmapper/deviceset.go

@@ -38,7 +38,6 @@ type MetaData struct {
 type DeviceSet struct {
 type DeviceSet struct {
 	MetaData
 	MetaData
 	sync.Mutex
 	sync.Mutex
-	initialized      bool
 	root             string
 	root             string
 	devicePrefix     string
 	devicePrefix     string
 	TransactionId    uint64
 	TransactionId    uint64
@@ -450,11 +449,6 @@ func (devices *DeviceSet) AddDevice(hash, baseHash string) error {
 	devices.Lock()
 	devices.Lock()
 	defer devices.Unlock()
 	defer devices.Unlock()
 
 
-	if err := devices.ensureInit(); err != nil {
-		utils.Debugf("Error init: %s\n", err)
-		return err
-	}
-
 	if devices.Devices[hash] != nil {
 	if devices.Devices[hash] != nil {
 		return fmt.Errorf("hash %s already exists", hash)
 		return fmt.Errorf("hash %s already exists", hash)
 	}
 	}
@@ -522,11 +516,6 @@ func (devices *DeviceSet) RemoveDevice(hash string) error {
 	devices.Lock()
 	devices.Lock()
 	defer devices.Unlock()
 	defer devices.Unlock()
 
 
-	if err := devices.ensureInit(); err != nil {
-		utils.Debugf("\n--->Err: %s\n", err)
-		return err
-	}
-
 	return devices.removeDevice(hash)
 	return devices.removeDevice(hash)
 }
 }
 
 
@@ -635,10 +624,6 @@ func (devices *DeviceSet) Shutdown() error {
 	utils.Debugf("[devmapper] Shutting down DeviceSet: %s", devices.root)
 	utils.Debugf("[devmapper] Shutting down DeviceSet: %s", devices.root)
 	defer devices.Unlock()
 	defer devices.Unlock()
 
 
-	if !devices.initialized {
-		return nil
-	}
-
 	for path, count := range devices.activeMounts {
 	for path, count := range devices.activeMounts {
 		for i := count; i > 0; i-- {
 		for i := count; i > 0; i-- {
 			if err := syscall.Unmount(path, 0); err != nil {
 			if err := syscall.Unmount(path, 0); err != nil {
@@ -671,10 +656,6 @@ func (devices *DeviceSet) MountDevice(hash, path string, readOnly bool) error {
 	devices.Lock()
 	devices.Lock()
 	defer devices.Unlock()
 	defer devices.Unlock()
 
 
-	if err := devices.ensureInit(); err != nil {
-		return fmt.Errorf("Error initializing devmapper: %s", err)
-	}
-
 	if err := devices.activateDeviceIfNeeded(hash); err != nil {
 	if err := devices.activateDeviceIfNeeded(hash); err != nil {
 		return fmt.Errorf("Error activating devmapper device for '%s': %s", hash, err)
 		return fmt.Errorf("Error activating devmapper device for '%s': %s", hash, err)
 	}
 	}
@@ -736,9 +717,6 @@ func (devices *DeviceSet) HasDevice(hash string) bool {
 	devices.Lock()
 	devices.Lock()
 	defer devices.Unlock()
 	defer devices.Unlock()
 
 
-	if err := devices.ensureInit(); err != nil {
-		return false
-	}
 	return devices.Devices[hash] != nil
 	return devices.Devices[hash] != nil
 }
 }
 
 
@@ -746,10 +724,6 @@ func (devices *DeviceSet) HasInitializedDevice(hash string) bool {
 	devices.Lock()
 	devices.Lock()
 	defer devices.Unlock()
 	defer devices.Unlock()
 
 
-	if err := devices.ensureInit(); err != nil {
-		return false
-	}
-
 	info := devices.Devices[hash]
 	info := devices.Devices[hash]
 	return info != nil && info.Initialized
 	return info != nil && info.Initialized
 }
 }
@@ -758,10 +732,6 @@ func (devices *DeviceSet) HasActivatedDevice(hash string) bool {
 	devices.Lock()
 	devices.Lock()
 	defer devices.Unlock()
 	defer devices.Unlock()
 
 
-	if err := devices.ensureInit(); err != nil {
-		return false
-	}
-
 	info := devices.Devices[hash]
 	info := devices.Devices[hash]
 	if info == nil {
 	if info == nil {
 		return false
 		return false
@@ -774,11 +744,6 @@ func (devices *DeviceSet) SetInitialized(hash string) error {
 	devices.Lock()
 	devices.Lock()
 	defer devices.Unlock()
 	defer devices.Unlock()
 
 
-	if err := devices.ensureInit(); err != nil {
-		utils.Debugf("\n--->Err: %s\n", err)
-		return err
-	}
-
 	info := devices.Devices[hash]
 	info := devices.Devices[hash]
 	if info == nil {
 	if info == nil {
 		return fmt.Errorf("Unknown device %s", hash)
 		return fmt.Errorf("Unknown device %s", hash)
@@ -800,10 +765,6 @@ func (devices *DeviceSet) Status() *Status {
 
 
 	status := &Status{}
 	status := &Status{}
 
 
-	if err := devices.ensureInit(); err != nil {
-		return status
-	}
-
 	status.PoolName = devices.getPoolName()
 	status.PoolName = devices.getPoolName()
 	status.DataLoopback = path.Join(devices.loopbackDir(), "data")
 	status.DataLoopback = path.Join(devices.loopbackDir(), "data")
 	status.MetadataLoopback = path.Join(devices.loopbackDir(), "metadata")
 	status.MetadataLoopback = path.Join(devices.loopbackDir(), "metadata")
@@ -827,24 +788,18 @@ func (devices *DeviceSet) Status() *Status {
 	return status
 	return status
 }
 }
 
 
-func (devices *DeviceSet) ensureInit() error {
-	if !devices.initialized {
-		devices.initialized = true
-		if err := devices.initDevmapper(); err != nil {
-			utils.Debugf("\n--->Err: %s\n", err)
-			return err
-		}
-	}
-	return nil
-}
-
-func NewDeviceSet(root string) *DeviceSet {
+func NewDeviceSet(root string) (*DeviceSet, error) {
 	SetDevDir("/dev")
 	SetDevDir("/dev")
 
 
-	return &DeviceSet{
-		initialized:  false,
+	devices := &DeviceSet{
 		root:         root,
 		root:         root,
 		MetaData:     MetaData{Devices: make(map[string]*DevInfo)},
 		MetaData:     MetaData{Devices: make(map[string]*DevInfo)},
 		activeMounts: make(map[string]int),
 		activeMounts: make(map[string]int),
 	}
 	}
+
+	if err := devices.initDevmapper(); err != nil {
+		return nil, err
+	}
+
+	return devices, nil
 }
 }

+ 5 - 4
devmapper/driver.go

@@ -22,13 +22,14 @@ type Driver struct {
 }
 }
 
 
 func Init(home string) (graphdriver.Driver, error) {
 func Init(home string) (graphdriver.Driver, error) {
+	deviceSet, err := NewDeviceSet(home);
+	if err != nil {
+		return nil, err
+	}
 	d := &Driver{
 	d := &Driver{
-		DeviceSet: NewDeviceSet(home),
+		DeviceSet: deviceSet,
 		home:      home,
 		home:      home,
 	}
 	}
-	if err := d.DeviceSet.ensureInit(); err != nil {
-		return nil, err
-	}
 	return d, nil
 	return d, nil
 }
 }