Skip to content

fix: preserve Fabric cleanup safety and error propagation - #2732

Merged
Rana Singh (ranadeepsingh) merged 5 commits into
microsoft:masterfrom
ranadeepsingh:fix/fabric-cleanup-relations-20260921
Sep 22, 2026
Merged

Rana Singh (ranadeepsingh) merged 5 commits into
microsoft:masterfrom
ranadeepsingh:fix/fabric-cleanup-relations-20260921

Conversation

@ranadeepsingh

@ranadeepsingh Rana Singh (ranadeepsingh) commented Sep 21, 2026

Copy link
Copy Markdown
Collaborator

Summary

Make Fabric test cleanup safer when metadata is incomplete, deletion is delayed,
or a job fails. This changes test infrastructure only, not public SparkML APIs,
runtime versions, dependencies, or Fabric enablement.

What changes

  • Reject malformed dependency metadata rather than risk deleting a store that is still in use.
  • Confirm child deletion before deleting parent storage. Stop if safety checks or confirmation fail.
  • Check deletion immediately, then every 30 seconds for up to ten waits per item.
    The five-minute waiting budget excludes request time. Polling never repeats DELETE.
  • Preserve original errors, interrupts, and fatal failures during cleanup and job waits.

Validation and remaining gates

53 targeted tests pass on master and both Spark ports. Both sync PRs also pass
full Azure CI. No live Fabric deletion testing is claimed.

The master Azure build
passed 65 jobs but failed compatibility replay
because Spark 4.1 lacks the cleanup baseline. Updating the prerequisite metadata
needs approval. Human approval is also required; Gemini review was unavailable.

Land this prerequisite before #2733 and #2734.

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
There may be pipelines that require an authorized user to comment /azp run to run.

@github-actions

Copy link
Copy Markdown

Hey Rana Singh (@ranadeepsingh) 👋!
Thank you so much for contributing to our repository 🙌.
Someone from SynapseML Team will be reviewing this pull request soon.

We use semantic commit messages to streamline the release process.
Before your pull request can be merged, you should make sure your first commit and PR title start with a semantic prefix.
This helps us to create release messages and credit you for your hard work!

Examples of commit messages with semantic prefixes:

  • fix: Fix LightGBM crashes with empty partitions
  • feat: Make HTTP on Spark back-offs configurable
  • docs: Update Spark Serving usage
  • build: Add codecov support
  • perf: improve LightGBM memory usage
  • refactor: make python code generation rely on classes
  • style: Remove nulls from CNTKModel
  • test: Add test coverage for CNTKModel

To test your commit locally, please follow our guild on building from source.
Check out the developer guide for additional guidance on testing your change.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🟡 Changes recommended

The unresolved critical and moderate findings block approval.

Get a fresh assessment by requesting another Copilot review.

Review effort: Lite
Findings: 1 High severity

Open (1)
What changed in this PR

This pull request hardens Fabric artifact cleanup against malformed nested relation metadata and preserves cleanup diagnostics.

Changes:

  • Fails closed on malformed nested relation metadata.
  • Preserves cleanup exceptions and avoids self-suppression.
  • Adds regression tests, documentation, and review artifacts.

Review status: one critical, one moderate, and one nit finding remain unresolved.

File Reviewed change
reviews/​fabric-cleanup-relations-20260921/​task-spark4-sync-20260921-attempt-1-review-6-claude-opus-5.md Review evidence
reviews/​fabric-cleanup-relations-20260921/​task-spark4-sync-20260921-attempt-1-review-5-gpt-6-astra.md Test review evidence
reviews/​fabric-cleanup-relations-20260921/​task-spark4-sync-20260921-attempt-1-review-4-gpt-6-astra.md Correctness review evidence
reviews/​fabric-cleanup-relations-20260921/​task-spark4-sync-20260921-attempt-1-review-3-claude-opus-5.md Robustness review evidence
reviews/​fabric-cleanup-relations-20260921/​task-spark4-sync-20260921-attempt-1-review-2-gpt-6-astra.md Architecture review evidence
reviews/​fabric-cleanup-relations-20260921/​task-spark4-sync-20260921-attempt-1-review-1-gpt-6-astra.md Initial review evidence
docs/​Reference/​Developer Setup.md Cleanup behavior documentation
core/​src/​test/​scala/​com/​microsoft/​azure/​synapse/​ml/​nbtest/​FabricTestArtifactTrackerSuite.scala Metadata and relation regression tests
core/​src/​test/​scala/​com/​microsoft/​azure/​synapse/​ml/​nbtest/​FabricTestArtifactTrackerFailureSuite.scala Repeated-exception regression tests
core/​src/​test/​scala/​com/​microsoft/​azure/​synapse/​ml/​nbtest/​FabricTestArtifactTracker.scala Self-suppression prevention
core/​src/​test/​scala/​com/​microsoft/​azure/​synapse/​ml/​nbtest/​FabricArtifactCleanup.scala Relation parsing and cleanup error handling

💡 Configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

@ranadeepsingh

Copy link
Copy Markdown
Collaborator Author

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 1 pipeline(s).

Rana Singh (ranadeepsingh) added a commit to ranadeepsingh/SynapseML that referenced this pull request Sep 21, 2026
## Summary
Merge the master-first follow-up that stops cleanup after failed deletion
confirmation and preserves the existing CI test selection through a private
test mix-in. Carry the portable review-record path cleanup and retain the
port-specific review evidence without changing runtime baselines.

## Prompting Intent
The engineer requested separate Spark 4.0 and Spark 4.1 worktrees and sync PRs
with relevant master changes, validated through the SynapseML PR loop.
Resolve current-head findings and validate each port's exact merged source.

## Linked Sources
- microsoft#2732
- microsoft#2732 (comment)
- microsoft#2733
- microsoft#2734
- reviews/fabric-cleanup-relations-20260921/
- reviews/sync-20260921/
- .github/skills/synapseml-branches/SKILL.md
- .github/skills/synapseml-pr-loop/SKILL.md

## Rationale
Use a normal merge so the exact reviewed master fix remains reachable.
Keep the shared cleanup implementation identical across branches and prove
the inherited tests still run on the CI-selected suite under the port JDK.
Machine-local report paths are publication metadata, not source differences;
normalize them without removing historical findings or resolutions.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Rana Singh (ranadeepsingh) added a commit to ranadeepsingh/SynapseML that referenced this pull request Sep 21, 2026
## Summary
Merge the master-first follow-up that stops cleanup after failed deletion
confirmation and preserves the existing CI test selection through a private
test mix-in. Carry the portable review-record path cleanup and retain the
port-specific review evidence without changing runtime baselines.

## Prompting Intent
The engineer requested separate Spark 4.0 and Spark 4.1 worktrees and sync PRs
with relevant master changes, validated through the SynapseML PR loop.
Resolve current-head findings and validate each port's exact merged source.

## Linked Sources
- microsoft#2732
- microsoft#2732 (comment)
- microsoft#2733
- microsoft#2734
- reviews/fabric-cleanup-relations-20260921/
- reviews/sync-20260921/
- .github/skills/synapseml-branches/SKILL.md
- .github/skills/synapseml-pr-loop/SKILL.md

## Rationale
Use a normal merge so the exact reviewed master fix remains reachable.
Keep the shared cleanup implementation identical across branches and prove
the inherited tests still run on the CI-selected suite under the port JDK.
Machine-local report paths are publication metadata, not source differences;
normalize them without removing historical findings or resolutions.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings September 21, 2026 21:39

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🔵 Needs a closer look

The cleanup safety and error-propagation changes require final human review.

Review effort: Lite
Findings: None

Resolved since last review (1)

Rana Singh (ranadeepsingh) added a commit to ranadeepsingh/SynapseML that referenced this pull request Sep 21, 2026
## Summary
Restrict per-artifact cleanup recovery to NonFatal. Interrupts and fatal
cleanup errors now escape even when the notebook body has already failed.
Preserve the body error as suppressed where supported, with an identity guard.
Add 15 throwable/body combinations and a shared-instance regression to the
existing CI-selected tracker suite, and document the behavior.

## Prompting Intent
The engineer requested separate master sync pull requests for spark4.0 and
spark4.1 using the SynapseML PR loop. Address the verified cleanup review
finding on master first, then carry the exact commit into both port branches
without changing their runtime baselines.

## Linked Sources
- Finding: microsoft#2734 (comment)
- Master prerequisite: microsoft#2732
- Spark 4.0 sync: microsoft#2733
- Spark 4.1 sync: microsoft#2734
- Original cleanup work: microsoft#2728
- Review records: reviews/fabric-cleanup-relations-20260921/task-fatal-cleanup-attempt-1-review-*.md

## Rationale
Use NonFatal for recoverable cleanup and explicitly rethrow excluded errors
after retaining the original failure. Keep the body's catch-and-rethrow and
ordinary cleanup-error suppression unchanged. Regressions demonstrated both
fatal masking and lost body diagnostics before their fixes. The fixed master
passes compile, test compile, production/test Scala style, and all 48 tracker
and naming tests. Review records retain the unavailable Gemini-family gate;
they do not claim complete three-family review or full Azure validation.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings September 21, 2026 22:16
@ranadeepsingh

Copy link
Copy Markdown
Collaborator Author

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 1 pipeline(s).

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🔵 Needs a closer look

Safety-sensitive cleanup behavior requires final human review, and one documentation-reference nit remains.

Review effort: Lite
Findings: None

Rana Singh (ranadeepsingh) added a commit to ranadeepsingh/SynapseML that referenced this pull request Sep 21, 2026
## Summary
Merge the exact master-first fatal-cleanup correction and its regression,
documentation, and review records into this Spark sync branch.

## Prompting Intent
The engineer requested separate spark4.0 and spark4.1 sync worktrees and pull
requests with the SynapseML PR loop. Preserve each port's runtime and
compatibility differences while carrying portable fixes by normal merge.

## Linked Sources
- Finding: microsoft#2734 (comment)
- Master prerequisite: microsoft#2732
- Spark 4.0 sync: microsoft#2733
- Spark 4.1 sync: microsoft#2734
- Review records: reviews/fabric-cleanup-relations-20260921/task-fatal-cleanup-attempt-1-review-*.md

## Rationale
Retain shared source and real merge ancestry rather than duplicate the fix
or alter branch-specific settings. The master regression demonstrated the
fatal-error masking bug before the NonFatal correction. This port passes
compile, test compile, production/test Scala style, and 48 tracker/naming
tests. Full Azure validation and the unavailable Gemini-family review gate
remain explicit; this commit makes no merge-readiness claim.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Rana Singh (ranadeepsingh) added a commit to ranadeepsingh/SynapseML that referenced this pull request Sep 21, 2026
## Summary
Merge the exact master-first fatal-cleanup correction and its regression,
documentation, and review records into this Spark sync branch.

## Prompting Intent
The engineer requested separate spark4.0 and spark4.1 sync worktrees and pull
requests with the SynapseML PR loop. Preserve each port's runtime and
compatibility differences while carrying portable fixes by normal merge.

## Linked Sources
- Finding: microsoft#2734 (comment)
- Master prerequisite: microsoft#2732
- Spark 4.0 sync: microsoft#2733
- Spark 4.1 sync: microsoft#2734
- Review records: reviews/fabric-cleanup-relations-20260921/task-fatal-cleanup-attempt-1-review-*.md

## Rationale
Retain shared source and real merge ancestry rather than duplicate the fix
or alter branch-specific settings. The master regression demonstrated the
fatal-error masking bug before the NonFatal correction. This port passes
compile, test compile, production/test Scala style, and 48 tracker/naming
tests. Full Azure validation and the unavailable Gemini-family review gate
remain explicit; this commit makes no merge-readiness claim.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@ranadeepsingh Rana Singh (ranadeepsingh) changed the title fix: fail closed on incomplete Fabric cleanup relations fix: preserve Fabric cleanup safety and error propagation Sep 21, 2026
@ranadeepsingh

Rana Singh (ranadeepsingh) commented Sep 21, 2026

Copy link
Copy Markdown
Collaborator Author

The previously reported replay blocker remains on current head 8ea6dfec0a. Azure build 237053839 finished partiallySucceeded: 65 jobs passed, and only Spark 4.1 compatibility replay failed. Patch application stopped before compilation because FabricArtifactCleanup.scala is absent from the published release baseline and the tracker patches conflict.

All 3,653 reported passing tests completed successfully, including 50 tracker tests, three naming tests, 43 CPU notebooks, and four GPU notebooks. The 22 non-executed cases exactly match the audited baseline. The separate CI-helper task passed 288 tests, and all six R jobs passed.

Replay uses published Spark 4.1 target b4ca894139, not the unmerged sync. A read-only isolated-index replay applies cleanly with these already-merged baseline commits, in order:

  • 1f33e376535970724906ce43cc8935b147c94413
  • 5390043ab18db21e2b1e257d9d2b000ba48c0d62
  • ec0320d3381e60de87e81d72ba7b6ddf7edcc71c
  • 37321d0410fd2a34ac852538bae7291d8fe98ce3

Applying the current PR afterward produces six helper files identical to #2734 head d6691ae29c, whose full Azure build 237038668 passed. This proves the proposed prerequisite set, but does not clear the failed replay check.

Updating .pipelines/release-compat-prerequisites.txt still needs approval. I have not changed it, weakened replay, or retried a deterministic prerequisite failure. The sync PRs already contain the baseline and do not need this metadata.

## Summary
Reject malformed nested relation metadata instead of discarding dependency
edges. Preserve earlier deletion failures when a later metadata read aborts,
and avoid self-suppression when cleanup reports a reused exception.
Add fake-client regressions, document the accepted relation shape, and retain
the review findings and their resolutions.

## Prompting Intent
The engineer requested separate worktrees and sync pull requests carrying
relevant master changes into spark4.0 and spark4.1, using the SynapseML PR loop.
Review of that sync exposed these cleanup defects. Isolate portable fixes on
master first rather than maintaining different cleanup implementations on ports.

## Linked Sources
- microsoft#2728
- microsoft#2728 (comment)
- AGENTS.md: cross-version changes land on master before port integration
- .github/skills/synapseml-pr-loop/SKILL.md
- reviews/fabric-cleanup-relations-20260921/

## Rationale
A partial dependency graph can authorize unsafe deletion, so unknown metadata
must abort inventory collection. Keep outer empty/null relation semantics and
valid nested GUID references. Preserve the current inventory exception while
attaching earlier deletion errors, including failed job-history or schedule
reads; never continue deleting after the metadata read fails.
Identity guards retain real failures instead of replacing them with a
self-suppression exception. This changes test infrastructure only, not public
SparkML APIs, dependency pins, pipeline settings, or runtime enablement.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
## Summary
Keep recoverable DELETE errors separate from inventory and confirmation errors.
Abort the candidate loop when confirmation fails, preserving the original
exception and earlier deletion failures. Cover all read sites, previous-error
and repeated-error combinations, and the bounded multi-job confirmation case.
Register extracted failure tests on the existing CI-selected tracker suite.
Normalize machine-local paths in review records without changing their findings.

## Prompting Intent
The engineer requested isolated master sync PRs for Spark 4.0 and Spark 4.1
through the SynapseML PR loop. Resolve the current-head review findings before
rerunning validation, and carry portable corrections through master first.

## Linked Sources
- microsoft#2732 (comment)
- microsoft#2733
- microsoft#2734
- microsoft#2734 (comment)
- microsoft#2734 (comment)
- microsoft#2734 (comment)
- microsoft#2734 (comment)
- microsoft#2734 (comment)
- microsoft#2734 (comment)
- microsoft#2734 (comment)
- pipeline.yaml: explicit FabricTestArtifactTrackerSuite selection
- reviews/pr-2708/README.md: review-record publication conventions
- reviews/fabric-cleanup-relations-20260921/

## Rationale
A failed post-DELETE inventory read must not permit another DELETE. Capture
only actual DELETE failures as recoverable results; keep confirmation outside
that boundary and use one nonfatal abort handler for the full candidate loop.
An unconfirmed deletion also stops the run, while independent jobs may still
be attempted after an ordinary DELETE error. Reuse the existing helper instead
of adding tagged exception wrappers or disabling style rules.
Mix extracted tests into the already scheduled suite so CI executes them without
changing pipeline configuration. Preserve historical review content while
replacing private checkout/log locations with portable evidence references.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
## Summary
Restrict per-artifact cleanup recovery to NonFatal. Interrupts and fatal
cleanup errors now escape even when the notebook body has already failed.
Preserve the body error as suppressed where supported, with an identity guard.
Add 15 throwable/body combinations and a shared-instance regression to the
existing CI-selected tracker suite, and document the behavior.

## Prompting Intent
The engineer requested separate master sync pull requests for spark4.0 and
spark4.1 using the SynapseML PR loop. Address the verified cleanup review
finding on master first, then carry the exact commit into both port branches
without changing their runtime baselines.

## Linked Sources
- Finding: microsoft#2734 (comment)
- Master prerequisite: microsoft#2732
- Spark 4.0 sync: microsoft#2733
- Spark 4.1 sync: microsoft#2734
- Original cleanup work: microsoft#2728
- Review records: reviews/fabric-cleanup-relations-20260921/task-fatal-cleanup-attempt-1-review-*.md

## Rationale
Use NonFatal for recoverable cleanup and explicitly rethrow excluded errors
after retaining the original failure. Keep the body's catch-and-rethrow and
ordinary cleanup-error suppression unchanged. Regressions demonstrated both
fatal masking and lost body diagnostics before their fixes. The fixed master
passes compile, test compile, production/test Scala style, and all 48 tracker
and naming tests. Review records retain the unavailable Gemini-family gate;
they do not claim complete three-family review or full Azure validation.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
## Summary
Check deletion immediately, then at most ten more times with 30-second waits
per artifact. Preserve the existing fail-closed ordering and error handling.
Inject the sleep duration so tests verify 30000 ms and a 300000 ms wait budget.
Expand boundary coverage and document that HTTP request time is additional.

## Prompting Intent
The engineer explicitly requested 30-second polling with a five-minute
maximum, superseding the earlier one-minute request. Match the existing
bounded confirmation pattern, keep one deletion call per candidate, and
carry the portable master-first fix into both Spark sync pull requests.

## Linked Sources
- Engineer request: "update it so it polls every 30 seconds with a max timeout of 5 mins"
- Master prerequisite: microsoft#2732
- Original bounded polling: microsoft#2728
- Spark 4.0 sync: microsoft#2733
- Spark 4.1 sync: microsoft#2734
- Review records: reviews/pr-2732/task-cleanup-polling-30s-attempt-1-review-*.md

## Rationale
Use eleven reads and ten waits rather than a shared or wall-clock deadline,
matching the referenced per-item wait-budget semantics. Duration-aware
sleeper injection tests the actual requested delays without real sleeps.
Regressions cover immediate, first, middle, and final success, fresh child
and parent budgets, exhaustion, inventory errors, conflicting metadata,
interrupts, and protected consumers. Five unchanged failure tests move into
the existing mix-in to preserve the 800-line limit and CI test registration.
The old 31-read/two-second policy failed the new assertions. The final master
passes core compile, test compile, production/test Scala style, and all 50
tracker/naming tests. No runtime pins, pipeline policy, or release tooling
changes are included. Gemini-family review remains explicitly unavailable.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@ranadeepsingh
Rana Singh (ranadeepsingh) force-pushed the fix/fabric-cleanup-relations-20260921 branch from 81ccc54 to dd33c24 Compare September 22, 2026 04:06
Copilot AI review requested due to automatic review settings September 22, 2026 04:07
Rana Singh (ranadeepsingh) added a commit to ranadeepsingh/SynapseML that referenced this pull request Sep 22, 2026
## Summary
Merge the exact master-first polling update, deterministic regressions,
documentation, and review records into this Spark sync.

## Prompting Intent
The engineer requested 30-second deletion-confirmation intervals with a
five-minute per-item wait budget. Preserve this port's runtime settings
and carry portable changes through normal merge ancestry.

## Linked Sources
- Master prerequisite: microsoft#2732
- Spark 4.0 sync: microsoft#2733
- Spark 4.1 sync: microsoft#2734
- Shared review-layout guidance only: microsoft#2736
- Review records: reviews/pr-2732/task-cleanup-polling-30s-attempt-1-review-*.md

## Rationale
The same helper and tests run on each supported Scala baseline. This port
passes core compile, test compile, production/test Scala style, and all 50
tracker/naming tests. Polling performs one immediate read and at most ten
30-second waits per item, with request time additional, and never resends
DELETE. This merge preserves runtime pins and existing Fabric enablement.
Previous-head Azure results do not validate this new head; fresh remote
checks remain required. The Gemini-family review limitation stays visible.
Copy only the six-line shared review-layout guidance from latest master so
AGENTS.md and CONTRIBUTING.md stay identical across the task branches.
The remaining newly merged CI changes are not imported without approval.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Rana Singh (ranadeepsingh) added a commit to ranadeepsingh/SynapseML that referenced this pull request Sep 22, 2026
## Summary
Merge the exact master-first polling update, deterministic regressions,
documentation, and review records into this Spark sync.

## Prompting Intent
The engineer requested 30-second deletion-confirmation intervals with a
five-minute per-item wait budget. Preserve this port's runtime settings
and carry portable changes through normal merge ancestry.

## Linked Sources
- Master prerequisite: microsoft#2732
- Spark 4.0 sync: microsoft#2733
- Spark 4.1 sync: microsoft#2734
- Shared review-layout guidance only: microsoft#2736
- Review records: reviews/pr-2732/task-cleanup-polling-30s-attempt-1-review-*.md

## Rationale
The same helper and tests run on each supported Scala baseline. This port
passes core compile, test compile, production/test Scala style, and all 50
tracker/naming tests. Polling performs one immediate read and at most ten
30-second waits per item, with request time additional, and never resends
DELETE. This merge preserves runtime pins and existing Fabric enablement.
Previous-head Azure results do not validate this new head; fresh remote
checks remain required. The Gemini-family review limitation stays visible.
Copy only the six-line shared review-layout guidance from latest master so
AGENTS.md and CONTRIBUTING.md stay identical across the task branches.
The remaining newly merged CI changes are not imported without approval.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🔵 Needs a closer look

The changes require final human review because they are too complex or risky for automated approval.

Review effort: Lite
Findings: 1 Low severity

Open (1)

Comment thread reviews/pr-2732/task-cleanup-polling-30s-attempt-1-review-6-claude-opus-5.md Outdated
## Summary
Use one exception boundary for smoke and notebook job waits. Restore interrupt
status, rethrow the original interrupt or fatal error, and retain notebook
context for ordinary failures. Add deterministic regressions and document the
contract. Move cleanup review history under its numbered PR directory and
correct a misleading timing statement while preserving its original wording
as explicitly labeled historical feedback.

## Prompting Intent
Complete the requested Spark sync PR loop and address all current-head review
findings without changing runtime pins, CI policy, or Fabric enablement.
Preserve the requested 30-second, per-item five-minute waiting budget.

## Linked Sources
- Smoke wait review: microsoft#2734 (comment)
- Report placement review: microsoft#2734 (comment)
- Timing wording review: microsoft#2732 (comment)
- Master prerequisite: microsoft#2732
- Review records: reviews/pr-2732/task-job-wait-errors-attempt-1-review-*.md

## Rationale
Share the notebook path's existing exception policy rather than maintaining a
second catch-all in smoke tests. The original smoke await/assert semantics and
resource lifecycle remain unchanged. After behavior-preserving extraction,
the previous catch-all failed the interrupt and fatal-error regressions.
Master compilation, test compilation, both Scala style checks, and all 53
tracker/naming tests pass. Tests use an actual interrupted Await without
contacting Fabric. No public SparkML signature or serialized parameter changes.
Gemini-family review remains unavailable rather than being reported as passed.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings September 22, 2026 05:10

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🔵 Needs a closer look

Human approval remains required because current validation does not cover the new head and managed-runtime paths.

Review effort: Lite
Findings: None

Resolved since last review (1)

Rana Singh (ranadeepsingh) added a commit to ranadeepsingh/SynapseML that referenced this pull request Sep 22, 2026
## Summary
Carry the reviewed master-first job-wait correction and review-record cleanup
into this port by a normal merge. Place this port's own historical reports
under its numbered PR directory.

## Prompting Intent
Resolve current-head sync review findings while retaining the port runtime,
CI policy, disabled Fabric E2E, and requested deletion-confirmation cadence.

## Linked Sources
- Master prerequisite: microsoft#2732
- Spark 4.0 sync: microsoft#2733
- Spark 4.1 review: microsoft#2734 (comment)
- Review records: reviews/pr-2732/task-job-wait-errors-attempt-1-review-*.md

## Rationale
The master prerequisite was rebased after master acquired approval-gated CI
changes. Apply its exact follow-up patch to the previously synced master
baseline, then merge that portable branch into each port. This retains merge
ancestry without importing unapproved pipeline changes. Shared helper content
must match the master fix, and each port must pass compilation, test compilation,
both Scala style checks, and all 53 tracker/naming tests before this commit.
Historical report names, reviewed revisions, findings, and resolutions remain
available in numbered PR directories.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Rana Singh (ranadeepsingh) added a commit to ranadeepsingh/SynapseML that referenced this pull request Sep 22, 2026
## Summary
Carry the reviewed master-first job-wait correction and review-record cleanup
into this port by a normal merge. Place this port's own historical reports
under its numbered PR directory.

## Prompting Intent
Resolve current-head sync review findings while retaining the port runtime,
CI policy, disabled Fabric E2E, and requested deletion-confirmation cadence.

## Linked Sources
- Master prerequisite: microsoft#2732
- Spark 4.0 sync: microsoft#2733
- Spark 4.1 review: microsoft#2734 (comment)
- Review records: reviews/pr-2732/task-job-wait-errors-attempt-1-review-*.md

## Rationale
The master prerequisite was rebased after master acquired approval-gated CI
changes. Apply its exact follow-up patch to the previously synced master
baseline, then merge that portable branch into each port. This retains merge
ancestry without importing unapproved pipeline changes. Shared helper content
must match the master fix, and each port must pass compilation, test compilation,
both Scala style checks, and all 53 tracker/naming tests before this commit.
Historical report names, reviewed revisions, findings, and resolutions remain
available in numbered PR directories.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@ranadeepsingh

Copy link
Copy Markdown
Collaborator Author

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 1 pipeline(s).

@ranadeepsingh
Rana Singh (ranadeepsingh) merged commit 0a7fdaf into microsoft:master Sep 22, 2026
82 of 83 checks passed
Rana Singh (ranadeepsingh) added a commit that referenced this pull request Sep 22, 2026
## Summary
Keep recoverable DELETE errors separate from inventory and confirmation errors.
Abort the candidate loop when confirmation fails, preserving the original
exception and earlier deletion failures. Cover all read sites, previous-error
and repeated-error combinations, and the bounded multi-job confirmation case.
Register extracted failure tests on the existing CI-selected tracker suite.
Normalize machine-local paths in review records without changing their findings.

## Prompting Intent
The engineer requested isolated master sync PRs for Spark 4.0 and Spark 4.1
through the SynapseML PR loop. Resolve the current-head review findings before
rerunning validation, and carry portable corrections through master first.

## Linked Sources
- #2732 (comment)
- #2733
- #2734
- #2734 (comment)
- #2734 (comment)
- #2734 (comment)
- #2734 (comment)
- #2734 (comment)
- #2734 (comment)
- #2734 (comment)
- pipeline.yaml: explicit FabricTestArtifactTrackerSuite selection
- reviews/pr-2708/README.md: review-record publication conventions
- reviews/fabric-cleanup-relations-20260921/

## Rationale
A failed post-DELETE inventory read must not permit another DELETE. Capture
only actual DELETE failures as recoverable results; keep confirmation outside
that boundary and use one nonfatal abort handler for the full candidate loop.
An unconfirmed deletion also stops the run, while independent jobs may still
be attempted after an ordinary DELETE error. Reuse the existing helper instead
of adding tagged exception wrappers or disabling style rules.
Mix extracted tests into the already scheduled suite so CI executes them without
changing pipeline configuration. Preserve historical review content while
replacing private checkout/log locations with portable evidence references.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Rana Singh (ranadeepsingh) added a commit that referenced this pull request Sep 22, 2026
## Summary
Restrict per-artifact cleanup recovery to NonFatal. Interrupts and fatal
cleanup errors now escape even when the notebook body has already failed.
Preserve the body error as suppressed where supported, with an identity guard.
Add 15 throwable/body combinations and a shared-instance regression to the
existing CI-selected tracker suite, and document the behavior.

## Prompting Intent
The engineer requested separate master sync pull requests for spark4.0 and
spark4.1 using the SynapseML PR loop. Address the verified cleanup review
finding on master first, then carry the exact commit into both port branches
without changing their runtime baselines.

## Linked Sources
- Finding: #2734 (comment)
- Master prerequisite: #2732
- Spark 4.0 sync: #2733
- Spark 4.1 sync: #2734
- Original cleanup work: #2728
- Review records: reviews/fabric-cleanup-relations-20260921/task-fatal-cleanup-attempt-1-review-*.md

## Rationale
Use NonFatal for recoverable cleanup and explicitly rethrow excluded errors
after retaining the original failure. Keep the body's catch-and-rethrow and
ordinary cleanup-error suppression unchanged. Regressions demonstrated both
fatal masking and lost body diagnostics before their fixes. The fixed master
passes compile, test compile, production/test Scala style, and all 48 tracker
and naming tests. Review records retain the unavailable Gemini-family gate;
they do not claim complete three-family review or full Azure validation.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Rana Singh (ranadeepsingh) added a commit that referenced this pull request Sep 22, 2026
## Summary
Check deletion immediately, then at most ten more times with 30-second waits
per artifact. Preserve the existing fail-closed ordering and error handling.
Inject the sleep duration so tests verify 30000 ms and a 300000 ms wait budget.
Expand boundary coverage and document that HTTP request time is additional.

## Prompting Intent
The engineer explicitly requested 30-second polling with a five-minute
maximum, superseding the earlier one-minute request. Match the existing
bounded confirmation pattern, keep one deletion call per candidate, and
carry the portable master-first fix into both Spark sync pull requests.

## Linked Sources
- Engineer request: "update it so it polls every 30 seconds with a max timeout of 5 mins"
- Master prerequisite: #2732
- Original bounded polling: #2728
- Spark 4.0 sync: #2733
- Spark 4.1 sync: #2734
- Review records: reviews/pr-2732/task-cleanup-polling-30s-attempt-1-review-*.md

## Rationale
Use eleven reads and ten waits rather than a shared or wall-clock deadline,
matching the referenced per-item wait-budget semantics. Duration-aware
sleeper injection tests the actual requested delays without real sleeps.
Regressions cover immediate, first, middle, and final success, fresh child
and parent budgets, exhaustion, inventory errors, conflicting metadata,
interrupts, and protected consumers. Five unchanged failure tests move into
the existing mix-in to preserve the 800-line limit and CI test registration.
The old 31-read/two-second policy failed the new assertions. The final master
passes core compile, test compile, production/test Scala style, and all 50
tracker/naming tests. No runtime pins, pipeline policy, or release tooling
changes are included. Gemini-family review remains explicitly unavailable.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Rana Singh (ranadeepsingh) added a commit to ranadeepsingh/SynapseML that referenced this pull request Sep 22, 2026
## Summary
Merge master 0a7fdaf into the existing
Spark 4.1 sync. Import the portable test cleanup and conservative notebook
selection changes while retaining the Spark 4.1 runtime and Python compatibility.

## Prompting Intent
The user requested updating both existing Spark sync PRs with the latest master
changes, maximizing master compatibility while honoring Spark- and
Python-specific differences.

## Linked Sources
- Sync PR: microsoft#2734
- Cleanup prerequisite: microsoft#2732
- Test retirement: microsoft#2735
- Notebook selection: microsoft#2736
- Master: microsoft@0a7fdaf
- Review evidence: reviews/pr-2734/task-latest-master-20260922-attempt-1-review-*.md

## Rationale
Use a normal merge to retain master's ancestry, including the landed cleanup
fixes already present in this PR. Accept the obsolete Python runner deletion
rather than preserving its irrelevant Scala-version edit. Keep Fabric E2E
disabled and assert that port requirement in the imported selector wiring test.
The selector itself matches master. Production code, dependency pins, runtime
profiles, streaming scheduling, and existing Spark/Python adaptations remain
unchanged from the previously validated port head.
Strengthen the full-test override regression with valid skippable merge metadata
and the non-PR bypass regression with a detection tripwire. Document the disabled
Fabric boundary accurately. These review fixes do not change selector behavior
or enable unsupported runtime jobs.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Rana Singh (ranadeepsingh) added a commit to ranadeepsingh/SynapseML that referenced this pull request Sep 22, 2026
## Summary
Merge master 0a7fdaf into the existing
Spark 4.0 sync. Import the portable test cleanup and conservative notebook
selection changes while retaining the Spark 4.0 runtime and Python compatibility.

## Prompting Intent
The user requested updating both existing Spark sync PRs with the latest master
changes, maximizing master compatibility while honoring Spark- and
Python-specific differences.

## Linked Sources
- Sync PR: microsoft#2733
- Cleanup prerequisite: microsoft#2732
- Test retirement: microsoft#2735
- Notebook selection: microsoft#2736
- Master: microsoft@0a7fdaf
- Review evidence: reviews/pr-2733/task-latest-master-20260922-attempt-1-review-*.md

## Rationale
Use a normal merge to retain master's ancestry, including the landed cleanup
fixes already present in this PR. Accept the obsolete Python runner deletion
rather than preserving its irrelevant Scala-version edit. Keep Fabric E2E
disabled and assert that port requirement in the imported selector wiring test.
The selector itself matches master. Production code, dependency pins, runtime
profiles, streaming scheduling, and existing Spark/Python adaptations remain
unchanged from the previously validated port head.
Strengthen the full-test override regression with valid skippable merge metadata
and the non-PR bypass regression with a detection tripwire. Document the disabled
Fabric boundary accurately. These review fixes do not change selector behavior
or enable unsupported runtime jobs.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants