From 68ffb05165714672d4fa9ff1fe519d8bf8029658 Mon Sep 17 00:00:00 2001 From: Alexander North Date: Wed, 20 May 2026 17:00:11 +0200 Subject: [PATCH 1/3] fix dry-run to use the correct key for target lookup --- apis/config/handlers/confighandler.go | 37 ++++++++++++++------------- pkg/sdc/target/manager/dryrun.go | 5 ++-- 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/apis/config/handlers/confighandler.go b/apis/config/handlers/confighandler.go index 6f8266a6..efb7e5cf 100644 --- a/apis/config/handlers/confighandler.go +++ b/apis/config/handlers/confighandler.go @@ -35,7 +35,7 @@ type ConfigStoreHandler struct { } func (r *ConfigStoreHandler) DryRunCreateFn(ctx context.Context, key types.NamespacedName, obj runtime.Object, dryrun bool) (runtime.Object, error) { - c, target, err := r.prepareConfigAndTarget(ctx, key, obj) + c, target, err := r.prepareConfigAndTarget(ctx, obj) if err != nil { return obj, err } @@ -47,17 +47,17 @@ func (r *ConfigStoreHandler) DryRunCreateFn(ctx context.Context, key types.Names intents := []*sdcpb.TransactionIntent{ { - Intent: config.GetGVKNSN(c), - Priority: int32(c.Spec.Priority), - Update: updates, + Intent: config.GetGVKNSN(c), + Priority: int32(c.Spec.Priority), + Update: updates, // Dont set not Revertive }, } - return targetmanager.RunDryRunTransaction(ctx, key, c, target, intents, dryrun) + return targetmanager.RunDryRunTransaction(ctx, c, target, intents, dryrun) } func (r *ConfigStoreHandler) DryRunUpdateFn(ctx context.Context, key types.NamespacedName, obj, old runtime.Object, dryrun bool) (runtime.Object, error) { - c, target, err := r.prepareConfigAndTarget(ctx, key, obj) + c, target, err := r.prepareConfigAndTarget(ctx, obj) if err != nil { return obj, err } @@ -69,17 +69,17 @@ func (r *ConfigStoreHandler) DryRunUpdateFn(ctx context.Context, key types.Names intents := []*sdcpb.TransactionIntent{ { - Intent: config.GetGVKNSN(c), - Priority: int32(c.Spec.Priority), - Update: updates, + Intent: config.GetGVKNSN(c), + Priority: int32(c.Spec.Priority), + Update: updates, // Dont set not Revertive }, } - return targetmanager.RunDryRunTransaction(ctx, key, c, target, intents, dryrun) + return targetmanager.RunDryRunTransaction(ctx, c, target, intents, dryrun) } func (r *ConfigStoreHandler) DryRunDeleteFn(ctx context.Context, key types.NamespacedName, obj runtime.Object, dryrun bool) (runtime.Object, error) { - c, target, err := r.prepareConfigAndTarget(ctx, key, obj) + c, target, err := r.prepareConfigAndTarget(ctx, obj) if err != nil { return obj, err } @@ -91,14 +91,14 @@ func (r *ConfigStoreHandler) DryRunDeleteFn(ctx context.Context, key types.Names }, } - return targetmanager.RunDryRunTransaction(ctx, key, c, target, intents, dryrun) + return targetmanager.RunDryRunTransaction(ctx, c, target, intents, dryrun) } -// prepareConfigAndTarget validates labels, casts the object, fetches the Target -// and ensures it's ready. +// prepareConfigAndTarget validates labels, casts the object, resolves the +// Target reference from the config's labels and fetches that Target, ensuring +// it's ready. func (r *ConfigStoreHandler) prepareConfigAndTarget( ctx context.Context, - key types.NamespacedName, obj runtime.Object, ) (*config.Config, *configv1alpha1.Target, error) { accessor, err := meta.Accessor(obj) @@ -106,7 +106,8 @@ func (r *ConfigStoreHandler) prepareConfigAndTarget( return nil, nil, err } - if _, err := config.GetTargetKey(accessor.GetLabels()); err != nil { + targetKey, err := config.GetTargetKey(accessor.GetLabels()) + if err != nil { return nil, nil, err } @@ -116,12 +117,12 @@ func (r *ConfigStoreHandler) prepareConfigAndTarget( } target := &configv1alpha1.Target{} - if err := r.Client.Get(ctx, key, target); err != nil { + if err := r.Client.Get(ctx, targetKey, target); err != nil { return nil, nil, err } if !target.IsReady() { - return nil, nil, fmt.Errorf("target not ready %s", key) + return nil, nil, fmt.Errorf("target not ready %s", targetKey) } return c, target, nil diff --git a/pkg/sdc/target/manager/dryrun.go b/pkg/sdc/target/manager/dryrun.go index d2deddf0..08dafdde 100644 --- a/pkg/sdc/target/manager/dryrun.go +++ b/pkg/sdc/target/manager/dryrun.go @@ -20,6 +20,7 @@ import ( "context" "fmt" + "github.com/henderiw/apiserver-store/pkg/storebackend" "github.com/sdcio/config-server/apis/condition" "github.com/sdcio/config-server/apis/config" configv1alpha1 "github.com/sdcio/config-server/apis/config/v1alpha1" @@ -35,7 +36,6 @@ import ( // and updates the Config status/conditions. func RunDryRunTransaction( ctx context.Context, - key types.NamespacedName, c *config.Config, target *configv1alpha1.Target, intents []*sdcpb.TransactionIntent, @@ -57,9 +57,10 @@ func RunDryRunTransaction( } }() + targetKey := types.NamespacedName{Namespace: target.Namespace, Name: target.Name} req := &sdcpb.TransactionSetRequest{ TransactionId: config.GetGVKNSN(c), - DatastoreName: key.String(), + DatastoreName: storebackend.KeyFromNSN(targetKey).String(), DryRun: dryrun, Timeout: ptr.To(int32(60)), Intents: intents, From 97a07652d57400d045eda69f15a2b2212d18b234 Mon Sep 17 00:00:00 2001 From: Alexander North Date: Thu, 21 May 2026 09:36:49 +0200 Subject: [PATCH 2/3] implement feedback --- apis/config/handlers/confighandler.go | 12 ++++++------ pkg/sdc/target/manager/dryrun.go | 5 +++-- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/apis/config/handlers/confighandler.go b/apis/config/handlers/confighandler.go index efb7e5cf..11b2681a 100644 --- a/apis/config/handlers/confighandler.go +++ b/apis/config/handlers/confighandler.go @@ -94,13 +94,18 @@ func (r *ConfigStoreHandler) DryRunDeleteFn(ctx context.Context, key types.Names return targetmanager.RunDryRunTransaction(ctx, c, target, intents, dryrun) } -// prepareConfigAndTarget validates labels, casts the object, resolves the +// prepareConfigAndTarget validates labels, resolves the // Target reference from the config's labels and fetches that Target, ensuring // it's ready. func (r *ConfigStoreHandler) prepareConfigAndTarget( ctx context.Context, obj runtime.Object, ) (*config.Config, *configv1alpha1.Target, error) { + c, ok := obj.(*config.Config) + if !ok { + return nil, nil, fmt.Errorf("expected *config.Config, got %T", obj) + } + accessor, err := meta.Accessor(obj) if err != nil { return nil, nil, err @@ -111,11 +116,6 @@ func (r *ConfigStoreHandler) prepareConfigAndTarget( return nil, nil, err } - c, ok := obj.(*config.Config) - if !ok { - return nil, nil, fmt.Errorf("expected *config.Config, got %T", obj) - } - target := &configv1alpha1.Target{} if err := r.Client.Get(ctx, targetKey, target); err != nil { return nil, nil, err diff --git a/pkg/sdc/target/manager/dryrun.go b/pkg/sdc/target/manager/dryrun.go index 08dafdde..2a264cab 100644 --- a/pkg/sdc/target/manager/dryrun.go +++ b/pkg/sdc/target/manager/dryrun.go @@ -57,10 +57,11 @@ func RunDryRunTransaction( } }() - targetKey := types.NamespacedName{Namespace: target.Namespace, Name: target.Name} + targetKey := storebackend.KeyFromNSN(target.GetNamespacedName()) + req := &sdcpb.TransactionSetRequest{ TransactionId: config.GetGVKNSN(c), - DatastoreName: storebackend.KeyFromNSN(targetKey).String(), + DatastoreName: targetKey.String(), DryRun: dryrun, Timeout: ptr.To(int32(60)), Intents: intents, From c50847f7febd67da574c6bc76789e3a73a8680d2 Mon Sep 17 00:00:00 2001 From: Alexander North Date: Thu, 21 May 2026 09:49:16 +0200 Subject: [PATCH 3/3] fix import --- pkg/sdc/target/manager/dryrun.go | 1 - 1 file changed, 1 deletion(-) diff --git a/pkg/sdc/target/manager/dryrun.go b/pkg/sdc/target/manager/dryrun.go index 2a264cab..00e2c138 100644 --- a/pkg/sdc/target/manager/dryrun.go +++ b/pkg/sdc/target/manager/dryrun.go @@ -27,7 +27,6 @@ import ( dsclient "github.com/sdcio/config-server/pkg/sdc/dataserver/client" sdcpb "github.com/sdcio/sdc-protos/sdcpb" "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/types" "k8s.io/utils/ptr" )