refactor(unified-storage): make datasyncer configurable (#97832)

This commit is contained in:
Jean-Philippe Quéméner
2024-12-12 21:41:01 +01:00
committed by GitHub
parent 6dc41f0b18
commit 1509fadd5b
9 changed files with 216 additions and 78 deletions
+4
View File
@@ -538,6 +538,10 @@ type Cfg struct {
type UnifiedStorageConfig struct {
DualWriterMode rest.DualWriterMode
DualWriterPeriodicDataSyncJobEnabled bool
// DataSyncerInterval defines how often the data syncer should run for a resource on the grafana instance.
DataSyncerInterval time.Duration
// DataSyncerRecordsLimit defines how many records will be processed at max during a sync invocation.
DataSyncerRecordsLimit int
}
type InstallPlugin struct {
+9
View File
@@ -2,6 +2,7 @@ package setting
import (
"strings"
"time"
"github.com/grafana/grafana/pkg/apiserver/rest"
)
@@ -29,9 +30,17 @@ func (cfg *Cfg) setUnifiedStorageConfig() {
// parse dualWriter periodic data syncer config
dualWriterPeriodicDataSyncJobEnabled := section.Key("dualWriterPeriodicDataSyncJobEnabled").MustBool(false)
// parse dataSyncerRecordsLimit from resource section
dataSyncerRecordsLimit := section.Key("dataSyncerRecordsLimit").MustInt(1000)
// parse dataSyncerInterval from resource section
dataSyncerInterval := section.Key("dataSyncerInterval").MustDuration(time.Hour)
storageConfig[resourceName] = UnifiedStorageConfig{
DualWriterMode: rest.DualWriterMode(dualWriterMode),
DualWriterPeriodicDataSyncJobEnabled: dualWriterPeriodicDataSyncJobEnabled,
DataSyncerRecordsLimit: dataSyncerRecordsLimit,
DataSyncerInterval: dataSyncerInterval,
}
}
cfg.UnifiedStorage = storageConfig
@@ -2,6 +2,7 @@ package setting
import (
"testing"
"time"
"github.com/stretchr/testify/assert"
)
@@ -21,6 +22,12 @@ func TestCfg_setUnifiedStorageConfig(t *testing.T) {
_, err = s.NewKey("dualWriterPeriodicDataSyncJobEnabled", "true")
assert.NoError(t, err)
_, err = s.NewKey("dataSyncerRecordsLimit", "1001")
assert.NoError(t, err)
_, err = s.NewKey("dataSyncerInterval", "10m")
assert.NoError(t, err)
cfg.setUnifiedStorageConfig()
value, exists := cfg.UnifiedStorage["playlists.playlist.grafana.app"]
@@ -29,6 +36,8 @@ func TestCfg_setUnifiedStorageConfig(t *testing.T) {
assert.Equal(t, value, UnifiedStorageConfig{
DualWriterMode: 2,
DualWriterPeriodicDataSyncJobEnabled: true,
DataSyncerRecordsLimit: 1001,
DataSyncerInterval: time.Minute * 10,
})
})
}