Skip to content

ci: add a computing-unit-master boot smoke test in amber-integration#6377

Open
mengw15 wants to merge 1 commit into
apache:mainfrom
mengw15:ci/6344-computing-unit-master-boot-smoke
Open

ci: add a computing-unit-master boot smoke test in amber-integration#6377
mengw15 wants to merge 1 commit into
apache:mainfrom
mengw15:ci/6344-computing-unit-master-boot-smoke

Conversation

@mengw15

@mengw15 mengw15 commented Jul 12, 2026

Copy link
Copy Markdown
Contributor

What changes were proposed in this PR?

amber-integration already builds and unzips the amber dist to boot-smoke-test texera-web (#6319), but computing-unit-master — the other server produced by the same WorkflowExecutionService/dist (bin/computing-unit-master, port 8085) — is not started anywhere in CI. It compiles and unit-tests clean, so a runtime classpath/linkage regression (the #6204 class of bug: NoClassDefFoundError from a dependency conflict that only manifests when the packaged launcher actually runs) would pass build and merge, surfacing only at deploy.

  • Add one boot step to amber-integration, right after the texera-web boot, reusing the amber dist already built and unzipped there — no extra build. It launches bin/computing-unit-master via .github/scripts/smoke-boot.sh and asserts the process reaches a listening state on :8085 without crashing.

It boots on postgres only, which amber-integration already provisions:

  • main starts a local Pekko actor master — clusterMode defaults to false (no --cluster arg), so AmberRuntime.startActorMaster(false) self-seeds a single node with no external discovery, and the cluster-only getNodeIpAddress (checkip.amazonaws.com) call is never reached — then run() calls SqlServer.initConnection.
  • The boot-time result-store cleanup is gated on ApplicationConfig.cleanupAllExecutionResults, which defaults to false (asserted in ApplicationConfigSpec), so no iceberg/S3 access on boot.
  • Config resolves via Utils.amberHomePath to amber/src/main/resources/computing-unit-master-config.yml (port 8085).

ubuntu-latest only, mirroring the texera-web step (the boot is pure-JVM and OS-independent).

Any related issues, documentation, discussions?

Closes #6344. Mirrors the texera-web boot test from #6319 and the platform-service boot tests from #6274; smoke script from #6220. Suggested by @Yicong-Huang in the #6319 review.

How was this PR tested?

  • amber-integration (ubuntu-latest) runs the new step in this PR; bin/computing-unit-master boots and reaches LISTEN on :8085.
  • Verified the boot needs no infra beyond the postgres the job already provisions, by reading ComputingUnitMaster.main/run: clusterMode default false → local actor master, cleanupAllExecutionResults default false → no result-store cleanup, SqlServer.initConnection → postgres only.
  • The step is a faithful mirror of the existing texera-web boot (same dist, same smoke-boot.sh, same ubuntu-only guard).

Was this PR authored or co-authored using generative AI tooling?

Generated-by: Claude Code (claude-opus-4-8)

amber-integration builds and unzips the amber dist to boot-smoke-test
texera-web (apache#6319), but computing-unit-master -- the other server from the
same WorkflowExecutionService/dist (bin/computing-unit-master, port 8085) --
is never started anywhere in CI, so a runtime classpath/linkage regression
(the apache#6204 class of bug) in it would pass build and unit tests and only
surface at deploy.

Add one more boot step, reusing the dist already built and unzipped for the
texera-web boot. Like texera-web it boots on postgres only: main starts a
local Pekko actor master (clusterMode defaults to false, so no external seed
and the cluster-only checkip.amazonaws.com lookup is skipped) and run() calls
SqlServer.initConnection; the boot-time result-store cleanup is gated on
ApplicationConfig.cleanupAllExecutionResults, which defaults to false, so no
iceberg/S3 access. ubuntu-only, mirroring the texera-web step.

Closes apache#6344.
@github-actions github-actions Bot added the ci changes related to CI label Jul 12, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Automated Reviewer Suggestions

Based on the git blame history of the changed files, we recommend the following reviewers:

  • No candidates found from git blame history.

@codecov-commenter

codecov-commenter commented Jul 12, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 66.04%. Comparing base (afa8af2) to head (c9879fa).

Additional details and impacted files
@@             Coverage Diff              @@
##               main    #6377      +/-   ##
============================================
- Coverage     66.04%   66.04%   -0.01%     
+ Complexity     3380     3378       -2     
============================================
  Files          1142     1142              
  Lines         44980    44980              
  Branches       4948     4948              
============================================
- Hits          29709    29705       -4     
- Misses        13631    13632       +1     
- Partials       1640     1643       +3     
Flag Coverage Δ
access-control-service 70.00% <ø> (ø)
agent-service 51.90% <ø> (ø)
amber 66.55% <ø> (-0.02%) ⬇️
computing-unit-managing-service 9.97% <ø> (ø)
config-service 52.30% <ø> (ø)
file-service 63.97% <ø> (ø)
frontend 63.50% <ø> (-0.01%) ⬇️
notebook-migration-service 78.94% <ø> (ø)
pyamber 91.18% <ø> (ø)
workflow-compiling-service 55.14% <ø> (ø)

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

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.

Pull request overview

This PR extends the existing amber-integration CI workflow to also boot-smoke-test the packaged computing-unit-master launcher from the already-built Amber dist, catching runtime classpath/linkage regressions that won’t surface in compile/unit tests.

Changes:

  • Add a new amber-integration step (Ubuntu-only) to run .github/scripts/smoke-boot.sh against /tmp/dists/amber-*/bin/computing-unit-master and wait for port 8085 to reach LISTEN.
  • Reuse the existing dist build/unzip already performed for the texera-web boot smoke test (no additional build work).

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@github-actions

Copy link
Copy Markdown
Contributor

⚠️ Benchmark changes need a look

🟢 2 better · 🔴 5 worse · ⚪ 8 noise (<±5%) · 0 without baseline

Compared against main afa8af2 benchmarked on this same runner, so the delta is largely free of cross-runner hardware noise. The "7d avg" column still reflects the gh-pages dashboard. Treat <±5% as noise unless repeated.

Dashboard · Run

config throughput MB/s latency max Δ latest / 7d
🔴 bs=10 sw=10 sl=64 483 0.295 19,290/33,947/33,947 us 🔴 +14.8% / 🔴 +133.0%
🟢 bs=100 sw=10 sl=64 1,202 0.734 83,391/96,146/96,146 us 🟢 -19.9% / 🟢 -13.5%
bs=1000 sw=10 sl=64 1,443 0.88 690,012/732,699/732,699 us ⚪ within ±5% / 🟢 +31.9%
Baseline details

Latest main afa8af2 from same runner

config metric PR latest main 7d avg Δ latest Δ 7d
bs=10 sw=10 sl=64 throughput 483 tuples/sec 528 tuples/sec 825.74 tuples/sec -8.5% -41.5%
bs=10 sw=10 sl=64 MB/s 0.295 MB/s 0.322 MB/s 0.504 MB/s -8.4% -41.5%
bs=10 sw=10 sl=64 p50 19,290 us 16,932 us 12,003 us +13.9% +60.7%
bs=10 sw=10 sl=64 p95 33,947 us 29,583 us 14,566 us +14.8% +133.0%
bs=10 sw=10 sl=64 p99 33,947 us 29,583 us 18,190 us +14.8% +86.6%
bs=100 sw=10 sl=64 throughput 1,202 tuples/sec 1,192 tuples/sec 1,072 tuples/sec +0.8% +12.1%
bs=100 sw=10 sl=64 MB/s 0.734 MB/s 0.727 MB/s 0.654 MB/s +1.0% +12.2%
bs=100 sw=10 sl=64 p50 83,391 us 79,921 us 94,522 us +4.3% -11.8%
bs=100 sw=10 sl=64 p95 96,146 us 120,106 us 101,111 us -19.9% -4.9%
bs=100 sw=10 sl=64 p99 96,146 us 120,106 us 111,122 us -19.9% -13.5%
bs=1000 sw=10 sl=64 throughput 1,443 tuples/sec 1,405 tuples/sec 1,094 tuples/sec +2.7% +31.9%
bs=1000 sw=10 sl=64 MB/s 0.88 MB/s 0.858 MB/s 0.668 MB/s +2.6% +31.8%
bs=1000 sw=10 sl=64 p50 690,012 us 709,978 us 934,546 us -2.8% -26.2%
bs=1000 sw=10 sl=64 p95 732,699 us 760,502 us 975,104 us -3.7% -24.9%
bs=1000 sw=10 sl=64 p99 732,699 us 760,502 us 1,005,414 us -3.7% -27.1%
Raw CSV
config_idx,batch_size,schema_width,string_len,num_batches,total_ms,total_tuples,total_bytes,tuples_per_sec,mb_per_sec,lat_p50_us,lat_p95_us,lat_p99_us
0,10,10,64,20,414.30,200,128000,483,0.295,19290.04,33946.65,33946.65
1,100,10,64,20,1663.72,2000,1280000,1202,0.734,83390.65,96146.39,96146.39
2,1000,10,64,20,13864.47,20000,12800000,1443,0.880,690012.16,732698.88,732698.88

@mengw15
mengw15 requested a review from Yicong-Huang July 12, 2026 23:50
Comment on lines +642 to +654
- name: Smoke-test computing-unit-master boots
# computing-unit-master boots on postgres only, like texera-web: main
# starts a LOCAL Pekko actor master (clusterMode defaults to false with
# no --cluster arg, so no external seed/discovery and the cluster-only
# checkip.amazonaws.com lookup is never reached), then run() calls
# SqlServer.initConnection against the postgres provisioned above. The
# boot-time result-store cleanup is gated on
# ApplicationConfig.cleanupAllExecutionResults, which defaults to false,
# so no iceberg / S3 access. Config resolves via Utils.amberHomePath to
# amber/src/main/resources/computing-unit-master-config.yml (port 8085).
# Reuses the amber dist built + unzipped above for the texera-web boot.
if: matrix.os == 'ubuntu-latest'
run: .github/scripts/smoke-boot.sh "/tmp/dists/amber-*/bin/computing-unit-master" 8085

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.

do we also need to smoke test the CU worker node ?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Looked at ComputingUnitWorker — it doesn't fit this smoke test the same way:

  • No fixed port to probe. startActorWorker binds artery.canonical.port = 0 (random) and runs no HTTP server; smoke-boot.sh needs a known port (the master works because of its Dropwizard :8085).
  • A worker's health = "joined the cluster," which needs a master/seed at :2552 first — standalone it just retries and stays up, so "didn't crash" proves nothing. A real test is master + worker + a cluster-membership assertion.
  • Linkage coverage is mostly shared — same amber dist/classpath; the worker's only unique path is startActorWorker vs startActorMaster.

So I'd scope this PR to the master.

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.

we can do it later. can we open a ticket to track this todo?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Filed #6523 to track it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci changes related to CI

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add a ComputingUnitMaster boot smoke test in amber-integration

4 participants