From ad9118c696c0953ec48eec15ea4b7546296d7c20 Mon Sep 17 00:00:00 2001 From: Vivek Goyal Date: Wed, 3 Dec 2014 13:06:43 -0500 Subject: [PATCH] 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 --- daemon/graphdriver/devmapper/deviceset.go | 76 ++++++++++++++--------- 1 file changed, 46 insertions(+), 30 deletions(-) diff --git a/daemon/graphdriver/devmapper/deviceset.go b/daemon/graphdriver/devmapper/deviceset.go index 7963854565..713d1d60bc 100644 --- a/daemon/graphdriver/devmapper/deviceset.go +++ b/daemon/graphdriver/devmapper/deviceset.go @@ -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 }