Repository navigation
Conversation
…e paced feeder - exporters.exporter_list.paced_feeder: experiment_run_e2e.py runs one paced_feeder process per (sink, metric) on the worker nodes, pushing over remote write to the query engine's ingest (sketchdb mode) and/or Prometheus (other modes, or query_prometheus_too). It starts once its sinks accept writes, shares one --start-ms and seed, and fails the run if a feeder dies. Prometheus does not forward fed metrics to the query engine. - Prometheus (bare-metal and containerized) starts with --web.enable-remote-write-receiver when the feeder is configured. - client_options.align_to_interval: repetition k evaluates at floor((start - query_time_offset) / T) * T + k * T and is sent query_time_offset after that time. - sketch_bench_e2e/sketch_bench_e2e_configs.py writes an experiment_type config from a table's e2e block: one query group per interval, the feeder block, metrics, and controller.prebuilt_output_dir; structured queries only with a SQL file. - setup_dependencies.sh builds the feeder. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AnJ7LocWxguh3q4QWkCYae
…aced feeder The feeder sends each tick's requests concurrently, so a series' samples can reach Prometheus' remote-write receiver out of order within a second, and Prometheus rejects them without an out-of-order window. When the paced feeder is configured, the generated prometheus.yml (used by bare-metal and containerized Prometheus) sets storage.tsdb.out_of_order_time_window: 5s. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AnJ7LocWxguh3q4QWkCYae
This was referenced Oct 13, 2026
Open
Records metrics (http, flows) reach remote write as one sample per value field, many sharing a series and timestamp, which Prometheus' receiver rejects. check_paced_feeder_config now takes the experiment modes: it accepts records metrics when every mode feeds ASAPQuery only and refuses them when a mode feeds Prometheus (baseline or query_prometheus_too). The config generator feeds a table's records metrics only with --sql-queries (only the structured queries read them); the config then has no baseline mode, and records metrics stay out of `metrics`, which with prebuilt planner configs only keeps fed metrics out of Prometheus' forwarding. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AnJ7LocWxguh3q4QWkCYae
- Pass --samples-per-sec only to gauge and counter feeders and the new
records_per_sec as --records-per-sec only to records feeders; the
feeder exits on the other kind's flag.
- SQL query groups get time_window_seconds: 0; their templates read only
{{ end_time }} / {{ end_datetime }}, but the client refuses to render
templates without a window.
- Take the shared --start-ms after the per-node binary check and table
copy, so the 5 s lead covers only the launches.
- duration_secs must also cover the feeder's startup check before
steady_state_wait and the queries.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AnJ7LocWxguh3q4QWkCYae
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Stacked on #828 (
--planner saved,controller.prebuilt_output_dir); base is its branch. This is #824 B4, revised: the data comes from the paced feeder instead of fake_exporter.Summary
Runs a sketch-bench #777 workload table end to end with
experiment_run_e2e.py. The paced feeder pushes the table's data in real time, and queries repeat at each RQE's interval T at evaluation times aligned to T.experiment_utils/services/paced_feeder.py), configured byexporters.exporter_list.paced_feeder: {workload_table, metrics, seed, duration_secs, samples_per_sec?, extra_flags?}:--start-ms, so every system receives identical data.sketchdbmode pushes to ASAPQuery's ingest, and to Prometheus too withquery_prometheus_too; other modes push to Prometheus. Insketchdbmode Prometheus no longer forwards the fed metrics to ASAPQuery, so they don't arrive twice.streaming.parallelism == 1, andduration_secsoutlasts the queries.setup_dependencies.shbuilds the feeder.--web.enable-remote-write-receiverandstorage.tsdb.out_of_order_time_window: 5s. The feeder sends each one-second tick concurrently (fix(asap-tools): send paced feeder ticks concurrently, ordered per series, in (t, t+1s] #840), so a series' samples can arrive out of order within a tick, which Prometheus otherwise rejects. Bare metal and container both read the generatedprometheus.yml.client_options.align_to_intervalevaluates repetition k atfloor((start − O)/T)·T + k·Tand sends it O =query_time_offsetseconds later, so all systems answer the same windows.sketch_bench_e2e/sketch_bench_e2e_configs.py): from a workload table (+ optional prebuilt controller output dir), it writes an experiment_type YAML. Query groups come frome2e.queriesgrouped byinterval_secs(the same grouping as--planner saved), with metrics frome2e.metricsand the feeder block.Not covered yet
records) metrics (feeder support in feat(asap-tools): generate records metrics in the paced feeder #843) are fed to ASAPQuery only, as<table>.<field>for its SQL frontend. The startup check refuses them when any mode also sends to Prometheus (baseline, orquery_prometheus_too). The generator feeds them only with--sql-queries, and then writes asketchdb-only config; the Prometheus baseline for the classic queries of analltable is a separate run.--sql-queries FILE.Testing
tests/test_paced_feeder.py(feeder command lines, sinks per mode, startup checks, the Prometheus receiver flag and out-of-order window via the real config generator),tests/test_sketch_bench_e2e_configs.py(config generation from a real classic table snippet) andqueriers/prometheus-client/tests/test_query_time.py(alignment math). The experiments suite passes (86 tests) under pytest and unittest. A CI step now runs the prometheus-client tests. black/flake8 are clean.🤖 Generated with Claude Code
https://claude.ai/code/session_01AnJ7LocWxguh3q4QWkCYae