Skip to content

chore(amber): reduce engine log verbosity and pin the CI log-level backstop#6797

Merged
aglinxinyuan merged 10 commits into
apache:mainfrom
aglinxinyuan:ci-log-verbosity
Jul 25, 2026
Merged

chore(amber): reduce engine log verbosity and pin the CI log-level backstop#6797
aglinxinyuan merged 10 commits into
apache:mainfrom
aglinxinyuan:ci-log-verbosity

Conversation

@aglinxinyuan

@aglinxinyuan aglinxinyuan commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

What changes were proposed in this PR?

Root cause. AmberLogging names each logger "<actorId>] [<ClassName>" so the logback pattern [%logger] renders both the actor id and the class. The side effect is that these logger names start with the actor id (WF6-…, COORDINATOR), not org.apache…, so the <logger name="org.apache" level="WARN"/> rule in amber/src/main/resources/logback.xml never matches the engine classes. They all fall through to the root logger and emit at INFO. In loop/integration tests, workers are recreated every iteration, so per-ECM / per-worker / per-region lines fire dozens of times and flood the CI console.

This PR demotes those statements to DEBUG so they no longer print at the default INFO level (CI, local, and prod), and demotes three WARNs that fire on normal operation:

Message Was Source
receive / process / send ECM (2–3× per control message, full ChannelIdentity dump) INFO DataProcessor.scala, main_loop.py
register <id> -> Actor[…] INFO PekkoActorRefMappingService.scala
…is not reachable anymore, it might have crashed — fires on graceful teardown WARN PekkoActorRefMappingService.scala
unknown identifier — registration race WARN PekkoActorRefMappingService.scala
worker replay log writing conf, DP thread started/exits, Starting the worker. INFO WorkflowActor, DPThread, StartHandler
Region N successfully terminated. INFO RegionExecutionManager.scala
…completed, # of input ports… INFO DataProcessor.scala
client actor cannot handle …//skip fallthrough WARN ClientActor.scala

Genuine fault paths are untouched: DP Thread exists unexpectedly (ERROR), Failed to fetch actorRef (WARN), and Error when terminating region (WARN, the failure branch — distinct from the demoted successfully terminated success branch).

As a CI backstop, the amber unit and integration test steps in build.yml pin the log level so any remaining INFO chatter is suppressed there even before the source demotions take effect. The two logging stacks spell the level differently, which is a trap worth calling out: logback takes TEXERA_SERVICE_LOG_LEVEL=WARN, but the spawned Python UDF worker uses loguru, whose only warning level is WARNING. Feeding loguru WARN raises ValueError: Level 'WARN' does not exist at worker startup — before the worker hands its Flight port back to the JVM — and the JVM then blocks on the proxy handshake with no internal timeout, hanging amber-integration until GitHub's 6 h runner cap. So the Python var is pinned to UDF_PYTHON_LOG_STREAMHANDLER_LEVEL=WARNING, and, symmetrically, logback keeps WARN (it falls back to DEBUG on an unknown level like WARNING, which would flood logs instead). amber-integration additionally gets timeout-minutes: 40 so any future worker-startup deadlock fails fast instead of burning a full runner.

Net effect: the bulk of the per-iteration output from loop/integration specs disappears from the default-level log, while DEBUG keeps it available on demand.

Any related issues, documentation, discussions?

Closes #6796

How was this PR tested?

The source demotions are a log-level-only change — no behavior changes — so they rely on the existing test suites run in CI. Verified additionally by inspection and by the CI backstop's own behavior:

  • No test asserts on a demoted message. Grepped all amber Scala and Python test sources for each demoted string; none is asserted. (ReplayLogGeneratorSpec matches "cannot handle", but against an unrelated RuntimeException from ReplayLogGenerator, not the ClientActor log.)
  • The CI WARN/WARNING env does not break config specs. UdfConfigSpec's and PekkoConfigSpec's default-value assertions are guarded (ifUnset / !sys.env.contains(...)), and pekko.stdout-loglevel is hardcoded INFO in cluster.conf (only pekko.loglevel is env-driven), so its unguarded assertion still passes.
  • loguru level names verified. On the pinned loguru 0.7.0, logger.add(sys.stderr, level="WARN") raises ValueError: Level 'WARN' does not exist while level="WARNING" succeeds (loguru's levels are TRACE/DEBUG/INFO/SUCCESS/WARNING/ERROR/CRITICAL); logback accepts WARN. With WARNING, amber-integration runs green again — the ubuntu leg finishes the integration step in ~8.5 min, versus the earlier WARN runs that sat in that step ~3 h until cancelled.
  • Lint clean. No imports added (so scalafixAll --check is unaffected); the longest changed Scala line is 96 columns (< the 100 maxColumn), so scalafmtCheckAll stays green.

A follow-up sweep for other hot-path INFO/WARN logs (e.g. AsyncRPCClient null control-reply, the range-shuffle partitioner, Tuple cast warnings) is captured in #6796 rather than expanded here.

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

Generated-by: Claude Code (Opus 4.8 [1M context])

…ine logs

Amber engine loggers are named "<actorId>] [<ClassName>" by AmberLogging so
the pattern renders both the actor id and the class. A side effect is that
these logger names start with the actor id, not "org.apache", so the
`org.apache=WARN` rule in logback.xml never matches them and every one of
these statements emits at the root INFO level. In loop/integration tests
workers are recreated each iteration, so per-ECM, per-worker, per-region
lines fire dozens of times and flood the CI console.

Demote the chatty per-message / per-worker-lifecycle / per-region logs to
DEBUG so they no longer print at the default INFO level (CI, local, and
prod), and demote three misleading WARNs that fire on normal operation:

  * receive/process/send ECM (DataProcessor.scala, main_loop.py)
  * register->Actor / "unknown identifier" / "might have crashed"
    (PekkoActorRefMappingService.scala)
  * replay-log conf, DP thread start/exit, "Starting the worker",
    "Region N successfully terminated", operator completion
  * ClientActor "cannot handle" fallthrough

Genuine fault paths are untouched (DP-thread ERROR, "Failed to fetch
actorRef" WARN, "Error when terminating region" WARN). As a CI backstop,
pin TEXERA_SERVICE_LOG_LEVEL and UDF_PYTHON_LOG_STREAMHANDLER_LEVEL to WARN
on the amber unit and integration test steps.
Copilot AI review requested due to automatic review settings July 22, 2026 10:46
@aglinxinyuan aglinxinyuan self-assigned this Jul 22, 2026

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

Note

Copilot couldn't run its full agentic review because it didn't start before the timeout. Make sure your repository has a runner available, or add a copilot-code-review.yml file specifying one with the runs-on attribute. See the docs for more details.

Reduces CI console log volume by demoting high-frequency Amber engine logs (Scala + Python) from INFO/WARN to DEBUG and pinning CI log levels to WARN as a backstop.

Changes:

  • Demoted hot-path per-worker/per-message engine logs from INFO/WARN to DEBUG across Amber Scala and Python runtime paths.
  • Demoted selected WARN logs that occur during normal teardown/races to DEBUG to avoid noisy CI output.
  • Added CI workflow environment overrides to force JVM/Python worker logs to WARN in unit/integration steps.

Reviewed changes

Copilot reviewed 9 out of 9 changed files in this pull request and generated 7 comments.

Show a summary per file
File Description
amber/src/main/scala/org/apache/texera/amber/engine/common/client/ClientActor.scala Demotes “cannot handle” log from WARN to DEBUG.
amber/src/main/scala/org/apache/texera/amber/engine/architecture/worker/promisehandlers/StartHandler.scala Demotes worker start log to DEBUG.
amber/src/main/scala/org/apache/texera/amber/engine/architecture/worker/DataProcessor.scala Demotes ECM receive/process/send and completion summary logs to DEBUG.
amber/src/main/scala/org/apache/texera/amber/engine/architecture/worker/DPThread.scala Demotes DP thread lifecycle logs to DEBUG.
amber/src/main/scala/org/apache/texera/amber/engine/architecture/scheduling/RegionExecutionManager.scala Demotes “successfully terminated” log to DEBUG.
amber/src/main/scala/org/apache/texera/amber/engine/architecture/common/WorkflowActor.scala Demotes replay-log config log to DEBUG.
amber/src/main/scala/org/apache/texera/amber/engine/architecture/common/PekkoActorRefMappingService.scala Demotes registration / normal teardown race logs to DEBUG.
amber/src/main/python/core/runnables/main_loop.py Demotes ECM receive/process/send logs to DEBUG.
.github/workflows/build.yml Pins CI log level env vars to WARN for unit/integration steps.

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

Comment thread amber/src/main/python/core/runnables/main_loop.py
Comment thread amber/src/main/python/core/runnables/main_loop.py
Comment thread amber/src/main/python/core/runnables/main_loop.py
@github-actions github-actions Bot added the ci changes related to CI label Jul 22, 2026
@github-actions

github-actions Bot commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Automated Reviewer Suggestions

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

  • Contributors with relevant context: @Yicong-Huang, @bobbai00, @Ma77Ball
    You can notify them by mentioning @Yicong-Huang, @bobbai00, @Ma77Ball in a comment.

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

Copilot reviewed 9 out of 9 changed files in this pull request and generated 1 comment.

@codecov-commenter

codecov-commenter commented Jul 23, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 66.66667% with 1 line in your changes missing coverage. Please review.
✅ Project coverage is 77.42%. Comparing base (7e4a9b4) to head (4e2608f).

Files with missing lines Patch % Lines
amber/src/main/python/core/runnables/main_loop.py 66.66% 1 Missing ⚠️
Additional details and impacted files
@@             Coverage Diff              @@
##               main    #6797      +/-   ##
============================================
- Coverage     77.97%   77.42%   -0.56%     
+ Complexity     3661     3520     -141     
============================================
  Files          1161     1161              
  Lines         46059    46046      -13     
  Branches       5105     5095      -10     
============================================
- Hits          35915    35649     -266     
- Misses         8521     8827     +306     
+ Partials       1623     1570      -53     
Flag Coverage Δ *Carryforward flag
access-control-service 70.00% <ø> (ø)
agent-service 76.76% <ø> (ø)
amber 69.14% <ø> (-1.53%) ⬇️ Carriedforward from bcf9e01
computing-unit-managing-service 20.49% <ø> (ø)
config-service 66.66% <ø> (ø)
file-service 67.21% <ø> (ø)
frontend 82.64% <ø> (+<0.01%) ⬆️
notebook-migration-service 78.94% <ø> (ø)
pyamber 92.40% <66.66%> (ø)
workflow-compiling-service 55.14% <ø> (ø)

*This pull request uses carry forward flags. Click here to find out more.

☔ 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.

@github-actions

github-actions Bot commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

⚠️ Benchmark changes need a look

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

Compared against main 7e4a9b4 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 385 0.235 26,090/30,979/30,979 us 🟢 -45.9% / 🔴 +103.6%
🔴 bs=100 sw=10 sl=64 781 0.477 122,780/169,146/169,146 us 🔴 +18.2% / 🔴 +55.0%
bs=1000 sw=10 sl=64 928 0.566 1,079,324/1,130,830/1,130,830 us ⚪ within ±5% / 🔴 +8.1%
Baseline details

Latest main 7e4a9b4 from same runner

config metric PR latest main 7d avg Δ latest Δ 7d
bs=10 sw=10 sl=64 throughput 385 tuples/sec 345 tuples/sec 754.55 tuples/sec +11.6% -49.0%
bs=10 sw=10 sl=64 MB/s 0.235 MB/s 0.211 MB/s 0.461 MB/s +11.4% -49.0%
bs=10 sw=10 sl=64 p50 26,090 us 24,614 us 12,816 us +6.0% +103.6%
bs=10 sw=10 sl=64 p95 30,979 us 57,229 us 16,594 us -45.9% +86.7%
bs=10 sw=10 sl=64 p99 30,979 us 57,229 us 19,806 us -45.9% +56.4%
bs=100 sw=10 sl=64 throughput 781 tuples/sec 840 tuples/sec 969.38 tuples/sec -7.0% -19.4%
bs=100 sw=10 sl=64 MB/s 0.477 MB/s 0.512 MB/s 0.592 MB/s -6.8% -19.4%
bs=100 sw=10 sl=64 p50 122,780 us 116,173 us 103,584 us +5.7% +18.5%
bs=100 sw=10 sl=64 p95 169,146 us 143,150 us 109,097 us +18.2% +55.0%
bs=100 sw=10 sl=64 p99 169,146 us 143,150 us 117,304 us +18.2% +44.2%
bs=1000 sw=10 sl=64 throughput 928 tuples/sec 917 tuples/sec 1,004 tuples/sec +1.2% -7.5%
bs=1000 sw=10 sl=64 MB/s 0.566 MB/s 0.56 MB/s 0.613 MB/s +1.1% -7.6%
bs=1000 sw=10 sl=64 p50 1,079,324 us 1,090,493 us 1,002,357 us -1.0% +7.7%
bs=1000 sw=10 sl=64 p95 1,130,830 us 1,141,667 us 1,046,463 us -0.9% +8.1%
bs=1000 sw=10 sl=64 p99 1,130,830 us 1,141,667 us 1,073,661 us -0.9% +5.3%
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,520.00,200,128000,385,0.235,26090.08,30978.84,30978.84
1,100,10,64,20,2560.37,2000,1280000,781,0.477,122779.93,169145.69,169145.69
2,1000,10,64,20,21556.77,20000,12800000,928,0.566,1079323.64,1130829.83,1130829.83

- main_loop.py: switch the three per-ECM debug logs from eager f-strings
  to loguru's lazy `{}`-placeholder form. loguru's _log short-circuits on
  core.min_level before formatting, so the ChannelIdentity/command string
  building is now skipped entirely when DEBUG is disabled (the default).
- PekkoActorRefMappingService: reword the demoted teardown log to a neutral
  "removed actor ref for <id>" — removeActorRef also runs on normal graceful
  region teardown, so the old "might have crashed" wording was misleading.

The Scala interpolated debug logs are left as-is: com.typesafe.scala-logging
3.9.6 Logger methods are macros that guard the message with isDebugEnabled,
so `s"..."` is not built when the level is disabled.
@Yicong-Huang

Copy link
Copy Markdown
Contributor

Let me review this. I may need some time

loguru has no WARN level (only WARNING), so UDF_PYTHON_LOG_STREAMHANDLER_LEVEL=WARN
made every spawned Python UDF worker raise `ValueError: Level 'WARN' does not exist`
at startup, before it connected back to the JVM. PythonProxyClient then blocked
forever on the port promise (Await.result, no timeout), so the amber-integration
job hung until GitHub's 6h cap. logback (TEXERA_SERVICE_LOG_LEVEL) keeps WARN,
which is its correct spelling.

Also add a 40-min timeout to the amber-integration job so a worker-startup
failure fails fast instead of burning a 6h runner.
@aglinxinyuan aglinxinyuan changed the title chore(amber): reduce CI log verbosity from per-worker/per-message engine logs chore(amber): reduce engine log verbosity and pin the CI log-level backstop Jul 23, 2026
@aglinxinyuan

Copy link
Copy Markdown
Contributor Author

Pushed 35203dc to fix a self-inflicted hang in this PR's own CI backstop.

The UDF_PYTHON_LOG_STREAMHANDLER_LEVEL=WARN I added flows through udf.conf into every spawned Python UDF worker, which configures loguru with it — and loguru has no WARN level, only WARNING. So each worker died at startup with ValueError: Level 'WARN' does not exist before handshaking back to the JVM, and PythonProxyClient then blocked on the port promise (Await.result, no timeout) → amber-integration hung until the 6 h cap. Both the earlier commit and the head sat ~3 h in the integration step before I cancelled them. The amber unit job stayed green because skip-integration never spawns a worker, so WARN never reached loguru there.

Fix:

  • UDF_PYTHON_LOG_STREAMHANDLER_LEVEL=WARNING for the loguru side; keep TEXERA_SERVICE_LOG_LEVEL=WARN for logback — that's its actual level name, and logback silently falls back to DEBUG on an unknown string, so WARNING there would flood logs (the opposite of the intent).
  • Added timeout-minutes: 40 to amber-integration so a worker-startup deadlock fails fast instead of burning a full runner — no job in build.yml had a job-level timeout before.

amber-integration is green again on the new run (ubuntu finished the integration step in ~8.5 min; macOS running normally).

Comment thread .github/workflows/build.yml Outdated
Comment thread .github/workflows/build.yml Outdated
- build.yml: the WARN/WARNING pins on the two amber test steps now flip
  to DEBUG when the run has "Enable debug logging" set (runner.debug ==
  '1'), so the demoted engine logs come back on demand without editing
  the workflow.
- build.yml: lower the amber-integration job timeout from 40 to 25
  minutes; the last 38 green runs on main took 9.0-16.4 min (avg 12.1),
  so 25 keeps cold-cache headroom while still failing ~14x faster than
  the 6h cap.
- PekkoActorRefMappingService: reword the teardown log to "actor <id>
  is not reachable anymore. old ref = <ref>" per review - the mapping
  service cannot tell a graceful stop from a crash, so the message now
  infers neither.
The CI backstop sets TEXERA_SERVICE_LOG_LEVEL=WARN, which cluster.conf
forwards into pekko.loglevel. Pekko only accepts OFF/ERROR/WARNING/INFO/
DEBUG (Logging.levelFor), so every ActorSystem creation printed
"unknown pekko.loglevel WARN" with a LoggerException stack trace and
fell back to ERROR - one per spec in the amber unit and integration
jobs, the very noise this PR is meant to remove.

The env knob cannot simply switch to WARNING: the same variable drives
the logback root level in logback.xml, and logback silently falls back
to DEBUG on names it does not know - flooding instead of quieting.

Normalize at the single choke point instead: PekkoConfig.pekkoConfig
(which every ActorSystem, prod and test, receives via
AmberRuntime.pekkoConfig) now rewrites pekko.loglevel through
normalizePekkoLogLevel (WARN -> WARNING, TRACE/ALL -> DEBUG), so one
env knob drives both systems in either spelling. Covered by a new
invariant test - the resolved loglevel must be pekko-valid whatever the
env holds, red on WARN before this fix - plus unit tests for the
mapping.
@aglinxinyuan

Copy link
Copy Markdown
Contributor Author

Pushed b67bf3a to fix a noise regression the WARN backstop itself introduced — the CI logs were full of this on every ActorSystem creation:

[ERROR] [EventStream(pekko://CheckpointSubsystemSpec-test)] unknown pekko.loglevel WARN
org.apache.pekko.event.Logging$LoggerException

Root cause: cluster.conf forwards TEXERA_SERVICE_LOG_LEVEL into pekko.loglevel, and pekko shares loguru's vocabulary (WARNING), not logback's (WARN). On an unknown name pekko prints a LoggerException stack trace per ActorSystem and falls back to ERROR — one per spec in both amber jobs.

Why not just set WARNING in the env: the same variable drives the logback root level in logback.xml, and logback silently falls back to DEBUG on names it doesn't know — that would flood instead of quiet. The two vocabularies are irreconcilable at the env level.

Fix: normalize at the single choke point. PekkoConfig.pekkoConfig (which every ActorSystem, prod and test, receives via AmberRuntime.pekkoConfig) now rewrites pekko.loglevel through normalizePekkoLogLevel (WARN → WARNING, TRACE/ALLDEBUG), so the one env knob drives both systems in either spelling.

Test-first: added an invariant test to PekkoConfigSpec — the resolved pekko.loglevel must be in pekko's accepted set whatever the env holds — verified red under TEXERA_SERVICE_LOG_LEVEL=WARN before the fix, green after (7/7 with WARN, 65/65 Config module with env unset), plus unit tests for the mapping itself.

Review follow-up on the amber-only scoping: the WARN backstop wired to
"Enable debug logging" now covers every CI step that runs or boots a
component with a log-level configuration, keeping one consistent level
across the board:

- platform test step: all six platform services read
  TEXERA_SERVICE_LOG_LEVEL into their Dropwizard logging config
  (logback vocabulary, WARN);
- platform-integration + amber-integration boot smoke steps: same env
  for the packaged services; safe because smoke-boot's verdict is
  LISTEN-based, never log-scraping (apache#6332);
- pyamber unit + Python integration pytest steps: LOGURU_LEVEL=WARNING
  (loguru vocabulary) for loguru's default stderr sink, which prints
  straight into the CI log because pytest runs with -s; test-local
  sinks with an explicit level are unaffected;
- agent-service unit tests: TEXERA_SERVICE_LOG_LEVEL=WARN - env.ts
  validates ["ERROR","WARN","INFO","DEBUG"] before mapping to pino's
  lowercase levels, so the logback spelling is correct there too.

Components with no log-level configuration (frontend, infra,
pyright-language-service) are left alone.
@aglinxinyuan

Copy link
Copy Markdown
Contributor Author

Extended the backstop beyond amber in d7982b0 — every CI step that runs or boots a component with a log-level knob now carries the same wiring (WARN/WARNING normally, DEBUG on an Enable debug logging re-run):

Job / step Env Why that spelling
platform test step (all six services) TEXERA_SERVICE_LOG_LEVEL=WARN Dropwizard logging.level → logback vocabulary
platform-integration boot smoke TEXERA_SERVICE_LOG_LEVEL=WARN same; safe — smoke-boot's verdict is LISTEN-based, never log-scraping (#6332)
amber-integration texera-web + computing-unit-master boot smokes TEXERA_SERVICE_LOG_LEVEL=WARN same
pyamber pytest + amber-integration Python integration pytest LOGURU_LEVEL=WARNING loguru's default stderr sink (pytest runs with -s, so it prints straight into the CI log); loguru has no WARN. Test-local sinks with an explicit level are unaffected — checked, the only one passes level="WARNING" explicitly
agent-service unit tests TEXERA_SERVICE_LOG_LEVEL=WARN env.ts validates ["ERROR","WARN","INFO","DEBUG"] then maps to pino's lowercase levels

Left alone per the "no log config → skip" rule: frontend, infra, pyright-language-service (none of them read a log-level variable).

pekko is already covered everywhere via PekkoConfig.normalizePekkoLogLevel, since all JVM services share cluster.conf.

@Yicong-Huang Yicong-Huang 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.

🟡 0 must-fix · 2 advisory · 0 polish — solid, well-verified noise reduction; two small accuracy nits.

Correctness (1)

  • PekkoConfigSpec.scala:80 — the "whatever spelling" invariant test is env-sensitive: an unknown local value like FATAL passes through normalizePekkoLogLevel and fails the assertion (advisory, see inline)

Conventions (1)

  • Description: still says timeout-minutes: 40 (the diff sets 25) and describes the CI backstop as amber-only, while the head pins platform / pyamber / agent-service / smoke-boot steps too — refresh to match d7982b0 (advisory)
Verification trace

Traced the WARN/WARNING split end to end: every ActorSystem (prod, test, bench) receives PekkoConfig.pekkoConfig via AmberRuntime — the master/worker parseString overrides never touch pekko.loglevel — so the normalization covers all creations, and cluster.conf has no other reader. Each CI-pinned spelling was checked against its consumer's vocabulary: Dropwizard/logback accepts WARN, agent-service env.ts's enum includes WARN, loguru and pekko get WARNING. Also confirmed the fault-path logs (DP-thread crash ERROR, actorRef-fetch failure WARN, region-termination failure WARN) are untouched, and no test asserts on a demoted message (ReplayLogGeneratorSpec's "cannot handle" matches an unrelated RuntimeException).

Review follow-up: the invariant test asserted the RESOLVED
pekko.loglevel is in pekko's accepted set, which fails for any env
spelling outside the translated vocabulary (e.g.
TEXERA_SERVICE_LOG_LEVEL=FATAL passes through normalizePekkoLogLevel
unchanged) - an env-sensitive assertion in a file whose convention is
to guard exactly that.

Replace it with:
- the pure-function invariant: every spelling in the combined
  logback + pekko vocabulary (OFF/ERROR/WARN/WARNING/INFO/DEBUG/
  TRACE/ALL) normalizes into pekko's accepted set;
- an env-insensitive plumbing check: whatever the env supplied, the
  exposed pekko.loglevel equals its normalized form (identity for
  unknown spellings, so it can never false-positive) - exercised for
  real by CI, which sets WARN.

Verified locally: 8/8 with the env unset, with WARN (the CI
condition), and with FATAL (the reviewer's counterexample, which
failed before this change).
@aglinxinyuan
aglinxinyuan enabled auto-merge July 25, 2026 07:56
@aglinxinyuan
aglinxinyuan added this pull request to the merge queue Jul 25, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Jul 25, 2026
@aglinxinyuan
aglinxinyuan added this pull request to the merge queue Jul 25, 2026
Merged via the queue into apache:main with commit 57d4dba Jul 25, 2026
64 of 66 checks passed
@aglinxinyuan
aglinxinyuan deleted the ci-log-verbosity branch July 25, 2026 09:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Reduce CI log verbosity from per-worker/per-message amber engine logs

4 participants