Summary
The scheduled long-running (Azure) functional test Test_RadiusCore_AzureMySql_PortalLink fails on rad application delete. This was surfaced by the auto-filed issue #12648 (run 31587251857).
PR #12653 (merged 2026-08-12) was a candidate fix for this delete failure — it fixed a nil-pointer panic when unfolding recipe delete errors and added observability so a backend async panic surfaces on the operation status. That fix merged but did not resolve the failure: the test continues to fail on the delete path in every long-running run since.
Both failure signatures below are the same test failing on the same delete path (rad application delete → the Radius.Data/mySqlDatabases recipe delete async op ends Failed / code: "Internal"). Tracking them together here.
Error 1 — exceeded max retry count (run 31587251857, from #12648)
The environment deletes fine, then the app delete reports a failed async operation:
[rad] Radius.Core/environments/azure-mysql-portallink-env-longrc9d8d deleted
[rad] Failed to delete resources for application 'azure-mysql-portallink-app':
GET .../Radius.Data/locations/global/operationStatuses/d1063951-b058-4bbb-a2c1-974388b2a85c
[rad] ERROR CODE: Internal
"status": "Failed",
"code": "Internal",
"message": "exceeded max retry count to process async operation message: 3"
The delete async operation is silently requeued until DequeueCount exceeds MaxOperationRetryCount, then ends Failed with the generic "exceeded max retry count to process async operation message: 3". This is exactly the symptom PR #12653 targeted (an underlying nil-pointer panic in the recipe delete path).
Error 2 — 404 NotFound on environment during recipe delete (run 32241208014, from #12713)
After #12653 the panic is gone, but the same delete still fails — the async op ends Failed / code: "Internal", now with the message reporting a 404 Not Found when the recipe delete path GETs the (already-deleted) environment:
[rad] Failed to delete resources for application 'azure-mysql-portallink-app':
GET .../Radius.Data/locations/global/operationStatuses/bee3fe5f-...
"status": "Failed",
"code": "Internal",
"message": "GET .../Radius.Core/environments/azure-mysql-portallink-env-longr8a6f0
RESPONSE 404: 404 Not Found
ERROR CODE: NotFound
{ \"error\": { \"code\": \"NotFound\",
\"message\": \"the resource with id '.../Radius.Core/environments/azure-mysql-portallink-env-longr8a6f0' was not found\" } }"
The environment is already gone at that point, so the recipe delete's environment GET returns 404, which surfaces as code: "Internal" instead of being treated as already-deleted.
Evidence: still failing after #12653
Auto-filed long-running failures after #12653 merged (Aug 12), all failing on the same test's delete:
| Issue |
Run ID |
Date |
| #12667 |
31691015321 |
2026-08-13 |
| #12678 |
31792001975 |
2026-08-14 |
| #12689 |
31878660734 |
2026-08-15 |
| #12691 |
31940801807 |
2026-08-16 |
| #12693 |
32019003734 |
2026-08-17 |
| #12701 |
32125249323 |
2026-08-18 |
| #12713 |
32241208014 |
2026-08-19 |
Suggested mitigation: skip the test until root cause
Since this fails on every scheduled long-running run and blocks the pipeline, temporarily skip Test_RadiusCore_AzureMySql_PortalLink with a t.Skip that links back to this issue, following the existing repo precedent (e.g. Test_ACI in test/functional-portable/corerp/cloud/resources/aci_test.go and the t.Skip("https://github.com/radius-project/radius/issues/...") pattern in recipe_bicep_test.go).
File: test/functional-portable/corerp/cloud/resources/radiuscore_azure_mysql_portallink_test.go
func Test_RadiusCore_AzureMySql_PortalLink(t *testing.T) {
t.Skip("Temporarily disabled: rad application delete fails intermittently on the Radius.Data/mySqlDatabases recipe delete path. Not fixed by #12653. See #<this-issue>.")
// ...
}
Remove the skip once the delete-path root cause is fixed.
Root cause investigation TODO
Links
Summary
The scheduled long-running (Azure) functional test
Test_RadiusCore_AzureMySql_PortalLinkfails onrad application delete. This was surfaced by the auto-filed issue #12648 (run 31587251857).PR #12653 (merged 2026-08-12) was a candidate fix for this delete failure — it fixed a nil-pointer panic when unfolding recipe delete errors and added observability so a backend async panic surfaces on the operation status. That fix merged but did not resolve the failure: the test continues to fail on the delete path in every long-running run since.
Both failure signatures below are the same test failing on the same delete path (
rad application delete→ theRadius.Data/mySqlDatabasesrecipe delete async op endsFailed/code: "Internal"). Tracking them together here.Error 1 —
exceeded max retry count(run 31587251857, from #12648)The environment deletes fine, then the app delete reports a failed async operation:
The delete async operation is silently requeued until
DequeueCountexceedsMaxOperationRetryCount, then endsFailedwith the generic"exceeded max retry count to process async operation message: 3". This is exactly the symptom PR #12653 targeted (an underlying nil-pointer panic in the recipe delete path).Error 2 —
404 NotFoundon environment during recipe delete (run 32241208014, from #12713)After #12653 the panic is gone, but the same delete still fails — the async op ends
Failed/code: "Internal", now with the message reporting a404 Not Foundwhen the recipe delete path GETs the (already-deleted) environment:The environment is already gone at that point, so the recipe delete's environment GET returns 404, which surfaces as
code: "Internal"instead of being treated as already-deleted.Evidence: still failing after #12653
Auto-filed long-running failures after #12653 merged (Aug 12), all failing on the same test's delete:
Suggested mitigation: skip the test until root cause
Since this fails on every scheduled long-running run and blocks the pipeline, temporarily skip
Test_RadiusCore_AzureMySql_PortalLinkwith at.Skipthat links back to this issue, following the existing repo precedent (e.g.Test_ACIintest/functional-portable/corerp/cloud/resources/aci_test.goand thet.Skip("https://github.com/radius-project/radius/issues/...")pattern inrecipe_bicep_test.go).File:
test/functional-portable/corerp/cloud/resources/radiuscore_azure_mysql_portallink_test.goRemove the skip once the delete-path root cause is fixed.
Root cause investigation TODO
Radius.Data/mySqlDatabasesrecipe delete async operation fails and exhausts its retries (exceeded max retry count to process async operation message: 3).Radius.Core/environments/...after it is already deleted, and why the resulting 404 surfaces ascode: "Internal"instead of being treated as already-deleted.Radius.Data/mySqlDatabasesrecipe-backed resource.t.Skip) once fixed.Links