diff --git a/pkg/controllers/workgenerator/envelope.go b/pkg/controllers/workgenerator/envelope.go index a7d2f5a8e..05518f98c 100644 --- a/pkg/controllers/workgenerator/envelope.go +++ b/pkg/controllers/workgenerator/envelope.go @@ -62,10 +62,10 @@ func (r *Reconciler) createOrUpdateEnvelopeCRWorkObj( fleetv1beta1.PlacementTrackingLabel: binding.GetLabels()[fleetv1beta1.PlacementTrackingLabel], fleetv1beta1.EnvelopeTypeLabel: envelopeReader.GetEnvelopeType(), fleetv1beta1.EnvelopeNameLabel: envelopeReader.GetName(), - fleetv1beta1.EnvelopeNamespaceLabel: envelopeReader.GetNamespace(), } // Add ParentNamespaceLabel if the binding is namespaced if binding.GetNamespace() != "" { + labelMatcher[fleetv1beta1.EnvelopeNamespaceLabel] = envelopeReader.GetNamespace() labelMatcher[fleetv1beta1.ParentNamespaceLabel] = binding.GetNamespace() } workList := &fleetv1beta1.WorkList{} @@ -87,6 +87,12 @@ func (r *Reconciler) createOrUpdateEnvelopeCRWorkObj( "resourceBinding", klog.KObj(binding), "resourceSnapshot", klog.KObj(resourceSnapshot), "envelope", envelopeReader.GetEnvelopeObjRef()) + // Log the work object names to help debug. + workNames := make([]string, len(workList.Items)) + for i := range workList.Items { + workNames[i] = workList.Items[i].Name + } + klog.ErrorS(wrappedErr, "Duplicate work objects found", "works", workNames) return nil, controller.NewUnexpectedBehaviorError(wrappedErr) case len(workList.Items) == 1: klog.V(2).InfoS("Found existing work object for the envelope; updating it", diff --git a/pkg/controllers/workgenerator/envelope_test.go b/pkg/controllers/workgenerator/envelope_test.go index 310553777..c8b112a53 100644 --- a/pkg/controllers/workgenerator/envelope_test.go +++ b/pkg/controllers/workgenerator/envelope_test.go @@ -483,6 +483,18 @@ func TestCreateOrUpdateEnvelopeCRWorkObj(t *testing.T) { want: nil, wantErr: true, }, + { + name: "two existing works should result in error", + envelopeReader: resourceEnvelope, + resourceOverrideSnapshotHash: "new-resource-hash", + clusterResourceOverrideSnapshotHash: "new-cluster-resource-hash", + existingObjects: func() []client.Object { + existingWork1 := existingWork.DeepCopy() + existingWork1.Name = "test-work-1" + return []client.Object{existingWork, existingWork1} + }(), + wantErr: true, + }, } for _, tt := range tests {