Skip to content

Commit

Permalink
Configurable strategy for runtimeID to subaccountID mapping (#817)
Browse files Browse the repository at this point in the history
* always use db for subaccount

* missing env entry
  • Loading branch information
jaroslaw-pieszka authored Jun 10, 2024
1 parent e4b116b commit 31f7999
Show file tree
Hide file tree
Showing 6 changed files with 11 additions and 6 deletions.
1 change: 1 addition & 0 deletions cmd/subaccountsync/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ func main() {
slog.Info(fmt.Sprintf("Configuration: events window size:%s, events sync interval:%s, accounts sync interval: %s, storage sync interval: %s, queue sleep interval: %s",
cfg.EventsWindowSize, cfg.EventsWindowInterval, cfg.AccountsSyncInterval, cfg.StorageSyncInterval, cfg.SyncQueueSleepInterval))
slog.Info(fmt.Sprintf("Configuration: updateResources: %t", cfg.UpdateResources))
slog.Info(fmt.Sprintf("Configuration: alwaysSubaccountFromDatabase: %t", cfg.AlwaysSubaccountFromDatabase))

if cfg.EventsWindowSize < cfg.EventsWindowInterval {
slog.Warn("Events window size is smaller than events sync interval. This might cause missing events so we set window size to the interval.")
Expand Down
1 change: 1 addition & 0 deletions internal/subaccountsync/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ type (
MetricsPort string `envconfig:"default=8081"`
LogLevel string `envconfig:"default=info"`
RuntimeConfigurationConfigMapName string
AlwaysSubaccountFromDatabase bool `envconfig:"default=false"`
}

CisEndpointConfig struct {
Expand Down
6 changes: 3 additions & 3 deletions internal/subaccountsync/informer.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import (
"k8s.io/client-go/tools/cache"
)

func configureInformer(informer *cache.SharedIndexInformer, stateReconciler *stateReconcilerType, logger *slog.Logger, metrics *Metrics) {
func configureInformer(informer *cache.SharedIndexInformer, stateReconciler *stateReconcilerType, logger *slog.Logger, metrics *Metrics, alwaysUseDB bool) {
_, err := (*informer).AddEventHandler(cache.ResourceEventHandlerFuncs{
AddFunc: func(obj interface{}) {
metrics.informer.With(prometheus.Labels{"event": "add"}).Inc()
Expand All @@ -19,7 +19,7 @@ func configureInformer(informer *cache.SharedIndexInformer, stateReconciler *sta
logger.Error(fmt.Sprintf("added Kyma resource is not an Unstructured: %s", obj))
return
}
subaccountID, runtimeID, betaEnabled, err := getRequiredData(u, logger, stateReconciler)
subaccountID, runtimeID, betaEnabled, err := getRequiredData(u, logger, stateReconciler, alwaysUseDB)
if err != nil {
return
}
Expand All @@ -39,7 +39,7 @@ func configureInformer(informer *cache.SharedIndexInformer, stateReconciler *sta
logger.Error(fmt.Sprintf("updated Kyma resource is not an Unstructured: %s", newObj))
return
}
subaccountID, runtimeID, betaEnabled, err := getRequiredData(u, logger, stateReconciler)
subaccountID, runtimeID, betaEnabled, err := getRequiredData(u, logger, stateReconciler, alwaysUseDB)
if err != nil {
return
}
Expand Down
6 changes: 3 additions & 3 deletions internal/subaccountsync/subaccount_sync_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ func (s *SyncService) Run() {
factory := dynamicinformer.NewFilteredDynamicSharedInformerFactory(s.k8sClient, time.Minute, "kcp-system", nil)
informer := factory.ForResource(s.kymaGVR).Informer()

configureInformer(&informer, &stateReconciler, logger.With("component", "informer"), metrics)
configureInformer(&informer, &stateReconciler, logger.With("component", "informer"), metrics, s.cfg.AlwaysSubaccountFromDatabase)

go stateReconciler.runCronJobs(s.cfg, s.ctx)

Expand Down Expand Up @@ -210,7 +210,7 @@ func getSubaccountIDFromDB(runtimeID string, db storage.BrokerStorage) (string,
return subaccountID, nil
}

func getRequiredData(u *unstructured.Unstructured, logger *slog.Logger, stateReconciler *stateReconcilerType) (string, string, string, error) {
func getRequiredData(u *unstructured.Unstructured, logger *slog.Logger, stateReconciler *stateReconcilerType, alwaysUseDB bool) (string, string, string, error) {
labels := u.GetLabels()
subaccountID := labels[subaccountIDLabel]
runtimeID := labels[runtimeIDLabel]
Expand All @@ -220,7 +220,7 @@ func getRequiredData(u *unstructured.Unstructured, logger *slog.Logger, stateRec
runtimeID = u.GetName()
}
var err error
if subaccountID == "" {
if subaccountID == "" || alwaysUseDB {
subaccountID, err = getSubaccountIDFromDB(runtimeID, stateReconciler.db)
if err != nil {
return "", "", "", fmt.Errorf("cannot determine subaccountID for Kyma resource: %s - %s", u.GetName(), err)
Expand Down
2 changes: 2 additions & 0 deletions resources/keb/templates/subaccount-sync-deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ spec:
value: {{ .Values.subaccountSync.logLevel | quote }}
- name: SUBACCOUNT_SYNC_UPDATE_RESOURCES
value: {{ .Values.subaccountSync.updateResources | quote }}
- name: SUBACCOUNT_SYNC_ALWAYS_SUBACCOUNT_FROM_DATABASE
value: {{ .Values.subaccountSync.alwaysSubaccountFromDatabase | quote }}
- name: SUBACCOUNT_SYNC_ACCOUNTS_SYNC_INTERVAL
value: {{ .Values.subaccountSync.accountSyncInterval | quote }}
- name: SUBACCOUNT_SYNC_STORAGE_SYNC_INTERVAL
Expand Down
1 change: 1 addition & 0 deletions resources/keb/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -387,6 +387,7 @@ deprovisionRetrigger:
subaccountSync:
enabled: true
updateResources: false
alwaysSubaccountFromDatabase: false
accountSyncInterval: 24h
storageSyncInterval: 5m
eventsWindowSize: 20m
Expand Down

0 comments on commit 31f7999

Please sign in to comment.