UniStore: Add config to enable periodic DualWriter DataSyncer (#93555)

Signed-off-by: Maicon Costa <maiconscosta@gmail.com>
This commit is contained in:
maicon 2024-09-24 16:03:15 -03:00 committed by GitHub
parent 59af06e36a
commit 377079d8b3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 23 additions and 12 deletions

View File

@ -67,6 +67,7 @@ kubernetesPlaylists = true
[unified_storage.playlists.playlist.grafana.app]
dualWriterMode = 2
dualWriterPeriodicDataSyncJobEnabled = true
```
This will create a development kubeconfig and start a parallel ssl listener. It can be registered by

View File

@ -170,9 +170,13 @@ func InstallAPIs(
// Get the option from custom.ini/command line
// when missing this will default to mode zero (legacy only)
var mode = grafanarest.DualWriterMode(0)
var dualWriterPeriodicDataSyncJobEnabled bool
resourceConfig, resourceExists := storageOpts.UnifiedStorageConfig[key]
if resourceExists {
mode = resourceConfig.DualWriterMode
dualWriterPeriodicDataSyncJobEnabled = resourceConfig.DualWriterPeriodicDataSyncJobEnabled
}
// Force using storage only -- regardless of internal synchronization state
@ -198,7 +202,7 @@ func InstallAPIs(
default:
}
if storageOpts.DualWriterDataSyncJobEnabled[key] {
if dualWriterPeriodicDataSyncJobEnabled {
grafanarest.StartPeriodicDataSyncer(ctx, currentMode, legacy, storage, key, reg, serverLock, requestInfo)
}

View File

@ -60,11 +60,6 @@ func applyGrafanaConfig(cfg *setting.Cfg, features featuremgmt.FeatureToggles, o
unifiedStorageCfg := cfg.UnifiedStorage
o.StorageOptions.UnifiedStorageConfig = unifiedStorageCfg
o.StorageOptions.DualWriterDataSyncJobEnabled = map[string]bool{
// TODO: This will be enabled later, when we get a dedicated config section for unified_storage
// playlist.RESOURCE + "." + playlist.GROUP: true,
}
o.ExtraOptions.DevMode = features.IsEnabledGlobally(featuremgmt.FlagGrafanaAPIServerEnsureKubectlAccess)
o.ExtraOptions.ExternalAddress = host
o.ExtraOptions.APIURL = apiURL

View File

@ -32,9 +32,6 @@ type StorageOptions struct { // The desired storage type
// {resource}.{group} = 1|2|3|4
UnifiedStorageConfig map[string]setting.UnifiedStorageConfig
// TODO... this will be moved to UnifiedStorageConfig
DualWriterDataSyncJobEnabled map[string]bool
}
func NewStorageOptions() *StorageOptions {

View File

@ -531,7 +531,8 @@ type Cfg struct {
}
type UnifiedStorageConfig struct {
DualWriterMode rest.DualWriterMode
DualWriterMode rest.DualWriterMode
DualWriterPeriodicDataSyncJobEnabled bool
}
type InstallPlugin struct {

View File

@ -25,7 +25,14 @@ func (cfg *Cfg) setUnifiedStorageConfig() {
// parse dualWriter modes from the section
dualWriterMode := section.Key("dualWriterMode").MustInt(0)
storageConfig[resourceName] = UnifiedStorageConfig{DualWriterMode: rest.DualWriterMode(dualWriterMode)}
// parse dualWriter periodic data syncer config
dualWriterPeriodicDataSyncJobEnabled := section.Key("dualWriterPeriodicDataSyncJobEnabled").MustBool(false)
storageConfig[resourceName] = UnifiedStorageConfig{
DualWriterMode: rest.DualWriterMode(dualWriterMode),
DualWriterPeriodicDataSyncJobEnabled: dualWriterPeriodicDataSyncJobEnabled,
}
}
cfg.UnifiedStorage = storageConfig
}

View File

@ -18,11 +18,17 @@ func TestCfg_setUnifiedStorageConfig(t *testing.T) {
_, err = s.NewKey("dualWriterMode", "2")
assert.NoError(t, err)
_, err = s.NewKey("dualWriterPeriodicDataSyncJobEnabled", "true")
assert.NoError(t, err)
cfg.setUnifiedStorageConfig()
value, exists := cfg.UnifiedStorage["playlists.playlist.grafana.app"]
assert.Equal(t, exists, true)
assert.Equal(t, value, UnifiedStorageConfig{DualWriterMode: 2})
assert.Equal(t, value, UnifiedStorageConfig{
DualWriterMode: 2,
DualWriterPeriodicDataSyncJobEnabled: true,
})
})
}