Skip to content

Commit c2e6471

Browse files
committed
PYTHON-727 - Implement and use PoolOptions class
1 parent 698ddd8 commit c2e6471

File tree

9 files changed

+202
-155
lines changed

9 files changed

+202
-155
lines changed

pymongo/cluster.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
CLUSTER_TYPE,
2323
ClusterDescription)
2424
from pymongo.errors import InvalidOperation, ConnectionFailure
25+
from pymongo.pool import PoolOptions
2526
from pymongo.server import Server
2627

2728

@@ -176,8 +177,7 @@ def _create_pool(self, address):
176177
# TODO: Need PoolSettings, SocketSettings, and SSLContext classes.
177178
return self._settings.pool_class(
178179
address,
179-
max_size=100,
180-
net_timeout=None,
181-
conn_timeout=20,
182-
ssl_context=None,
183-
use_greenlets=False)
180+
PoolOptions(
181+
max_pool_size=100,
182+
connect_timeout=20)
183+
)

pymongo/mongo_client.py

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -287,20 +287,20 @@ def __init__(self, host=None, port=None, max_pool_size=100,
287287
options[option] = value
288288
options.update(opts)
289289

290-
self.__max_pool_size = common.validate_positive_integer_or_none(
291-
'max_pool_size', max_pool_size)
292-
293290
self.__cursor_manager = CursorManager(self)
294291

295292
self.__repl = options.get('replicaset')
296293
self.__direct = len(seeds) == 1 and not self.__repl
297294

298-
self.__net_timeout = options.get('sockettimeoutms')
299-
self.__conn_timeout = options.get('connecttimeoutms')
300-
self.__wait_queue_timeout = options.get('waitqueuetimeoutms')
301-
self.__wait_queue_multiple = options.get('waitqueuemultiple')
295+
max_pool_size = common.validate_positive_integer_or_none(
296+
'max_pool_size', max_pool_size)
297+
connect_timeout = options.get('connecttimeoutms')
298+
socket_timeout = options.get('sockettimeoutms')
299+
wait_queue_timeout = options.get('waitqueuetimeoutms')
300+
wait_queue_multiple = options.get('waitqueuemultiple')
301+
use_greenlets = options.get('use_greenlets', False)
302302

303-
self.__ssl_ctx = None
303+
ssl_context = None
304304
use_ssl = options.get('ssl', None)
305305
keyfile = options.get('ssl_keyfile', None)
306306
certfile = options.get('ssl_certfile', None)
@@ -335,13 +335,21 @@ def __init__(self, host=None, port=None, max_pool_size=100,
335335
ctx.load_verify_locations(ca_certs)
336336
if cert_reqs is not None:
337337
ctx.verify_mode = cert_reqs
338-
self.__ssl_ctx = ctx
338+
ssl_context = ctx
339+
340+
self.__pool_opts = pool.PoolOptions(
341+
max_pool_size=max_pool_size,
342+
connect_timeout=connect_timeout,
343+
socket_timeout=socket_timeout,
344+
wait_queue_timeout=wait_queue_timeout,
345+
wait_queue_multiple=wait_queue_multiple,
346+
ssl_context=ssl_context,
347+
use_greenlets=use_greenlets)
339348

340-
self.__use_greenlets = options.get('use_greenlets', False)
341349
self.__pool_class = pool_class
342350

343351
self.__connecting = False
344-
if self.__use_greenlets:
352+
if use_greenlets:
345353
# Greenlets don't need to lock around access to the Member;
346354
# they're only interrupted when they do I/O.
347355
self.__connecting_lock = thread_util.DummyLock()
@@ -352,7 +360,7 @@ def __init__(self, host=None, port=None, max_pool_size=100,
352360
self.__event_class = event_class
353361
else:
354362
# Prevent a cycle; this lambda shouldn't refer to self.
355-
g = self.__use_greenlets
363+
g = use_greenlets
356364
event_class = lambda: thread_util.create_event(g)
357365
self.__event_class = event_class
358366

@@ -476,15 +484,7 @@ def _purge_credentials(self, source):
476484
del self.__auth_credentials[source]
477485

478486
def __create_pool(self, pair):
479-
return self.__pool_class(
480-
pair,
481-
self.__max_pool_size,
482-
self.__net_timeout,
483-
self.__conn_timeout,
484-
self.__ssl_ctx,
485-
use_greenlets=self.__use_greenlets,
486-
wait_queue_timeout=self.__wait_queue_timeout,
487-
wait_queue_multiple=self.__wait_queue_multiple)
487+
return self.__pool_class(pair, self.__pool_opts)
488488

489489
def __check_auth(self, sock_info):
490490
"""Authenticate using cached database credentials.
@@ -570,7 +570,7 @@ def max_pool_size(self):
570570
.. versionchanged:: 2.6
571571
.. versionadded:: 1.11
572572
"""
573-
return self.__max_pool_size
573+
return self.__pool_opts.max_pool_size
574574

575575
@property
576576
def use_greenlets(self):
@@ -579,7 +579,7 @@ def use_greenlets(self):
579579
580580
.. versionadded:: 2.4.2
581581
"""
582-
return self.__use_greenlets
582+
return self.__pool_opts.use_greenlets
583583

584584
@property
585585
def nodes(self):

pymongo/mongo_replica_set_client.py

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -584,8 +584,6 @@ def __init__(self, hosts_or_uri=None, max_pool_size=100,
584584
self.__index_cache = {}
585585
self.__auth_credentials = {}
586586

587-
self.__max_pool_size = common.validate_positive_integer_or_none(
588-
'max_pool_size', max_pool_size)
589587
self.__tz_aware = common.validate_boolean('tz_aware', tz_aware)
590588
self.__document_class = document_class
591589
self.__monitor = None
@@ -624,6 +622,12 @@ def __init__(self, hosts_or_uri=None, max_pool_size=100,
624622
self.__opts[option] = value
625623
self.__opts.update(options)
626624

625+
max_pool_size = common.validate_positive_integer_or_none(
626+
'max_pool_size', max_pool_size)
627+
connect_timeout = self.__opts.get('connecttimeoutms')
628+
socket_timeout = self.__opts.get('sockettimeoutms')
629+
wait_queue_timeout = self.__opts.get('waitqueuetimeoutms')
630+
wait_queue_multiple = self.__opts.get('waitqueuemultiple')
627631
self.__use_greenlets = self.__opts.get('use_greenlets', False)
628632
if self.__use_greenlets and not have_gevent:
629633
raise ConfigurationError(
@@ -643,12 +647,7 @@ def __init__(self, hosts_or_uri=None, max_pool_size=100,
643647
raise ConfigurationError("the replicaSet "
644648
"keyword parameter is required.")
645649

646-
self.__net_timeout = self.__opts.get('sockettimeoutms')
647-
self.__conn_timeout = self.__opts.get('connecttimeoutms')
648-
self.__wait_queue_timeout = self.__opts.get('waitqueuetimeoutms')
649-
self.__wait_queue_multiple = self.__opts.get('waitqueuemultiple')
650-
651-
self.__ssl_ctx = None
650+
ssl_context = None
652651
use_ssl = self.__opts.get('ssl', None)
653652
keyfile = self.__opts.get('ssl_keyfile', None)
654653
certfile = self.__opts.get('ssl_certfile', None)
@@ -683,7 +682,16 @@ def __init__(self, hosts_or_uri=None, max_pool_size=100,
683682
ctx.load_verify_locations(ca_certs)
684683
if cert_reqs is not None:
685684
ctx.verify_mode = cert_reqs
686-
self.__ssl_ctx = ctx
685+
ssl_context = ctx
686+
687+
self.__pool_opts = pool.PoolOptions(
688+
max_pool_size=max_pool_size,
689+
connect_timeout=connect_timeout,
690+
socket_timeout=socket_timeout,
691+
wait_queue_timeout=wait_queue_timeout,
692+
wait_queue_multiple=wait_queue_multiple,
693+
ssl_context=ssl_context,
694+
use_greenlets=self.__use_greenlets)
687695

688696
super(MongoReplicaSetClient, self).__init__(**self.__opts)
689697

@@ -910,7 +918,7 @@ def max_pool_size(self):
910918
911919
.. versionchanged:: 2.6
912920
"""
913-
return self.__max_pool_size
921+
return self.__pool_opts.max_pool_size
914922

915923
@property
916924
def use_greenlets(self):
@@ -919,7 +927,7 @@ def use_greenlets(self):
919927
920928
.. versionadded:: 2.4.2
921929
"""
922-
return self.__use_greenlets
930+
return self.__pool_opts.use_greenlets
923931

924932
def get_document_class(self):
925933
"""document_class getter"""
@@ -1031,15 +1039,7 @@ def __is_master(self, host):
10311039
"""Directly call ismaster.
10321040
Returns (response, connection_pool, ping_time in seconds).
10331041
"""
1034-
connection_pool = self.pool_class(
1035-
host,
1036-
self.__max_pool_size,
1037-
self.__net_timeout,
1038-
self.__conn_timeout,
1039-
self.__ssl_ctx,
1040-
use_greenlets=self.__use_greenlets,
1041-
wait_queue_timeout=self.__wait_queue_timeout,
1042-
wait_queue_multiple=self.__wait_queue_multiple)
1042+
connection_pool = self.pool_class(host, self.__pool_opts)
10431043

10441044
if self.in_request():
10451045
connection_pool.start_request()

0 commit comments

Comments
 (0)