Browse Source

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 năm trước cách đây
mục cha
commit
b5795749d1
2 tập tin đã thay đổi với 13 bổ sung57 xóa
  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
 }