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
+27 -4
View File
@@ -186,12 +186,18 @@ func InstallAPIs(
// when missing this will default to mode zero (legacy only)
var mode = grafanarest.DualWriterMode(0)
var dualWriterPeriodicDataSyncJobEnabled bool
var (
dualWriterPeriodicDataSyncJobEnabled bool
dataSyncerInterval = time.Hour
dataSyncerRecordsLimit = 1000
)
resourceConfig, resourceExists := storageOpts.UnifiedStorageConfig[key]
if resourceExists {
mode = resourceConfig.DualWriterMode
dualWriterPeriodicDataSyncJobEnabled = resourceConfig.DualWriterPeriodicDataSyncJobEnabled
dataSyncerInterval = resourceConfig.DataSyncerInterval
dataSyncerRecordsLimit = resourceConfig.DataSyncerRecordsLimit
}
// Force using storage only -- regardless of internal synchronization state
@@ -205,7 +211,21 @@ func InstallAPIs(
// Moving from one version to the next can only happen after the previous step has
// successfully synchronized.
requestInfo := getRequestInfo(gr, namespaceMapper)
currentMode, err := grafanarest.SetDualWritingMode(ctx, kvStore, legacy, storage, key, mode, reg, serverLock, requestInfo)
syncerCfg := &grafanarest.SyncerConfig{
Kind: key,
RequestInfo: requestInfo,
Mode: mode,
LegacyStorage: legacy,
Storage: storage,
ServerLockService: serverLock,
DataSyncerInterval: dataSyncerInterval,
DataSyncerRecordsLimit: dataSyncerRecordsLimit,
Reg: reg,
}
// This also sets the currentMode on the syncer config.
currentMode, err := grafanarest.SetDualWritingMode(ctx, kvStore, syncerCfg)
if err != nil {
return nil, err
}
@@ -216,9 +236,12 @@ func InstallAPIs(
return storage, nil
default:
}
if dualWriterPeriodicDataSyncJobEnabled {
grafanarest.StartPeriodicDataSyncer(ctx, currentMode, legacy, storage, key, reg, serverLock, requestInfo)
// The mode might have changed in SetDualWritingMode, so apply current mode first.
syncerCfg.Mode = currentMode
if err := grafanarest.StartPeriodicDataSyncer(ctx, syncerCfg); err != nil {
return nil, err
}
}
// when unable to use
+5 -3
View File
@@ -4,11 +4,12 @@ import (
"fmt"
"net"
"github.com/grafana/grafana/pkg/services/featuremgmt"
"github.com/grafana/grafana/pkg/setting"
"github.com/spf13/pflag"
genericapiserver "k8s.io/apiserver/pkg/server"
"k8s.io/apiserver/pkg/server/options"
"github.com/grafana/grafana/pkg/services/featuremgmt"
"github.com/grafana/grafana/pkg/setting"
)
type StorageType string
@@ -21,7 +22,8 @@ const (
StorageTypeUnifiedGrpc StorageType = "unified-grpc"
)
type StorageOptions struct { // The desired storage type
type StorageOptions struct {
// The desired storage type
StorageType StorageType
// For unified-grpc, the address is required