{"record":{"id":"8c80a10d6e44e648","repo":"nautechsystems/nautilus_trader","slug":"l2-delta-should-be-processed","errorCode":null,"errorMessage":"L2 delta should be processed","messagePattern":"L2 delta should be processed","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/execution/benches/matching_engine.rs","lineNumber":166,"sourceCode":"                        trades.last().unwrap().ts_event\n                    );\n                    assert_events(state, EventCounts::default());\n                },\n            )\n        });\n    });\n\n    group.bench_function(BenchmarkId::new(\"delta_l2\", MARKET_DATA_COUNT), |b| {\n        b.iter_custom(|iters| {\n            run_iterations(\n                iters,\n                || build_engine(BookType::L2_MBP),\n                |state| {\n                    for delta in &deltas {\n                        state\n                            .engine\n                            .process_order_book_delta(black_box(delta))\n                            .expect(\"L2 delta should be processed\");\n                    }\n                },\n                |state| {\n                    assert_eq!(\n                        state.engine.get_book().update_count,\n                        MARKET_DATA_COUNT as u64,\n                    );\n                    assert_eq!(\n                        state.engine.get_book().ts_last,\n                        deltas.last().unwrap().ts_event\n                    );\n                    assert!(state.engine.get_book().has_ask());\n                    assert_events(state, EventCounts::default());\n                },\n            )\n        });\n    });\n","sourceCodeStart":148,"sourceCodeEnd":184,"githubUrl":"https://github.com/nautechsystems/nautilus_trader/blob/18893faf8b356be3320add8de2f861b0b647cf06/crates/execution/benches/matching_engine.rs#L148-L184","documentation":"Benchmark panic from `.expect(\"L2 delta should be processed\")` on `OrderMatchingEngine::process_order_book_delta`, which returns `Err` when an Add/Update delta's order price or size precision does not match the instrument's precision, or when `book.apply_delta` fails (e.g. an invalid or inconsistent L2 delta). Every generated market-data delta must apply cleanly to the L2_MBP book.","triggerScenarios":"A generated delta whose `order.price.precision` or `order.size.precision` differs from the instrument definition used in `build_engine`; a malformed delta (bad action/flags/order) rejected by `book.apply_delta`; applying a Delete/Clear delta with NULL_ORDER where an order is required.","commonSituations":"Instrument precision changed (tick/step size) while the synthetic delta generator still emits old precision; hand-built test deltas with raw f64-rounded prices; switching `BookType` so L1 ignores deltas but L2 validates them.","solutions":["Regenerate/round benchmark deltas to exactly the instrument's `price_precision` and `size_precision` (use the instrument's price increment/step size).","Verify the delta generator produces valid `BookAction::Add/Update/Delete/Clear` sequences (e.g. Add before Update/Delete).","Check the `anyhow` error text — it names which precision check (\"delta order price\"/\"delta order size\") or apply_delta step failed."],"exampleFix":"// before\nstate.engine.process_order_book_delta(black_box(delta)).expect(\"L2 delta should be processed\");\n// after\nstate.engine.process_order_book_delta(black_box(delta))\n    .unwrap_or_else(|e| panic!(\"delta {:?} rejected: {e}\", delta.action));\n// and build prices via instrument precision:\nlet price = Price::new(raw, instrument.price_precision);","handlingStrategy":"validation","validationCode":"fn delta_fits_instrument(delta: &OrderBookDelta, inst: &InstrumentAny) -> bool {\n    delta.order.price.precision == inst.price_precision()\n        && delta.order.size.precision == inst.size_precision()\n}","typeGuard":"fn has_valid_precision(p: u8, expected: u8) -> bool { p == expected }","tryCatchPattern":"if let Err(e) = engine.process_order_book_delta(delta) {\n    log::error!(\"delta rejected (check price/size precision vs instrument): {e}\");\n}","preventionTips":["Construct delta prices/sizes with the instrument's exact precision.","Emit valid delta sequences: Add before Update/Delete per level.","Re-derive benchmark data when instrument definitions change."],"tags":["rust","benchmark","order-book","precision"],"backgroundTag":"invalid-argument-value","analyzedSha":"18893faf8b356be3320add8de2f861b0b647cf06","analyzedAt":"2026-09-08T20:49:34.690Z","contentChangedAt":"2026-09-08T20:49:34.690Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}