The GitHub Actions job "Required Checks" on texera.git/obs/pr1/foundations has 
failed.
Run started by GitHub user Ma77Ball (triggered by Ma77Ball).

Head commit for run:
7263b1d8c0a02a894e822541296e1711937c1243 / Matthew Ball <[email protected]>
feat(observability): logging foundations (bootstrap, bridge, sanitizer)

Introduce the OpenTelemetry foundation for Texera: an SDK bootstrap, a 
Logback-to-OTel log bridge, a log sanitizer, and per-request MDC enrichment, 
wired into every service entry point. This is PR 1 of the observability stack; 
it ships logging only, with the trace and metric exporters wired but not yet 
emitted (those arrive in follow-up PRs).

New module (common/observability):
- OtelInit: one-call SDK bootstrap per service. Reads OTEL_* settings from 
observability.conf, validates the OTLP endpoint (scheme + host allowlist) 
before any exporter is built, wires the span/log/metric providers explicitly 
(no sdk-extension-autoconfigure), clamps the metric export interval, and 
attaches the log appender to the Logback ROOT logger. The whole init body is 
guarded so a missing or malformed config returns None with one WARN instead of 
throwing into a service's run(), even when telemetry is disabled.
- TexeraOtelLogAppender: bridges Logback events to OTel log records. Maps 
severity, forwards MDC, sets exception.type/message/stacktrace semantic 
attributes, and drops records from io.opentelemetry loggers so export-failure 
diagnostics are not fed back to the collector that just failed.
- LogSanitizer: strips C0 control characters, redacts secrets, and caps body 
length (MaxBodyChars) to keep individual records bounded.

Config (common/config):
- observability.conf holds the OTEL_* defaults, ObservabilityConfig reads it, 
and EnvironmentalVariable carries the ENV_OTEL_* entries.

Request/user context (amber web):
- RequestContextMdcFilter: a servlet filter that tags every log record emitted 
during request handling with the workflow, execution, and computing-unit id 
when one is present in the URL, a header, or a WebSocket query parameter, so 
exported logs can be filtered by workflow or computing unit downstream.
- UserContextMdcFilter: a JAX-RS filter that tags records with the 
authenticated user id, registered after the JWT auth filter so the principal is 
available. Both keep their MDC keys out of LogSanitizer.DeniedMdcKeys so the 
OTel appender forwards them to the collector.

Wiring:
- build.sbt defines the Observability module and adds dependsOn(Observability) 
to the eight Dropwizard services.
- Each service entry point calls OtelInit.init with its own service name, and 
each service config gains a logging block.
- TexeraWebApplication registers the two MDC filters during run().

Deployment:
- OTEL_* env entries live in bin/single-node/.env, bin/k8s/values.yaml, and 
bin/k8s/values-development.yaml (kept a name-for-name mirror).
- LICENSE-binary manifests list the pinned OTel 1.50.0 jars.

Tests: OtelInitSpec, TexeraOtelLogAppenderSpec, LogSanitizerSpec, 
ObservabilityConfigSpec, RequestContextMdcFilterSpec, and 
UserContextMdcFilterSpec cover endpoint validation, interval clamping, 
severity/MDC/exception mapping, self-diagnostic filtering, redaction, 
truncation, per-request context extraction, and the sanitizer MDC contract.

Report URL: https://github.com/apache/texera/actions/runs/39382996072

With regards,
GitHub Actions via GitBox

Reply via email to