Skip to content

Commit

Permalink
Use the new function to check the variable befroe deleting
Browse files Browse the repository at this point in the history
  • Loading branch information
hwchiu committed Aug 29, 2018
1 parent d91527a commit 425ad1e
Show file tree
Hide file tree
Showing 5 changed files with 32 additions and 31 deletions.
11 changes: 6 additions & 5 deletions src/server/handler_storage.go
Original file line number Diff line number Diff line change
Expand Up @@ -151,12 +151,13 @@ func deleteStorage(ctx *web.Context) {
return
}

if err := storageProvider.ValidateBeforeDeleting(sp, &storage); err != nil {
response.BadRequest(req.Request, resp.ResponseWriter, err)
return
}

if err := storageProvider.DeleteStorage(sp, &storage); err != nil {
if err, ok := err.(*storageprovider.BusyError); !ok {
response.InternalServerError(req.Request, resp.ResponseWriter, err)
} else {
response.BadRequest(req.Request, resp.ResponseWriter, err)
}
response.InternalServerError(req.Request, resp.ResponseWriter, err)
return
}

Expand Down
9 changes: 7 additions & 2 deletions src/storageprovider/fake.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,21 +12,26 @@ type FakeStorageProvider struct {
}

// ValidateBeforeCreating will validate StorageProvider before creating
func (fake FakeStorageProvider) ValidateBeforeCreating(sp *serviceprovider.Container, net *entity.Storage) error {
func (fake FakeStorageProvider) ValidateBeforeCreating(sp *serviceprovider.Container, storage *entity.Storage) error {
if fake.FakeParameter == "" {
return fmt.Errorf("Fail to validate but don't worry, I'm fake storage provider")
}
return nil
}

// CreateStorage will create storage
func (fake FakeStorageProvider) CreateStorage(sp *serviceprovider.Container, net *entity.Storage) error {
func (fake FakeStorageProvider) CreateStorage(sp *serviceprovider.Container, storage *entity.Storage) error {
if fake.IWantFail {
return fmt.Errorf("Fail to create storage but don't worry, I'm fake storage provider")
}
return nil
}

// ValidateBeforeDeleting will validate StorageProvider before deleting
func (fake FakeStorageProvider) ValidateBeforeDeleting(sp *serviceprovider.Container, net *entity.Storage) error {
return nil
}

// DeleteStorage will delete storage
func (fake FakeStorageProvider) DeleteStorage(sp *serviceprovider.Container, net *entity.Storage) error {
if fake.IWantFail {
Expand Down
29 changes: 17 additions & 12 deletions src/storageprovider/nfs.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,23 @@ func (nfs NFSStorageProvider) ValidateBeforeCreating(sp *serviceprovider.Contain
return nil
}

// ValidateBeforeDeleting will validate StorageProvider before deleting
func (nfs NFSStorageProvider) ValidateBeforeDeleting(sp *serviceprovider.Container, storage *entity.Storage) error {
//If the storage is used by some volume, we can't delete it.
q := bson.M{"storageName": storage.Name}
session := sp.Mongo.NewSession()
defer session.Close()

count, err := session.Count(entity.VolumeCollectionName, q)
if err != nil {
return err
} else if count > 0 {
return fmt.Errorf("The StorageName %s can't be deleted, since there're some volume still use it", storage.Name)
}

return nil
}

func getDeployment(name string, storage *entity.Storage) *appsv1.Deployment {
var replicas int32
replicas = 1
Expand Down Expand Up @@ -129,18 +146,6 @@ func (nfs NFSStorageProvider) DeleteStorage(sp *serviceprovider.Container, stora
deployName := NFSProvisionerPrefix + storage.ID.Hex()
storageName := NFSStorageClassPrefix + storage.ID.Hex()

//If the storage is used by some volume, we can't delete it.
q := bson.M{"storageName": storage.Name}
session := sp.Mongo.NewSession()
defer session.Close()

count, err := session.Count(entity.VolumeCollectionName, q)
if err != nil {
return err
} else if count > 0 {
return &BusyError{storage.Name}
}

//Delete StorageClass
if err := sp.KubeCtl.DeleteStorageClass(storageName); err != nil {
return err
Expand Down
5 changes: 1 addition & 4 deletions src/storageprovider/nfs_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -147,10 +147,7 @@ func (suite *StorageTestSuite) TestDeleteStorageFail() {
suite.NoError(err)
sp = sp.(NFSStorageProvider)

err = sp.DeleteStorage(suite.sp, storage)
suite.Error(err)
err, ok := err.(*BusyError)
suite.True(ok)
err = sp.ValidateBeforeDeleting(suite.sp, storage)
suite.Error(err)
}

Expand Down
9 changes: 1 addition & 8 deletions src/storageprovider/storage.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (
type StorageProvider interface {
ValidateBeforeCreating(sp *serviceprovider.Container, net *entity.Storage) error
CreateStorage(sp *serviceprovider.Container, net *entity.Storage) error
ValidateBeforeDeleting(sp *serviceprovider.Container, net *entity.Storage) error
DeleteStorage(sp *serviceprovider.Container, net *entity.Storage) error
}

Expand All @@ -24,11 +25,3 @@ func GetStorageProvider(storage *entity.Storage) (StorageProvider, error) {
return nil, fmt.Errorf("Unsupported Storage Type %s", storage.Type)
}
}

type BusyError struct {
name string
}

func (e *BusyError) Error() string {
return fmt.Sprintf("The StorageName %s can't be deleted, since there're some volume still use it", e.name)
}

0 comments on commit 425ad1e

Please sign in to comment.