When using import populators, there seems to be race condition between the controllers and the env vars set on containerdisks are not set on the final imported PVC. However, they are visible on the intermediate prime PVCs.
The controller logs show the following:
2024-06-12T13:00:00Z ERROR controller.datavolume-import-controller unable to update datavolume status {"name": "example-import-dv", "error": "Operation cannot be fulfilled on datavolumes.cdi.kubevirt.io \"example-import-dv\": the object has been modified; please apply your changes to the latest version and try again"}
kubevirt.io/containerized-data-importer/pkg/controller/datavolume.(*ReconcilerBase).emitEvent
pkg/controller/datavolume/controller-base.go:1081
kubevirt.io/containerized-data-importer/pkg/controller/datavolume.(*ReconcilerBase).updateStatus
pkg/controller/datavolume/controller-base.go:978
kubevirt.io/containerized-data-importer/pkg/controller/datavolume.(*ReconcilerBase).reconcile
pkg/controller/datavolume/controller-base.go:457
kubevirt.io/containerized-data-importer/pkg/controller/datavolume.(*ImportReconciler).Reconcile
pkg/controller/datavolume/import-controller.go:184
kubevirt.io/containerized-data-importer/vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).Reconcile
vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller/controller.go:119
kubevirt.io/containerized-data-importer/vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).reconcileHandler
vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller/controller.go:316
kubevirt.io/containerized-data-importer/vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).processNextWorkItem
vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller/controller.go:266
kubevirt.io/containerized-data-importer/vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).Start.func2.2
vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller/controller.go:227
2024-06-12T13:00:00Z ERROR Reconciler error {"controller": "datavolume-import-controller", "object": {"name":"example-import-dv","namespace":"default"}, "namespace": "default", "name": "example-import-dv", "reconcileID": "8d3a750d-9320-4ee8-aa3a-f53ca2796af9", "error": "Operation cannot be fulfilled on datavolumes.cdi.kubevirt.io \"example-import-dv\": the object has been modified; please apply your changes to the latest version and try again"}
kubevirt.io/containerized-data-importer/vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).reconcileHandler
vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller/controller.go:329
kubevirt.io/containerized-data-importer/vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).processNextWorkItem
vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller/controller.go:266
kubevirt.io/containerized-data-importer/vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).Start.func2.2
vendor/sigs.k8s.io/controller-runtime/pkg/internal/controller/controller.go:227
2024-06-12T13:00:00Z DEBUG controller.import-populator reconciling Import Source PVCs {"PVC": {"name":"example-import-dv","namespace":"default"}}
What happened:
When using import populators, there seems to be race condition between the controllers and the env vars set on containerdisks are not set on the final imported PVC. However, they are visible on the intermediate prime PVCs.
The controller logs show the following:
Strangely, in the func tests it still works. (see https://github.com/kubevirt/containerized-data-importer/blob/03bac05833925334994f2a8ecfdcdca97c6c28a2/tests/import_test.go#L2156)
What you expected to happen:
Labels derived from env vars on containerdisks are set on imported PVCs when using populators.
How to reproduce it (as minimally and precisely as possible):
See description of #3103
+
Additional context: Add any other context about the problem here.
Environment:
kubectl get deployments cdi-deployment -o yaml
): 1.59.0 / mainkubectl version
): 1.27uname -a
): N/A