Просмотр исходного кода

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 лет назад
Родитель
Сommit
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 {
 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

@@ -23,13 +23,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
 }
 }