dbt-labs/dbt-core · error

probe should be matched globally

Error message

probe should be matched globally

What it means

Test-only assertion in the strict-mode replay test: the datediff probe, arriving first via global read search rather than in recording order, must still be matched globally. Fires only if global read search in strict mode regresses.

Solutions

  1. Fix take_ro_exec_read global search to find reads regardless of arrival order
  2. Verify strict mode falls back to global matching correctly
  3. Treat failure as an event-replay matching regression
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at crates/dbt-adapter/src/time_machine/event_replay.rs:3248 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of dbt-labs/dbt-core@0267ce9170 (2026-09-07). Data as JSON: /api/errors/a0d49de8b036134b. Report an issue: GitHub.

Appendix: source

Thrown at crates/dbt-adapter/src/time_machine/event_replay.rs:3248

            args: serde_json::json!([sql]),
            result: serde_json::json!({"rows": 0}),
            success: true,
            error: None,
            timestamp_ns: seq as u64,
        };

        // Recording order: SHOW_PARAMS (0), DATEDIFF_PROBE (1), CREATE_VIEW (2)
        let recording = make_recording(vec![
            make_exec(0, show_sql),
            make_exec(1, probe_sql),
            make_exec(2, ddl_sql),
        ]);

        // Strict mode replay: DATEDIFF_PROBE arrives first via global read search
        let probe_args = serde_json::json!([probe_sql]);
        let e = recording
            .take_ro_exec_read(node_id, "execute", &probe_args)
            .expect("probe should be matched globally");
        assert_eq!(e.seq, 1, "should match the probe event (seq 1)");

        // SHOW_PARAMS also arrives out of order; matched globally
        let show_args = serde_json::json!([show_sql]);
        let e = recording
            .take_ro_exec_read(node_id, "execute", &show_args)
            .expect("SHOW PARAMETERS should be matched globally");
        assert_eq!(e.seq, 0);

        // take_next (strict sequential) should skip seq 0 and seq 1 (already consumed
        // as read-only execute reads) and return seq 2 (CREATE_VIEW).
        let e = recording
            .take_next(node_id)
            .expect("CREATE VIEW should be the next sequential event");
        assert_eq!(
            e.seq, 2,
            "take_next should skip ro_exec_matched events and return CREATE_VIEW"
        );

View on GitHub (pinned to 0267ce9170)