From 9d7afb4c02879015b9dc18e5a5ddc20fcb0a4086 Mon Sep 17 00:00:00 2001 From: aricart Date: Fri, 28 Oct 2022 10:01:05 -0400 Subject: [PATCH] [FIX] KV delete not working correctly accross mirrors --- kv.go | 6 +++++- test/kv_test.go | 31 +++++++++++++++++++++++++++++-- 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/kv.go b/kv.go index b219cd77f..477a8b39d 100644 --- a/kv.go +++ b/kv.go @@ -665,7 +665,11 @@ func (kv *kvs) Delete(key string, opts ...DeleteOpt) error { if kv.useJSPfx { b.WriteString(kv.js.opts.pre) } - b.WriteString(kv.pre) + if kv.putPre != _EMPTY_ { + b.WriteString(kv.putPre) + } else { + b.WriteString(kv.pre) + } b.WriteString(key) // DEL op marker. For watch functionality. diff --git a/test/kv_test.go b/test/kv_test.go index f6431e0e0..f916ff7e1 100644 --- a/test/kv_test.go +++ b/test/kv_test.go @@ -898,6 +898,10 @@ func TestKeyValueMirrorCrossDomains(t *testing.T) { expectOk(t, err) _, err = kv.PutString("age", "22") expectOk(t, err) + _, err = kv.PutString("v", "v") + expectOk(t, err) + err = kv.Delete("v") + expectOk(t, err) lnc, ljs := jsClient(t, ln) defer lnc.Close() @@ -933,7 +937,7 @@ func TestKeyValueMirrorCrossDomains(t *testing.T) { checkFor(t, 2*time.Second, 15*time.Millisecond, func() error { si, err := ljs.StreamInfo("KV_MIRROR") expectOk(t, err) - if si.State.Msgs == 2 { + if si.State.Msgs == 3 { return nil } return fmt.Errorf("Did not get synched messages: %d", si.State.Msgs) @@ -946,7 +950,19 @@ func TestKeyValueMirrorCrossDomains(t *testing.T) { _, err = mkv.PutString("name", "rip") expectOk(t, err) - e, err := mkv.Get("name") + _, err = mkv.PutString("v", "vv") + expectOk(t, err) + e, err := mkv.Get("v") + expectOk(t, err) + if e.Operation() != nats.KeyValuePut { + t.Fatalf("Got wrong value: %q vs %q", e.Operation(), nats.KeyValuePut) + } + err = mkv.Delete("v") + expectOk(t, err) + _, err = mkv.Get("v") + expectErr(t, err, nats.ErrKeyNotFound) + + e, err = mkv.Get("name") expectOk(t, err) if string(e.Value()) != "rip" { t.Fatalf("Got wrong value: %q vs %q", e.Value(), "rip") @@ -967,6 +983,17 @@ func TestKeyValueMirrorCrossDomains(t *testing.T) { if string(e.Value()) != "ivan" { t.Fatalf("Got wrong value: %q vs %q", e.Value(), "ivan") } + _, err = rkv.PutString("v", "vv") + expectOk(t, err) + e, err = mkv.Get("v") + expectOk(t, err) + if e.Operation() != nats.KeyValuePut { + t.Fatalf("Got wrong value: %q vs %q", e.Operation(), nats.KeyValuePut) + } + err = rkv.Delete("v") + expectOk(t, err) + _, err = rkv.Get("v") + expectErr(t, err, nats.ErrKeyNotFound) // Shutdown cluster and test get still work. shutdownJSServerAndRemoveStorage(t, s)