From 9feb8401e1d0241fa80677766c039c6950a8635a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Han?= Date: Fri, 6 Mar 2020 12:37:44 +0100 Subject: [PATCH 1/2] ceph: only delete pool if exists MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We have seen cases where the pool is already gone and a deletion timestamp is set on the CephBlockPool CR. Signed-off-by: Sébastien Han --- pkg/operator/ceph/pool/controller.go | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/pkg/operator/ceph/pool/controller.go b/pkg/operator/ceph/pool/controller.go index c5b413a8d..22073984d 100644 --- a/pkg/operator/ceph/pool/controller.go +++ b/pkg/operator/ceph/pool/controller.go @@ -235,8 +235,19 @@ func createPool(context *clusterd.Context, p *cephv1.CephBlockPool) error { // Delete the pool func deletePool(context *clusterd.Context, p *cephv1.CephBlockPool) error { - if err := cephclient.DeletePool(context, p.Namespace, p.Name); err != nil { - return errors.Wrapf(err, "failed to delete pool %q", p.Name) + pools, err := cephclient.ListPoolSummaries(context, p.Namespace) + if err != nil { + return errors.Wrapf(err, "failed to list pools") + } + + // Only delete the pool if it exists... + for _, pool := range pools { + if pool.Name == p.Name { + err := cephclient.DeletePool(context, p.Namespace, p.Name) + if err != nil { + return errors.Wrapf(err, "failed to delete pool %q", p.Name) + } + } } return nil From fd33d64b4f58b5fa691b41498b8d083ec5d665f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Han?= Date: Fri, 6 Mar 2020 12:38:58 +0100 Subject: [PATCH 2/2] ci: do not hide pool deletion error MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Print the error if any. Signed-off-by: Sébastien Han --- tests/framework/clients/pool.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tests/framework/clients/pool.go b/tests/framework/clients/pool.go index 6c46f0798..9bca1d0d9 100644 --- a/tests/framework/clients/pool.go +++ b/tests/framework/clients/pool.go @@ -111,7 +111,10 @@ func (p *PoolOperation) DeletePool(blockClient *BlockOperation, namespace, poolN for _, blockImage := range blockImagesList { if poolName == blockImage.PoolName { logger.Infof("force deleting block image %q in pool %q", blockImage, poolName) - blockClient.DeleteBlockImage(blockImage, namespace) + err := blockClient.DeleteBlockImage(blockImage, namespace) + if err != nil { + logger.Infof("failed deleting image %q from %q. %v", blockImage, poolName, err) + } } }