Skip to content

Commit 61b4ccf

Browse files
authored
Avoid 0 connection pool (#397)
1 parent 24c7160 commit 61b4ccf

File tree

1 file changed

+14
-1
lines changed

1 file changed

+14
-1
lines changed

foundation/gax/src/conn.rs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,8 @@ impl<'a> ConnectionManager {
141141
ts_provider: &dyn TokenSourceProvider,
142142
conn_options: &'a ConnectionOptions,
143143
) -> Result<Vec<Channel>, Error> {
144+
let pool_size = Self::get_pool_size(pool_size);
145+
144146
let tls_config = ClientTlsConfig::new().with_webpki_roots().domain_name(domain_name);
145147
let mut conns = Vec::with_capacity(pool_size);
146148

@@ -182,6 +184,10 @@ impl<'a> ConnectionManager {
182184
Ok(channel)
183185
}
184186

187+
fn get_pool_size(pool_size: usize) -> usize {
188+
pool_size.max(1)
189+
}
190+
185191
pub fn num(&self) -> usize {
186192
self.inner.values.len()
187193
}
@@ -196,7 +202,7 @@ mod test {
196202
use std::collections::HashSet;
197203
use std::sync::atomic::{AtomicUsize, Ordering};
198204

199-
use crate::conn::AtomicRing;
205+
use crate::conn::{AtomicRing, ConnectionManager};
200206

201207
#[test]
202208
fn test_atomic_ring() {
@@ -217,4 +223,11 @@ mod test {
217223
assert!(!values.insert(cm.next()));
218224
assert_eq!(3, cm.index.load(Ordering::SeqCst));
219225
}
226+
227+
#[test]
228+
fn test_get_pool_size() {
229+
assert_eq!(1, ConnectionManager::get_pool_size(0));
230+
assert_eq!(1, ConnectionManager::get_pool_size(1));
231+
assert_eq!(2, ConnectionManager::get_pool_size(2));
232+
}
220233
}

0 commit comments

Comments
 (0)