Skip to content

Commit

Permalink
configure the inner client of either BigTableConnection or BigTable (#96
Browse files Browse the repository at this point in the history
)

* configure the inner client of either BigTableConnection or BigTable to change settings like max_decoding_message_size

* trim unused use statements
  • Loading branch information
JorritSalverda authored Oct 17, 2024
1 parent be21a8e commit b4b5244
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 0 deletions.
16 changes: 16 additions & 0 deletions bigtable_rs/src/bigtable.rs
Original file line number Diff line number Diff line change
Expand Up @@ -403,6 +403,14 @@ impl BigTableConnection {
timeout: self.timeout.clone(),
}
}

/// Provide a convenient method to update the inner `BigtableClient` so a newly configured client can be set
pub fn configure_inner_client(
&mut self,
config_fn: fn(BigtableClient<AuthSvc>) -> BigtableClient<AuthSvc>,
) {
self.client = config_fn(self.client.clone());
}
}

/// Helper function to create a BigtableClient<AuthSvc>
Expand Down Expand Up @@ -523,6 +531,14 @@ impl BigTable {
&mut self.client
}

/// Provide a convenient method to update the inner `BigtableClient` config
pub fn configure_inner_client(
&mut self,
config_fn: fn(BigtableClient<AuthSvc>) -> BigtableClient<AuthSvc>,
) {
self.client = config_fn(self.client.clone());
}

/// Provide a convenient method to get full table, which can be used for building requests
pub fn get_full_table_name(&self, table_name: &str) -> String {
[&self.table_prefix, table_name].concat()
Expand Down
4 changes: 4 additions & 0 deletions examples/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,10 @@ path = "src/http_server/http_server.rs"
name = "custom_path_connection"
path = "src/custom_path_connection.rs"

[[bin]]
name = "configure_inner_client"
path = "src/configure_inner_client.rs"

[[bin]]
name = "prefix"
path = "src/prefix.rs"
Expand Down
41 changes: 41 additions & 0 deletions examples/src/configure_inner_client.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
use bigtable_rs::bigtable;
use env_logger;
use gcp_auth::CustomServiceAccount;
use std::error::Error;
use std::sync::Arc;
use std::time::Duration;
use std::usize;

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
env_logger::init();

let project_id = "project-1";
let instance_name = "instance-1";
let channel_size = 4;
let timeout = Duration::from_secs(10);

let json_path: &str = "examples/src/custom_path_fake_key.json";
// make a bigtable client
let mut connection = bigtable::BigTableConnection::new_with_token_provider(
project_id,
instance_name,
false,
channel_size,
Some(timeout),
Arc::new(CustomServiceAccount::from_file(json_path).unwrap()),
)?;

// update the config for the inner client of the connection
connection
.configure_inner_client(|inner_client| inner_client.max_decoding_message_size(usize::MAX));

let mut client = connection.client();

// or update the config one step later
client.configure_inner_client(|inner_client| {
inner_client.max_decoding_message_size(2 * 1024 * 1024)
});

Ok(())
}

0 comments on commit b4b5244

Please sign in to comment.