func Init(root string, config map[string]string) (convoydriver.ConvoyDriver, error) { devicemapper.LogInitVerbose(1) devicemapper.LogInit(&DMLogger{}) if err := checkEnvironment(); err != nil { return nil, err } if err := util.MkdirIfNotExists(root); err != nil { return nil, err } dev := &Device{ Root: root, } exists, err := util.ObjectExists(dev) if err != nil { return nil, err } if exists { if err := util.ObjectLoad(dev); err != nil { return nil, err } d := &Driver{ Mutex: &sync.Mutex{}, Device: *dev, } if err := d.activatePool(); err != nil { return nil, err } if err := d.remountVolumes(); err != nil { return nil, err } return d, nil } dev, err = verifyConfig(config) if err != nil { return nil, err } dev.Root = root dataDev, err := os.Open(dev.DataDevice) if err != nil { return nil, err } defer dataDev.Close() metadataDev, err := os.Open(dev.MetadataDevice) if err != nil { return nil, err } defer metadataDev.Close() thinpSize, err := devicemapper.GetBlockDeviceSize(dataDev) if err != nil { return nil, err } dev.ThinpoolSize = int64(thinpSize) dev.LastDevID = 0 if err = createPool(filepath.Base(dev.ThinpoolDevice), dataDev, metadataDev, uint32(dev.ThinpoolBlockSize)); err != nil { return nil, err } if err = util.ObjectSave(dev); err != nil { return nil, err } d := &Driver{ Mutex: &sync.Mutex{}, Device: *dev, } return d, nil }
func Init(root, cfgName string, config map[string]string) (drivers.Driver, error) { devicemapper.LogInitVerbose(1) devicemapper.LogInit(&DMLogger{}) if supported := devicemapper.UdevSetSyncSupport(true); !supported { return nil, fmt.Errorf("Udev sync is not supported. Cannot proceed.") } if util.ConfigExists(root, cfgName) { dev := Device{} err := util.LoadConfig(root, cfgName, &dev) d := &Driver{ Mutex: &sync.Mutex{}, } if err != nil { return d, err } d.Device = dev d.configName = cfgName d.root = root if err := d.activatePool(); err != nil { return d, err } return d, nil } dev, err := verifyConfig(config) if err != nil { return nil, err } dev.Root = root dataDev, err := os.Open(dev.DataDevice) if err != nil { return nil, err } defer dataDev.Close() metadataDev, err := os.Open(dev.MetadataDevice) if err != nil { return nil, err } defer metadataDev.Close() thinpSize, err := devicemapper.GetBlockDeviceSize(dataDev) if err != nil { return nil, err } dev.ThinpoolSize = int64(thinpSize) dev.LastDevID = 0 err = createPool(filepath.Base(dev.ThinpoolDevice), dataDev, metadataDev, uint32(dev.ThinpoolBlockSize)) if err != nil { return nil, err } err = util.SaveConfig(root, cfgName, &dev) if err != nil { return nil, err } d := &Driver{ root: root, configName: cfgName, Device: *dev, Mutex: &sync.Mutex{}, } log.Debug("Init done") return d, nil }