{"record":{"id":"70028b61adda2e7b","repo":"databendlabs/databend","slug":"verifier-did-not-complete-within-the-timeout","errorCode":null,"errorMessage":"verifier did not complete within the timeout.","messagePattern":"verifier did not complete within the timeout\\.","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/meta/binaries/metaverifier/main.rs","lineNumber":179,"sourceCode":"        println!(\"verifier worker {} started..\", client_num);\n        handles.push(handle)\n    }\n\n    let waiter_handle = DatabendRuntime::spawn(\n        async move {\n            let result = rx.recv_timeout(Duration::from_secs(config.time));\n\n            match result {\n                Ok(_) => {\n                    println!(\"verifier completed within the timeout.\");\n                }\n                Err(e) => {\n                    println!(\n                        \"verifier did not complete within the timeout: {:?}s, error: {:?}\",\n                        config.time, e\n                    );\n                    let _ = fs::write(VERIFIER_RESULT_FILE, \"ERROR\");\n                    panic!(\"verifier did not complete within the timeout.\")\n                }\n            }\n        },\n        None,\n    );\n\n    let wait_verifier_handle = DatabendRuntime::spawn(\n        async move {\n            for handle in handles {\n                let ret = handle.await.unwrap();\n                if let Err(e) = ret {\n                    fs::write(VERIFIER_RESULT_FILE, \"ERROR\")?;\n                    println!(\"verifier return error: {:?}\", e);\n                    return Err(e);\n                }\n            }\n            tx.send(()).unwrap();\n","sourceCodeStart":161,"sourceCodeEnd":197,"githubUrl":"https://github.com/databendlabs/databend/blob/288d84d76e20a2f8f7173bda9691eb6ece301aa9/src/meta/binaries/metaverifier/main.rs#L161-L197","documentation":"The Walk/WalkMut derive only knows how to emit walks for a fixed set of field type shapes (paths, references, options, boxed, vectors, etc.). Any other type expression (arrays, tuples, bare trait objects, fn pointers, macros, raw pointers) hits this fallthrough at compile time.","triggerScenarios":"Adding a field of an unsupported type shape — e.g. `[u8; 4]`, `(A, B)`, `Box<dyn Trait>`, `*const T`, `fn(A)->B` — to a struct or enum variant that derives Visit/VisitMut.","commonSituations":"Extending the query AST with new node types; using FFI or low-level types inside AST nodes; copy-pasting derives onto utility structs that were not designed for visiting.","solutions":["Change the field to a supported shape (named path type, Option, Box, Vec of a supported type).","Implement Walk/WalkMut manually for the containing type instead of deriving.","Add support for the new type shape in emit_walk_for_type if you own the derive crate.","Move the unsupported field out of the AST node into a side table."],"exampleFix":"// before\nstruct Expr { meta: (String, u32) }\n// after\nstruct Expr { meta: MetaPair } // named struct type with derive support","handlingStrategy":"fallback","validationCode":"// pre-check the field type shape before adding a derive; e.g. avoid tuples/arrays/fn pointers in AST nodes","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Restrict AST node fields to named path types, Option, Box, Vec","Manually implement Walk for exotic types","Add trybuild tests covering each supported field shape","Extend emit_walk_for_type when new shapes are needed"],"tags":["rust","proc-macro","compile-time","ast"],"backgroundTag":"unsupported-operation","analyzedSha":"288d84d76e20a2f8f7173bda9691eb6ece301aa9","analyzedAt":"2026-09-11T11:29:36.208Z","contentChangedAt":"2026-09-11T11:29:36.208Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}