diff --git a/rules/namespace.go b/rules/namespace.go index d4b1748..e068c83 100644 --- a/rules/namespace.go +++ b/rules/namespace.go @@ -174,8 +174,9 @@ func (n *Namespace) revive() error { return errNoNamespaceSnapshots } - v := n.snapshots[len(n.snapshots)-1].forRuleSetVersion - snapshot := NamespaceSnapshot{tombstoned: false, forRuleSetVersion: v} + tombstonedRuleSetVersion := n.snapshots[len(n.snapshots)-1].forRuleSetVersion + // NB: The revived ruleset version is one after the tombstoned ruleset version. + snapshot := NamespaceSnapshot{tombstoned: false, forRuleSetVersion: tombstonedRuleSetVersion + 1} n.snapshots = append(n.snapshots, snapshot) return nil } @@ -319,7 +320,7 @@ func (nss *Namespaces) AddNamespace(nsName string) (bool, error) { return false, nil } - // Revive the namespace + // Revive the namespace. if err = existing.revive(); err != nil { return false, fmt.Errorf(namespaceActionErrorFmt, "revive", nsName, err) } @@ -327,14 +328,14 @@ func (nss *Namespaces) AddNamespace(nsName string) (bool, error) { return true, nil } -// DeleteNamespace tombstones the given namespace mapping it to the given RuleSet version + 1 -func (nss *Namespaces) DeleteNamespace(nsName string, forRuleSetVersion int) error { +// DeleteNamespace tombstones the given namespace mapping it to the next ruleset version. +func (nss *Namespaces) DeleteNamespace(nsName string, currRuleSetVersion int) error { existing, err := nss.Namespace(nsName) if err != nil { return fmt.Errorf(namespaceActionErrorFmt, "delete", nsName, err) } - if err := existing.markTombstoned(forRuleSetVersion + 1); err != nil { + if err := existing.markTombstoned(currRuleSetVersion + 1); err != nil { return fmt.Errorf(namespaceActionErrorFmt, "delete", nsName, err) } diff --git a/rules/namespace_test.go b/rules/namespace_test.go index 393c72e..77807d3 100644 --- a/rules/namespace_test.go +++ b/rules/namespace_test.go @@ -394,24 +394,30 @@ func TestNamespaceRevive(t *testing.T) { nss, err := NewNamespaces(1, testNss) require.NoError(t, err) - _, err = nss.Namespace("foo") + ns, err := nss.Namespace("foo") require.NoError(t, err) + require.Equal(t, len(ns.snapshots), 1) + require.False(t, ns.Tombstoned()) + require.Equal(t, ns.snapshots[0].forRuleSetVersion, 1) err = nss.DeleteNamespace("foo", 4) require.NoError(t, err) - - ns, err := nss.Namespace("foo") + ns, err = nss.Namespace("foo") require.NoError(t, err) + require.Equal(t, len(ns.snapshots), 2) require.True(t, ns.Tombstoned()) + require.Equal(t, ns.snapshots[0].forRuleSetVersion, 1) + require.Equal(t, ns.snapshots[1].forRuleSetVersion, 5) revived, err := nss.AddNamespace("foo") require.NoError(t, err) require.True(t, revived) - ns, err = nss.Namespace("foo") require.NoError(t, err) - require.Equal(t, ns.snapshots[len(ns.snapshots)-1].forRuleSetVersion, 5) require.Equal(t, len(ns.snapshots), 3) + require.Equal(t, ns.snapshots[0].forRuleSetVersion, 1) + require.Equal(t, ns.snapshots[1].forRuleSetVersion, 5) + require.Equal(t, ns.snapshots[2].forRuleSetVersion, 6) } func TestNamespaceDelete(t *testing.T) {