Skip to content

feat(chart): krateo-sse-proxy 0.1.14 — image 1.1.8, the map-only events predicate - #67

Merged
braghettos merged 1 commit into
mainfrom
feat/sse-proxy-118
Oct 12, 2026
Merged

braghettos merged 1 commit into
mainfrom
feat/sse-proxy-118

Conversation

@braghettos

Copy link
Copy Markdown
Collaborator

Ships sse-proxy 1.1.8, which completes sse-proxy#20.

0.1.13 shipped the tokenbf prefilter (~1.7×, an ~870ms floor). 1.1.8 removes the JSONExtractString half entirely, so the /events composition predicate becomes one indexed map lookup covered by the existing idx_log_attr_value bloom:

AND LogAttributes['krateo.io/composition-id'] = {composition_id:String}

Measured on krateo-057

Shipped SELECT shape, FORMAT Null, medians of 3 interleaved rounds:

arm old OR map-only
composition with no events 18.49 s 0.42 s
composition with events 5.21 s 2.37 s
control, unfiltered 1.33 s —

The 0-row case was the pathological one — nothing early-exits at LIMIT 200.

Browser-side, a3 measured the events widgets at 3.8–4.1 s post-1.1.7, against every snowplow-served widget on the same page at 91 ms median. These two widgets are the entire gap between the composition-detail page and the 1 s cold bar.

Why it is safe

otel-collector#11 made resolveFromK8s return a root composition's own metadata.uid as its composition-id, so a composition's own reconcile events are labelled like its children's. Measured: 1,612 of devday-milan's 1,613 own events over 12h carried the label.

The cost, recorded next to the version

Rows written while composition-id stamping was broken have no label and are now invisible to the panel. That decay is fixed going forward by otel-collector 1.0.4, but affected rows persist for otel_logs' 7-day TTL:

apiVersion labelled
v0-1-0 3,224 / 3,225 long-lived — demo compositions
v0-3-0 8,159 / 8,165 long-lived
v1-12-42 0 / 8 rolled that morning
v0-3-413 0 / 6 rolled that morning

So the loss is concentrated on components rolled during the decay window, not on the long-lived compositions that appear in demos.

Still unproven: otel-collector#24 itself. The roll of this chart mints composition.krateo.io/v0-1-14 — the first group/version created while the current collector pod has been running — which is the first non-vacuous test of it.

🤖 Generated with Claude Code

https://claude.ai/code/session_01TKr1VTGULAn529wFiLdkpf

…ts predicate

The /events composition predicate is now ONE indexed map lookup (sse-proxy#20/#22).
0.1.13's tokenbf prefilter pruned the scan ~1.7x but left the JSONExtractString
half parsing every surviving row; removing it takes the pathological 0-row case
from 18.49s to 0.42s (medians, shipped SELECT shape, 3 interleaved rounds,
against a 1.33s unfiltered control).

Safe because otel-collector#11 returns a root composition's own metadata.uid as
its composition-id, so a composition's OWN reconcile events are labelled too:
1,612 of devday-milan's 1,613 own events over 12h on krateo-057.

COST, recorded next to the version so it is not lost: rows written while
composition-id stamping was broken have no label and are now invisible to the
panel. That decay is fixed going forward by otel-collector 1.0.4 (#22/#24), but
affected rows persist for otel_logs' 7-day TTL. Concentrated on components rolled
during the window (v1-12-42 0/8, v0-3-413 0/6), not on long-lived compositions
(v0-1-0 3224/3225, v0-3-0 8159/8165).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TKr1VTGULAn529wFiLdkpf
@braghettos
braghettos merged commit 39fe03d into main Oct 12, 2026
11 checks passed
@braghettos
braghettos deleted the feat/sse-proxy-118 branch October 12, 2026 14:34
braghettos added a commit that referenced this pull request Oct 14, 2026
… cursor and windowed /events (#69)

The poll cursor no longer wraps Timestamp in a function. Per poll, EXPLAIN goes
from 53 parts / 731 granules to 1 part / 1 granule, which frees ~3.25 of
ClickHouse's 4 cores on krateo-057. /events tries the newest window first and
returns results identical to the unbounded query (sse-proxy#25/#26;
reviewer-small PASS).

values.yaml image.tag is bumped together with appVersion, as in #65 and #67.
The pinned tag takes precedence over the .Chart.AppVersion default, so an
appVersion-only bump would keep rendering 1.1.8.


Claude-Session: https://claude.ai/code/session_01EzZ1gXDHbHVhPh2bbE8yfi

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
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.

1 participant