{"record":{"id":"c0d490200c9ef62b","repo":"windmill-labs/windmill","slug":"parquet-feature-is-not-enabled-cannot-convert-jso","errorCode":null,"errorMessage":"Parquet feature is not enabled. Cannot convert JSON line stream.","messagePattern":"Parquet feature is not enabled\\. Cannot convert JSON line stream\\.","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"backend/windmill-object-store/src/lib.rs","lineNumber":1364,"sourceCode":"    pub first_row_latency: Option<std::time::Duration>,\n}\n\n#[cfg(not(feature = \"parquet\"))]\npub async fn convert_json_line_stream<V, E>(\n    mut _stream: impl futures::TryStreamExt<Item = Result<V, E>> + Unpin,\n    _output_format: S3ModeFormat,\n    _progress: Option<tokio::sync::mpsc::Sender<IngestStats>>,\n) -> anyhow::Result<(\n    futures::stream::BoxStream<'static, anyhow::Result<bytes::Bytes>>,\n    IngestStats,\n)>\nwhere\n    V: serde::Serialize,\n    E: Into<anyhow::Error>,\n{\n    use futures::StreamExt;\n    let stream = async_stream::stream! {\n        yield Err(anyhow::anyhow!(\"Parquet feature is not enabled. Cannot convert JSON line stream.\"));\n    };\n    Ok((stream.boxed(), IngestStats::default()))\n}\n\n#[cfg(feature = \"parquet\")]\n#[derive(Debug, Clone, Copy)]\npub struct IngestStats {\n    pub rows: u64,\n    pub bytes: u64,\n    pub elapsed: std::time::Duration,\n    pub fetch_wait: std::time::Duration,\n    pub write_time: std::time::Duration,\n    pub first_row_latency: Option<std::time::Duration>,\n}\n\n#[cfg(feature = \"parquet\")]\npub async fn convert_json_line_stream<V, E>(\n    mut stream: impl TryStreamExt<Item = Result<V, E>> + Unpin,","sourceCodeStart":1346,"sourceCodeEnd":1382,"githubUrl":"https://github.com/windmill-labs/windmill/blob/e474e8803ce2ff5c2df09a58dab51d45f5c922ca/backend/windmill-object-store/src/lib.rs#L1346-L1382","documentation":"When the windmill-object-store crate is compiled without the 'parquet' feature, the JSON-lines-to-Parquet conversion stub yields a single error instead of a stream: the Parquet conversion capability simply does not exist in the current build.","triggerScenarios":"Calling json line-stream-to-Parquet conversion (the non-parquet fallback of the stream conversion function) against a Windmill backend built without --features parquet.","commonSituations":"Custom/self-compiled Windmill binary missing the parquet cargo feature while a script or flow requests Parquet storage of S3/large-result data; official images include the feature, so this mainly hits custom builds.","solutions":["Rebuild the backend with the parquet feature enabled (cargo build --features parquet, or use the official Windmill Docker image which includes it)","If you control the deployment, switch to an image/build that includes Parquet support","Until rebuilt, store results as JSON lines instead of Parquet"],"exampleFix":"// before (custom build)\ncargo build --release\n// after\ncargo build --release --features parquet\n# or use the official windmill docker image","handlingStrategy":"fallback","validationCode":"// Detect a parquet-less build before requesting conversion\nfn parquet_supported() -> bool { cfg!(feature = \"parquet\") }","typeGuard":null,"tryCatchPattern":"match convert_jsonl_to_parquet(stream).await {\n    Ok((s, stats)) => use_parquet(s, stats),\n    Err(e) if e.to_string().contains(\"Parquet feature is not enabled\") => {\n        // fall back to JSON lines storage\n        store_as_json_lines(stream).await\n    }\n    Err(e) => return Err(e),\n}","preventionTips":["Build Windmill with --features parquet if you need Parquet storage","Prefer the official Docker images which ship with Parquet enabled","Check feature flags in CI so Parquet-dependent paths are not deployed from feature-less builds"],"tags":["parquet","feature-flags","s3","build-configuration"],"backgroundTag":"feature-not-enabled","analyzedSha":"e474e8803ce2ff5c2df09a58dab51d45f5c922ca","analyzedAt":"2026-09-03T12:38:19.024Z","contentChangedAt":"2026-09-03T12:38:19.024Z","schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}