Переглянути джерело

Remove devicemapper lazy initialization

We now always initialize devicemapper on startup, so
no need for the code that did lazy initialization, we
just delete it.
Alexander Larsson 11 роки тому
батько
коміт
b5795749d1
2 змінених файлів з 13 додано та 57 видалено
  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 {
 	MetaData
 	sync.Mutex
-	initialized      bool
 	root             string
 	devicePrefix     string
 	TransactionId    uint64
@@ -450,11 +449,6 @@ func (devices *DeviceSet) AddDevice(hash, baseHash string) error {
 	devices.Lock()
 	defer devices.Unlock()
 
-	if err := devices.ensureInit(); err != nil {
-		utils.Debugf("Error init: %s\n", err)
-		return err
-	}
-
 	if devices.Devices[hash] != nil {
 		return fmt.Errorf("hash %s already exists", hash)
 	}
@@ -522,11 +516,6 @@ func (devices *DeviceSet) RemoveDevice(hash string) error {
 	devices.Lock()
 	defer devices.Unlock()
 
-	if err := devices.ensureInit(); err != nil {
-		utils.Debugf("\n--->Err: %s\n", err)
-		return err
-	}
-
 	return devices.removeDevice(hash)
 }
 
@@ -635,10 +624,6 @@ func (devices *DeviceSet) Shutdown() error {
 	utils.Debugf("[devmapper] Shutting down DeviceSet: %s", devices.root)
 	defer devices.Unlock()
 
-	if !devices.initialized {
-		return nil
-	}
-
 	for path, count := range devices.activeMounts {
 		for i := count; i > 0; i-- {
 			if err := syscall.Unmount(path, 0); err != nil {
@@ -671,10 +656,6 @@ func (devices *DeviceSet) MountDevice(hash, path string, readOnly bool) error {
 	devices.Lock()
 	defer devices.Unlock()
 
-	if err := devices.ensureInit(); err != nil {
-		return fmt.Errorf("Error initializing devmapper: %s", err)
-	}
-
 	if err := devices.activateDeviceIfNeeded(hash); err != nil {
 		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()
 	defer devices.Unlock()
 
-	if err := devices.ensureInit(); err != nil {
-		return false
-	}
 	return devices.Devices[hash] != nil
 }
 
@@ -746,10 +724,6 @@ func (devices *DeviceSet) HasInitializedDevice(hash string) bool {
 	devices.Lock()
 	defer devices.Unlock()
 
-	if err := devices.ensureInit(); err != nil {
-		return false
-	}
-
 	info := devices.Devices[hash]
 	return info != nil && info.Initialized
 }
@@ -758,10 +732,6 @@ func (devices *DeviceSet) HasActivatedDevice(hash string) bool {
 	devices.Lock()
 	defer devices.Unlock()
 
-	if err := devices.ensureInit(); err != nil {
-		return false
-	}
-
 	info := devices.Devices[hash]
 	if info == nil {
 		return false
@@ -774,11 +744,6 @@ func (devices *DeviceSet) SetInitialized(hash string) error {
 	devices.Lock()
 	defer devices.Unlock()
 
-	if err := devices.ensureInit(); err != nil {
-		utils.Debugf("\n--->Err: %s\n", err)
-		return err
-	}
-
 	info := devices.Devices[hash]
 	if info == nil {
 		return fmt.Errorf("Unknown device %s", hash)
@@ -800,10 +765,6 @@ func (devices *DeviceSet) Status() *Status {
 
 	status := &Status{}
 
-	if err := devices.ensureInit(); err != nil {
-		return status
-	}
-
 	status.PoolName = devices.getPoolName()
 	status.DataLoopback = path.Join(devices.loopbackDir(), "data")
 	status.MetadataLoopback = path.Join(devices.loopbackDir(), "metadata")
@@ -827,24 +788,18 @@ func (devices *DeviceSet) Status() *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")
 
-	return &DeviceSet{
-		initialized:  false,
+	devices := &DeviceSet{
 		root:         root,
 		MetaData:     MetaData{Devices: make(map[string]*DevInfo)},
 		activeMounts: make(map[string]int),
 	}
+
+	if err := devices.initDevmapper(); err != nil {
+		return nil, err
+	}
+
+	return devices, nil
 }

+ 5 - 4
devmapper/driver.go

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