Skip to content

Commit

Permalink
add nats-js-kv store
Browse files Browse the repository at this point in the history
Signed-off-by: jkoberg <jkoberg@owncloud.com>
  • Loading branch information
kobergj committed Dec 7, 2023
1 parent 7b47abd commit 7a7a286
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 4 deletions.
5 changes: 5 additions & 0 deletions changelog/unreleased/add-natsjs-kv-store.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
Enhancement: Add nats-js-kv store

Add a store using the nats-js key value storage. Also fixes a panic when locking files.

https://github.com/cs3org/reva/pull/4363
Original file line number Diff line number Diff line change
Expand Up @@ -151,12 +151,11 @@ func (b MessagePackBackend) saveAttributes(ctx context.Context, path string, set
_, subspan := tracer.Start(ctx, "lockedfile.OpenFile")
f, err = lockedfile.OpenFile(lockPath, os.O_RDWR|os.O_CREATE, 0600)
subspan.End()
if err != nil {
return err
}
defer f.Close()
}
if err != nil {
return err
}

// Read current state
_, subspan := tracer.Start(ctx, "os.ReadFile")
var msgBytes []byte
Expand Down
13 changes: 13 additions & 0 deletions pkg/store/store.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import (
"github.com/cs3org/reva/v2/pkg/store/etcd"
"github.com/cs3org/reva/v2/pkg/store/memory"
natsjs "github.com/go-micro/plugins/v4/store/nats-js"
natsjskv "github.com/go-micro/plugins/v4/store/nats-js-kv"
"github.com/go-micro/plugins/v4/store/redis"
redisopts "github.com/go-redis/redis/v8"
"github.com/nats-io/nats.go"
Expand All @@ -50,6 +51,8 @@ const (
TypeOCMem = "ocmem"
// TypeNatsJS represents nats-js stores
TypeNatsJS = "nats-js"
// TypeNatsJSKV represents nats-js-kv stores
TypeNatsJSKV = "nats-js-kv"
)

// Create initializes a new store
Expand Down Expand Up @@ -126,6 +129,16 @@ func Create(opts ...microstore.Option) microstore.Store {
natsjs.NatsOptions(natsOptions), // always pass in properly initialized default nats options
natsjs.DefaultTTL(ttl))...,
) // TODO test with ocis nats
case TypeNatsJSKV:
// NOTE: nats needs a DefaultTTL option as it does not support per Write TTL ...
ttl, _ := options.Context.Value(ttlContextKey{}).(time.Duration)
natsOptions := nats.GetDefaultOptions()
natsOptions.Name = "TODO" // we can pass in the service name to allow identifying the client, but that requires adding a custom context option
return natsjskv.NewStore(
append(opts,
natsjs.NatsOptions(natsOptions), // always pass in properly initialized default nats options
natsjs.DefaultTTL(ttl))...,
)
case TypeMemory, "mem", "": // allow existing short form and use as default
return microstore.NewMemoryStore(opts...)
default:
Expand Down

0 comments on commit 7a7a286

Please sign in to comment.