Problem
The e2e Disable subtest does not verify that application PVCs survive disable DR correctly. After disable, DisableProtection only checks workload health (for deploy workloads: Deployment Available=True), not PVC state.
e2e/dractions/actions.go — after DRPC/VRG cleanup, only Workload().Health() is called once (no retry loop like Enable/Failover use via WaitWorkloadHealth).
e2e/workloads/deploy.go — Health() checks deployment conditions only. PVC existence/phase is used in statusForCluster() for reporting, not in the disable validation path.
This allowed a regression from #2602: with skipPVCDisownership=true during VRG deletion, PVCs could enter Terminating while the deployment still appeared healthy, so TestDR/*/Disable passed.
Expected behavior after Disable DR
When do-not-delete-pvc is set (as e2e already does in annotateDRPCDoNotDeletePVC), each protected PVC on the preferred cluster should be:
- present
status.phase == Bound
metadata.deletionTimestamp unset
- no
ownerReferences to VolSync ReplicationSource / ReplicationDestination (disowned before RS/RD/RGS/RGD removal)
The workload (deployment/pod) should remain healthy but that alone is not sufficient.
Reproduction
- Run disable DR on a VolSync-protected CephFS workload
TestDR/disapp-deploy-cephfs/Disable (or equivalent) passes
- Post disable PVC inspection shows the bug:
{
"phase": "Bound",
"deletionTimestamp": "2026-07-06T10:48:56Z",
"ownerReferences": [
{
"kind": "ReplicationSource",
"name": "busybox-pvc",
...
}
]
}
Problem
The e2e
Disablesubtest does not verify that application PVCs survive disable DR correctly. After disable,DisableProtectiononly checks workload health (for deploy workloads: DeploymentAvailable=True), not PVC state.e2e/dractions/actions.go— after DRPC/VRG cleanup, onlyWorkload().Health()is called once (no retry loop like Enable/Failover use viaWaitWorkloadHealth).e2e/workloads/deploy.go—Health()checks deployment conditions only. PVC existence/phase is used instatusForCluster()for reporting, not in the disable validation path.This allowed a regression from #2602: with
skipPVCDisownership=trueduring VRG deletion, PVCs could enterTerminatingwhile the deployment still appeared healthy, soTestDR/*/Disablepassed.Expected behavior after Disable DR
When
do-not-delete-pvcis set (as e2e already does inannotateDRPCDoNotDeletePVC), each protected PVC on the preferred cluster should be:status.phase == Boundmetadata.deletionTimestampunsetownerReferencesto VolSyncReplicationSource/ReplicationDestination(disowned before RS/RD/RGS/RGD removal)The workload (deployment/pod) should remain healthy but that alone is not sufficient.
Reproduction
TestDR/disapp-deploy-cephfs/Disable(or equivalent) passes{ "phase": "Bound", "deletionTimestamp": "2026-07-06T10:48:56Z", "ownerReferences": [ { "kind": "ReplicationSource", "name": "busybox-pvc", ... } ] }