diff --git a/pkg/services/apiserver/README.md b/pkg/services/apiserver/README.md index f85e39fe880..9bbfd8fe01b 100644 --- a/pkg/services/apiserver/README.md +++ b/pkg/services/apiserver/README.md @@ -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 diff --git a/pkg/services/apiserver/builder/helper.go b/pkg/services/apiserver/builder/helper.go index a088be374db..4b633de7e4b 100644 --- a/pkg/services/apiserver/builder/helper.go +++ b/pkg/services/apiserver/builder/helper.go @@ -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) } diff --git a/pkg/services/apiserver/config.go b/pkg/services/apiserver/config.go index 79ecd961fb1..adde28a322a 100644 --- a/pkg/services/apiserver/config.go +++ b/pkg/services/apiserver/config.go @@ -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 diff --git a/pkg/services/apiserver/options/storage.go b/pkg/services/apiserver/options/storage.go index a031b06007a..512619baa9e 100644 --- a/pkg/services/apiserver/options/storage.go +++ b/pkg/services/apiserver/options/storage.go @@ -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 { diff --git a/pkg/setting/setting.go b/pkg/setting/setting.go index 805f36a160a..4c5f3bf5a48 100644 --- a/pkg/setting/setting.go +++ b/pkg/setting/setting.go @@ -531,7 +531,8 @@ type Cfg struct { } type UnifiedStorageConfig struct { - DualWriterMode rest.DualWriterMode + DualWriterMode rest.DualWriterMode + DualWriterPeriodicDataSyncJobEnabled bool } type InstallPlugin struct { diff --git a/pkg/setting/setting_unified_storage.go b/pkg/setting/setting_unified_storage.go index d26dc6c3c06..c004ea29b45 100644 --- a/pkg/setting/setting_unified_storage.go +++ b/pkg/setting/setting_unified_storage.go @@ -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 } diff --git a/pkg/setting/setting_unified_storage_test.go b/pkg/setting/setting_unified_storage_test.go index bb46ad9a18b..b9227e3a3ee 100644 --- a/pkg/setting/setting_unified_storage_test.go +++ b/pkg/setting/setting_unified_storage_test.go @@ -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, + }) }) }