From c992b4d1de354bdd32a7026feb7d70e69880eb06 Mon Sep 17 00:00:00 2001 From: Matias Melograno Date: Tue, 4 Jul 2023 15:40:52 -0300 Subject: [PATCH 01/14] added iffu from commons v5 --- go.mod | 2 +- go.sum | 4 +- splitio/admin/common/config.go | 2 +- splitio/admin/controllers/helpers.go | 4 +- splitio/commitversion.go | 2 +- splitio/common/conf/advanced.go | 2 +- splitio/common/impressionlistener/listener.go | 2 +- .../impressionlistener/listener_test.go | 2 +- .../impressionlistener/mocks/listener.go | 2 +- splitio/common/runtime.go | 2 +- splitio/common/sync/sync.go | 10 +-- splitio/producer/conf/sections.go | 2 +- splitio/producer/initialization.go | 36 ++++----- splitio/producer/initialization_test.go | 10 +-- splitio/producer/storage/mocks/telemetry.go | 2 +- splitio/producer/storage/telemetry.go | 6 +- splitio/producer/storage/telemetry_test.go | 6 +- splitio/producer/task/events.go | 4 +- splitio/producer/task/events_test.go | 6 +- splitio/producer/task/impressions.go | 6 +- splitio/producer/task/impressions_test.go | 13 ++-- splitio/producer/task/uniquekeys.go | 6 +- splitio/producer/task/uniquekeys_test.go | 6 +- splitio/producer/util.go | 14 ++-- splitio/producer/worker/impcounts.go | 4 +- splitio/producer/worker/telemetry.go | 12 +-- splitio/producer/worker/telemetry_test.go | 6 +- .../healthcheck/application/monitor_test.go | 2 +- .../services/counter/bypercentage.go | 6 +- .../observability/segment_wrapper.go | 3 +- .../observability/segment_wrapper_test.go | 2 +- .../observability/split_wrapper.go | 6 +- .../observability/split_wrapper_test.go | 6 +- splitio/proxy/caching/caching.go | 2 +- splitio/proxy/caching/caching_test.go | 2 +- splitio/proxy/caching/workers.go | 28 +++++-- splitio/proxy/caching/workers_test.go | 78 +++++++++++++++++-- splitio/proxy/conf/sections.go | 2 +- splitio/proxy/controllers/events.go | 2 +- splitio/proxy/controllers/events_test.go | 2 +- splitio/proxy/controllers/sdk.go | 4 +- splitio/proxy/controllers/sdk_test.go | 6 +- splitio/proxy/controllers/telemetry.go | 2 +- splitio/proxy/controllers/telemetry_test.go | 2 +- splitio/proxy/controllers/util.go | 4 +- splitio/proxy/initialization.go | 20 ++--- splitio/proxy/initialization_test.go | 2 +- splitio/proxy/internal/dtos.go | 4 +- splitio/proxy/proxy.go | 2 +- splitio/proxy/proxy_test.go | 4 +- splitio/proxy/storage/mocks/mocks.go | 2 +- .../proxy/storage/optimized/changesummary.go | 2 +- .../storage/optimized/changesummary_test.go | 2 +- splitio/proxy/storage/persistent/splits.go | 2 +- .../proxy/storage/persistent/splits_test.go | 2 +- splitio/proxy/storage/segments.go | 4 +- splitio/proxy/storage/splits.go | 6 +- splitio/proxy/storage/splits_test.go | 4 +- splitio/proxy/storage/telemetry.go | 6 +- splitio/proxy/storage/telemetryts.go | 2 +- splitio/proxy/tasks/deferred.go | 2 +- splitio/proxy/tasks/events.go | 2 +- splitio/proxy/tasks/impcount.go | 2 +- splitio/proxy/tasks/impressions.go | 2 +- splitio/proxy/tasks/telemetry.go | 2 +- splitio/util/utils.go | 2 +- splitio/version.go | 2 +- 67 files changed, 241 insertions(+), 169 deletions(-) diff --git a/go.mod b/go.mod index c2066d1f..5a580f26 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/gin-gonic/gin v1.9.1 github.com/google/uuid v1.3.0 github.com/splitio/gincache v0.0.1-rc7 - github.com/splitio/go-split-commons/v4 v4.3.3 + github.com/splitio/go-split-commons/v5 v5.0.0-20230704174903-de1699828951 github.com/splitio/go-toolkit/v5 v5.3.1 go.etcd.io/bbolt v1.3.6 ) diff --git a/go.sum b/go.sum index 32598afa..80b650f7 100644 --- a/go.sum +++ b/go.sum @@ -99,8 +99,8 @@ github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUA github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= github.com/splitio/gincache v0.0.1-rc7 h1:BNIP3uaT4zqRepYwi6TRJevzPX3EsgUnLSA3nwNu5tw= github.com/splitio/gincache v0.0.1-rc7/go.mod h1:IUKPDIlTSH8bNqpgMDWjgrbbkqhApnQHSxXp5uKjGg8= -github.com/splitio/go-split-commons/v4 v4.3.3 h1:9L8Q+0hW2LEmWOuTeiWik3OgQfI4LvK32AFnKifvFhA= -github.com/splitio/go-split-commons/v4 v4.3.3/go.mod h1:hj+ota77quCRuyK1cK8EOZANGDIlwCMBosF27I158S8= +github.com/splitio/go-split-commons/v5 v5.0.0-20230704174903-de1699828951 h1:DkMZefg+dNs5YpmHW3Yob3kd7hvNT5Pzkzrit1CSihM= +github.com/splitio/go-split-commons/v5 v5.0.0-20230704174903-de1699828951/go.mod h1:k2hJRZgM1IOElE6D4/cq7zXnQwPtMUW1cHKQzdgUh7E= github.com/splitio/go-toolkit/v5 v5.3.1 h1:9J/byd0fRxWj5/Zg0QZOnUxKBDIAMCGr7rySYzJKdJg= github.com/splitio/go-toolkit/v5 v5.3.1/go.mod h1:xYhUvV1gga9/1029Wbp5pjnR6Cy8nvBpjw99wAbsMko= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= diff --git a/splitio/admin/common/config.go b/splitio/admin/common/config.go index e4f742fb..6187c8e0 100644 --- a/splitio/admin/common/config.go +++ b/splitio/admin/common/config.go @@ -1,6 +1,6 @@ package common -import "github.com/splitio/go-split-commons/v4/storage" +import "github.com/splitio/go-split-commons/v5/storage" // Storages wraps storages in one struct type Storages struct { diff --git a/splitio/admin/controllers/helpers.go b/splitio/admin/controllers/helpers.go index 4a90d9c3..d698b5e1 100644 --- a/splitio/admin/controllers/helpers.go +++ b/splitio/admin/controllers/helpers.go @@ -3,8 +3,8 @@ package controllers import ( "time" - "github.com/splitio/go-split-commons/v4/storage" - "github.com/splitio/go-split-commons/v4/telemetry" + "github.com/splitio/go-split-commons/v5/storage" + "github.com/splitio/go-split-commons/v5/telemetry" "github.com/splitio/split-synchronizer/v5/splitio/admin/views/dashboard" "github.com/splitio/split-synchronizer/v5/splitio/producer/evcalc" diff --git a/splitio/commitversion.go b/splitio/commitversion.go index 74424b19..6f49ae0e 100644 --- a/splitio/commitversion.go +++ b/splitio/commitversion.go @@ -5,4 +5,4 @@ This file is created automatically, please do not edit */ // CommitVersion is the version of the last commit previous to release -const CommitVersion = "4e4300e" +const CommitVersion = "6f1c334" diff --git a/splitio/common/conf/advanced.go b/splitio/common/conf/advanced.go index c36568ae..559257aa 100644 --- a/splitio/common/conf/advanced.go +++ b/splitio/common/conf/advanced.go @@ -3,7 +3,7 @@ package conf import ( "os" - "github.com/splitio/go-split-commons/v4/conf" + "github.com/splitio/go-split-commons/v5/conf" ) // InitAdvancedOptions initializes an advanced config with default values + overriden urls. diff --git a/splitio/common/impressionlistener/listener.go b/splitio/common/impressionlistener/listener.go index 3f06e921..db0880cd 100644 --- a/splitio/common/impressionlistener/listener.go +++ b/splitio/common/impressionlistener/listener.go @@ -7,7 +7,7 @@ import ( "fmt" "net/http" - "github.com/splitio/go-split-commons/v4/dtos" + "github.com/splitio/go-split-commons/v5/dtos" "github.com/splitio/go-toolkit/v5/struct/traits/lifecycle" ) diff --git a/splitio/common/impressionlistener/listener_test.go b/splitio/common/impressionlistener/listener_test.go index 4e368d05..3a48bd21 100644 --- a/splitio/common/impressionlistener/listener_test.go +++ b/splitio/common/impressionlistener/listener_test.go @@ -7,7 +7,7 @@ import ( "net/http/httptest" "testing" - "github.com/splitio/go-split-commons/v4/dtos" + "github.com/splitio/go-split-commons/v5/dtos" ) func TestImpressionListener(t *testing.T) { diff --git a/splitio/common/impressionlistener/mocks/listener.go b/splitio/common/impressionlistener/mocks/listener.go index d5e01f02..13b0b486 100644 --- a/splitio/common/impressionlistener/mocks/listener.go +++ b/splitio/common/impressionlistener/mocks/listener.go @@ -1,7 +1,7 @@ package mocks import ( - "github.com/splitio/go-split-commons/v4/dtos" + "github.com/splitio/go-split-commons/v5/dtos" "github.com/splitio/split-synchronizer/v5/splitio/common/impressionlistener" ) diff --git a/splitio/common/runtime.go b/splitio/common/runtime.go index 4eb3116d..9d0807ee 100644 --- a/splitio/common/runtime.go +++ b/splitio/common/runtime.go @@ -7,7 +7,7 @@ import ( "syscall" "time" - "github.com/splitio/go-split-commons/v4/synchronizer" + "github.com/splitio/go-split-commons/v5/synchronizer" "github.com/splitio/go-toolkit/v5/logging" "github.com/splitio/go-toolkit/v5/sync" diff --git a/splitio/common/sync/sync.go b/splitio/common/sync/sync.go index ae57b849..54f2909e 100644 --- a/splitio/common/sync/sync.go +++ b/splitio/common/sync/sync.go @@ -3,11 +3,10 @@ package sync import ( "github.com/splitio/go-toolkit/v5/logging" - "github.com/splitio/go-split-commons/v4/conf" + "github.com/splitio/go-split-commons/v5/conf" - "github.com/splitio/go-split-commons/v4/healthcheck/application" - "github.com/splitio/go-split-commons/v4/synchronizer" - "github.com/splitio/go-split-commons/v4/tasks" + "github.com/splitio/go-split-commons/v5/synchronizer" + "github.com/splitio/go-split-commons/v5/tasks" ) // WSync is a wrapper for the Regular synchronizer that handles both local telemetry @@ -26,10 +25,9 @@ func NewSynchronizer( logger logging.LoggerInterface, inMememoryFullQueue chan string, userTelemetryTasks []tasks.Task, - appMonitor application.MonitorProducerInterface, ) *WSync { return &WSync{ - Synchronizer: synchronizer.NewSynchronizer(confAdvanced, splitTasks, workers, logger, inMememoryFullQueue, appMonitor), + Synchronizer: synchronizer.NewSynchronizer(confAdvanced, splitTasks, workers, logger, inMememoryFullQueue), logger: logger, userTelemetryTasks: userTelemetryTasks, } diff --git a/splitio/producer/conf/sections.go b/splitio/producer/conf/sections.go index 00e3d7c1..32808ab6 100644 --- a/splitio/producer/conf/sections.go +++ b/splitio/producer/conf/sections.go @@ -1,7 +1,7 @@ package conf import ( - cconf "github.com/splitio/go-split-commons/v4/conf" + cconf "github.com/splitio/go-split-commons/v5/conf" "github.com/splitio/split-synchronizer/v5/splitio/common/conf" ) diff --git a/splitio/producer/initialization.go b/splitio/producer/initialization.go index ad5fdbce..532953b7 100644 --- a/splitio/producer/initialization.go +++ b/splitio/producer/initialization.go @@ -5,19 +5,19 @@ import ( "fmt" "time" - cconf "github.com/splitio/go-split-commons/v4/conf" - "github.com/splitio/go-split-commons/v4/dtos" - "github.com/splitio/go-split-commons/v4/provisional/strategy" - "github.com/splitio/go-split-commons/v4/service/api" - "github.com/splitio/go-split-commons/v4/storage/filter" - "github.com/splitio/go-split-commons/v4/storage/inmemory" - "github.com/splitio/go-split-commons/v4/storage/redis" - "github.com/splitio/go-split-commons/v4/synchronizer" - "github.com/splitio/go-split-commons/v4/synchronizer/worker/impressionscount" - "github.com/splitio/go-split-commons/v4/synchronizer/worker/segment" - "github.com/splitio/go-split-commons/v4/synchronizer/worker/split" - "github.com/splitio/go-split-commons/v4/tasks" - "github.com/splitio/go-split-commons/v4/telemetry" + cconf "github.com/splitio/go-split-commons/v5/conf" + "github.com/splitio/go-split-commons/v5/dtos" + "github.com/splitio/go-split-commons/v5/provisional/strategy" + "github.com/splitio/go-split-commons/v5/service/api" + "github.com/splitio/go-split-commons/v5/storage/filter" + "github.com/splitio/go-split-commons/v5/storage/inmemory" + "github.com/splitio/go-split-commons/v5/storage/redis" + "github.com/splitio/go-split-commons/v5/synchronizer" + "github.com/splitio/go-split-commons/v5/synchronizer/worker/impressionscount" + "github.com/splitio/go-split-commons/v5/synchronizer/worker/segment" + "github.com/splitio/go-split-commons/v5/synchronizer/worker/split" + "github.com/splitio/go-split-commons/v5/tasks" + "github.com/splitio/go-split-commons/v5/telemetry" "github.com/splitio/go-toolkit/v5/logging" "github.com/splitio/split-synchronizer/v5/splitio/admin" @@ -118,8 +118,8 @@ func Start(logger logging.LoggerInterface, cfg *conf.Main) error { eventEvictionMonitor := evcalc.New(1) workers := synchronizer.Workers{ - SplitFetcher: split.NewSplitFetcher(storages.SplitStorage, splitAPI.SplitFetcher, logger, syncTelemetryStorage, appMonitor), - SegmentFetcher: segment.NewSegmentFetcher(storages.SplitStorage, storages.SegmentStorage, splitAPI.SegmentFetcher, + SplitUpdater: split.NewSplitUpdater(storages.SplitStorage, splitAPI.SplitFetcher, logger, syncTelemetryStorage, appMonitor), + SegmentUpdater: segment.NewSegmentUpdater(storages.SplitStorage, storages.SegmentStorage, splitAPI.SegmentFetcher, logger, syncTelemetryStorage, appMonitor), ImpressionsCountRecorder: impressionscount.NewRecorderSingle(impressionsCounter, splitAPI.ImpressionRecorder, metadata, logger, syncTelemetryStorage), @@ -128,8 +128,8 @@ func Start(logger logging.LoggerInterface, cfg *conf.Main) error { storages.SplitStorage, storages.SegmentStorage, logger, metadata, syncTelemetryStorage), } splitTasks := synchronizer.SplitTasks{ - SplitSyncTask: tasks.NewFetchSplitsTask(workers.SplitFetcher, int(cfg.Sync.SplitRefreshRateMs)/1000, logger), - SegmentSyncTask: tasks.NewFetchSegmentsTask(workers.SegmentFetcher, int(cfg.Sync.SegmentRefreshRateMs)/1000, + SplitSyncTask: tasks.NewFetchSplitsTask(workers.SplitUpdater, int(cfg.Sync.SplitRefreshRateMs)/1000, logger), + SegmentSyncTask: tasks.NewFetchSegmentsTask(workers.SegmentUpdater, int(cfg.Sync.SegmentRefreshRateMs)/1000, advanced.SegmentWorkers, advanced.SegmentQueueSize, logger), ImpressionsCountSyncTask: tasks.NewRecordImpressionsCountTask(workers.ImpressionsCountRecorder, logger, impressionsCountPeriodTaskInMemory), @@ -246,7 +246,7 @@ func Start(logger logging.LoggerInterface, cfg *conf.Main) error { sdkTelemetryWorker := worker.NewTelemetryMultiWorker(logger, sdkTelemetryStorage, splitAPI.TelemetryRecorder) sdkTelemetryTask := task.NewTelemetrySyncTask(sdkTelemetryWorker, logger, int(cfg.Sync.Advanced.TelemetryPushRateMs/1000)) - syncImpl := ssync.NewSynchronizer(*advanced, splitTasks, workers, logger, nil, []tasks.Task{sdkTelemetryTask}, appMonitor) + syncImpl := ssync.NewSynchronizer(*advanced, splitTasks, workers, logger, nil, []tasks.Task{sdkTelemetryTask}) managerStatus := make(chan int, 1) syncManager, err := synchronizer.NewSynchronizerManager( syncImpl, diff --git a/splitio/producer/initialization_test.go b/splitio/producer/initialization_test.go index 9a0c5316..d03c6e22 100644 --- a/splitio/producer/initialization_test.go +++ b/splitio/producer/initialization_test.go @@ -8,11 +8,11 @@ import ( "os" "testing" - config "github.com/splitio/go-split-commons/v4/conf" - "github.com/splitio/go-split-commons/v4/dtos" - "github.com/splitio/go-split-commons/v4/service" - "github.com/splitio/go-split-commons/v4/service/mocks" - predis "github.com/splitio/go-split-commons/v4/storage/redis" + config "github.com/splitio/go-split-commons/v5/conf" + "github.com/splitio/go-split-commons/v5/dtos" + "github.com/splitio/go-split-commons/v5/service" + "github.com/splitio/go-split-commons/v5/service/mocks" + predis "github.com/splitio/go-split-commons/v5/storage/redis" "github.com/splitio/go-toolkit/v5/logging" cconf "github.com/splitio/split-synchronizer/v5/splitio/common/conf" "github.com/splitio/split-synchronizer/v5/splitio/producer/conf" diff --git a/splitio/producer/storage/mocks/telemetry.go b/splitio/producer/storage/mocks/telemetry.go index 6aaba5fd..e7faad6c 100644 --- a/splitio/producer/storage/mocks/telemetry.go +++ b/splitio/producer/storage/mocks/telemetry.go @@ -1,7 +1,7 @@ package mocks import ( - "github.com/splitio/go-split-commons/v4/dtos" + "github.com/splitio/go-split-commons/v5/dtos" ) // RedisTelemetryConsumerMultiMock is a mock diff --git a/splitio/producer/storage/telemetry.go b/splitio/producer/storage/telemetry.go index 305e252c..b3ba6494 100644 --- a/splitio/producer/storage/telemetry.go +++ b/splitio/producer/storage/telemetry.go @@ -10,9 +10,9 @@ import ( "github.com/splitio/go-toolkit/v5/logging" "github.com/splitio/go-toolkit/v5/redis" - "github.com/splitio/go-split-commons/v4/dtos" - redisSt "github.com/splitio/go-split-commons/v4/storage/redis" - "github.com/splitio/go-split-commons/v4/telemetry" + "github.com/splitio/go-split-commons/v5/dtos" + redisSt "github.com/splitio/go-split-commons/v5/storage/redis" + "github.com/splitio/go-split-commons/v5/telemetry" ) const ( diff --git a/splitio/producer/storage/telemetry_test.go b/splitio/producer/storage/telemetry_test.go index 464c0b31..b93a12ab 100644 --- a/splitio/producer/storage/telemetry_test.go +++ b/splitio/producer/storage/telemetry_test.go @@ -7,9 +7,9 @@ import ( "testing" "time" - "github.com/splitio/go-split-commons/v4/dtos" - redisSt "github.com/splitio/go-split-commons/v4/storage/redis" - "github.com/splitio/go-split-commons/v4/telemetry" + "github.com/splitio/go-split-commons/v5/dtos" + redisSt "github.com/splitio/go-split-commons/v5/storage/redis" + "github.com/splitio/go-split-commons/v5/telemetry" "github.com/splitio/go-toolkit/v5/logging" "github.com/splitio/go-toolkit/v5/redis" ) diff --git a/splitio/producer/task/events.go b/splitio/producer/task/events.go index 1001a4c3..443072a8 100644 --- a/splitio/producer/task/events.go +++ b/splitio/producer/task/events.go @@ -8,8 +8,8 @@ import ( "sync" "time" - "github.com/splitio/go-split-commons/v4/dtos" - "github.com/splitio/go-split-commons/v4/storage" + "github.com/splitio/go-split-commons/v5/dtos" + "github.com/splitio/go-split-commons/v5/storage" "github.com/splitio/go-toolkit/v5/logging" "github.com/splitio/split-synchronizer/v5/splitio/producer/evcalc" ) diff --git a/splitio/producer/task/events_test.go b/splitio/producer/task/events_test.go index 6fe47e42..c11aa3a8 100644 --- a/splitio/producer/task/events_test.go +++ b/splitio/producer/task/events_test.go @@ -11,8 +11,8 @@ import ( "testing" "time" - "github.com/splitio/go-split-commons/v4/dtos" - "github.com/splitio/go-split-commons/v4/storage/mocks" + "github.com/splitio/go-split-commons/v5/dtos" + "github.com/splitio/go-split-commons/v5/storage/mocks" "github.com/splitio/go-toolkit/v5/logging" "github.com/splitio/split-synchronizer/v5/splitio/producer/evcalc" ) @@ -110,7 +110,7 @@ func TestEventsMemoryIsProperlyReturned(t *testing.T) { } for i := 0; i < 3; i++ { - i := <- sinker + i := <-sinker req, err := w.BuildRequest(i) if asRecyclable, ok := i.(recyclable); ok { asRecyclable.recycle() diff --git a/splitio/producer/task/impressions.go b/splitio/producer/task/impressions.go index 9d807a35..4c329627 100644 --- a/splitio/producer/task/impressions.go +++ b/splitio/producer/task/impressions.go @@ -8,9 +8,9 @@ import ( "sync" "time" - "github.com/splitio/go-split-commons/v4/dtos" - "github.com/splitio/go-split-commons/v4/provisional" - "github.com/splitio/go-split-commons/v4/storage" + "github.com/splitio/go-split-commons/v5/dtos" + "github.com/splitio/go-split-commons/v5/provisional" + "github.com/splitio/go-split-commons/v5/storage" "github.com/splitio/go-toolkit/v5/logging" "github.com/splitio/split-synchronizer/v5/splitio/common/impressionlistener" "github.com/splitio/split-synchronizer/v5/splitio/producer/evcalc" diff --git a/splitio/producer/task/impressions_test.go b/splitio/producer/task/impressions_test.go index accf8e14..b396ce83 100644 --- a/splitio/producer/task/impressions_test.go +++ b/splitio/producer/task/impressions_test.go @@ -11,11 +11,11 @@ import ( "testing" "time" - "github.com/splitio/go-split-commons/v4/dtos" - "github.com/splitio/go-split-commons/v4/provisional" - "github.com/splitio/go-split-commons/v4/provisional/strategy" - "github.com/splitio/go-split-commons/v4/storage/inmemory" - "github.com/splitio/go-split-commons/v4/storage/mocks" + "github.com/splitio/go-split-commons/v5/dtos" + "github.com/splitio/go-split-commons/v5/provisional" + "github.com/splitio/go-split-commons/v5/provisional/strategy" + "github.com/splitio/go-split-commons/v5/storage/inmemory" + "github.com/splitio/go-split-commons/v5/storage/mocks" "github.com/splitio/go-toolkit/v5/logging" "github.com/splitio/split-synchronizer/v5/splitio/producer/evcalc" ) @@ -152,7 +152,7 @@ func TestMemoryIsProperlyReturned(t *testing.T) { } for i := 0; i < 3; i++ { - i := <- sinker + i := <-sinker req, err := w.BuildRequest(i) if asRecyclable, ok := i.(recyclable); ok { asRecyclable.recycle() @@ -257,4 +257,3 @@ func TestImpressionsIntegration(t *testing.T) { t.Errorf("machine0 should have %d impressions. Has %d", expectedImpressionsPerMeta, r) } } - diff --git a/splitio/producer/task/uniquekeys.go b/splitio/producer/task/uniquekeys.go index b8e01587..f3134ce1 100644 --- a/splitio/producer/task/uniquekeys.go +++ b/splitio/producer/task/uniquekeys.go @@ -6,9 +6,9 @@ import ( "fmt" "net/http" - "github.com/splitio/go-split-commons/v4/dtos" - "github.com/splitio/go-split-commons/v4/provisional/strategy" - "github.com/splitio/go-split-commons/v4/storage" + "github.com/splitio/go-split-commons/v5/dtos" + "github.com/splitio/go-split-commons/v5/provisional/strategy" + "github.com/splitio/go-split-commons/v5/storage" "github.com/splitio/go-toolkit/v5/logging" ) diff --git a/splitio/producer/task/uniquekeys_test.go b/splitio/producer/task/uniquekeys_test.go index 9889f0e6..4985bb62 100644 --- a/splitio/producer/task/uniquekeys_test.go +++ b/splitio/producer/task/uniquekeys_test.go @@ -4,9 +4,9 @@ import ( "encoding/json" "testing" - "github.com/splitio/go-split-commons/v4/dtos" - "github.com/splitio/go-split-commons/v4/provisional/strategy" - "github.com/splitio/go-split-commons/v4/storage/mocks" + "github.com/splitio/go-split-commons/v5/dtos" + "github.com/splitio/go-split-commons/v5/provisional/strategy" + "github.com/splitio/go-split-commons/v5/storage/mocks" "github.com/splitio/go-toolkit/v5/logging" ) diff --git a/splitio/producer/util.go b/splitio/producer/util.go index 15eef523..c0f24f69 100644 --- a/splitio/producer/util.go +++ b/splitio/producer/util.go @@ -12,13 +12,13 @@ import ( "strings" "time" - cconf "github.com/splitio/go-split-commons/v4/conf" - config "github.com/splitio/go-split-commons/v4/conf" - "github.com/splitio/go-split-commons/v4/provisional" - "github.com/splitio/go-split-commons/v4/provisional/strategy" - "github.com/splitio/go-split-commons/v4/service" - storageCommon "github.com/splitio/go-split-commons/v4/storage" - "github.com/splitio/go-split-commons/v4/storage/redis" + cconf "github.com/splitio/go-split-commons/v5/conf" + config "github.com/splitio/go-split-commons/v5/conf" + "github.com/splitio/go-split-commons/v5/provisional" + "github.com/splitio/go-split-commons/v5/provisional/strategy" + "github.com/splitio/go-split-commons/v5/service" + storageCommon "github.com/splitio/go-split-commons/v5/storage" + "github.com/splitio/go-split-commons/v5/storage/redis" "github.com/splitio/go-toolkit/v5/logging" "github.com/splitio/split-synchronizer/v5/splitio/common/impressionlistener" "github.com/splitio/split-synchronizer/v5/splitio/producer/conf" diff --git a/splitio/producer/worker/impcounts.go b/splitio/producer/worker/impcounts.go index 071ca4a1..ef3dd124 100644 --- a/splitio/producer/worker/impcounts.go +++ b/splitio/producer/worker/impcounts.go @@ -1,8 +1,8 @@ package worker import ( - "github.com/splitio/go-split-commons/v4/provisional/strategy" - "github.com/splitio/go-split-commons/v4/storage" + "github.com/splitio/go-split-commons/v5/provisional/strategy" + "github.com/splitio/go-split-commons/v5/storage" "github.com/splitio/go-toolkit/v5/logging" ) diff --git a/splitio/producer/worker/telemetry.go b/splitio/producer/worker/telemetry.go index 078965e0..a92bf7a1 100644 --- a/splitio/producer/worker/telemetry.go +++ b/splitio/producer/worker/telemetry.go @@ -3,8 +3,8 @@ package worker import ( "fmt" - "github.com/splitio/go-split-commons/v4/dtos" - "github.com/splitio/go-split-commons/v4/service" + "github.com/splitio/go-split-commons/v5/dtos" + "github.com/splitio/go-split-commons/v5/service" "github.com/splitio/go-toolkit/v5/logging" "github.com/splitio/split-synchronizer/v5/splitio/producer/storage" ) @@ -118,11 +118,11 @@ func (w *TelemetryMultiWorkerImpl) SyncrhonizeConfigs() error { // import ( // "sync" // -// "github.com/splitio/go-split-commons/v4/dtos" -// "github.com/splitio/go-split-commons/v4/service" -// "github.com/splitio/go-split-commons/v4/storage" +// "github.com/splitio/go-split-commons/v5/dtos" +// "github.com/splitio/go-split-commons/v5/service" +// "github.com/splitio/go-split-commons/v5/storage" // -// // "github.com/splitio/go-split-commons/v4/synchronizer/worker/metric" +// // "github.com/splitio/go-split-commons/v5/synchronizer/worker/metric" // "github.com/splitio/go-toolkit/v5/logging" // ) // diff --git a/splitio/producer/worker/telemetry_test.go b/splitio/producer/worker/telemetry_test.go index 2383eee0..55d15ee4 100644 --- a/splitio/producer/worker/telemetry_test.go +++ b/splitio/producer/worker/telemetry_test.go @@ -3,9 +3,9 @@ package worker import ( "testing" - "github.com/splitio/go-split-commons/v4/dtos" - serviceMocks "github.com/splitio/go-split-commons/v4/service/mocks" - "github.com/splitio/go-split-commons/v4/telemetry" + "github.com/splitio/go-split-commons/v5/dtos" + serviceMocks "github.com/splitio/go-split-commons/v5/service/mocks" + "github.com/splitio/go-split-commons/v5/telemetry" "github.com/splitio/go-toolkit/v5/logging" "github.com/splitio/split-synchronizer/v5/splitio/producer/storage" storageMocks "github.com/splitio/split-synchronizer/v5/splitio/producer/storage/mocks" diff --git a/splitio/provisional/healthcheck/application/monitor_test.go b/splitio/provisional/healthcheck/application/monitor_test.go index 1a0efa12..50e55e97 100644 --- a/splitio/provisional/healthcheck/application/monitor_test.go +++ b/splitio/provisional/healthcheck/application/monitor_test.go @@ -4,7 +4,7 @@ import ( "testing" "time" - "github.com/splitio/go-split-commons/v4/healthcheck/application" + "github.com/splitio/go-split-commons/v5/healthcheck/application" "github.com/splitio/go-toolkit/v5/logging" "github.com/splitio/split-synchronizer/v5/splitio/provisional/healthcheck/application/counter" ) diff --git a/splitio/provisional/healthcheck/services/counter/bypercentage.go b/splitio/provisional/healthcheck/services/counter/bypercentage.go index 6ac59bc9..0a18e274 100644 --- a/splitio/provisional/healthcheck/services/counter/bypercentage.go +++ b/splitio/provisional/healthcheck/services/counter/bypercentage.go @@ -6,10 +6,10 @@ import ( "sync" "time" - "github.com/splitio/go-split-commons/v4/conf" - "github.com/splitio/go-split-commons/v4/dtos" + "github.com/splitio/go-split-commons/v5/conf" + "github.com/splitio/go-split-commons/v5/dtos" + "github.com/splitio/go-split-commons/v5/service/api" - "github.com/splitio/go-split-commons/v4/service/api" "github.com/splitio/go-toolkit/v5/asynctask" "github.com/splitio/go-toolkit/v5/logging" ) diff --git a/splitio/provisional/observability/segment_wrapper.go b/splitio/provisional/observability/segment_wrapper.go index c57ed14a..d89f85b7 100644 --- a/splitio/provisional/observability/segment_wrapper.go +++ b/splitio/provisional/observability/segment_wrapper.go @@ -5,7 +5,8 @@ import ( "fmt" "sync" - "github.com/splitio/go-split-commons/v4/storage" + "github.com/splitio/go-split-commons/v5/storage" + "github.com/splitio/go-toolkit/v5/datastructures/set" "github.com/splitio/go-toolkit/v5/logging" ) diff --git a/splitio/provisional/observability/segment_wrapper_test.go b/splitio/provisional/observability/segment_wrapper_test.go index fdf4922f..aab99a50 100644 --- a/splitio/provisional/observability/segment_wrapper_test.go +++ b/splitio/provisional/observability/segment_wrapper_test.go @@ -4,7 +4,7 @@ import ( "reflect" "testing" - "github.com/splitio/go-split-commons/v4/storage/mocks" + "github.com/splitio/go-split-commons/v5/storage/mocks" "github.com/splitio/go-toolkit/v5/datastructures/set" "github.com/splitio/go-toolkit/v5/logging" ) diff --git a/splitio/provisional/observability/split_wrapper.go b/splitio/provisional/observability/split_wrapper.go index 4147de06..dfc78c95 100644 --- a/splitio/provisional/observability/split_wrapper.go +++ b/splitio/provisional/observability/split_wrapper.go @@ -4,9 +4,9 @@ import ( "errors" "sync" - "github.com/splitio/go-split-commons/v4/dtos" - "github.com/splitio/go-split-commons/v4/storage" - "github.com/splitio/go-split-commons/v4/storage/redis" + "github.com/splitio/go-split-commons/v5/dtos" + "github.com/splitio/go-split-commons/v5/storage" + "github.com/splitio/go-split-commons/v5/storage/redis" "github.com/splitio/go-toolkit/v5/logging" ) diff --git a/splitio/provisional/observability/split_wrapper_test.go b/splitio/provisional/observability/split_wrapper_test.go index 2e5e380c..6ac4c33d 100644 --- a/splitio/provisional/observability/split_wrapper_test.go +++ b/splitio/provisional/observability/split_wrapper_test.go @@ -4,9 +4,9 @@ import ( "errors" "testing" - "github.com/splitio/go-split-commons/v4/dtos" - "github.com/splitio/go-split-commons/v4/storage/mocks" - "github.com/splitio/go-split-commons/v4/storage/redis" + "github.com/splitio/go-split-commons/v5/dtos" + "github.com/splitio/go-split-commons/v5/storage/mocks" + "github.com/splitio/go-split-commons/v5/storage/redis" "github.com/splitio/go-toolkit/v5/logging" ) diff --git a/splitio/proxy/caching/caching.go b/splitio/proxy/caching/caching.go index ce14d3d9..86c79685 100644 --- a/splitio/proxy/caching/caching.go +++ b/splitio/proxy/caching/caching.go @@ -5,7 +5,7 @@ import ( "github.com/gin-gonic/gin" "github.com/splitio/gincache" - "github.com/splitio/go-split-commons/v4/dtos" + "github.com/splitio/go-split-commons/v5/dtos" ) const ( diff --git a/splitio/proxy/caching/caching_test.go b/splitio/proxy/caching/caching_test.go index cd02b73a..075f5fc0 100644 --- a/splitio/proxy/caching/caching_test.go +++ b/splitio/proxy/caching/caching_test.go @@ -3,7 +3,7 @@ package caching import ( "testing" - "github.com/splitio/go-split-commons/v4/dtos" + "github.com/splitio/go-split-commons/v5/dtos" "github.com/splitio/go-toolkit/v5/testhelpers" ) diff --git a/splitio/proxy/caching/workers.go b/splitio/proxy/caching/workers.go index 685a4de3..9bd3565f 100644 --- a/splitio/proxy/caching/workers.go +++ b/splitio/proxy/caching/workers.go @@ -1,11 +1,12 @@ package caching import ( - "github.com/splitio/go-split-commons/v4/healthcheck/application" - "github.com/splitio/go-split-commons/v4/service" - "github.com/splitio/go-split-commons/v4/storage" - "github.com/splitio/go-split-commons/v4/synchronizer/worker/segment" - "github.com/splitio/go-split-commons/v4/synchronizer/worker/split" + "github.com/splitio/go-split-commons/v5/dtos" + "github.com/splitio/go-split-commons/v5/healthcheck/application" + "github.com/splitio/go-split-commons/v5/service" + "github.com/splitio/go-split-commons/v5/storage" + "github.com/splitio/go-split-commons/v5/synchronizer/worker/segment" + "github.com/splitio/go-split-commons/v5/synchronizer/worker/split" "github.com/splitio/go-toolkit/v5/logging" "github.com/splitio/gincache" @@ -26,9 +27,9 @@ func NewCacheAwareSplitSync( runtimeTelemetry storage.TelemetryRuntimeProducer, cacheFlusher gincache.CacheFlusher, appMonitor application.MonitorProducerInterface, -) *CacheAwareSplitSynchronizer { +) split.Updater { return &CacheAwareSplitSynchronizer{ - wrapped: split.NewSplitFetcher(splitStorage, splitFetcher, logger, runtimeTelemetry, appMonitor), + wrapped: split.NewSplitUpdater(splitStorage, splitFetcher, logger, runtimeTelemetry, appMonitor), splitStorage: splitStorage, cacheFlusher: cacheFlusher, } @@ -52,6 +53,17 @@ func (c *CacheAwareSplitSynchronizer) LocalKill(splitName string, defaultTreatme c.cacheFlusher.EvictBySurrogate(SplitSurrogate) } +// SynchronizeFeatureFlags synchronizes feature flags and if something changes, purges the cache appropriately +func (c *CacheAwareSplitSynchronizer) SynchronizeFeatureFlags(ffChange *dtos.SplitChangeUpdate) (*split.UpdateResult, error) { + previous, _ := c.splitStorage.ChangeNumber() + result, err := c.wrapped.SynchronizeFeatureFlags(ffChange) + if current, _ := c.splitStorage.ChangeNumber(); current > previous || (previous != -1 && current == -1) { + // if the changenumber was updated, evict splitChanges responses from cache + c.cacheFlusher.EvictBySurrogate(SplitSurrogate) + } + return result, err +} + // CacheAwareSegmentSynchronizer wraps a segment-sync with cache-friendly logic type CacheAwareSegmentSynchronizer struct { wrapped segment.Updater @@ -71,7 +83,7 @@ func NewCacheAwareSegmentSync( appMonitor application.MonitorProducerInterface, ) *CacheAwareSegmentSynchronizer { return &CacheAwareSegmentSynchronizer{ - wrapped: segment.NewSegmentFetcher(splitStorage, segmentStorage, segmentFetcher, logger, runtimeTelemetry, appMonitor), + wrapped: segment.NewSegmentUpdater(splitStorage, segmentStorage, segmentFetcher, logger, runtimeTelemetry, appMonitor), cacheFlusher: cacheFlusher, splitStorage: splitStorage, segmentStorage: segmentStorage, diff --git a/splitio/proxy/caching/workers_test.go b/splitio/proxy/caching/workers_test.go index 201e4888..779872f5 100644 --- a/splitio/proxy/caching/workers_test.go +++ b/splitio/proxy/caching/workers_test.go @@ -3,9 +3,10 @@ package caching import ( "testing" - storageMocks "github.com/splitio/go-split-commons/v4/storage/mocks" - "github.com/splitio/go-split-commons/v4/synchronizer/worker/segment" - "github.com/splitio/go-split-commons/v4/synchronizer/worker/split" + "github.com/splitio/go-split-commons/v5/dtos" + storageMocks "github.com/splitio/go-split-commons/v5/storage/mocks" + "github.com/splitio/go-split-commons/v5/synchronizer/worker/segment" + "github.com/splitio/go-split-commons/v5/synchronizer/worker/split" "github.com/splitio/go-toolkit/v5/datastructures/set" cacheMocks "github.com/splitio/gincache/mocks" @@ -15,8 +16,9 @@ func TestCacheAwareSplitSync(t *testing.T) { var cn int64 = -1 splitSyncMock := &splitUpdaterMock{ - SynchronizeSplitsCall: func(*int64) (*split.UpdateResult, error) { return nil, nil }, - LocalKillCall: func(string, string, int64) {}, + SynchronizeFeatureFlagsCall: func(ffChange *dtos.SplitChangeUpdate) (*split.UpdateResult, error) { return nil, nil }, + SynchronizeSplitsCall: func(*int64) (*split.UpdateResult, error) { return nil, nil }, + LocalKillCall: func(string, string, int64) {}, } cacheFlusherMock := &cacheMocks.CacheFlusherMock{ EvictBySurrogateCall: func(string) { t.Error("nothing should be evicted") }, @@ -67,6 +69,63 @@ func TestCacheAwareSplitSync(t *testing.T) { } } +func TestCacheAwareSplitSyncFF(t *testing.T) { + var cn int64 = -1 + + splitSyncMock := &splitUpdaterMock{ + SynchronizeFeatureFlagsCall: func(ffChange *dtos.SplitChangeUpdate) (*split.UpdateResult, error) { return nil, nil }, + SynchronizeSplitsCall: func(*int64) (*split.UpdateResult, error) { return nil, nil }, + LocalKillCall: func(string, string, int64) {}, + } + cacheFlusherMock := &cacheMocks.CacheFlusherMock{ + EvictBySurrogateCall: func(string) { t.Error("nothing should be evicted") }, + } + + css := CacheAwareSplitSynchronizer{ + splitStorage: &storageMocks.MockSplitStorage{ + ChangeNumberCall: func() (int64, error) { return cn, nil }, + }, + wrapped: splitSyncMock, + cacheFlusher: cacheFlusherMock, + } + + css.SynchronizeFeatureFlags(nil) + + splitSyncMock.SynchronizeFeatureFlagsCall = func(*dtos.SplitChangeUpdate) (*split.UpdateResult, error) { + cn++ + return nil, nil + } + + calls := 0 + cacheFlusherMock.EvictBySurrogateCall = func(key string) { + if key != SplitSurrogate { + t.Error("wrong surrogate") + } + calls++ + } + + css.SynchronizeFeatureFlags(nil) + if calls != 1 { + t.Error("should have flushed splits once") + } + + css.LocalKill("someSplit", "off", 123) + if calls != 2 { + t.Error("should have flushed again after a local kill") + } + + // Test that going from cn > -1 to cn == -1 purges + cn = 123 + splitSyncMock.SynchronizeFeatureFlagsCall = func(*dtos.SplitChangeUpdate) (*split.UpdateResult, error) { + cn = -1 + return nil, nil + } + css.SynchronizeFeatureFlags(nil) + if calls != 3 { + t.Error("should have flushed splits once", calls) + } +} + func TestCacheAwareSegmentSync(t *testing.T) { cns := map[string]int64{"segment1": 0} @@ -208,8 +267,9 @@ func TestCacheAwareSegmentSync(t *testing.T) { } type splitUpdaterMock struct { - SynchronizeSplitsCall func(till *int64) (*split.UpdateResult, error) - LocalKillCall func(splitName string, defaultTreatment string, changeNumber int64) + SynchronizeFeatureFlagsCall func(ffChange *dtos.SplitChangeUpdate) (*split.UpdateResult, error) + SynchronizeSplitsCall func(till *int64) (*split.UpdateResult, error) + LocalKillCall func(splitName string, defaultTreatment string, changeNumber int64) } func (s *splitUpdaterMock) SynchronizeSplits(till *int64) (*split.UpdateResult, error) { @@ -220,6 +280,10 @@ func (s *splitUpdaterMock) LocalKill(splitName string, defaultTreatment string, s.LocalKillCall(splitName, defaultTreatment, changeNumber) } +func (s *splitUpdaterMock) SynchronizeFeatureFlags(ffChange *dtos.SplitChangeUpdate) (*split.UpdateResult, error) { + return s.SynchronizeFeatureFlagsCall(ffChange) +} + type segmentUpdaterMock struct { SynchronizeSegmentCall func(name string, till *int64) (*segment.UpdateResult, error) SynchronizeSegmentsCall func() (map[string]segment.UpdateResult, error) diff --git a/splitio/proxy/conf/sections.go b/splitio/proxy/conf/sections.go index 565fcec1..204720f5 100644 --- a/splitio/proxy/conf/sections.go +++ b/splitio/proxy/conf/sections.go @@ -1,7 +1,7 @@ package conf import ( - cconf "github.com/splitio/go-split-commons/v4/conf" + cconf "github.com/splitio/go-split-commons/v5/conf" "github.com/splitio/split-synchronizer/v5/splitio/common/conf" ) diff --git a/splitio/proxy/controllers/events.go b/splitio/proxy/controllers/events.go index a583a103..38ca22ab 100644 --- a/splitio/proxy/controllers/events.go +++ b/splitio/proxy/controllers/events.go @@ -6,7 +6,7 @@ import ( "net/http" "github.com/gin-gonic/gin" - "github.com/splitio/go-split-commons/v4/dtos" + "github.com/splitio/go-split-commons/v5/dtos" "github.com/splitio/go-toolkit/v5/logging" "github.com/splitio/split-synchronizer/v5/splitio/common/impressionlistener" diff --git a/splitio/proxy/controllers/events_test.go b/splitio/proxy/controllers/events_test.go index c176a160..aee2ab7d 100644 --- a/splitio/proxy/controllers/events_test.go +++ b/splitio/proxy/controllers/events_test.go @@ -8,7 +8,7 @@ import ( "testing" "github.com/gin-gonic/gin" - "github.com/splitio/go-split-commons/v4/dtos" + "github.com/splitio/go-split-commons/v5/dtos" "github.com/splitio/go-toolkit/v5/logging" "github.com/splitio/split-synchronizer/v5/splitio/common/impressionlistener" ilMock "github.com/splitio/split-synchronizer/v5/splitio/common/impressionlistener/mocks" diff --git a/splitio/proxy/controllers/sdk.go b/splitio/proxy/controllers/sdk.go index 1c58d824..3d68dbf2 100644 --- a/splitio/proxy/controllers/sdk.go +++ b/splitio/proxy/controllers/sdk.go @@ -7,8 +7,8 @@ import ( "strconv" "github.com/gin-gonic/gin" - "github.com/splitio/go-split-commons/v4/dtos" - "github.com/splitio/go-split-commons/v4/service" + "github.com/splitio/go-split-commons/v5/dtos" + "github.com/splitio/go-split-commons/v5/service" "github.com/splitio/go-toolkit/v5/logging" "github.com/splitio/split-synchronizer/v5/splitio/proxy/caching" diff --git a/splitio/proxy/controllers/sdk_test.go b/splitio/proxy/controllers/sdk_test.go index caa6660a..e1eeb2c4 100644 --- a/splitio/proxy/controllers/sdk_test.go +++ b/splitio/proxy/controllers/sdk_test.go @@ -9,9 +9,9 @@ import ( "testing" "github.com/gin-gonic/gin" - "github.com/splitio/go-split-commons/v4/dtos" - "github.com/splitio/go-split-commons/v4/service" - "github.com/splitio/go-split-commons/v4/service/mocks" + "github.com/splitio/go-split-commons/v5/dtos" + "github.com/splitio/go-split-commons/v5/service" + "github.com/splitio/go-split-commons/v5/service/mocks" "github.com/splitio/go-toolkit/v5/logging" "github.com/splitio/split-synchronizer/v5/splitio/proxy/storage" diff --git a/splitio/proxy/controllers/telemetry.go b/splitio/proxy/controllers/telemetry.go index f3ab0294..a6b02c3c 100644 --- a/splitio/proxy/controllers/telemetry.go +++ b/splitio/proxy/controllers/telemetry.go @@ -6,7 +6,7 @@ import ( "net/http" "github.com/gin-gonic/gin" - "github.com/splitio/go-split-commons/v4/dtos" + "github.com/splitio/go-split-commons/v5/dtos" "github.com/splitio/go-toolkit/v5/logging" "github.com/splitio/split-synchronizer/v5/splitio/proxy/internal" diff --git a/splitio/proxy/controllers/telemetry_test.go b/splitio/proxy/controllers/telemetry_test.go index 3c19f968..d67297a7 100644 --- a/splitio/proxy/controllers/telemetry_test.go +++ b/splitio/proxy/controllers/telemetry_test.go @@ -8,7 +8,7 @@ import ( "testing" "github.com/gin-gonic/gin" - "github.com/splitio/go-split-commons/v4/dtos" + "github.com/splitio/go-split-commons/v5/dtos" "github.com/splitio/go-toolkit/v5/logging" "github.com/splitio/split-synchronizer/v5/splitio/proxy/controllers/middleware" "github.com/splitio/split-synchronizer/v5/splitio/proxy/internal" diff --git a/splitio/proxy/controllers/util.go b/splitio/proxy/controllers/util.go index 1ccb8aa8..d5326362 100644 --- a/splitio/proxy/controllers/util.go +++ b/splitio/proxy/controllers/util.go @@ -2,8 +2,8 @@ package controllers import ( "github.com/gin-gonic/gin" - "github.com/splitio/go-split-commons/v4/conf" - "github.com/splitio/go-split-commons/v4/dtos" + "github.com/splitio/go-split-commons/v5/conf" + "github.com/splitio/go-split-commons/v5/dtos" ) func metadataFromHeaders(ctx *gin.Context) dtos.Metadata { diff --git a/splitio/proxy/initialization.go b/splitio/proxy/initialization.go index 09e5f3b8..8b4ec7f5 100644 --- a/splitio/proxy/initialization.go +++ b/splitio/proxy/initialization.go @@ -9,11 +9,11 @@ import ( "strings" - "github.com/splitio/go-split-commons/v4/conf" - "github.com/splitio/go-split-commons/v4/service/api" - "github.com/splitio/go-split-commons/v4/synchronizer" - "github.com/splitio/go-split-commons/v4/tasks" - "github.com/splitio/go-split-commons/v4/telemetry" + "github.com/splitio/go-split-commons/v5/conf" + "github.com/splitio/go-split-commons/v5/service/api" + "github.com/splitio/go-split-commons/v5/synchronizer" + "github.com/splitio/go-split-commons/v5/tasks" + "github.com/splitio/go-split-commons/v5/telemetry" "github.com/splitio/go-toolkit/v5/backoff" "github.com/splitio/go-toolkit/v5/logging" @@ -112,8 +112,8 @@ func Start(logger logging.LoggerInterface, cfg *pconf.Main) error { // setup feature flags, segments & local telemetry API interactions workers := synchronizer.Workers{ - SplitFetcher: caching.NewCacheAwareSplitSync(splitStorage, splitAPI.SplitFetcher, logger, localTelemetryStorage, httpCache, appMonitor), - SegmentFetcher: caching.NewCacheAwareSegmentSync(splitStorage, segmentStorage, splitAPI.SegmentFetcher, logger, localTelemetryStorage, httpCache, + SplitUpdater: caching.NewCacheAwareSplitSync(splitStorage, splitAPI.SplitFetcher, logger, localTelemetryStorage, httpCache, appMonitor), + SegmentUpdater: caching.NewCacheAwareSegmentSync(splitStorage, segmentStorage, splitAPI.SegmentFetcher, logger, localTelemetryStorage, httpCache, appMonitor), TelemetryRecorder: telemetry.NewTelemetrySynchronizer(localTelemetryStorage, telemetryRecorder, splitStorage, segmentStorage, logger, metadata, localTelemetryStorage), @@ -121,8 +121,8 @@ func Start(logger logging.LoggerInterface, cfg *pconf.Main) error { // setup periodic tasks in case streaming is disabled or we need to fall back to polling stasks := synchronizer.SplitTasks{ - SplitSyncTask: tasks.NewFetchSplitsTask(workers.SplitFetcher, int(cfg.Sync.SplitRefreshRateMs/1000), logger), - SegmentSyncTask: tasks.NewFetchSegmentsTask(workers.SegmentFetcher, int(cfg.Sync.SegmentRefreshRateMs/1000), advanced.SegmentWorkers, + SplitSyncTask: tasks.NewFetchSplitsTask(workers.SplitUpdater, int(cfg.Sync.SplitRefreshRateMs/1000), logger), + SegmentSyncTask: tasks.NewFetchSegmentsTask(workers.SegmentUpdater, int(cfg.Sync.SegmentRefreshRateMs/1000), advanced.SegmentWorkers, advanced.SegmentQueueSize, logger), TelemetrySyncTask: tasks.NewRecordTelemetryTask(workers.TelemetryRecorder, int(cfg.Sync.Advanced.InternalMetricsRateMs), logger), ImpressionSyncTask: impressionTask, @@ -131,7 +131,7 @@ func Start(logger logging.LoggerInterface, cfg *pconf.Main) error { } // Creating Synchronizer for tasks - sync := ssync.NewSynchronizer(*advanced, stasks, workers, logger, nil, []tasks.Task{telemetryConfigTask, telemetryUsageTask, telemetryKeysClientSideTask, telemetryKeysServerSideTask}, appMonitor) + sync := ssync.NewSynchronizer(*advanced, stasks, workers, logger, nil, []tasks.Task{telemetryConfigTask, telemetryUsageTask, telemetryKeysClientSideTask, telemetryKeysServerSideTask}) mstatus := make(chan int, 1) syncManager, err := synchronizer.NewSynchronizerManager( diff --git a/splitio/proxy/initialization_test.go b/splitio/proxy/initialization_test.go index 8a6d87da..37c5ad8a 100644 --- a/splitio/proxy/initialization_test.go +++ b/splitio/proxy/initialization_test.go @@ -5,7 +5,7 @@ import ( "testing" "time" - "github.com/splitio/go-split-commons/v4/synchronizer" + "github.com/splitio/go-split-commons/v5/synchronizer" ) type syncManagerMock struct { diff --git a/splitio/proxy/internal/dtos.go b/splitio/proxy/internal/dtos.go index 7a7d1f29..686fd036 100644 --- a/splitio/proxy/internal/dtos.go +++ b/splitio/proxy/internal/dtos.go @@ -1,10 +1,10 @@ package internal import ( - "github.com/splitio/go-split-commons/v4/dtos" + "github.com/splitio/go-split-commons/v5/dtos" ) -//RawData represents the raw data submitted by an sdk when posting data with associated metadata +// RawData represents the raw data submitted by an sdk when posting data with associated metadata type RawData struct { Metadata dtos.Metadata Payload []byte diff --git a/splitio/proxy/proxy.go b/splitio/proxy/proxy.go index b0312a8d..f35dac9e 100644 --- a/splitio/proxy/proxy.go +++ b/splitio/proxy/proxy.go @@ -5,7 +5,7 @@ import ( "fmt" "net/http" - "github.com/splitio/go-split-commons/v4/service" + "github.com/splitio/go-split-commons/v5/service" "github.com/splitio/go-toolkit/v5/logging" "github.com/splitio/split-synchronizer/v5/splitio/common/impressionlistener" diff --git a/splitio/proxy/proxy_test.go b/splitio/proxy/proxy_test.go index f0e1a0c2..fa4ec5e3 100644 --- a/splitio/proxy/proxy_test.go +++ b/splitio/proxy/proxy_test.go @@ -10,8 +10,8 @@ import ( "testing" "time" - "github.com/splitio/go-split-commons/v4/dtos" - serviceMocks "github.com/splitio/go-split-commons/v4/service/mocks" + "github.com/splitio/go-split-commons/v5/dtos" + serviceMocks "github.com/splitio/go-split-commons/v5/service/mocks" "github.com/splitio/go-toolkit/v5/logging" ilmock "github.com/splitio/split-synchronizer/v5/splitio/common/impressionlistener/mocks" "github.com/splitio/split-synchronizer/v5/splitio/proxy/caching" diff --git a/splitio/proxy/storage/mocks/mocks.go b/splitio/proxy/storage/mocks/mocks.go index 42cce30f..2134054c 100644 --- a/splitio/proxy/storage/mocks/mocks.go +++ b/splitio/proxy/storage/mocks/mocks.go @@ -1,7 +1,7 @@ package mocks import ( - "github.com/splitio/go-split-commons/v4/dtos" + "github.com/splitio/go-split-commons/v5/dtos" ) type ProxySplitStorageMock struct { diff --git a/splitio/proxy/storage/optimized/changesummary.go b/splitio/proxy/storage/optimized/changesummary.go index 0f5221e2..162198a1 100644 --- a/splitio/proxy/storage/optimized/changesummary.go +++ b/splitio/proxy/storage/optimized/changesummary.go @@ -5,7 +5,7 @@ import ( "math" "sync" - "github.com/splitio/go-split-commons/v4/dtos" + "github.com/splitio/go-split-commons/v5/dtos" ) // ErrUnknownChangeNumber is returned when trying to fetch a recipe for a change number not present in cache diff --git a/splitio/proxy/storage/optimized/changesummary_test.go b/splitio/proxy/storage/optimized/changesummary_test.go index 4df5ec06..324760a4 100644 --- a/splitio/proxy/storage/optimized/changesummary_test.go +++ b/splitio/proxy/storage/optimized/changesummary_test.go @@ -3,7 +3,7 @@ package optimized import ( "testing" - "github.com/splitio/go-split-commons/v4/dtos" + "github.com/splitio/go-split-commons/v5/dtos" ) func stringSlicesEqual(a []string, b []string) bool { diff --git a/splitio/proxy/storage/persistent/splits.go b/splitio/proxy/storage/persistent/splits.go index 2343a3fb..0b450950 100644 --- a/splitio/proxy/storage/persistent/splits.go +++ b/splitio/proxy/storage/persistent/splits.go @@ -6,7 +6,7 @@ import ( "encoding/json" "sync" - "github.com/splitio/go-split-commons/v4/dtos" + "github.com/splitio/go-split-commons/v5/dtos" "github.com/splitio/go-toolkit/v5/logging" ) diff --git a/splitio/proxy/storage/persistent/splits_test.go b/splitio/proxy/storage/persistent/splits_test.go index ebbb1ddd..d6919a62 100644 --- a/splitio/proxy/storage/persistent/splits_test.go +++ b/splitio/proxy/storage/persistent/splits_test.go @@ -3,7 +3,7 @@ package persistent import ( "testing" - "github.com/splitio/go-split-commons/v4/dtos" + "github.com/splitio/go-split-commons/v5/dtos" "github.com/splitio/go-toolkit/v5/logging" ) diff --git a/splitio/proxy/storage/segments.go b/splitio/proxy/storage/segments.go index b3ec4558..65168b5e 100644 --- a/splitio/proxy/storage/segments.go +++ b/splitio/proxy/storage/segments.go @@ -4,8 +4,8 @@ import ( "errors" "fmt" - "github.com/splitio/go-split-commons/v4/dtos" - "github.com/splitio/go-split-commons/v4/storage" + "github.com/splitio/go-split-commons/v5/dtos" + "github.com/splitio/go-split-commons/v5/storage" "github.com/splitio/go-toolkit/v5/datastructures/set" "github.com/splitio/go-toolkit/v5/logging" diff --git a/splitio/proxy/storage/splits.go b/splitio/proxy/storage/splits.go index 8a1d635b..bc4a99d3 100644 --- a/splitio/proxy/storage/splits.go +++ b/splitio/proxy/storage/splits.go @@ -5,9 +5,9 @@ import ( "fmt" "sync" - "github.com/splitio/go-split-commons/v4/dtos" - "github.com/splitio/go-split-commons/v4/storage" - "github.com/splitio/go-split-commons/v4/storage/inmemory/mutexmap" + "github.com/splitio/go-split-commons/v5/dtos" + "github.com/splitio/go-split-commons/v5/storage" + "github.com/splitio/go-split-commons/v5/storage/inmemory/mutexmap" "github.com/splitio/go-toolkit/v5/datastructures/set" "github.com/splitio/go-toolkit/v5/logging" diff --git a/splitio/proxy/storage/splits_test.go b/splitio/proxy/storage/splits_test.go index c92644cc..7365564c 100644 --- a/splitio/proxy/storage/splits_test.go +++ b/splitio/proxy/storage/splits_test.go @@ -5,7 +5,7 @@ import ( "github.com/splitio/split-synchronizer/v5/splitio/proxy/storage/persistent" - "github.com/splitio/go-split-commons/v4/dtos" + "github.com/splitio/go-split-commons/v5/dtos" "github.com/splitio/go-toolkit/v5/logging" ) @@ -23,7 +23,6 @@ func TestSplitStorage(t *testing.T) { {Name: "s2", ChangeNumber: 2, Status: "ACTIVE"}, }, nil, 1) - pss := NewProxySplitStorage(dbw, logger, true) sinceMinus1, currentCN, err := pss.recipes.FetchSince(-1) @@ -61,4 +60,3 @@ func TestSplitStorage(t *testing.T) { } } - diff --git a/splitio/proxy/storage/telemetry.go b/splitio/proxy/storage/telemetry.go index d6ac5d7a..341f9615 100644 --- a/splitio/proxy/storage/telemetry.go +++ b/splitio/proxy/storage/telemetry.go @@ -4,9 +4,9 @@ import ( "sync" "time" - "github.com/splitio/go-split-commons/v4/storage" - "github.com/splitio/go-split-commons/v4/storage/inmemory" - "github.com/splitio/go-split-commons/v4/telemetry" + "github.com/splitio/go-split-commons/v5/storage" + "github.com/splitio/go-split-commons/v5/storage/inmemory" + "github.com/splitio/go-split-commons/v5/telemetry" ) // Local telemetry constants diff --git a/splitio/proxy/storage/telemetryts.go b/splitio/proxy/storage/telemetryts.go index 7cf9046e..2f5411b0 100644 --- a/splitio/proxy/storage/telemetryts.go +++ b/splitio/proxy/storage/telemetryts.go @@ -5,7 +5,7 @@ import ( "sync" "time" - "github.com/splitio/go-split-commons/v4/storage" + "github.com/splitio/go-split-commons/v5/storage" ) // Granularity selection constants to be used upon component instantiation diff --git a/splitio/proxy/tasks/deferred.go b/splitio/proxy/tasks/deferred.go index 84fe8df2..571fed85 100644 --- a/splitio/proxy/tasks/deferred.go +++ b/splitio/proxy/tasks/deferred.go @@ -4,7 +4,7 @@ import ( "errors" "sync" - "github.com/splitio/go-split-commons/v4/tasks" + "github.com/splitio/go-split-commons/v5/tasks" "github.com/splitio/go-toolkit/v5/asynctask" "github.com/splitio/go-toolkit/v5/logging" gtSync "github.com/splitio/go-toolkit/v5/sync" diff --git a/splitio/proxy/tasks/events.go b/splitio/proxy/tasks/events.go index 6b404aca..672f74d2 100644 --- a/splitio/proxy/tasks/events.go +++ b/splitio/proxy/tasks/events.go @@ -3,7 +3,7 @@ package tasks import ( "fmt" - "github.com/splitio/go-split-commons/v4/service/api" + "github.com/splitio/go-split-commons/v5/service/api" "github.com/splitio/go-toolkit/v5/common" "github.com/splitio/go-toolkit/v5/logging" "github.com/splitio/go-toolkit/v5/workerpool" diff --git a/splitio/proxy/tasks/impcount.go b/splitio/proxy/tasks/impcount.go index 29fec4d4..b5ffb0b9 100644 --- a/splitio/proxy/tasks/impcount.go +++ b/splitio/proxy/tasks/impcount.go @@ -3,7 +3,7 @@ package tasks import ( "fmt" - "github.com/splitio/go-split-commons/v4/service/api" + "github.com/splitio/go-split-commons/v5/service/api" "github.com/splitio/go-toolkit/v5/common" "github.com/splitio/go-toolkit/v5/logging" "github.com/splitio/go-toolkit/v5/workerpool" diff --git a/splitio/proxy/tasks/impressions.go b/splitio/proxy/tasks/impressions.go index 2be618a6..bbf82d0a 100644 --- a/splitio/proxy/tasks/impressions.go +++ b/splitio/proxy/tasks/impressions.go @@ -3,7 +3,7 @@ package tasks import ( "fmt" - "github.com/splitio/go-split-commons/v4/service/api" + "github.com/splitio/go-split-commons/v5/service/api" "github.com/splitio/go-toolkit/v5/common" "github.com/splitio/go-toolkit/v5/logging" "github.com/splitio/go-toolkit/v5/workerpool" diff --git a/splitio/proxy/tasks/telemetry.go b/splitio/proxy/tasks/telemetry.go index 574e414e..a3e9edce 100644 --- a/splitio/proxy/tasks/telemetry.go +++ b/splitio/proxy/tasks/telemetry.go @@ -3,7 +3,7 @@ package tasks import ( "fmt" - "github.com/splitio/go-split-commons/v4/service/api" + "github.com/splitio/go-split-commons/v5/service/api" "github.com/splitio/go-toolkit/v5/common" "github.com/splitio/go-toolkit/v5/logging" "github.com/splitio/go-toolkit/v5/workerpool" diff --git a/splitio/util/utils.go b/splitio/util/utils.go index 136c3189..023b9971 100644 --- a/splitio/util/utils.go +++ b/splitio/util/utils.go @@ -5,7 +5,7 @@ import ( "fmt" "strings" - "github.com/splitio/go-split-commons/v4/dtos" + "github.com/splitio/go-split-commons/v5/dtos" "github.com/splitio/go-toolkit/v5/hasher" "github.com/splitio/go-toolkit/v5/nethelpers" "github.com/splitio/split-synchronizer/v5/splitio" diff --git a/splitio/version.go b/splitio/version.go index 22e967f5..6d6c90e7 100644 --- a/splitio/version.go +++ b/splitio/version.go @@ -2,4 +2,4 @@ package splitio // Version is the version of this Agent -const Version = "5.3.2" +const Version = "5.3.3-rc1" From 9dbfc0bb1c27f4ab563b1485616d6b27d4e11208 Mon Sep 17 00:00:00 2001 From: Matias Melograno Date: Wed, 5 Jul 2023 14:20:44 -0300 Subject: [PATCH 02/14] pointed to latest of iffu commons --- go.mod | 2 +- go.sum | 4 ++-- splitio/commitversion.go | 2 +- splitio/version.go | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 5a580f26..4c9fc011 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/gin-gonic/gin v1.9.1 github.com/google/uuid v1.3.0 github.com/splitio/gincache v0.0.1-rc7 - github.com/splitio/go-split-commons/v5 v5.0.0-20230704174903-de1699828951 + github.com/splitio/go-split-commons/v5 v5.0.0-20230705170902-6683e3140e89 github.com/splitio/go-toolkit/v5 v5.3.1 go.etcd.io/bbolt v1.3.6 ) diff --git a/go.sum b/go.sum index 80b650f7..33fe916c 100644 --- a/go.sum +++ b/go.sum @@ -99,8 +99,8 @@ github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUA github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= github.com/splitio/gincache v0.0.1-rc7 h1:BNIP3uaT4zqRepYwi6TRJevzPX3EsgUnLSA3nwNu5tw= github.com/splitio/gincache v0.0.1-rc7/go.mod h1:IUKPDIlTSH8bNqpgMDWjgrbbkqhApnQHSxXp5uKjGg8= -github.com/splitio/go-split-commons/v5 v5.0.0-20230704174903-de1699828951 h1:DkMZefg+dNs5YpmHW3Yob3kd7hvNT5Pzkzrit1CSihM= -github.com/splitio/go-split-commons/v5 v5.0.0-20230704174903-de1699828951/go.mod h1:k2hJRZgM1IOElE6D4/cq7zXnQwPtMUW1cHKQzdgUh7E= +github.com/splitio/go-split-commons/v5 v5.0.0-20230705170902-6683e3140e89 h1:GlRu14OYnGB5VyWOitlGzvJ0hJCnMmxXL1bs5ZSUanw= +github.com/splitio/go-split-commons/v5 v5.0.0-20230705170902-6683e3140e89/go.mod h1:k2hJRZgM1IOElE6D4/cq7zXnQwPtMUW1cHKQzdgUh7E= github.com/splitio/go-toolkit/v5 v5.3.1 h1:9J/byd0fRxWj5/Zg0QZOnUxKBDIAMCGr7rySYzJKdJg= github.com/splitio/go-toolkit/v5 v5.3.1/go.mod h1:xYhUvV1gga9/1029Wbp5pjnR6Cy8nvBpjw99wAbsMko= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= diff --git a/splitio/commitversion.go b/splitio/commitversion.go index 6f49ae0e..0877f8d7 100644 --- a/splitio/commitversion.go +++ b/splitio/commitversion.go @@ -5,4 +5,4 @@ This file is created automatically, please do not edit */ // CommitVersion is the version of the last commit previous to release -const CommitVersion = "6f1c334" +const CommitVersion = "c992b4d" diff --git a/splitio/version.go b/splitio/version.go index 6d6c90e7..ac492fc7 100644 --- a/splitio/version.go +++ b/splitio/version.go @@ -2,4 +2,4 @@ package splitio // Version is the version of this Agent -const Version = "5.3.3-rc1" +const Version = "5.3.3-rc2" From f4e90a52e46ff254a5d67066c3fc851ce2ccc822 Mon Sep 17 00:00:00 2001 From: Matias Melograno Date: Fri, 7 Jul 2023 10:45:21 -0300 Subject: [PATCH 03/14] pointed to latest in commons which limited segments fetches --- go.mod | 3 ++- go.sum | 6 ++++-- splitio/version.go | 2 +- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/go.mod b/go.mod index 4c9fc011..3859c5a0 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/gin-gonic/gin v1.9.1 github.com/google/uuid v1.3.0 github.com/splitio/gincache v0.0.1-rc7 - github.com/splitio/go-split-commons/v5 v5.0.0-20230705170902-6683e3140e89 + github.com/splitio/go-split-commons/v5 v5.0.0-20230707134259-5fd92f99c82b github.com/splitio/go-toolkit/v5 v5.3.1 go.etcd.io/bbolt v1.3.6 ) @@ -40,6 +40,7 @@ require ( golang.org/x/arch v0.3.0 // indirect golang.org/x/crypto v0.9.0 // indirect golang.org/x/net v0.10.0 // indirect + golang.org/x/sync v0.3.0 // indirect golang.org/x/sys v0.8.0 // indirect golang.org/x/text v0.9.0 // indirect google.golang.org/protobuf v1.30.0 // indirect diff --git a/go.sum b/go.sum index 33fe916c..8b4b4495 100644 --- a/go.sum +++ b/go.sum @@ -99,8 +99,8 @@ github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUA github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= github.com/splitio/gincache v0.0.1-rc7 h1:BNIP3uaT4zqRepYwi6TRJevzPX3EsgUnLSA3nwNu5tw= github.com/splitio/gincache v0.0.1-rc7/go.mod h1:IUKPDIlTSH8bNqpgMDWjgrbbkqhApnQHSxXp5uKjGg8= -github.com/splitio/go-split-commons/v5 v5.0.0-20230705170902-6683e3140e89 h1:GlRu14OYnGB5VyWOitlGzvJ0hJCnMmxXL1bs5ZSUanw= -github.com/splitio/go-split-commons/v5 v5.0.0-20230705170902-6683e3140e89/go.mod h1:k2hJRZgM1IOElE6D4/cq7zXnQwPtMUW1cHKQzdgUh7E= +github.com/splitio/go-split-commons/v5 v5.0.0-20230707134259-5fd92f99c82b h1:Bp9xNvis6vaAPys7JaLFz2DqkcvTbXglRfO/MfQSa9k= +github.com/splitio/go-split-commons/v5 v5.0.0-20230707134259-5fd92f99c82b/go.mod h1:lzoVmYJaCqB8UPSxWva0BZe7fF+bRJD+eP0rNi/lL7c= github.com/splitio/go-toolkit/v5 v5.3.1 h1:9J/byd0fRxWj5/Zg0QZOnUxKBDIAMCGr7rySYzJKdJg= github.com/splitio/go-toolkit/v5 v5.3.1/go.mod h1:xYhUvV1gga9/1029Wbp5pjnR6Cy8nvBpjw99wAbsMko= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -140,6 +140,8 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= +golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= diff --git a/splitio/version.go b/splitio/version.go index ac492fc7..f7d07655 100644 --- a/splitio/version.go +++ b/splitio/version.go @@ -2,4 +2,4 @@ package splitio // Version is the version of this Agent -const Version = "5.3.3-rc2" +const Version = "5.3.3-rc3" From 8a7d56c716ee565c6eaacf3b58a7d2a7302b4cb2 Mon Sep 17 00:00:00 2001 From: Matias Melograno Date: Sat, 8 Jul 2023 00:42:02 -0300 Subject: [PATCH 04/14] latest in commons --- go.mod | 2 +- go.sum | 2 ++ splitio/version.go | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/go.mod b/go.mod index 3859c5a0..157366d4 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/gin-gonic/gin v1.9.1 github.com/google/uuid v1.3.0 github.com/splitio/gincache v0.0.1-rc7 - github.com/splitio/go-split-commons/v5 v5.0.0-20230707134259-5fd92f99c82b + github.com/splitio/go-split-commons/v5 v5.0.0-20230708033637-6447978b2344 github.com/splitio/go-toolkit/v5 v5.3.1 go.etcd.io/bbolt v1.3.6 ) diff --git a/go.sum b/go.sum index 8b4b4495..6691370c 100644 --- a/go.sum +++ b/go.sum @@ -101,6 +101,8 @@ github.com/splitio/gincache v0.0.1-rc7 h1:BNIP3uaT4zqRepYwi6TRJevzPX3EsgUnLSA3nw github.com/splitio/gincache v0.0.1-rc7/go.mod h1:IUKPDIlTSH8bNqpgMDWjgrbbkqhApnQHSxXp5uKjGg8= github.com/splitio/go-split-commons/v5 v5.0.0-20230707134259-5fd92f99c82b h1:Bp9xNvis6vaAPys7JaLFz2DqkcvTbXglRfO/MfQSa9k= github.com/splitio/go-split-commons/v5 v5.0.0-20230707134259-5fd92f99c82b/go.mod h1:lzoVmYJaCqB8UPSxWva0BZe7fF+bRJD+eP0rNi/lL7c= +github.com/splitio/go-split-commons/v5 v5.0.0-20230708033637-6447978b2344 h1:Cncrgv06kiCm2CMEM/2mRdAhWj2VmmqfES5f14DoFQM= +github.com/splitio/go-split-commons/v5 v5.0.0-20230708033637-6447978b2344/go.mod h1:lzoVmYJaCqB8UPSxWva0BZe7fF+bRJD+eP0rNi/lL7c= github.com/splitio/go-toolkit/v5 v5.3.1 h1:9J/byd0fRxWj5/Zg0QZOnUxKBDIAMCGr7rySYzJKdJg= github.com/splitio/go-toolkit/v5 v5.3.1/go.mod h1:xYhUvV1gga9/1029Wbp5pjnR6Cy8nvBpjw99wAbsMko= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= diff --git a/splitio/version.go b/splitio/version.go index f7d07655..ffd0a1a9 100644 --- a/splitio/version.go +++ b/splitio/version.go @@ -2,4 +2,4 @@ package splitio // Version is the version of this Agent -const Version = "5.3.3-rc3" +const Version = "5.3.3-rc4" From 199471a1998c0aeb293c112509e7abbb6a743734 Mon Sep 17 00:00:00 2001 From: Martin Redolatti Date: Wed, 12 Jul 2023 15:06:32 -0300 Subject: [PATCH 05/14] use differente cache keys for gzip-indicated requests --- splitio/commitversion.go | 2 +- splitio/proxy/caching/caching.go | 17 +++++++++++++---- splitio/proxy/caching/caching_test.go | 6 +++++- splitio/proxy/caching/workers.go | 8 ++++++-- splitio/proxy/caching/workers_test.go | 2 +- splitio/proxy/proxy_test.go | 4 +++- 6 files changed, 29 insertions(+), 10 deletions(-) diff --git a/splitio/commitversion.go b/splitio/commitversion.go index c50be4be..7893db39 100644 --- a/splitio/commitversion.go +++ b/splitio/commitversion.go @@ -5,4 +5,4 @@ This file is created automatically, please do not edit */ // CommitVersion is the version of the last commit previous to release -const CommitVersion = "c565f10" +const CommitVersion = "ac31078" diff --git a/splitio/proxy/caching/caching.go b/splitio/proxy/caching/caching.go index ce14d3d9..fa047133 100644 --- a/splitio/proxy/caching/caching.go +++ b/splitio/proxy/caching/caching.go @@ -51,8 +51,11 @@ func MakeSurrogateForMySegments(mysegments []dtos.MySegmentDTO) []string { } // MakeMySegmentsEntry create a cache entry key for mysegments -func MakeMySegmentsEntry(key string) string { - return "/api/mySegments/" + key +func MakeMySegmentsEntries(key string) []string { + return []string{ + "/api/mySegments/" + key, + "gzip::/api/mySegments/" + key, + } } // MakeProxyCache creates and configures a split-proxy-ready cache @@ -61,12 +64,18 @@ func MakeProxyCache() *gincache.Middleware { SuccessfulOnly: true, // we're not interested in caching non-200 responses Size: cacheSize, KeyFactory: func(ctx *gin.Context) string { + + var encodingPrefix string + if strings.Contains(ctx.Request.Header.Get("Accept-Encoding"), "gzip") { + encodingPrefix = "gzip::" + } + if strings.HasPrefix(ctx.Request.URL.Path, "/api/auth") || strings.HasPrefix(ctx.Request.URL.Path, "/api/v2/auth") { // For auth requests, since we don't support streaming yet, we only need a single entry in the table, // so we strip the query-string which contains the user-list - return ctx.Request.URL.Path + return encodingPrefix + ctx.Request.URL.Path } - return ctx.Request.URL.Path + ctx.Request.URL.RawQuery + return encodingPrefix + ctx.Request.URL.Path + ctx.Request.URL.RawQuery }, // we make each request handler responsible for generating the surrogates. // this way we can use segment names as surrogates for mysegments & segment changes diff --git a/splitio/proxy/caching/caching_test.go b/splitio/proxy/caching/caching_test.go index cd02b73a..fd16e974 100644 --- a/splitio/proxy/caching/caching_test.go +++ b/splitio/proxy/caching/caching_test.go @@ -15,7 +15,11 @@ func TestSegment(t *testing.T) { } func TestMySegmentKeyGeneration(t *testing.T) { - if MakeMySegmentsEntry("k1") != "/api/mySegments/k1" { + entries := MakeMySegmentsEntries("k1") + if entries[0] != "/api/mySegments/k1" { + t.Error("invalid mySegments cache entry") + } + if entries[1] != "gzip::/api/mySegments/k1" { t.Error("invalid mySegments cache entry") } } diff --git a/splitio/proxy/caching/workers.go b/splitio/proxy/caching/workers.go index 685a4de3..f6f674c8 100644 --- a/splitio/proxy/caching/workers.go +++ b/splitio/proxy/caching/workers.go @@ -88,7 +88,9 @@ func (c *CacheAwareSegmentSynchronizer) SynchronizeSegment(name string, till *in // remove individual entries for each affected key for idx := range result.UpdatedKeys { - c.cacheFlusher.Evict(MakeMySegmentsEntry(result.UpdatedKeys[idx])) + for _, key := range MakeMySegmentsEntries(result.UpdatedKeys[idx]) { + c.cacheFlusher.Evict(key) + } } return result, err @@ -116,7 +118,9 @@ func (c *CacheAwareSegmentSynchronizer) SynchronizeSegments() (map[string]segmen } for idx := range result.UpdatedKeys { - c.cacheFlusher.Evict(MakeMySegmentsEntry(result.UpdatedKeys[idx])) + for _, key := range MakeMySegmentsEntries(result.UpdatedKeys[idx]) { + c.cacheFlusher.Evict(key) + } } } diff --git a/splitio/proxy/caching/workers_test.go b/splitio/proxy/caching/workers_test.go index 201e4888..18d0ebfa 100644 --- a/splitio/proxy/caching/workers_test.go +++ b/splitio/proxy/caching/workers_test.go @@ -113,7 +113,7 @@ func TestCacheAwareSegmentSync(t *testing.T) { evictBySurrogateCalls++ } cacheFlusherMock.EvictCall = func(key string) { - if key != "/api/mySegments/k1" { + if key != "/api/mySegments/k1" && key != "gzip::/api/mySegments/k1" { t.Error("incorrect mysegments entry purged: ", key) } } diff --git a/splitio/proxy/proxy_test.go b/splitio/proxy/proxy_test.go index f0e1a0c2..eb891285 100644 --- a/splitio/proxy/proxy_test.go +++ b/splitio/proxy/proxy_test.go @@ -239,7 +239,9 @@ func TestSegmentChangesAndMySegmentsEndpoints(t *testing.T) { } // Same for mysegments - opts.Cache.Evict(caching.MakeMySegmentsEntry("k1")) + entries := caching.MakeMySegmentsEntries("k1") + opts.Cache.Evict(entries[0]) + opts.Cache.Evict(entries[1]) _, body, headers = get("mySegments/k1", opts.Port, map[string]string{"Authorization": "Bearer someApiKey"}) segments = toMySegments(body) if len(segments) != 0 { From 4253b9ff9a475c5fb94f5016246e03beb7161e44 Mon Sep 17 00:00:00 2001 From: Martin Redolatti Date: Wed, 12 Jul 2023 17:23:17 -0300 Subject: [PATCH 06/14] attempt to fix delete-after-update possible issue --- splitio/commitversion.go | 2 +- .../proxy/storage/optimized/changesummary.go | 73 +++++++++++++++++-- 2 files changed, 67 insertions(+), 8 deletions(-) diff --git a/splitio/commitversion.go b/splitio/commitversion.go index 7893db39..4518302e 100644 --- a/splitio/commitversion.go +++ b/splitio/commitversion.go @@ -5,4 +5,4 @@ This file is created automatically, please do not edit */ // CommitVersion is the version of the last commit previous to release -const CommitVersion = "ac31078" +const CommitVersion = "199471a" diff --git a/splitio/proxy/storage/optimized/changesummary.go b/splitio/proxy/storage/optimized/changesummary.go index 0f5221e2..c0aa9f87 100644 --- a/splitio/proxy/storage/optimized/changesummary.go +++ b/splitio/proxy/storage/optimized/changesummary.go @@ -20,11 +20,16 @@ type SplitMinimalView struct { // ChangeSummary represents a set of changes from/in a specific point in time type ChangeSummary struct { Updated map[string]string // feature flag name -> trafficType - Removed map[string]string // featyre flag name -> trafficType + Removed map[string]string // feature flag name -> trafficType + Current splitSet // list of splits originally available at this point in time } -func newEmptyChangeSummary() ChangeSummary { - return ChangeSummary{Updated: map[string]string{}, Removed: map[string]string{}} +func newEmptyChangeSummary(ss *splitSet) ChangeSummary { + ns := newSplitSet() + if ss != nil { + ns = *ss + } + return ChangeSummary{Updated: map[string]string{}, Removed: map[string]string{}, Current: ns} } func (c *ChangeSummary) applyChange(toAdd []SplitMinimalView, toRemove []SplitMinimalView) { @@ -36,7 +41,9 @@ func (c *ChangeSummary) applyChange(toAdd []SplitMinimalView, toRemove []SplitMi for _, split := range toRemove { if _, ok := c.Updated[split.Name]; ok { delete(c.Updated, split.Name) - } else { + } + + if c.Current.contains(split.Name) { c.Removed[split.Name] = split.TrafficType } } @@ -56,7 +63,7 @@ func NewSplitChangesSummaries(maxRecipes int) *SplitChangesSummaries { return &SplitChangesSummaries{ maxRecipes: maxRecipes + 1, // we keep an extra slot for -1 which is fixed currentCN: -1, - changes: map[int64]ChangeSummary{-1: newEmptyChangeSummary()}, + changes: map[int64]ChangeSummary{-1: newEmptyChangeSummary(nil)}, } } @@ -67,6 +74,17 @@ func (s *SplitChangesSummaries) AddChanges(added []dtos.SplitDTO, removed []dtos addedViews := toSplitMinimalViews(added) removedViews := toSplitMinimalViews(removed) + + if cn == -1 { + // During the first hit (cn=-1) we want to capture ALL split names, to form an initial snapshot of what the user will get + // and nothing else. + ss := newSplitSet() + ss.update(addedViews, nil) + cs := s.changes[0] + cs.Current = ss + s.changes[0] = cs + } + if cn <= s.currentCN { return } @@ -75,13 +93,23 @@ func (s *SplitChangesSummaries) AddChanges(added []dtos.SplitDTO, removed []dtos s.removeOldestRecipe() } + var lastCheckpoint int64 = -1 + var lastSplitSet splitSet for key, summary := range s.changes { + if key > lastCheckpoint { + lastCheckpoint = key + lastSplitSet = summary.Current + } + summary.applyChange(addedViews, removedViews) s.changes[key] = summary } s.currentCN = cn - s.changes[cn] = newEmptyChangeSummary() + + newSS := lastSplitSet.clone() + newSS.update(addedViews, removedViews) + s.changes[cn] = newEmptyChangeSummary(&newSS) } // AddOlderChange is used to add a change older than the oldest one currently stored (when the sync started) @@ -99,7 +127,7 @@ func (s *SplitChangesSummaries) AddOlderChange(added []dtos.SplitDTO, removed [] s.removeOldestRecipe() } - summary := newEmptyChangeSummary() + summary := newEmptyChangeSummary(nil) // TODO(mredolatti): see if we can do better than this for _, split := range added { summary.Updated[split.Name] = split.TrafficTypeName } @@ -169,3 +197,34 @@ func toSplitMinimalViews(items []dtos.SplitDTO) []SplitMinimalView { } return views } + +type splitSet struct { + data map[string]struct{} +} + +func newSplitSet() splitSet { + return splitSet{data: make(map[string]struct{})} +} + +func (s *splitSet) clone() splitSet { + x := newSplitSet() + for key := range s.data { + x.data[key] = struct{}{} + } + return x +} + +func (s *splitSet) update(toAdd []SplitMinimalView, toRemove []SplitMinimalView) { + for idx := range toAdd { + s.data[toAdd[idx].Name] = struct{}{} + } + + for idx := range toRemove { + delete(s.data, toAdd[idx].Name) + } +} + +func (s *splitSet) contains(name string) bool { + _, ok := s.data[name] + return ok +} From 5d527e784d4b70f4050b4acfbab99cb0c9e26255 Mon Sep 17 00:00:00 2001 From: Martin Redolatti Date: Wed, 12 Jul 2023 17:39:20 -0300 Subject: [PATCH 07/14] . --- splitio/commitversion.go | 2 +- .../proxy/storage/optimized/changesummary.go | 23 +++++++++---------- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/splitio/commitversion.go b/splitio/commitversion.go index 4518302e..069ab18d 100644 --- a/splitio/commitversion.go +++ b/splitio/commitversion.go @@ -5,4 +5,4 @@ This file is created automatically, please do not edit */ // CommitVersion is the version of the last commit previous to release -const CommitVersion = "199471a" +const CommitVersion = "4253b9f" diff --git a/splitio/proxy/storage/optimized/changesummary.go b/splitio/proxy/storage/optimized/changesummary.go index c0aa9f87..38dbf673 100644 --- a/splitio/proxy/storage/optimized/changesummary.go +++ b/splitio/proxy/storage/optimized/changesummary.go @@ -21,15 +21,14 @@ type SplitMinimalView struct { type ChangeSummary struct { Updated map[string]string // feature flag name -> trafficType Removed map[string]string // feature flag name -> trafficType - Current splitSet // list of splits originally available at this point in time + Current *splitSet // list of splits originally available at this point in time } func newEmptyChangeSummary(ss *splitSet) ChangeSummary { - ns := newSplitSet() - if ss != nil { - ns = *ss - } - return ChangeSummary{Updated: map[string]string{}, Removed: map[string]string{}, Current: ns} + if ss == nil { + ss = newSplitSet() + } + return ChangeSummary{Updated: map[string]string{}, Removed: map[string]string{}, Current: ss} } func (c *ChangeSummary) applyChange(toAdd []SplitMinimalView, toRemove []SplitMinimalView) { @@ -94,7 +93,7 @@ func (s *SplitChangesSummaries) AddChanges(added []dtos.SplitDTO, removed []dtos } var lastCheckpoint int64 = -1 - var lastSplitSet splitSet + lastSplitSet := newSplitSet() for key, summary := range s.changes { if key > lastCheckpoint { lastCheckpoint = key @@ -109,7 +108,7 @@ func (s *SplitChangesSummaries) AddChanges(added []dtos.SplitDTO, removed []dtos newSS := lastSplitSet.clone() newSS.update(addedViews, removedViews) - s.changes[cn] = newEmptyChangeSummary(&newSS) + s.changes[cn] = newEmptyChangeSummary(newSS) } // AddOlderChange is used to add a change older than the oldest one currently stored (when the sync started) @@ -127,7 +126,7 @@ func (s *SplitChangesSummaries) AddOlderChange(added []dtos.SplitDTO, removed [] s.removeOldestRecipe() } - summary := newEmptyChangeSummary(nil) // TODO(mredolatti): see if we can do better than this + summary := newEmptyChangeSummary(nil) // TODO(mredolatti): see if we can do better than this for _, split := range added { summary.Updated[split.Name] = split.TrafficTypeName } @@ -202,11 +201,11 @@ type splitSet struct { data map[string]struct{} } -func newSplitSet() splitSet { - return splitSet{data: make(map[string]struct{})} +func newSplitSet() *splitSet { + return &splitSet{data: make(map[string]struct{})} } -func (s *splitSet) clone() splitSet { +func (s *splitSet) clone() *splitSet { x := newSplitSet() for key := range s.data { x.data[key] = struct{}{} From cf92e1614827f1c290208bdabd6de08478dbc364 Mon Sep 17 00:00:00 2001 From: Martin Redolatti Date: Wed, 12 Jul 2023 17:52:21 -0300 Subject: [PATCH 08/14] . --- splitio/commitversion.go | 2 +- splitio/proxy/storage/optimized/changesummary.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/splitio/commitversion.go b/splitio/commitversion.go index 069ab18d..e90e7a94 100644 --- a/splitio/commitversion.go +++ b/splitio/commitversion.go @@ -5,4 +5,4 @@ This file is created automatically, please do not edit */ // CommitVersion is the version of the last commit previous to release -const CommitVersion = "4253b9f" +const CommitVersion = "5d527e7" diff --git a/splitio/proxy/storage/optimized/changesummary.go b/splitio/proxy/storage/optimized/changesummary.go index 38dbf673..acdb31b3 100644 --- a/splitio/proxy/storage/optimized/changesummary.go +++ b/splitio/proxy/storage/optimized/changesummary.go @@ -219,7 +219,7 @@ func (s *splitSet) update(toAdd []SplitMinimalView, toRemove []SplitMinimalView) } for idx := range toRemove { - delete(s.data, toAdd[idx].Name) + delete(s.data, toRemove[idx].Name) } } From c585ee507e53a31cc5dbf7f1120e0b0c3e0f8f18 Mon Sep 17 00:00:00 2001 From: Martin Redolatti Date: Fri, 14 Jul 2023 14:49:41 -0300 Subject: [PATCH 09/14] fix log message when fetching imps/events/uks fails --- splitio/commitversion.go | 2 +- splitio/producer/task/pipelined.go | 9 ++++----- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/splitio/commitversion.go b/splitio/commitversion.go index e90e7a94..12a4c4b3 100644 --- a/splitio/commitversion.go +++ b/splitio/commitversion.go @@ -5,4 +5,4 @@ This file is created automatically, please do not edit */ // CommitVersion is the version of the last commit previous to release -const CommitVersion = "5d527e7" +const CommitVersion = "cf92e16" diff --git a/splitio/producer/task/pipelined.go b/splitio/producer/task/pipelined.go index cbb3c71a..3a54f5ac 100644 --- a/splitio/producer/task/pipelined.go +++ b/splitio/producer/task/pipelined.go @@ -165,6 +165,10 @@ func (p *PipelinedSyncTask) filler() { for p.running.IsSet() { timer.Reset(1 * time.Second) raw, err := p.worker.Fetch() + if err != nil { + p.logger.Error(fmt.Sprintf("[pipelined/%s] fetch function returned error: %s", p.name, err)) + } + if len(raw) == 0 { select { case <-timer.C: @@ -174,11 +178,6 @@ func (p *PipelinedSyncTask) filler() { return } } - if err != nil { - p.logger.Error(fmt.Sprintf("[pipelined/%s] fetch function returned error: %s", p.name, err)) - continue - } - howMany := len(raw) select { case p.inputBuffer <- raw: From ecb327b35c9215651edbb5e5eaa93e8d8d365c0a Mon Sep 17 00:00:00 2001 From: Martin Redolatti Date: Fri, 14 Jul 2023 15:33:51 -0300 Subject: [PATCH 10/14] add ut for splitset in optimized storage --- splitio/commitversion.go | 2 +- .../storage/optimized/changesummary_test.go | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/splitio/commitversion.go b/splitio/commitversion.go index 12a4c4b3..fbd8f6cb 100644 --- a/splitio/commitversion.go +++ b/splitio/commitversion.go @@ -5,4 +5,4 @@ This file is created automatically, please do not edit */ // CommitVersion is the version of the last commit previous to release -const CommitVersion = "cf92e16" +const CommitVersion = "c585ee5" diff --git a/splitio/proxy/storage/optimized/changesummary_test.go b/splitio/proxy/storage/optimized/changesummary_test.go index 4df5ec06..e06fae07 100644 --- a/splitio/proxy/storage/optimized/changesummary_test.go +++ b/splitio/proxy/storage/optimized/changesummary_test.go @@ -227,7 +227,24 @@ func TestSizeBoundaries(t *testing.T) { if err != ErrUnknownChangeNumber { t.Error("should have gotten unknown CN error. Got: ", err) } +} +func TestSplitSet(t *testing.T) { + ss := newSplitSet() + ss.update([]SplitMinimalView{{Name: "s1"}, {Name: "s2"}}, nil) + if !ss.contains("s1") || !ss.contains("s2") { + t.Error("splitSet should contain s1 & s2") + } + + clone := ss.clone() + if !clone.contains("s1") || !clone.contains("s2") { + t.Error("splitSet should contain s1 & s2") + } + + ss.update(nil, []SplitMinimalView{{Name: "s2"}}) + if !clone.contains("s1") { + t.Error("splitSet should contain s1") + } } /* TEST PLAN! From 1049e07ece9740565e83921c1348b5961337c71c Mon Sep 17 00:00:00 2001 From: Matias Melograno Date: Tue, 18 Jul 2023 13:45:32 -0300 Subject: [PATCH 11/14] preapre release with gincache 1.0.1 --- CHANGES.txt | 4 ++++ go.mod | 2 +- go.sum | 35 ++--------------------------------- splitio/commitversion.go | 2 +- splitio/version.go | 2 +- 5 files changed, 9 insertions(+), 36 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 1646ab1f..2bc030bd 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,7 @@ +5.4.0 (July 18, 2023) +- Improved streaming architecture implementation to apply feature flag updates from the notification received which is now enhanced, improving efficiency and reliability of the whole update system. +- Fixed possible edge case issue where deleting a feature flag doesn’t propagate immediately. + 5.3.2 (June 21, 2023) - Updated dependency of gin to v1.9.1 for vulnerability fixes. - Updated docker images for vulnerability fixes. diff --git a/go.mod b/go.mod index 97546200..9773b08f 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,7 @@ require ( github.com/gin-contrib/gzip v0.0.6 github.com/gin-gonic/gin v1.9.1 github.com/google/uuid v1.3.0 - github.com/splitio/gincache v0.0.1-rc7.0.20230712210108-6f694f8888b9 + github.com/splitio/gincache v1.0.1 github.com/splitio/go-split-commons/v5 v5.0.0-20230708033637-6447978b2344 github.com/splitio/go-toolkit/v5 v5.3.1 go.etcd.io/bbolt v1.3.6 diff --git a/go.sum b/go.sum index e571019c..c647d34f 100644 --- a/go.sum +++ b/go.sum @@ -31,7 +31,6 @@ github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg= github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= -github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= @@ -86,8 +85,8 @@ github.com/redis/go-redis/v9 v9.0.4/go.mod h1:WqMKv5vnQbRuZstUwxQI195wHy+t4PuXDO github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8= github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= -github.com/splitio/gincache v0.0.1-rc7.0.20230712210108-6f694f8888b9 h1:+6u1UXrSyKB0vrK2iElk/Ssi6prNyPDNR/0ChQPVdLE= -github.com/splitio/gincache v0.0.1-rc7.0.20230712210108-6f694f8888b9/go.mod h1:mw8gdl04QwbMWIWz4PwZz8Ce/NILLE4E87oLNnIlXOU= +github.com/splitio/gincache v1.0.1 h1:dLYdANY/BqH4KcUMCe/LluLyV5WtuE/LEdQWRE06IXU= +github.com/splitio/gincache v1.0.1/go.mod h1:CcgJDSM9Af75kyBH0724v55URVwMBuSj5x1eCWIOECY= github.com/splitio/go-split-commons/v5 v5.0.0-20230708033637-6447978b2344 h1:Cncrgv06kiCm2CMEM/2mRdAhWj2VmmqfES5f14DoFQM= github.com/splitio/go-split-commons/v5 v5.0.0-20230708033637-6447978b2344/go.mod h1:lzoVmYJaCqB8UPSxWva0BZe7fF+bRJD+eP0rNi/lL7c= github.com/splitio/go-toolkit/v5 v5.3.1 h1:9J/byd0fRxWj5/Zg0QZOnUxKBDIAMCGr7rySYzJKdJg= @@ -112,64 +111,34 @@ github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6 github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU= github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= -github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= go.etcd.io/bbolt v1.3.6 h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU= go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/arch v0.3.0 h1:02VY4/ZcO/gBOH6PUaoiptASxtXU10jazRCP865E97k= golang.org/x/arch v0.3.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= golang.org/x/crypto v0.9.0 h1:LF6fAI+IutBocDJ2OT0Q1g8plpYljMZ4+lty+dsqw3g= golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= -golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= diff --git a/splitio/commitversion.go b/splitio/commitversion.go index ffc74c5b..5e563ed9 100644 --- a/splitio/commitversion.go +++ b/splitio/commitversion.go @@ -5,4 +5,4 @@ This file is created automatically, please do not edit */ // CommitVersion is the version of the last commit previous to release -const CommitVersion = "9045abf" +const CommitVersion = "b9e384d" diff --git a/splitio/version.go b/splitio/version.go index 8331ad46..243a4d5c 100644 --- a/splitio/version.go +++ b/splitio/version.go @@ -2,4 +2,4 @@ package splitio // Version is the version of this Agent -const Version = "5.3.3-rc5" +const Version = "5.4.0-rc1" From da63b9fd93c751512275728894b3625422c7357b Mon Sep 17 00:00:00 2001 From: Matias Melograno Date: Tue, 18 Jul 2023 14:59:22 -0300 Subject: [PATCH 12/14] prepare release for 5.4.0 with iffu --- go.mod | 2 +- go.sum | 4 ++-- splitio/commitversion.go | 2 +- splitio/version.go | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 9773b08f..908d8a86 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/gin-gonic/gin v1.9.1 github.com/google/uuid v1.3.0 github.com/splitio/gincache v1.0.1 - github.com/splitio/go-split-commons/v5 v5.0.0-20230708033637-6447978b2344 + github.com/splitio/go-split-commons/v5 v5.0.0 github.com/splitio/go-toolkit/v5 v5.3.1 go.etcd.io/bbolt v1.3.6 ) diff --git a/go.sum b/go.sum index c647d34f..bbe5b69d 100644 --- a/go.sum +++ b/go.sum @@ -87,8 +87,8 @@ github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUA github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= github.com/splitio/gincache v1.0.1 h1:dLYdANY/BqH4KcUMCe/LluLyV5WtuE/LEdQWRE06IXU= github.com/splitio/gincache v1.0.1/go.mod h1:CcgJDSM9Af75kyBH0724v55URVwMBuSj5x1eCWIOECY= -github.com/splitio/go-split-commons/v5 v5.0.0-20230708033637-6447978b2344 h1:Cncrgv06kiCm2CMEM/2mRdAhWj2VmmqfES5f14DoFQM= -github.com/splitio/go-split-commons/v5 v5.0.0-20230708033637-6447978b2344/go.mod h1:lzoVmYJaCqB8UPSxWva0BZe7fF+bRJD+eP0rNi/lL7c= +github.com/splitio/go-split-commons/v5 v5.0.0 h1:bGRi0cf1JP5VNSi0a4BPQEWv/DACkeSKliazhPMVDPk= +github.com/splitio/go-split-commons/v5 v5.0.0/go.mod h1:lzoVmYJaCqB8UPSxWva0BZe7fF+bRJD+eP0rNi/lL7c= github.com/splitio/go-toolkit/v5 v5.3.1 h1:9J/byd0fRxWj5/Zg0QZOnUxKBDIAMCGr7rySYzJKdJg= github.com/splitio/go-toolkit/v5 v5.3.1/go.mod h1:xYhUvV1gga9/1029Wbp5pjnR6Cy8nvBpjw99wAbsMko= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= diff --git a/splitio/commitversion.go b/splitio/commitversion.go index 5e563ed9..8dcfbce0 100644 --- a/splitio/commitversion.go +++ b/splitio/commitversion.go @@ -5,4 +5,4 @@ This file is created automatically, please do not edit */ // CommitVersion is the version of the last commit previous to release -const CommitVersion = "b9e384d" +const CommitVersion = "1049e07" diff --git a/splitio/version.go b/splitio/version.go index 243a4d5c..84a70c52 100644 --- a/splitio/version.go +++ b/splitio/version.go @@ -2,4 +2,4 @@ package splitio // Version is the version of this Agent -const Version = "5.4.0-rc1" +const Version = "5.4.0" From 2db5dfc4ae48b71d76271a5d1aac7048f1c14950 Mon Sep 17 00:00:00 2001 From: Matias Melograno Date: Tue, 18 Jul 2023 16:06:32 -0300 Subject: [PATCH 13/14] solved vuln fixes in docker image --- CHANGES.txt | 1 + docker/Dockerfile.proxy | 2 +- docker/Dockerfile.synchronizer | 2 +- splitio/commitversion.go | 2 +- 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 2bc030bd..c6a00fa7 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,6 +1,7 @@ 5.4.0 (July 18, 2023) - Improved streaming architecture implementation to apply feature flag updates from the notification received which is now enhanced, improving efficiency and reliability of the whole update system. - Fixed possible edge case issue where deleting a feature flag doesn’t propagate immediately. +- Updated docker images for vulnerability fixes. 5.3.2 (June 21, 2023) - Updated dependency of gin to v1.9.1 for vulnerability fixes. diff --git a/docker/Dockerfile.proxy b/docker/Dockerfile.proxy index 75da07f7..e2ea204a 100644 --- a/docker/Dockerfile.proxy +++ b/docker/Dockerfile.proxy @@ -1,5 +1,5 @@ # Build stage -FROM golang:1.20.5-alpine3.18 AS builder +FROM golang:1.20.6-alpine3.18 AS builder ARG EXTRA_BUILD_ARGS diff --git a/docker/Dockerfile.synchronizer b/docker/Dockerfile.synchronizer index e0dfc17b..4d10cc1f 100644 --- a/docker/Dockerfile.synchronizer +++ b/docker/Dockerfile.synchronizer @@ -1,5 +1,5 @@ # Build stage -FROM golang:1.20.5-alpine3.18 AS builder +FROM golang:1.20.6-alpine3.18 AS builder ARG EXTRA_BUILD_ARGS diff --git a/splitio/commitversion.go b/splitio/commitversion.go index 8dcfbce0..47b58123 100644 --- a/splitio/commitversion.go +++ b/splitio/commitversion.go @@ -5,4 +5,4 @@ This file is created automatically, please do not edit */ // CommitVersion is the version of the last commit previous to release -const CommitVersion = "1049e07" +const CommitVersion = "da63b9f" From 4dcbbfcbc857c399ee6638b3eb55ed79de7551e2 Mon Sep 17 00:00:00 2001 From: Matias Melograno Date: Tue, 18 Jul 2023 17:47:50 -0300 Subject: [PATCH 14/14] returning type --- splitio/proxy/caching/workers.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/splitio/proxy/caching/workers.go b/splitio/proxy/caching/workers.go index 3b3ce145..cc4bff18 100644 --- a/splitio/proxy/caching/workers.go +++ b/splitio/proxy/caching/workers.go @@ -27,7 +27,7 @@ func NewCacheAwareSplitSync( runtimeTelemetry storage.TelemetryRuntimeProducer, cacheFlusher gincache.CacheFlusher, appMonitor application.MonitorProducerInterface, -) split.Updater { +) *CacheAwareSplitSynchronizer { return &CacheAwareSplitSynchronizer{ wrapped: split.NewSplitUpdater(splitStorage, splitFetcher, logger, runtimeTelemetry, appMonitor), splitStorage: splitStorage,