mirror of
https://github.com/clearlinux/docker.git
synced 2026-08-26 18:17:24 +00:00
Merge pull request #16799 from rhvgoyal/code-reorg
devmapper: Break down setupBaseImage() function into smaller pieces
This commit is contained in:
@@ -777,46 +777,7 @@ func (devices *DeviceSet) saveBaseDeviceUUID(baseInfo *devInfo) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (devices *DeviceSet) setupBaseImage() error {
|
||||
oldInfo, _ := devices.lookupDeviceWithLock("")
|
||||
if oldInfo != nil && oldInfo.Initialized {
|
||||
// If BaseDeviceUUID is nil (upgrade case), save it and
|
||||
// return success.
|
||||
if devices.BaseDeviceUUID == "" {
|
||||
if err := devices.saveBaseDeviceUUID(oldInfo); err != nil {
|
||||
return fmt.Errorf("Could not query and save base device UUID:%v", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
if err := devices.verifyBaseDeviceUUID(oldInfo); err != nil {
|
||||
return fmt.Errorf("Base Device UUID verification failed. Possibly using a different thin pool than last invocation:%v", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
if oldInfo != nil && !oldInfo.Initialized {
|
||||
logrus.Debugf("Removing uninitialized base image")
|
||||
if err := devices.DeleteDevice(""); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
if devices.thinPoolDevice != "" && oldInfo == nil {
|
||||
_, transactionID, dataUsed, _, _, _, err := devices.poolStatus()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if dataUsed != 0 {
|
||||
return fmt.Errorf("Unable to take ownership of thin-pool (%s) that already has used data blocks",
|
||||
devices.thinPoolDevice)
|
||||
}
|
||||
if transactionID != 0 {
|
||||
return fmt.Errorf("Unable to take ownership of thin-pool (%s) with non-zero transaction ID",
|
||||
devices.thinPoolDevice)
|
||||
}
|
||||
}
|
||||
|
||||
func (devices *DeviceSet) createBaseImage() error {
|
||||
logrus.Debugf("Initializing base device-mapper thin volume")
|
||||
|
||||
// Create initial device
|
||||
@@ -848,6 +809,78 @@ func (devices *DeviceSet) setupBaseImage() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (devices *DeviceSet) checkThinPool() error {
|
||||
_, transactionID, dataUsed, _, _, _, err := devices.poolStatus()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if dataUsed != 0 {
|
||||
return fmt.Errorf("Unable to take ownership of thin-pool (%s) that already has used data blocks",
|
||||
devices.thinPoolDevice)
|
||||
}
|
||||
if transactionID != 0 {
|
||||
return fmt.Errorf("Unable to take ownership of thin-pool (%s) with non-zero transaction ID",
|
||||
devices.thinPoolDevice)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Base image is initialized properly. Either save UUID for first time (for
|
||||
// upgrade case or verify UUID.
|
||||
func (devices *DeviceSet) setupVerifyBaseImageUUID(baseInfo *devInfo) error {
|
||||
// If BaseDeviceUUID is nil (upgrade case), save it and return success.
|
||||
if devices.BaseDeviceUUID == "" {
|
||||
if err := devices.saveBaseDeviceUUID(baseInfo); err != nil {
|
||||
return fmt.Errorf("Could not query and save base device UUID:%v", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
if err := devices.verifyBaseDeviceUUID(baseInfo); err != nil {
|
||||
return fmt.Errorf("Base Device UUID verification failed. Possibly using a different thin pool than last invocation:%v", err)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (devices *DeviceSet) setupBaseImage() error {
|
||||
oldInfo, _ := devices.lookupDeviceWithLock("")
|
||||
|
||||
// base image already exists. If it is initialized properly, do UUID
|
||||
// verification and return. Otherwise remove image and set it up
|
||||
// fresh.
|
||||
|
||||
if oldInfo != nil {
|
||||
if oldInfo.Initialized {
|
||||
if err := devices.setupVerifyBaseImageUUID(oldInfo); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
logrus.Debugf("Removing uninitialized base image")
|
||||
if err := devices.DeleteDevice(""); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
// If we are setting up base image for the first time, make sure
|
||||
// thin pool is empty.
|
||||
if devices.thinPoolDevice != "" && oldInfo == nil {
|
||||
if err := devices.checkThinPool(); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
// Create new base image device
|
||||
if err := devices.createBaseImage(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func setCloseOnExec(name string) {
|
||||
if fileInfos, _ := ioutil.ReadDir("/proc/self/fd"); fileInfos != nil {
|
||||
for _, i := range fileInfos {
|
||||
|
||||
Reference in New Issue
Block a user