Skip to content

Commit

Permalink
Merge pull request #1135 from nats-io/issue-1134
Browse files Browse the repository at this point in the history
Add ErrKeyExists on kv.Create
  • Loading branch information
wallyqs committed Nov 16, 2022
2 parents 1cc4427 + 7230ca7 commit 5044b6e
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 0 deletions.
9 changes: 9 additions & 0 deletions kv.go
Original file line number Diff line number Diff line change
Expand Up @@ -297,6 +297,7 @@ var (
ErrKeyDeleted = errors.New("nats: key was deleted")
ErrHistoryToLarge = errors.New("nats: history limited to a max of 64")
ErrNoKeysFound = errors.New("nats: no keys found")
ErrKeyExists = errors.New("nats: key exists")
)

const (
Expand Down Expand Up @@ -629,6 +630,14 @@ func (kv *kvs) Create(key string, value []byte) (revision uint64, err error) {
return kv.Update(key, value, e.Revision())
}

// Check if the expected last subject sequence is not zero which implies
// the key already exists.
if aerr, ok := err.(*APIError); ok {
if aerr.ErrorCode == 10071 {
return 0, ErrKeyExists
}
}

return 0, err
}

Expand Down
23 changes: 23 additions & 0 deletions kv_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -203,3 +203,26 @@ func TestKeyValueMirrorDirectGet(t *testing.T) {
}
}
}

func TestKeyValueCreate(t *testing.T) {
s := RunBasicJetStreamServer()
defer shutdownJSServerAndRemoveStorage(t, s)

nc, js := jsClient(t, s)
defer nc.Close()

kv, err := js.CreateKeyValue(&KeyValueConfig{Bucket: "TEST"})
if err != nil {
t.Fatalf("Error creating kv: %v", err)
}

_, err = kv.Create("key", []byte("1"))
if err != nil {
t.Fatalf("Error creating key: %v", err)
}

_, err = kv.Create("key", []byte("1"))
if err != ErrKeyExists {
t.Fatalf("Expected ErrKeyExists, got: %v", err)
}
}

0 comments on commit 5044b6e

Please sign in to comment.