Browse code

Merge pull request #15 from alexlarsson/dm-plugin-explicit-init

Remove devicemapper lazy initialization

Guillaume J. Charmes authored on 2013/11/14 03:46:24
Showing 2 changed files
... ...
@@ -38,7 +38,6 @@ type MetaData struct {
38 38
 type DeviceSet struct {
39 39
 	MetaData
40 40
 	sync.Mutex
41
-	initialized      bool
42 41
 	root             string
43 42
 	devicePrefix     string
44 43
 	TransactionId    uint64
... ...
@@ -450,11 +449,6 @@ func (devices *DeviceSet) AddDevice(hash, baseHash string) error {
450 450
 	devices.Lock()
451 451
 	defer devices.Unlock()
452 452
 
453
-	if err := devices.ensureInit(); err != nil {
454
-		utils.Debugf("Error init: %s\n", err)
455
-		return err
456
-	}
457
-
458 453
 	if devices.Devices[hash] != nil {
459 454
 		return fmt.Errorf("hash %s already exists", hash)
460 455
 	}
... ...
@@ -522,11 +516,6 @@ func (devices *DeviceSet) RemoveDevice(hash string) error {
522 522
 	devices.Lock()
523 523
 	defer devices.Unlock()
524 524
 
525
-	if err := devices.ensureInit(); err != nil {
526
-		utils.Debugf("\n--->Err: %s\n", err)
527
-		return err
528
-	}
529
-
530 525
 	return devices.removeDevice(hash)
531 526
 }
532 527
 
... ...
@@ -635,10 +624,6 @@ func (devices *DeviceSet) Shutdown() error {
635 635
 	utils.Debugf("[devmapper] Shutting down DeviceSet: %s", devices.root)
636 636
 	defer devices.Unlock()
637 637
 
638
-	if !devices.initialized {
639
-		return nil
640
-	}
641
-
642 638
 	for path, count := range devices.activeMounts {
643 639
 		for i := count; i > 0; i-- {
644 640
 			if err := syscall.Unmount(path, 0); err != nil {
... ...
@@ -671,10 +656,6 @@ func (devices *DeviceSet) MountDevice(hash, path string, readOnly bool) error {
671 671
 	devices.Lock()
672 672
 	defer devices.Unlock()
673 673
 
674
-	if err := devices.ensureInit(); err != nil {
675
-		return fmt.Errorf("Error initializing devmapper: %s", err)
676
-	}
677
-
678 674
 	if err := devices.activateDeviceIfNeeded(hash); err != nil {
679 675
 		return fmt.Errorf("Error activating devmapper device for '%s': %s", hash, err)
680 676
 	}
... ...
@@ -736,9 +717,6 @@ func (devices *DeviceSet) HasDevice(hash string) bool {
736 736
 	devices.Lock()
737 737
 	defer devices.Unlock()
738 738
 
739
-	if err := devices.ensureInit(); err != nil {
740
-		return false
741
-	}
742 739
 	return devices.Devices[hash] != nil
743 740
 }
744 741
 
... ...
@@ -746,10 +724,6 @@ func (devices *DeviceSet) HasInitializedDevice(hash string) bool {
746 746
 	devices.Lock()
747 747
 	defer devices.Unlock()
748 748
 
749
-	if err := devices.ensureInit(); err != nil {
750
-		return false
751
-	}
752
-
753 749
 	info := devices.Devices[hash]
754 750
 	return info != nil && info.Initialized
755 751
 }
... ...
@@ -758,10 +732,6 @@ func (devices *DeviceSet) HasActivatedDevice(hash string) bool {
758 758
 	devices.Lock()
759 759
 	defer devices.Unlock()
760 760
 
761
-	if err := devices.ensureInit(); err != nil {
762
-		return false
763
-	}
764
-
765 761
 	info := devices.Devices[hash]
766 762
 	if info == nil {
767 763
 		return false
... ...
@@ -774,11 +744,6 @@ func (devices *DeviceSet) SetInitialized(hash string) error {
774 774
 	devices.Lock()
775 775
 	defer devices.Unlock()
776 776
 
777
-	if err := devices.ensureInit(); err != nil {
778
-		utils.Debugf("\n--->Err: %s\n", err)
779
-		return err
780
-	}
781
-
782 777
 	info := devices.Devices[hash]
783 778
 	if info == nil {
784 779
 		return fmt.Errorf("Unknown device %s", hash)
... ...
@@ -800,10 +765,6 @@ func (devices *DeviceSet) Status() *Status {
800 800
 
801 801
 	status := &Status{}
802 802
 
803
-	if err := devices.ensureInit(); err != nil {
804
-		return status
805
-	}
806
-
807 803
 	status.PoolName = devices.getPoolName()
808 804
 	status.DataLoopback = path.Join(devices.loopbackDir(), "data")
809 805
 	status.MetadataLoopback = path.Join(devices.loopbackDir(), "metadata")
... ...
@@ -827,24 +788,18 @@ func (devices *DeviceSet) Status() *Status {
827 827
 	return status
828 828
 }
829 829
 
830
-func (devices *DeviceSet) ensureInit() error {
831
-	if !devices.initialized {
832
-		devices.initialized = true
833
-		if err := devices.initDevmapper(); err != nil {
834
-			utils.Debugf("\n--->Err: %s\n", err)
835
-			return err
836
-		}
837
-	}
838
-	return nil
839
-}
840
-
841
-func NewDeviceSet(root string) *DeviceSet {
830
+func NewDeviceSet(root string) (*DeviceSet, error) {
842 831
 	SetDevDir("/dev")
843 832
 
844
-	return &DeviceSet{
845
-		initialized:  false,
833
+	devices := &DeviceSet{
846 834
 		root:         root,
847 835
 		MetaData:     MetaData{Devices: make(map[string]*DevInfo)},
848 836
 		activeMounts: make(map[string]int),
849 837
 	}
838
+
839
+	if err := devices.initDevmapper(); err != nil {
840
+		return nil, err
841
+	}
842
+
843
+	return devices, nil
850 844
 }
... ...
@@ -22,13 +22,14 @@ type Driver struct {
22 22
 }
23 23
 
24 24
 func Init(home string) (graphdriver.Driver, error) {
25
+	deviceSet, err := NewDeviceSet(home);
26
+	if err != nil {
27
+		return nil, err
28
+	}
25 29
 	d := &Driver{
26
-		DeviceSet: NewDeviceSet(home),
30
+		DeviceSet: deviceSet,
27 31
 		home:      home,
28 32
 	}
29
-	if err := d.DeviceSet.ensureInit(); err != nil {
30
-		return nil, err
31
-	}
32 33
 	return d, nil
33 34
 }
34 35