You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The workload is selected by a single label (`WORKLOAD_NAME` env var, also the
16
+
`sdk.name` matrix value in `.github/workflows/slo.yml`). The sync/async
17
+
execution mode is derived from the label itself — an `async-*` label runs the
18
+
async (`ydb.aio`) path:
19
+
20
+
| Label | Service | Mode |
21
+
|----------------|---------------|-------|
22
+
|`sync-table`| Table service | sync |
23
+
|`sync-query`| Query service | sync |
24
+
|`async-query`| Query service | async |
25
+
|`sync-topic`| Topic service | sync |
26
+
|`async-topic`| Topic service | async |
27
+
28
+
> The `--async` CLI flag is kept as a manual override for `*-run` commands.
29
+
> The bare `topic` label is still accepted as an alias for `sync-topic`.
17
30
18
31
### Usage:
19
32
@@ -246,16 +259,15 @@ Table have these fields:
246
259
Primary key: `("object_hash", "object_id")`
247
260
248
261
### Topic workload
249
-
When running `topic-run`command, the program creates three jobs: `readJob`, `writeJob`, `metricsJob`.
262
+
When running `topic-run`(`sync-topic` / `async-topic`), the program creates `readJob`, `writeJob` and `metricsJob`, and additionally **validates end-to-end delivery and per-producer ordering** under chaos.
250
263
251
-
-`readJob` reads messages from topic using TopicReader and commits offsets
252
-
-`writeJob` generates and publishes messages to topic using TopicWriter
253
-
-`metricsJob` periodically sends metrics to Prometheus
264
+
-`writeJob` — each writer is pinned to a partition (`partition_id = i % partitions`) with a stable, ref-scoped `producer_id`, and publishes with `write_with_ack`. The seqno advances only on a successful ack (a failed write leaves no gap).
265
+
-`readJob` — reads with a consumer, commits offsets, and demultiplexes messages by `writer_id`, tracking the next expected seqno per producer (shared across readers, since a partition can move between them on rebalance):
266
+
- a **forward gap** (a seqno past the expected one) is counted as **lost** — partition order is server-guaranteed, so a gap is real loss (fails the run via the `*_error*` threshold);
267
+
- a **backward** seqno (already seen) is a **duplicate** — reconnect redelivery; with producer-id dedup it should stay near zero (informational);
268
+
-**end-to-end latency** is `read_ts − write_ts` for the first delivery of each message (writer and reader share the process, so the timestamps are comparable).
254
269
255
-
Messages contain:
256
-
- Sequential message ID
257
-
- Thread identifier
258
-
- Configurable payload size (padded with 'x' characters)
270
+
Each message carries `writer_id:seqno:write_ts_ns:` followed by padding to the configured size. Topics are scoped per ref so the current and baseline containers (same cluster, run in parallel) don't share a topic.
259
271
260
272
## Collected metrics
261
273
-`oks` - amount of OK requests
@@ -266,6 +278,12 @@ Messages contain:
266
278
267
279
Metrics are collected for both table operations (`read`, `write`) and topic operations (`read`, `write`).
268
280
281
+
Topic workloads additionally emit (surfaced through `tests/slo/metrics-topic.yaml`, merged into the action metrics via `metrics_yaml_path`):
282
+
-`topic_e2e_latency_p50_ms` / `_p99_ms` — write → read latency of a delivered message (the meaningful topic latency; the generic `read_latency` mostly reflects `receive_message` wait time, not read cost, so it is kept **informational** for topics via `tests/slo/thresholds-topic.yaml` — `direction: neutral` — while `write_latency` stays gated)
283
+
-`topic_delivered_rps` — unique messages read back per second
284
+
-`topic_lost_errors` — messages detected as lost (must stay 0)
0 commit comments