Bläddra i källkod

devmapper: Use transactions during device deletion

Use transaction logic during device deletion and do rollback if transaction
is not complete. Following is the sequence of events.

- Open transaction and save to metafile
- Delete device from pool
- Delete device metadata file from disk
- Close Transaction

If docker crashes without closing transaction then rollback will take
place upon next docker start.
 
Signed-off-by: Vivek Goyal <vgoyal@redhat.com>
Vivek Goyal 10 år sedan
förälder
incheckning
17b75a21a6
1 ändrade filer med 9 tillägg och 0 borttagningar
  1. 9 0
      daemon/graphdriver/devmapper/deviceset.go

+ 9 - 0
daemon/graphdriver/devmapper/deviceset.go

@@ -1128,6 +1128,11 @@ func (devices *DeviceSet) deleteDevice(info *DevInfo) error {
 		}
 	}
 
+	if err := devices.openTransaction(info.Hash, info.DeviceId); err != nil {
+		log.Debugf("Error opening transaction hash = %s deviceId = %d", "", info.DeviceId)
+		return err
+	}
+
 	if err := devicemapper.DeleteDevice(devices.getPoolDevName(), info.DeviceId); err != nil {
 		log.Debugf("Error deleting device: %s", err)
 		return err
@@ -1137,6 +1142,10 @@ func (devices *DeviceSet) deleteDevice(info *DevInfo) error {
 		return err
 	}
 
+	if err := devices.closeTransaction(); err != nil {
+		return err
+	}
+
 	devices.markDeviceIdFree(info.DeviceId)
 
 	return nil