ci: extend Maven setup and retry dependency downloads - #5489
Conversation
|
should we just try ? |
Thanks for chasing this. Transient dependency-download failures are a real tax on everyone's PRs and the two linked failures make the case clearly. Factoring the Maven bootstrap into a shared composite action is overdue, and the I do have concerns, mostly about scope and about one cache key. This is several independent changes in one PR As far as I can tell there are at least four separable pieces here: the shared The SBT cache key mixes Comet and Spark poms
If those two paths produce even slightly different file sets under
The
The transient-error regex matches anywhere in the log
One question on the preflight tests
|
|
Updated in 093db4c78. Addressed the mixed-log retry bug: explicit permanent HTTP/artifact/build errors now stop the attempt even when an earlier line reports a connection reset. The new regressions fail on the previous helper and verify one invocation, the original exit status, and no backoff; a long-summary case prevents a fixed-tail workaround. The helper remains restricted to dependency acquisition, and Maven goals/Spark compilation and tests are not rerun. All 26 download/cache/Delta checks pass locally, including Maven 3.9.6 against the loopback HTTP server. These are local results for the new commit; the previous hosted preflight ran the original 24 checks in about 36 seconds (29.105 seconds for download/cache tests and 4.942 seconds for Delta checks). For the other questions:
I have kept the related download changes together: SBT pre-resolution addresses the observed dependency failure, and Delta logging retains the failing command's diagnostics. No build/test retry scope was added. |
andygrove
left a comment
There was a problem hiding this comment.
The fix in 093db4c for the mixed-log retry bug addresses the concern I raised about a permanent failure getting retried just because an earlier line in the same log mentioned a transient one. The cache-key match and the setup-maven idempotency question both check out against the evidence in the thread, so I won't re-raise those.
This does overlap with #5782 in one concrete spot. Both PRs set aether.connector.http.retryHandler.count and aether.connector.http.retryHandler.serviceUnavailable, to different values, through different mechanisms. #5782's .mvn/maven.config applies those properties to every ./mvnw invocation, CI or local, with count 6 and service-unavailable codes 408,429,500,502,503,504. This PR's setup-maven/action.yaml sets count 3 and 429,500,502,503,504 through MAVEN_OPTS, which only takes effect where a job calls setup-maven. Landing both as written leaves two sources of truth for the same keys. .mvn/maven.config is the smaller change and the one that also helps contributors building locally, so I'd land #5782 first and have this PR drop its count and serviceUnavailable lines in favor of it, keeping the interval/intervalMax backoff pacing that .mvn/maven.config doesn't set.
Separately from #5782, this branch no longer merges cleanly against main. git merge-tree shows real conflicts in .github/workflows/ci.yml and .github/workflows/pyarrow_udf_test.yml. #5762 inserted a new preflight step at the same line this PR inserts Check CI download handling. #5561 inserted a new path filter and matrix entry at the same line this PR inserts .github/actions/setup-maven/**. More useful than the conflicts themselves: the celeborn-reflection-compatibility job that #5604 added to pr_build_linux.yml sets up its toolchain through setup-builder and then calls ./mvnw directly, bypassing java-test, rust-test, and setup-spark-builder, the three composite actions that now carry the Setup Maven step. Once this rebases, that job will still have neither the wrapper bootstrap retry nor the transfer-retry MAVEN_OPTS this PR is trying to make universal, so it's worth giving it a Setup Maven step in the same pass.
None of the new setup-maven action, retry-download.sh, or the SBT pre-resolution step gets a mention in .github/workflows/README.md. That matters more here because #5782 is adding a "Retrying flaky network operations" section to that same README describing ./.github/actions/java-test's bootstrap retry, which this PR moves into setup-maven. Whichever of the two lands second should update that section so it still matches where the mechanism actually lives.
Which issue does this PR close?
No issue is closed. This follows up on #5422 and addresses the dependency-download failures seen on #5481. The separate libhdfs crash is covered by #5036.
Rationale for this change
#5422 added Maven distribution caching and bootstrap retries to the Java test action. Other Maven callers still bootstrap independently, and downloading Maven itself does not protect subsequent artifact downloads.
On #5481, the Delta build gate failed downloading a Maven plugin dependency with
Connection reset, while a Spark 4.1 SQL shard failed resolving a Guava dependency with HTTP 502 before its tests started.What changes are included in this PR?
/root, which caused cache saving to fail withEACCES; root containers keep their existing distribution location. The changed cache path list causes one initial cache miss.How are these changes tested?
/home/runner/.m2/wrapper/distswithoutEACCES.The real Maven integration checks ran locally on JDK 21 and in preflight on JDK 11. Full Spark/JVM/native coverage is provided by the remaining PR CI matrix. This PR does not change the native crash fix in #5036.