Skip to content

Commit bcff8d7

Browse files
authored
refactor: store cleanup (#1705)
## This PR IStore interface usage instead of Store implementation _Separate locks for flag data and metadata in store_ - no longer valid point --------- Signed-off-by: Andrey <[email protected]>
1 parent 52f344f commit bcff8d7

File tree

8 files changed

+18
-21
lines changed

8 files changed

+18
-21
lines changed

core/pkg/evaluator/json.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,13 +64,13 @@ func WithEvaluator(name string, evalFunc func(interface{}, interface{}) interfac
6464

6565
// JSON evaluator
6666
type JSON struct {
67-
store *store.Store
67+
store store.IStore
6868
Logger *logger.Logger
6969
jsonEvalTracer trace.Tracer
7070
Resolver
7171
}
7272

73-
func NewJSON(logger *logger.Logger, s *store.Store, opts ...JSONEvaluatorOption) *JSON {
73+
func NewJSON(logger *logger.Logger, s store.IStore, opts ...JSONEvaluatorOption) *JSON {
7474
logger = logger.WithFields(
7575
zap.String("component", "evaluator"),
7676
zap.String("evaluator", "json"),

core/pkg/store/store.go

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import (
55
"encoding/json"
66
"fmt"
77
"slices"
8-
"sync"
98

109
"github.com/hashicorp/go-memdb"
1110
"github.com/open-feature/flagd/core/pkg/logger"
@@ -25,12 +24,13 @@ type IStore interface {
2524
Get(ctx context.Context, key string, selector *Selector) (model.Flag, model.Metadata, error)
2625
GetAll(ctx context.Context, selector *Selector) (map[string]model.Flag, model.Metadata, error)
2726
Watch(ctx context.Context, selector *Selector, watcher chan<- FlagQueryResult)
27+
Update(source string, flags map[string]model.Flag, metadata model.Metadata) (map[string]interface{}, bool)
28+
String() (string, error)
2829
}
2930

3031
var _ IStore = (*Store)(nil)
3132

3233
type Store struct {
33-
mx sync.RWMutex
3434
db *memdb.MemDB
3535
logger *logger.Logger
3636
sources []string
@@ -201,8 +201,6 @@ func (s *Store) Get(_ context.Context, key string, selector *Selector) (model.Fl
201201

202202
func (f *Store) String() (string, error) {
203203
f.logger.Debug("dumping flags to string")
204-
f.mx.RLock()
205-
defer f.mx.RUnlock()
206204

207205
state, _, err := f.GetAll(context.Background(), nil)
208206
if err != nil {
@@ -260,7 +258,6 @@ func (s *Store) Update(
260258
selector := NewSelector(sourceIndex + "=" + source)
261259
oldFlags, _, _ := s.GetAll(context.Background(), &selector)
262260

263-
s.mx.Lock()
264261
for key := range oldFlags {
265262
if _, ok := flags[key]; !ok {
266263
// flag has been deleted
@@ -275,7 +272,7 @@ func (s *Store) Update(
275272
continue
276273
}
277274
}
278-
s.mx.Unlock()
275+
279276
for key, newFlag := range flags {
280277
s.logger.Debug(fmt.Sprintf("got metadata %v", metadata))
281278

core/pkg/store/store_test.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ func TestUpdateFlags(t *testing.T) {
2020
t.Parallel()
2121
tests := []struct {
2222
name string
23-
setup func(t *testing.T) *Store
23+
setup func(t *testing.T) IStore
2424
newFlags map[string]model.Flag
2525
source string
2626
wantFlags map[string]model.Flag
@@ -30,7 +30,7 @@ func TestUpdateFlags(t *testing.T) {
3030
}{
3131
{
3232
name: "both nil",
33-
setup: func(t *testing.T) *Store {
33+
setup: func(t *testing.T) IStore {
3434
s, err := NewStore(logger.NewLogger(nil, false), sources)
3535
if err != nil {
3636
t.Fatalf("NewStore failed: %v", err)
@@ -44,7 +44,7 @@ func TestUpdateFlags(t *testing.T) {
4444
},
4545
{
4646
name: "both empty flags",
47-
setup: func(t *testing.T) *Store {
47+
setup: func(t *testing.T) IStore {
4848
s, err := NewStore(logger.NewLogger(nil, false), sources)
4949
if err != nil {
5050
t.Fatalf("NewStore failed: %v", err)
@@ -58,7 +58,7 @@ func TestUpdateFlags(t *testing.T) {
5858
},
5959
{
6060
name: "empty new",
61-
setup: func(t *testing.T) *Store {
61+
setup: func(t *testing.T) IStore {
6262
s, err := NewStore(logger.NewLogger(nil, false), sources)
6363
if err != nil {
6464
t.Fatalf("NewStore failed: %v", err)
@@ -72,7 +72,7 @@ func TestUpdateFlags(t *testing.T) {
7272
},
7373
{
7474
name: "update from source 1 (old flag removed)",
75-
setup: func(t *testing.T) *Store {
75+
setup: func(t *testing.T) IStore {
7676
s, err := NewStore(logger.NewLogger(nil, false), sources)
7777
if err != nil {
7878
t.Fatalf("NewStore failed: %v", err)
@@ -96,7 +96,7 @@ func TestUpdateFlags(t *testing.T) {
9696
},
9797
{
9898
name: "update from source 1 (new flag added)",
99-
setup: func(t *testing.T) *Store {
99+
setup: func(t *testing.T) IStore {
100100
s, err := NewStore(logger.NewLogger(nil, false), sources)
101101
if err != nil {
102102
t.Fatalf("NewStore failed: %v", err)
@@ -118,7 +118,7 @@ func TestUpdateFlags(t *testing.T) {
118118
},
119119
{
120120
name: "flag set inheritance",
121-
setup: func(t *testing.T) *Store {
121+
setup: func(t *testing.T) IStore {
122122
s, err := NewStore(logger.NewLogger(nil, false), sources)
123123
if err != nil {
124124
t.Fatalf("NewStore failed: %v", err)

flagd/pkg/service/flag-evaluation/connect_service_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ func TestConnectService_UnixConnection(t *testing.T) {
8484
exp := metric.NewManualReader()
8585
rs := resource.NewWithAttributes("testSchema")
8686
metricRecorder := telemetry.NewOTelRecorder(exp, rs, tt.name)
87-
svc := NewConnectService(logger.NewLogger(nil, false), eval, &store.Store{}, metricRecorder)
87+
svc := NewConnectService(logger.NewLogger(nil, false), eval, nil, metricRecorder)
8888
serveConf := iservice.Configuration{
8989
ReadinessProbe: func() bool {
9090
return true
@@ -139,7 +139,7 @@ func TestAddMiddleware(t *testing.T) {
139139
rs := resource.NewWithAttributes("testSchema")
140140
metricRecorder := telemetry.NewOTelRecorder(exp, rs, "my-exporter")
141141

142-
svc := NewConnectService(logger.NewLogger(nil, false), nil, &store.Store{}, metricRecorder)
142+
svc := NewConnectService(logger.NewLogger(nil, false), nil, nil, metricRecorder)
143143

144144
serveConf := iservice.Configuration{
145145
ReadinessProbe: func() bool {

flagd/pkg/service/flag-sync/handler.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import (
2121
// syncHandler implements the sync contract
2222
type syncHandler struct {
2323
//mux *Multiplexer
24-
store *store.Store
24+
store store.IStore
2525
log *logger.Logger
2626
contextValues map[string]any
2727
deadline time.Duration

flagd/pkg/service/flag-sync/sync_service.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ type SvcConfigurations struct {
2828
Logger *logger.Logger
2929
Port uint16
3030
Sources []string
31-
Store *store.Store
31+
Store store.IStore
3232
ContextValues map[string]any
3333
CertPath string
3434
KeyPath string

flagd/pkg/service/flag-sync/sync_service_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,7 @@ func TestSyncServiceDeadlineEndToEnd(t *testing.T) {
245245
func createAndStartSyncService(
246246
port int,
247247
sources []string,
248-
store *store.Store,
248+
store store.IStore,
249249
certPath string,
250250
keyPath string,
251251
socketPath string,

flagd/pkg/service/flag-sync/util_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ var testSource2Flags = map[string]model.Flag{
3535
}
3636

3737
// getSimpleFlagStore is a test util which returns a flag store pre-filled with flags from sources testSource1 and testSource2.
38-
func getSimpleFlagStore(t testing.TB) (*store.Store, []string) {
38+
func getSimpleFlagStore(t testing.TB) (store.IStore, []string) {
3939
t.Helper()
4040

4141
sources := []string{testSource1, testSource2}

0 commit comments

Comments
 (0)