From 90139243fef645d36f4e571657c4ecbf4548aed5 Mon Sep 17 00:00:00 2001 From: Ahsan Barkati Date: Wed, 31 May 2023 22:06:37 +0530 Subject: [PATCH] fix(multi-tenancy): check existence before banning namespace (#7887) Before, the deleting a non-existent namespace would just ban the namespace. This would essentially not allow creating namespaces after this banned namespace. Now, we fail instead of banning a namespace that has not been even created yet. Co-authored-by: Aman Mangal --- edgraph/multi_tenancy_ee.go | 3 +++ systest/multi-tenancy/basic_test.go | 9 +++++++++ 2 files changed, 12 insertions(+) diff --git a/edgraph/multi_tenancy_ee.go b/edgraph/multi_tenancy_ee.go index 3bda6d1161e..d212df0b688 100644 --- a/edgraph/multi_tenancy_ee.go +++ b/edgraph/multi_tenancy_ee.go @@ -138,5 +138,8 @@ func createGuardianAndGroot(ctx context.Context, namespace uint64, passwd string // Authorization is handled by middlewares. func (s *Server) DeleteNamespace(ctx context.Context, namespace uint64) error { glog.Info("Deleting namespace", namespace) + if _, ok := schema.State().Namespaces()[namespace]; !ok { + return errors.Errorf("error deleting non-existing namespace %#x", namespace) + } return worker.ProcessDeleteNsRequest(ctx, namespace) } diff --git a/systest/multi-tenancy/basic_test.go b/systest/multi-tenancy/basic_test.go index 6e8656bdda5..227b5c8d23f 100644 --- a/systest/multi-tenancy/basic_test.go +++ b/systest/multi-tenancy/basic_test.go @@ -292,6 +292,15 @@ func TestDeleteNamespace(t *testing.T) { err = testutil.DeleteNamespace(t, galaxyToken, x.GalaxyNamespace) require.Error(t, err) require.Contains(t, err.Error(), "Cannot delete default namespace") + + // Deleting a non-existent namespace should error out + err = testutil.DeleteNamespace(t, galaxyToken, 20) + require.Error(t, err) + require.Contains(t, err.Error(), "error deleting non-existing namespace") + for i := 0; i < 20; i++ { + ns, err = testutil.CreateNamespaceWithRetry(t, galaxyToken) + require.NoError(t, err) + } } type liveOpts struct {