diff --git a/pkg/compute/storagedrivers/clvm.go b/pkg/compute/storagedrivers/clvm.go index 1120313bca..e64ce57366 100644 --- a/pkg/compute/storagedrivers/clvm.go +++ b/pkg/compute/storagedrivers/clvm.go @@ -48,6 +48,20 @@ func (s *SCLVMStorageDriver) ValidateCreateData(ctx context.Context, userCred mc if len(input.CLVMVgName) == 0 { return httperrors.NewMissingParameterError("clvm_vg_name") } + storages := []models.SStorage{} + q := models.StorageManager.Query().Equals("storage_type", api.STORAGE_CLVM) + err := db.FetchModelObjects(models.StorageManager, q, &storages) + if err != nil { + return httperrors.NewGeneralError(err) + } + + for i := 0; i < len(storages); i++ { + vgName, _ := storages[i].StorageConf.GetString("clvm_vg_name") + if input.CLVMVgName == vgName { + return httperrors.NewDuplicateResourceError("This CLVM Storage[%s/%s] has already exist", storages[i].Name, input.CLVMVgName) + } + } + input.StorageConf = jsonutils.NewDict() input.StorageConf.Set("clvm_vg_name", jsonutils.NewString(input.CLVMVgName)) return nil diff --git a/pkg/compute/storagedrivers/slvm.go b/pkg/compute/storagedrivers/slvm.go index 6820a56672..df77a76ba0 100644 --- a/pkg/compute/storagedrivers/slvm.go +++ b/pkg/compute/storagedrivers/slvm.go @@ -62,6 +62,20 @@ func (s *SSLVMStorageDriver) ValidateCreateData(ctx context.Context, userCred mc input.MasterHost = host.GetId() } + storages := []models.SStorage{} + q := models.StorageManager.Query().Equals("storage_type", api.STORAGE_SLVM) + err := db.FetchModelObjects(models.StorageManager, q, &storages) + if err != nil { + return httperrors.NewGeneralError(err) + } + + for i := 0; i < len(storages); i++ { + vgName, _ := storages[i].StorageConf.GetString("slvm_vg_name") + if input.SLVMVgName == vgName { + return httperrors.NewDuplicateResourceError("This SLVM Storage[%s/%s] has already exist", storages[i].Name, input.SLVMVgName) + } + } + input.StorageConf = jsonutils.NewDict() input.StorageConf.Set("slvm_vg_name", jsonutils.NewString(input.SLVMVgName)) if input.Lvmlockd { diff --git a/pkg/hostman/storageman/imagecache_lvm.go b/pkg/hostman/storageman/imagecache_lvm.go index 3f23b9b259..0160e8963b 100644 --- a/pkg/hostman/storageman/imagecache_lvm.go +++ b/pkg/hostman/storageman/imagecache_lvm.go @@ -73,6 +73,13 @@ func (c *SLVMImageCache) GetDesc() *remotefile.SImageDesc { func (c *SLVMImageCache) Load() error { log.Debugf("loading lvm imagecache %s", c.GetPath()) + if c.Manager.Lvmlockd() { + err := lvmutils.LVActive(c.GetPath(), true, false) + if err != nil { + return errors.Wrap(err, "lvmlockd set lv shared") + } + } + origin, err := qemuimg.NewQemuImage(c.GetPath()) if err != nil { return errors.Wrap(err, "NewQemuImage") diff --git a/pkg/hostman/storageman/imagecachemanager_lvm.go b/pkg/hostman/storageman/imagecachemanager_lvm.go index a32db88544..1cbcd16d47 100644 --- a/pkg/hostman/storageman/imagecachemanager_lvm.go +++ b/pkg/hostman/storageman/imagecachemanager_lvm.go @@ -81,11 +81,8 @@ func (c *SLVMImageCacheManager) loadCache(ctx context.Context) { } func (c *SLVMImageCacheManager) LoadImageCache(imageId string) { - imageCache := NewLocalImageCache(imageId, c) + imageCache := NewLVMImageCache(imageId, c) if err := imageCache.Load(); err == nil { - if c.lvmlockd { - lvmutils.LVActive(imageCache.GetPath(), true, false) - } c.cachedImages[imageId] = imageCache } else { log.Errorf("failed load cache %s %s", c.GetPath(), err)