dbt-labs/dbt-core · error

CREATE VIEW should still be matched as a write barrier

Error message

CREATE VIEW should still be matched as a write barrier

What it means

Test-only assertion in the out-of-order replay test: after the probe and SHOW PARAMETERS reads matched, the CREATE VIEW DDL must still be matched as a write barrier in sequence order. Fires only if write-barrier matching breaks once earlier reads were consumed out of order.

Solutions

  1. Verify write events are matched by seq order after out-of-order read consumption
  2. Check the write-barrier logic in take_semantic_match
  3. Treat failure as an event-replay determinism regression
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at crates/dbt-adapter/src/time_machine/event_replay.rs:3212 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/e2393fbd7e3e1358. Report an issue: GitHub.

Appendix: source

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

        ]);

        // Fusion replay order: DATEDIFF_PROBE first, then SHOW_PARAMS, then CREATE_VIEW
        let probe_args = serde_json::json!([probe_sql]);
        let e = recording
            .take_semantic_match(node_id, "execute", &probe_args, SemanticCategory::Write)
            .expect("probe should be found as untracked read in segment");
        assert_eq!(e.seq, 1);

        let show_args = serde_json::json!([show_sql]);
        let e = recording
            .take_semantic_match(node_id, "execute", &show_args, SemanticCategory::Write)
            .expect("SHOW PARAMETERS should be found as untracked read in segment");
        assert_eq!(e.seq, 0);

        let ddl_args = serde_json::json!([ddl_sql]);
        let e = recording
            .take_semantic_match(node_id, "execute", &ddl_args, SemanticCategory::Write)
            .expect("CREATE VIEW should still be matched as a write barrier");
        assert_eq!(e.seq, 2);
    }

    /// In strict mode, read-only execute calls (SELECT/SHOW) should be matched globally
    /// via take_ro_exec_read and should not consume the sequential write slot.
    #[test]
    fn test_strict_mode_read_only_execute_global_match() {
        let node_id = "model.project.date_details";
        let show_sql = "show parameters like 'query_tag' in session";
        let probe_sql = "select datediff(day, '2018-12-31'::date, sysdate()::date)";
        let ddl_sql = "create or replace view analytics.public.date_details as (select 1)";

        let make_exec = |seq: u32, sql: &str| AdapterCallEvent {
            node_id: node_id.to_string(),
            seq,
            method: "execute".to_string(),
            semantic_category: SemanticCategory::Write,
            args: serde_json::json!([sql]),

View on GitHub (pinned to 0267ce9170)