From c7b723dbada77d7f6472a686611a05c0aac8ac12 Mon Sep 17 00:00:00 2001 From: Neil Conway Date: Tue, 29 Sep 2026 09:42:23 -0400 Subject: [PATCH] chore: gate Parquet opener encryption on `parquet_encryption` Without the `parquet_encryption` feature, clippy fails on a dead stub in `opener/encryption.rs` (`clippy::unused_async_trait_impl`). For example: cargo clippy -p datafusion-datasource-parquet --all-targets -- -D warnings Every use of the module is already gated on the feature, so gate the module itself and remove the stubs. CI doesn't catch this because its `--workspace` build enables the feature. --- .../src/opener/encryption.rs | 34 ++----------------- .../datasource-parquet/src/opener/mod.rs | 1 + 2 files changed, 4 insertions(+), 31 deletions(-) diff --git a/datafusion/datasource-parquet/src/opener/encryption.rs b/datafusion/datasource-parquet/src/opener/encryption.rs index 498fe8acf7530..232c356b9b572 100644 --- a/datafusion/datasource-parquet/src/opener/encryption.rs +++ b/datafusion/datasource-parquet/src/opener/encryption.rs @@ -17,31 +17,24 @@ //! Encryption context used during Parquet file open. //! -//! Isolated here so the `#[cfg(feature = "parquet_encryption")]` gating does -//! not pollute the rest of the opener module. +//! This module is only compiled with the `parquet_encryption` feature. It is +//! isolated here so the feature gating does not pollute the rest of the +//! opener module. -#[cfg(feature = "parquet_encryption")] use std::sync::Arc; use datafusion_common::Result; -#[cfg(feature = "parquet_encryption")] use datafusion_common::config::EncryptionFactoryOptions; -#[cfg(feature = "parquet_encryption")] use datafusion_common::encryption::FileDecryptionProperties; -#[cfg(feature = "parquet_encryption")] use datafusion_execution::parquet_encryption::EncryptionFactory; use super::ParquetMorselizer; -#[derive(Default)] pub(super) struct EncryptionContext { - #[cfg(feature = "parquet_encryption")] file_decryption_properties: Option>, - #[cfg(feature = "parquet_encryption")] encryption_factory: Option<(Arc, EncryptionFactoryOptions)>, } -#[cfg(feature = "parquet_encryption")] impl EncryptionContext { fn new( file_decryption_properties: Option>, @@ -74,32 +67,11 @@ impl EncryptionContext { } } -#[cfg(not(feature = "parquet_encryption"))] -#[expect(dead_code)] -#[expect(clippy::unused_async)] -impl EncryptionContext { - pub(super) async fn get_file_decryption_properties( - &self, - _file_location: &object_store::path::Path, - ) -> Result< - Option>, - > { - Ok(None) - } -} - impl ParquetMorselizer { - #[cfg(feature = "parquet_encryption")] pub(super) fn get_encryption_context(&self) -> EncryptionContext { EncryptionContext::new( self.file_decryption_properties.clone(), self.encryption_factory.clone(), ) } - - #[cfg(not(feature = "parquet_encryption"))] - #[expect(dead_code)] - pub(super) fn get_encryption_context(&self) -> EncryptionContext { - EncryptionContext::default() - } } diff --git a/datafusion/datasource-parquet/src/opener/mod.rs b/datafusion/datasource-parquet/src/opener/mod.rs index eb329fb3037c0..6b2e47e134949 100644 --- a/datafusion/datasource-parquet/src/opener/mod.rs +++ b/datafusion/datasource-parquet/src/opener/mod.rs @@ -18,6 +18,7 @@ //! [`ParquetMorselizer`] state machines for opening Parquet files mod early_stop; +#[cfg(feature = "parquet_encryption")] mod encryption; use self::early_stop::EarlyStoppingStream;