devmapper: Create new helper function for device and snap creation

Create two new helper functions for device and snap device creation. These
functions will not only create the device and also register the device.

Again, makes the code structure better and keeps all transaction logic
contained to functions instead of spilling over into functions like
setupBaseImage or AddDevice().

Just the code reorganization. No functionality change.

Signed-off-by: Vivek Goyal <vgoyal@redhat.com>
This commit is contained in:
Vivek Goyal 2014-12-03 13:06:43 -05:00 committed by root
parent 442247927b
commit ad9118c696

View file

@ -427,6 +427,28 @@ func (devices *DeviceSet) createDevice(deviceId *int) error {
return nil
}
func (devices *DeviceSet) createRegisterDevice(hash string) (*DevInfo, error) {
deviceId := devices.NextDeviceId
if err := devices.createDevice(&deviceId); err != nil {
return nil, err
}
transactionId := devices.allocateTransactionId()
log.Debugf("Registering device (id %v) with FS size %v", deviceId, devices.baseFsSize)
info, err := devices.registerDevice(deviceId, hash, devices.baseFsSize, transactionId)
if err != nil {
_ = devicemapper.DeleteDevice(devices.getPoolDevName(), deviceId)
return nil, err
}
if err := devices.updatePoolTransactionId(); err != nil {
devices.unregisterDevice(deviceId, hash)
devicemapper.DeleteDevice(devices.getPoolDevName(), deviceId)
return nil, err
}
return info, nil
}
func (devices *DeviceSet) createSnapDevice(baseInfo *DevInfo, deviceId *int) error {
log.Debugf("[deviceset] createSnapDevice() DeviceId=%d", *deviceId)
defer log.Debugf("[deviceset] createSnapDevice() END DeviceId=%d", *deviceId)
@ -448,6 +470,28 @@ func (devices *DeviceSet) createSnapDevice(baseInfo *DevInfo, deviceId *int) err
return nil
}
func (devices *DeviceSet) createRegisterSnapDevice(hash string, baseInfo *DevInfo) error {
deviceId := devices.NextDeviceId
if err := devices.createSnapDevice(baseInfo, &deviceId); err != nil {
log.Debugf("Error creating snap device: %s", err)
return err
}
transactionId := devices.allocateTransactionId()
if _, err := devices.registerDevice(deviceId, hash, baseInfo.Size, transactionId); err != nil {
devicemapper.DeleteDevice(devices.getPoolDevName(), deviceId)
log.Debugf("Error registering device: %s", err)
return err
}
if err := devices.updatePoolTransactionId(); err != nil {
devices.unregisterDevice(deviceId, hash)
devicemapper.DeleteDevice(devices.getPoolDevName(), deviceId)
return err
}
return nil
}
func (devices *DeviceSet) loadMetadata(hash string) *DevInfo {
info := &DevInfo{Hash: hash, devices: devices}
@ -494,22 +538,8 @@ func (devices *DeviceSet) setupBaseImage() error {
log.Debugf("Initializing base device-mapper thin volume")
// Create initial device
deviceId := devices.NextDeviceId
if err := devices.createDevice(&deviceId); err != nil {
return err
}
transactionId := devices.allocateTransactionId()
log.Debugf("Registering base device (id %v) with FS size %v", deviceId, devices.baseFsSize)
info, err := devices.registerDevice(deviceId, "", devices.baseFsSize, transactionId)
info, err := devices.createRegisterDevice("")
if err != nil {
_ = devicemapper.DeleteDevice(devices.getPoolDevName(), deviceId)
return err
}
if err := devices.updatePoolTransactionId(); err != nil {
devices.unregisterDevice(deviceId, "")
devicemapper.DeleteDevice(devices.getPoolDevName(), deviceId)
return err
}
@ -826,24 +856,10 @@ func (devices *DeviceSet) AddDevice(hash, baseHash string) error {
return fmt.Errorf("device %s already exists", hash)
}
deviceId := devices.NextDeviceId
if err := devices.createSnapDevice(baseInfo, &deviceId); err != nil {
log.Debugf("Error creating snap device: %s", err)
if err := devices.createRegisterSnapDevice(hash, baseInfo); err != nil {
return err
}
transactionId := devices.allocateTransactionId()
if _, err := devices.registerDevice(deviceId, hash, baseInfo.Size, transactionId); err != nil {
devicemapper.DeleteDevice(devices.getPoolDevName(), deviceId)
log.Debugf("Error registering device: %s", err)
return err
}
if err := devices.updatePoolTransactionId(); err != nil {
devices.unregisterDevice(deviceId, hash)
devicemapper.DeleteDevice(devices.getPoolDevName(), deviceId)
return err
}
return nil
}