|
19 | 19 | #include "mongoc-client-pool.h"
|
20 | 20 | #include "mongoc-queue-private.h"
|
21 | 21 | #include "mongoc-thread-private.h"
|
| 22 | +#include "mongoc-cluster-private.h" |
| 23 | +#include "mongoc-client-private.h" |
22 | 24 | #include "mongoc-trace.h"
|
23 | 25 |
|
24 | 26 |
|
@@ -196,20 +198,44 @@ mongoc_client_pool_push (mongoc_client_pool_t *pool,
|
196 | 198 | bson_return_if_fail(pool);
|
197 | 199 | bson_return_if_fail(client);
|
198 | 200 |
|
199 |
| - /* |
200 |
| - * TODO: Shutdown old client connections. |
201 |
| - */ |
| 201 | + if (pool->size > pool->min_pool_size) { |
| 202 | + mongoc_client_t *old_client; |
| 203 | + old_client = _mongoc_queue_pop_head (&pool->queue); |
| 204 | + mongoc_client_destroy (old_client); |
| 205 | + pool->size--; |
| 206 | + } |
202 | 207 |
|
203 |
| - /* |
204 |
| - * TODO: We should try to make a client healthy again if it |
205 |
| - * is unhealthy since this is typically where a thread |
206 |
| - * is done with its work. |
207 |
| - */ |
| 208 | + if ((client->cluster.state == MONGOC_CLUSTER_STATE_HEALTHY) || |
| 209 | + (client->cluster.state == MONGOC_CLUSTER_STATE_BORN)) { |
| 210 | + mongoc_mutex_lock (&pool->mutex); |
| 211 | + _mongoc_queue_push_tail (&pool->queue, client); |
| 212 | + } else if (_mongoc_cluster_reconnect (&client->cluster, NULL)) { |
| 213 | + mongoc_mutex_lock (&pool->mutex); |
| 214 | + _mongoc_queue_push_tail (&pool->queue, client); |
| 215 | + }else { |
| 216 | + mongoc_client_destroy (client); |
| 217 | + mongoc_mutex_lock (&pool->mutex); |
| 218 | + pool->size--; |
| 219 | + } |
208 | 220 |
|
209 |
| - mongoc_mutex_lock(&pool->mutex); |
210 |
| - _mongoc_queue_push_head(&pool->queue, client); |
211 | 221 | mongoc_cond_signal(&pool->cond);
|
212 | 222 | mongoc_mutex_unlock(&pool->mutex);
|
213 | 223 |
|
214 | 224 | EXIT;
|
215 | 225 | }
|
| 226 | + |
| 227 | +size_t |
| 228 | +mongoc_client_pool_get_size (mongoc_client_pool_t *pool) |
| 229 | +{ |
| 230 | + ENTRY; |
| 231 | + |
| 232 | + bson_return_if_fail (pool); |
| 233 | + |
| 234 | + size_t size = 0; |
| 235 | + |
| 236 | + mongoc_mutex_lock (&pool->mutex); |
| 237 | + size = pool->size; |
| 238 | + mongoc_mutex_unlock (&pool->mutex); |
| 239 | + |
| 240 | + RETURN (size); |
| 241 | +} |
0 commit comments