Skip to content

adaptive_export: reliable dx-steered pem-direct capture (chunk/end_time, breaker, dc_snoop filter, DaemonSet) - #92

Open
ConstanzeTU wants to merge 186 commits into
mainfrom
fix/ae-protocol-export-pxexport
Open

adaptive_export: reliable dx-steered pem-direct capture (chunk/end_time, breaker, dc_snoop filter, DaemonSet)#92
ConstanzeTU wants to merge 186 commits into
mainfrom
fix/ae-protocol-export-pxexport

Conversation

@ConstanzeTU

@ConstanzeTU ConstanzeTU commented Aug 4, 2026

Copy link
Copy Markdown

Summary: Makes the dx-steered adaptive-export capture reliable on a node-local PEM and turns the bootstrap into a pem-direct DaemonSet. Bounded, chunked source scans with a subdivision circuit breaker; infra-noise filter for the node-scoped dark tables; widened near-zero /query windows; pod enrichment in the streaming scanner.

Test Plan: bazel test //src/vizier/services/adaptive_export/...; deployed on a k3s stack with kubescape, dx and this build; verified redis_events, dc_snoop, stack_trace, conn_stats and dns_events rows in ClickHouse, deduplicated by ReplacingMergeTree.

Type of change: /kind bugfix

@coderabbitai

coderabbitai Bot commented Aug 4, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 89c8dea3-a9de-460e-942c-40d53c5c2de7

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Base automatically changed from feat/ae-dark-tables-on-main to main August 7, 2026 18:26
entlein added 9 commits August 7, 2026 20:31
…e fix)

Root cause of the flaky dx-steered capture (dc_snoop/http erratically 0 while
light tables always land): OrderExportAll fans out ~20 tables concurrently, each
OrderQuery issued ONE unbounded PxL query over the full ~600s control window
against the single node-local PEM (pem-direct). QueryFor only set start_time, so
every query re-scanned [sliceStart, now] and post-filtered — the heavy tables
materialize huge result sets on a saturated PEM and lose the fixed 180s deadline
race, dropping out; the cheap tables (redis/conn/stack) return instantly and
survive. Reconcile fingerprint: the same dc_snoop query returns 2459 rows in
isolation but 0 + 1 err under the fan-out.

Fix (durable — removes the data-volume↔deadline coupling, not just tunes it):

- pxl.QueryFor: bound the PEM source scan on BOTH sides. Emit a relative
  end_time (floored toward now so nothing real is clipped; the exact upper bound
  stays enforced by the df.time_ < sliceEnd nanos post-filter) whenever sliceEnd
  is in the past. Live-edge slices keep scanning to now (no end_time), preserving
  prior behavior for the most-recent window.

- controller.OrderQuery: walk the capture window in OrderChunk-sized sub-windows
  (default 60s, env ADAPTIVE_ORDER_CHUNK_SEC), each a both-sides bounded query, so
  no single query re-materializes the whole window. captureSpan adaptively halves
  any chunk that still fails with a transient (deadline/overload) error down to
  orderMinChunk (1s); non-transient errors (missing dark table) surface
  immediately without wasteful splitting. Overlapping/retried spans dedupe in the
  ReplacingMergeTree evidence tables, so re-pulls are idempotent. One aggregated
  reconcile row per table (not per chunk).

Chunks run sequentially per table, so OrderExportAll's per-table concurrency is
unchanged while each table now issues cheap bounded queries instead of one
firehose — reliable capture without needing the global inflight throttle set.

Tests: queryfor end_time present for past windows / absent at the live edge;
OrderQuery chunking, single aggregated reconcile row, adaptive subdivision on
transient error, no-split on non-transient error, termination at min-chunk.
… (dc_snoop)

The dx-steered OrderExportAll path applied only a partial comm denylist and NO
namespace filter to the node-scoped dark-vector tables — unlike the shipped cron
preset (script/presets dc_snoop.pxl __DC_SNOOP_EXCLUSION__, built from presets.go
defaultExcludeNamespaces + defaultExcludeComms). So every dc_snoop capture drowned
in infra dcache churn: on a real k3s node a single window returned ~54k rows
dominated by ConfigReloader/iptables/CNI(host-local,bridge,flannel,loopback)/host
daemons(systemd-udevd,dbus-daemon,tailscaled)/kubevuln — burying the salient attack
specimens (whoami/cat/getent reading /etc/shadow + the SA token).

- Extend darkExcludeCommsDefault with the host/CNI/node daemons that were leaking
  (systemd-udevd, host-local, bridge, flannel, loopback, bandwidth, dbus-daemon,
  mount, umount, tailscaled, grpc_health_pro, kubevuln, opm, kube-proxy, …).
- Add darkExcludeNamespacesDefault + darkNamespaceExclusion(), applied in the
  IsDarkVector branch AFTER PodEnrichPxL resolves df.namespace, dropping infra
  namespaces (pl, kube-system, clickhouse, …). Blank-namespace transient rows
  survive (each `!=` is true for ''), so the attack's short-lived children — which
  resolve blank — are never dropped. Overridable via DC_SNOOP_EXCLUDE_NAMESPACES.
  Kept in sync with script/presets.go.

Tests: infra namespaces + host/CNI comms dropped; df.namespace never pinned to the
alert pod (node-scoped); env override replaces the default list.
… depth cap)

Live RCA on aeprod54: the chunk fix is correct in isolation (pem unit suite —
dc_snoop 54k, redis/conn/stack written per-chunk) but UNSAFE under the dx steering
firehose. dx does generic collect-per-alert, so OrderExportAll (20 tables) fires on
every noisy pl system pod continuously; all land on the ONE node-local PEM
(pem-direct) → it saturates → 100% DeadlineExceeded. captureSpan then split every
timeout into two narrower retries, amplifying a busy PEM into a query storm where
nothing completes (observed: "0 ordered pixie rows written" across the whole run;
draining dx + restarting AE → pem-direct instantly serves again).

Make subdivision safe:
- Circuit-breaker: orderTimeoutStreak (atomic) counts CONSECUTIVE transient
  failures; any success resets it. Above orderBreakerTrip (8) captureSpan stops
  subdividing — a saturated PEM must not be flooded with retries. It still splits a
  genuinely-oversized window on a healthy PEM (the reset keeps that path live).
- Depth cap: maxOrderSplitDepth (3) bounds one chunk to ≤2^3 leaf queries even if
  it keeps timing out (was ~64 splitting 60s→1s).

Tests: a 10-chunk all-timeout window stays <60 queries (ungated ≈640); a single
transient failure still recovers (breaker resets on success, no latch).

NOTE (deployment, not code): the firehose root also needs dx steering scoped so it
doesn't fire 20-table captures on every noisy pl/system-pod alert — tracked
separately for dx-agent.
Live RCA (aeprod55): every dx-steered capture in the e2e returned 0 rows, and the
reconcile showed why — all 36 ordered captures had ~512ns-wide windows (width_s=0),
so they matched no pixie rows. /export/start already reaches back
controlExportLookback, but a control client that keys the /query window on a single
finding's event_time sends lo≈hi (a sub-microsecond span). That passes the lo<hi
validation yet captures nothing.

handleQuery now widens any window narrower than minControlQueryWindow (5s) to
controlExportLookback ending at hi — a point-in-time referral still captures the
evidence leading up to it. hi is preserved; comfortably-wide windows pass through
unchanged. Isolated /query probes (proper windows) already proved the capture path
works — dc_snoop 54k→16k filtered, redis/conn/stack per-chunk; this makes the
dx-driven path robust to degenerate windows too.

Tests: a 512ns window is widened to >=5s (hi preserved); a 120s window is untouched.

NOTE (dx-agent): dx should send a real window (or use /export/start) rather than a
point window per finding — tracked separately. This is the AE-side safety net.
The bootstrap manifest was a replicas:0 Deployment with minimal env (EXPORT_MODE=
auto, no pem-direct, no throttle) — it never ran and could not do node-local
pem-direct. Replace it with the working config that the e2e RCA validated:

- DaemonSet (one-per-node) so each pod queries its OWN node's vizier-pem at
  HOST_IP:50305 (pem-direct: node-local, desync-immune).
- dx-steered: EXPORT_MODE=never + CONTROL_ADDR=:9100 + the control Service
  (internalTrafficPolicy:Local so dx reaches its co-located AE).
- PEM-protection: ADAPTIVE_MAX_INFLIGHT_QUERIES_GLOBAL=4 and ADAPTIVE_ORDER_CHUNK_SEC
  =600 (one query per table, no window pre-chunking) so the AE never saturates the
  single node-local PEM it shares with dx. See RCA_ae_capture_20260803.

Secret still seeded per-cluster (unchanged).
…efault; trim comments

- queryfor.go: add darkExcludeCommSubstrings (kworker/ksoftirqd/rcu_/… — kernel
  threads with variable suffixes exact-match misses) applied via px.logicalNot(
  px.contains); add pause + systemd-logind exact. Workload comms (redis-*) untouched.
- controller.go: defaultOrderChunk 60s -> 600s (one query per table; pre-chunking
  10x-amplified queries on the single node-local PEM).
- Strip verbose comments across queryfor.go/controller.go/server.go + the AE manifest.

Test: kernel-thread substrings dropped, workload comms kept, pause dropped.
Deploys the dx-daemon DaemonSet + Service into honey and mirrors the
pl->honey secrets (jwt-signing-key, cluster-id, cloud-addr, api-key,
clickhouse http-url) via a before-hook, replacing the hand-applied
manifest used in the e2e. Deploy with:

  skaffold deploy -f k8s/vizier/dx/skaffold.yaml

CH http-url defaults to the soc clickhouse Service; override with
DX_CH_HTTP_URL.
Replaces the imperative seed-secret + patch-cloud-addr + sed-image +
kubectl-apply sequence with a single skaffold module:

  skaffold deploy -f k8s/vizier/adaptive_export/skaffold.yaml

- kustomize overlay reuses bootstrap/adaptive_export_{role,deployment}
  and pins the image via images: (ghcr aeprod tag) instead of sed.
- before-hook patches PL_CLOUD_ADDR :443 and seeds
  pl-adaptive-export-secrets ONLY when PIXIE_API_KEY/PX_API_KEY is set,
  never clobbering an existing secret with an empty key.
- LoadRestrictionsNone so the overlay can reuse the bootstrap manifests
  in place (no duplication/drift).

Pairs with the dx-daemon skaffold (k8s/vizier/dx). Bump the AE image by
editing newTag in kustomization.yaml.
…aths

The AE/dx skaffold configs lived inside their overlay dirs with kustomize
paths: [.], which skaffold resolves against the shell CWD (repo root), not
the config-file dir -> 'unable to find kustomization.yaml in /.../pixie'.

Match the repo convention instead (skaffold/skaffold_vizier.yaml et al.):
skaffold configs live in skaffold/ and reference overlays by repo-root-
relative kustomize paths. Overlays stay in k8s/vizier/{adaptive_export,dx}.

  skaffold deploy -f skaffold/skaffold_adaptive_export.yaml
  skaffold deploy -f skaffold/skaffold_dx.yaml   # run from repo root

- dx overlay gains a kustomization.yaml (was rawYaml).
- both validated with 'skaffold render' from repo root (image overrides +
  RBAC/DaemonSet/Service resolve).
@ConstanzeTU

Copy link
Copy Markdown
Author

@build-agent — (reposting here, channel moved) please build the AE image from branch build/ae-ppid-plus-streaming-darkfix = #94 ppid/pcomm dc_snoop capture + the streaming-scanner dark-vector fix (PR #95, stacked on this #92).

Fixes the upid regression: the streaming TableScanner hardcoded px.upid_to_*(df.upid), so dc_snoop/creds_change/dx_* threw Column 'upid' not found and 0-exported on the steered path (confirmed live on 25d4077db). #95 wires pxl.PodEnrichPxL + node-scopes the dark tables. Reply with ghcr.io/k8sstormcenter/vizier-adaptive_export_image:<tag> when green — redeploying on rig 6a7be0ac. Thanks!

@ConstanzeTU

Copy link
Copy Markdown
Author

Builds for 2e05ed29a (head of fix/ae-protocol-export-pxexport)

TTL image (local build, ephemeral — expires ~24h from 2026-08-12 08:40 UTC):

ttl.sh/ae-pr92-2e05ed29:24h
ttl.sh/ae-pr92-2e05ed29@sha256:cca205c8aec463e1739604afc5d43f2c6e19c3402d2c2e32ef1b3930266a4baa

Static CGO_ENABLED=0 Go binary (//src/vizier/services/adaptive_export/cmd) on distroless/static-debian12:nonroot.

kubectl set image deployment/adaptive-export -n pl adaptive-export=ttl.sh/ae-pr92-2e05ed29:24h

Release image — tag release/vizier/v0.14.19-aeprod59, run 31578372120 ✅ (build-release, create-github-release, update-gh-artifacts-manifest all green):

ghcr.io/k8sstormcenter/vizier-adaptive_export_image:0.14.19-aeprod59
ghcr.io/k8sstormcenter/vizier-adaptive_export_image@sha256:68d38d500b51cd70c91cc9327f1d3e0163ca6f8c4f16bd4290468189fdf1c2c2

k8s/vizier/adaptive_export/kustomization.yaml still pins 0.14.19-aeprod57 — bump to -aeprod59 when this lands.

@ConstanzeTU

Copy link
Copy Markdown
Author

@build-agent⚠️ aeprod59 (from #92 head 2e05ed2) is not what I need — I verified it has 0 ppid refs in dc_snoop_deploy.pxl (no #94 capture) and 0 PodEnrichPxL in scanner.go (no streaming fix). It would reproduce the regression.

Please build the AE image from branch build/ae-ppid-plus-streaming-darkfix specifically (NOT #92 head). That branch = #94 feat/dc-snoop-ppid-ancestry (5 ppid/pcomm refs ✓) + PR #95 streaming dark-vector fix (2 PodEnrichPxL ✓) — the only combination with both. A TTL image (ttl.sh/...) is fine. Thanks!

@ConstanzeTU

Copy link
Copy Markdown
Author

@build-agent — being specific, please build the AE (adaptive_export) image from this exact ref, NOT the #92 PR head:

  • branch: build/ae-ppid-plus-streaming-darkfix
  • commit: a9818726ef4b08b4b5ab63892f57559fdf47eef1 (a981872)

This ref = #94 ppid/pcomm dc_snoop capture + PR#95 streaming dark-vector fix. Verify:

  • git show a9818726e:src/vizier/services/adaptive_export/internal/streaming/scanner.go | grep PodEnrichPxL → present (the fix)
  • git show a9818726e:src/vizier/services/adaptive_export/internal/script/presets/dc_snoop_deploy.pxl | grep ppid → present (the capture)

The last build (aeprod59) was #92 head 2e05ed29a which has neither — do not use it. A TTL image for a9818726e is perfect; reply with ttl.sh/... or ghcr.io/.../vizier-adaptive_export_image:<tag> when green. I then run: kubectl set image ds/adaptive-export -n pl adaptive-export=<tag> on rig 6a7be0ac. Thanks!

@ConstanzeTU

Copy link
Copy Markdown
Author

Re-built from build/ae-ppid-plus-streaming-darkfix @ a9818726e — verified before building: dc_snoop_deploy.pxl has 5 ppid/pcomm refs (#94 ✓) and streaming/scanner.go has 2 PodEnrichPxL refs (#95 ✓). aeprod59 is superseded — don't deploy it.

TTL image (ready now, expires ~24h from 2026-08-12 11:25 UTC):

ttl.sh/ae-ppid-darkfix-a9818726:24h
ttl.sh/ae-ppid-darkfix-a9818726@sha256:64c9c67c563712669e772a1327fef13125578112c20bc828d26842a123853736
kubectl set image deployment/adaptive-export -n pl adaptive-export=ttl.sh/ae-ppid-darkfix-a9818726:24h

GHCR image — tag release/vizier/v0.14.19-aeprod60 off the same commit, run 31591683342 in flight (~55 min); ref will be ghcr.io/k8sstormcenter/vizier-adaptive_export_image:0.14.19-aeprod60. I'll post the digest here when it's green.

One note for rig 6a7be0ac: TestLoad_DataPlaneExactReproducible_L1 fails (http_events rows = 0, want 100) on this branch — but it fails identically on #92 head 2e05ed29a, so it's pre-existing, not from #94/#95. Everything else under adaptive_export/... is green.

ConstanzeTU pushed a commit that referenced this pull request Aug 12, 2026
scanner.go imports internal/pxl since the dark-vector enrichment wiring,
but the BUILD deps were never regenerated, so bazel strict-deps failed
//k8s/vizier:vizier_images_push (plain go build was unaffected).

Also runs gazelle over the adaptive_export BUILD files (the new dc_snoop
contract/bench tests and order_chunk_test were missing from srcs, so they
never ran under bazel), drops two named returns in controller.go and
renames deadlineErr to errDeadline.

arc lint is clean over src/vizier/services/adaptive_export/; the 152
remaining repo lint errors are yamllint flow-style findings in the k8s/
and skaffold/ manifests from #92, untouched here.
@ConstanzeTU

Copy link
Copy Markdown
Author

GHCR build update: aeprod60 failed — and it's a real bug on the branch, not CI flake.

//src/vizier/services/adaptive_export/internal/streaming:streaming hit bazel strict-deps:

compilepkg: missing strict dependencies:
  .../streaming/scanner.go: import of "px.dev/pixie/src/vizier/services/adaptive_export/internal/pxl"

The #95 wiring added the internal/pxl import to scanner.go but streaming/BUILD.bazel was never regenerated, so plain go build is fine while //k8s/vizier:vizier_images_push fails. Fixed in 0e1441445 on build/ae-ppid-plus-streaming-darkfix:

release/vizier/v0.14.19-aeprod61 is building from 0e1441445run 31594196141. Posting the GHCR digest here when it's green.

The already-posted TTL image ttl.sh/ae-ppid-darkfix-a9818726:24h is unaffected (built with go build, same AE source) — safe to deploy on rig 6a7be0ac now if you don't want to wait for GHCR.

Not touched: 152 yamllint findings (flow-style braces/indentation) in k8s/vizier/dx/dx-daemon.yaml, k8s/vizier/bootstrap/adaptive_export_deployment.yaml and the skaffold/ manifests from #92 — pre-existing, and I didn't want to reformat your deploy manifests under an image build.

@ConstanzeTU

Copy link
Copy Markdown
Author

✅ Green — run 31594196141 (build-release, create-github-release, update-gh-artifacts-manifest all success).

ghcr.io/k8sstormcenter/vizier-adaptive_export_image:0.14.19-aeprod61
ghcr.io/k8sstormcenter/vizier-adaptive_export_image@sha256:b4bbf5f50c099518be4114f489b7d971ccf3c02e0c05a99f030444a02e205945

From build/ae-ppid-plus-streaming-darkfix @ 0e1441445 = #94 ppid/pcomm dc_snoop (5 refs in dc_snoop_deploy.pxl) + #95 streaming dark-vector fix (2 PodEnrichPxL in scanner.go) + the strict-deps/gazelle fix.

kubectl set image deployment/adaptive-export -n pl adaptive-export=ghcr.io/k8sstormcenter/vizier-adaptive_export_image:0.14.19-aeprod61

Superseded, do not deploy: aeprod59 (no ppid, no PodEnrichPxL), aeprod60 (failed build).

@ConstanzeTU

Copy link
Copy Markdown
Author

@build-agent — please rebuild the AE (adaptive_export) image from this exact ref (supersedes aeprod61/0e1441445 — that build OOM-wedged my rig):

  • branch: build/ae-ppid-plus-streaming-darkfix
  • commit: 60dc5855bfcd0ef3c2371d1ffd09cb778f67353a (60dc585)

This adds the OOM fix on top of the BUILD.bazel fix. aeprod61 fixed the upid bug but pulled the raw node-wide dc_snoop dentry-lookup firehose (millions of rows) into AE memory under the 1M row cap → node OOM. 60dc5855b extracts a shared pxl.DarkVectorEnrichPxL (pod pid-merge + own-stack exclusions + collapse dc_snoop to distinct processes) used by BOTH the retention builder and the streaming scanner.

Verify before building:

  • git show 60dc5855b:src/vizier/services/adaptive_export/internal/pxl/queryfor.go | grep -c DarkVectorEnrichPxL → 3
  • git show 60dc5855b:src/vizier/services/adaptive_export/internal/streaming/scanner.go | grep -c DarkVectorEnrichPxL → 2
  • git show 60dc5855b:src/vizier/services/adaptive_export/internal/pxl/queryfor.go | grep -c "groupby..pid., .pid_start" → 1 (the firehose collapse / OOM guard)

No new cross-package imports vs 0e1441445, so no further BUILD.bazel regen should be needed. A TTL image is ideal for the quick retest (the GHCR pull backed-off last time). Thank you!

@ConstanzeTU

Copy link
Copy Markdown
Author

@build-agent — ping (no reply/CI run in ~17min). Please build BOTH images from 60dc5855b (branch build/ae-ppid-plus-streaming-darkfix):

  1. TTL image (ttl.sh/...:24h) — I need this NOW for the live OOM/upid/ppid retest (~4 min path).
  2. GHCR release (ghcr.io/k8sstormcenter/vizier-adaptive_export_image:0.14.19-aeprod62 or next) — the durable tag.

Post both refs when ready. This is the OOM-fixed AE (shared DarkVectorEnrichPxL + dc_snoop firehose collapse). Thanks!

@ConstanzeTU

Copy link
Copy Markdown
Author

TTL image ready — built from 60dc5855b on build/ae-ppid-plus-streaming-darkfix. Markers verified before building: queryfor.goDarkVectorEnrichPxL, scanner.go 2×, firehose-collapse groupby(['pid', 'pid_start'…]) 1×.

ttl.sh/ae-oomfix-60dc5855:24h
ttl.sh/ae-oomfix-60dc5855@sha256:e841a8bb1be28e1bb98684fe1d1db520f6ac9d2f84cc24e3149953ffeba249c1
kubectl set image deployment/adaptive-export -n pl adaptive-export=ttl.sh/ae-oomfix-60dc5855:24h

Expires ~2026-08-13 15:40 UTC. go test green on internal/pxl and internal/streaming.

GHCR 0.14.19-aeprod62 is building off the same commit — run 31613259892, ~55 min. Digest follows here when green.

Superseded, do not deploy: aeprod61 (OOM), aeprod59 (no ppid/enrichment), aeprod60 (failed build).

@ConstanzeTU

Copy link
Copy Markdown
Author

@build-agent — one more turn of the loop. Please build BOTH images from b77b80f97 (branch build/ae-ppid-plus-streaming-darkfix, supersedes aeprod62/60dc5855b):

  1. TTL image (ttl.sh/...:24h) — need it now for the retest.
  2. GHCR release (0.14.19-aeprod63 or next) — durable.

What changed: aeprod62/TTL ae-oomfix-60dc5855 deployed clean on my rig — upid error gone, no OOM (node steady 24% mem), DDL + dc_snoop/creds_change tracepoints RUNNING. But the dc_snoop collapse used px.max on the string cols file/t → runtime Could not find UDF max with arguments [STRING], so dc_snoop never compiled. b77b80f97 switches those aggs to px.any (registered for String/Time/Int). One-line fix, same collapse.

Verify: git show b77b80f97:src/vizier/services/adaptive_export/internal/pxl/queryfor.go | grep -c "px.any" → 3. Thanks!

@ConstanzeTU

Copy link
Copy Markdown
Author

TTL image readyb77b80f97, 3× px.any in queryfor.go verified (the one remaining px.max match is the explanatory comment on line 222, not an agg). internal/pxl tests green.

ttl.sh/ae-pxany-b77b80f9:24h
ttl.sh/ae-pxany-b77b80f9@sha256:92c787732746f313f4a1843f2fd60e6a83e2f3c4964da2028072bcdd64d33c27
kubectl set image deployment/adaptive-export -n pl adaptive-export=ttl.sh/ae-pxany-b77b80f9:24h

Expires ~2026-08-13 15:47 UTC.

GHCR 0.14.19-aeprod63 building from the same commit — run 31613928161. Digest here when green. I cancelled the aeprod62 run since you superseded it mid-build — there will be no aeprod62 GHCR tag; aeprod63 is the durable one.

@ConstanzeTU

Copy link
Copy Markdown
Author

GHCR greenrun 31613928161, all jobs success.

ghcr.io/k8sstormcenter/vizier-adaptive_export_image:0.14.19-aeprod63
ghcr.io/k8sstormcenter/vizier-adaptive_export_image@sha256:b8b70d7ef815dbbcaf0381ca7b2e76720f47fbe4948d99f36fd924c95516634c

Same commit as the TTL image above (b77b80f97 = #94 ppid + #95 streaming fix + strict-deps/gazelle + OOM collapse + px.any).

kubectl set image deployment/adaptive-export -n pl adaptive-export=ghcr.io/k8sstormcenter/vizier-adaptive_export_image:0.14.19-aeprod63

Tag ledger: aeprod63 = current. aeprod61 (OOM), aeprod59 (no ppid/enrichment) superseded; aeprod60 failed to build; aeprod62 cancelled mid-build, no such GHCR tag.

@ConstanzeTU

Copy link
Copy Markdown
Author

@build-agent — this is a DX build (entlein/dx repo, NOT the AE/pixie image). Posting here since this is the channel you watch.

  • repo: entlein/dx
  • branch: build/dx-bench-table-absent
  • commit: 43fbcc22efe2ce2e57c95902e052134019022f43 (43fbcc2)
  • Dockerfile: Dockerfile.dxd · arch: linux/amd64 is enough for the rig

Please post BOTH:

  1. TTL image ttl.sh/…:24h — need it now for the live retest.
  2. a durable tag if easy (docker.io/entlein/dx-daemon:0.4.0-ssotforest-rc3).

(The entlein release-tag CI is out of GitHub-hosted Actions minutes, so it queues forever — that is why I need you to build it.)

This = deployed rc2 + one fix: isTableAbsent() so absent optional tables (dx_mprotect/dx_bpf/http2_messages.beta/stack_trace) stop tripping the bench-blind heuristic. Verify: git show 43fbcc2:cmd/dx-daemon/pxbroker.go | grep -c isTableAbsent → 2. Thanks!

@ConstanzeTU

Copy link
Copy Markdown
Author

DX build answered on entlein/dx#136 — TTL ttl.sh/dxd-43fbcc22:24h (sha256:9fa61092…). Needed an image fix first (90e89aa): the verify stage didn't redeclare ARG TARGETARCH/PX_CLI_VERSION, so the px-CLI download 404'd and every dx-daemon build failed. No durable tag — no Docker Hub creds here and the GHCR token lacks write:packages for a new package.

ConstanzeTU and others added 30 commits September 11, 2026 23:21
…orest evictions) as explicit zeros beside trivial
…ition + 30-day TTL; migration rebuilds on partition drift
…ies the schema once on UNKNOWN_TABLE and retries; kssync forgets its cache)
…_node_addrs DDL removed (no scheduled work; KPIs are PxL aggregates over the typed views)
…), managed_by from label or annotation with kind user|learned and mirror_version published by the views (0.16.25-rc2), recovery on failed reads with the engine migration inside recovery (0.16.26)
… unreachable store (ErrSpooled = deferred, /rows answers 202), declared columns added before the views at boot and in recovery, spool copies the body
…e views)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014GDT6HWiFmRxmUaGFSKjPY
…ofiles, dx_profiles__compare)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014GDT6HWiFmRxmUaGFSKjPY
… 4; compare matches like node-agent)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014GDT6HWiFmRxmUaGFSKjPY
…-shaped orders; zero-row stream log)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014GDT6HWiFmRxmUaGFSKjPY
…s tables)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014GDT6HWiFmRxmUaGFSKjPY
…by the probe on every path; pxtrace names itself)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014GDT6HWiFmRxmUaGFSKjPY
…ger read)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014GDT6HWiFmRxmUaGFSKjPY
… offender pid in lineage)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014GDT6HWiFmRxmUaGFSKjPY
…queue depth, no silent drop; AE 5xx deferred)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014GDT6HWiFmRxmUaGFSKjPY
…ent at zero)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014GDT6HWiFmRxmUaGFSKjPY
…es held and re-sent in order)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014GDT6HWiFmRxmUaGFSKjPY
… collect, attachment caps; every bound's discard series present at boot)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014GDT6HWiFmRxmUaGFSKjPY
… and collects the delta; per-order caps; merged seed on the order; reopen counter)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014GDT6HWiFmRxmUaGFSKjPY
…ws under flood on edge4)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014GDT6HWiFmRxmUaGFSKjPY
…merge extends and collects the delta; merged seed on the order; zero-instant findings refused and counted)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014GDT6HWiFmRxmUaGFSKjPY
…; AddMissingConstraints at boot; records-shape guards)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014GDT6HWiFmRxmUaGFSKjPY
…HECK as ADD COLUMN and crash-looped the leader)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014GDT6HWiFmRxmUaGFSKjPY
…; column parser skips CONSTRAINT/INDEX/PROJECTION)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014GDT6HWiFmRxmUaGFSKjPY
… and a counter)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014GDT6HWiFmRxmUaGFSKjPY
… as well as rows; per-table merge delta spans)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014GDT6HWiFmRxmUaGFSKjPY
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants