PYTHON-5202 WaitQueueTimeoutError should not clear the pool (#2192)
This commit is contained in:
parent
34ca759f85
commit
e48365c5f1
@ -41,6 +41,7 @@ from pymongo.errors import (
|
||||
OperationFailure,
|
||||
PyMongoError,
|
||||
ServerSelectionTimeoutError,
|
||||
WaitQueueTimeoutError,
|
||||
WriteError,
|
||||
)
|
||||
from pymongo.hello import Hello
|
||||
@ -892,6 +893,8 @@ class Topology:
|
||||
# Clear the pool.
|
||||
await server.reset(service_id)
|
||||
elif isinstance(error, ConnectionFailure):
|
||||
if isinstance(error, WaitQueueTimeoutError):
|
||||
return
|
||||
# "Client MUST replace the server's description with type Unknown
|
||||
# ... MUST NOT request an immediate check of the server."
|
||||
if not self._settings.load_balanced:
|
||||
|
||||
@ -37,6 +37,7 @@ from pymongo.errors import (
|
||||
OperationFailure,
|
||||
PyMongoError,
|
||||
ServerSelectionTimeoutError,
|
||||
WaitQueueTimeoutError,
|
||||
WriteError,
|
||||
)
|
||||
from pymongo.hello import Hello
|
||||
@ -890,6 +891,8 @@ class Topology:
|
||||
# Clear the pool.
|
||||
server.reset(service_id)
|
||||
elif isinstance(error, ConnectionFailure):
|
||||
if isinstance(error, WaitQueueTimeoutError):
|
||||
return
|
||||
# "Client MUST replace the server's description with type Unknown
|
||||
# ... MUST NOT request an immediate check of the server."
|
||||
if not self._settings.load_balanced:
|
||||
|
||||
@ -113,6 +113,7 @@ from pymongo.errors import (
|
||||
NetworkTimeout,
|
||||
OperationFailure,
|
||||
ServerSelectionTimeoutError,
|
||||
WaitQueueTimeoutError,
|
||||
WriteConcernError,
|
||||
)
|
||||
from pymongo.monitoring import ServerHeartbeatListener, ServerHeartbeatStartedEvent
|
||||
@ -1313,8 +1314,16 @@ class TestClient(AsyncIntegrationTest):
|
||||
self.assertAlmostEqual(30, client.options.server_selection_timeout)
|
||||
|
||||
async def test_waitQueueTimeoutMS(self):
|
||||
client = await self.async_rs_or_single_client(waitQueueTimeoutMS=2000)
|
||||
self.assertEqual((await async_get_pool(client)).opts.wait_queue_timeout, 2)
|
||||
listener = CMAPListener()
|
||||
client = await self.async_rs_or_single_client(
|
||||
waitQueueTimeoutMS=10, maxPoolSize=1, event_listeners=[listener]
|
||||
)
|
||||
pool = await async_get_pool(client)
|
||||
self.assertEqual(pool.opts.wait_queue_timeout, 0.01)
|
||||
async with pool.checkout():
|
||||
with self.assertRaises(WaitQueueTimeoutError):
|
||||
await client.test.command("ping")
|
||||
self.assertFalse(listener.events_by_type(monitoring.PoolClearedEvent))
|
||||
|
||||
async def test_socketKeepAlive(self):
|
||||
pool = await async_get_pool(self.client)
|
||||
|
||||
@ -102,6 +102,7 @@ from pymongo.errors import (
|
||||
NetworkTimeout,
|
||||
OperationFailure,
|
||||
ServerSelectionTimeoutError,
|
||||
WaitQueueTimeoutError,
|
||||
WriteConcernError,
|
||||
)
|
||||
from pymongo.monitoring import ServerHeartbeatListener, ServerHeartbeatStartedEvent
|
||||
@ -1272,8 +1273,16 @@ class TestClient(IntegrationTest):
|
||||
self.assertAlmostEqual(30, client.options.server_selection_timeout)
|
||||
|
||||
def test_waitQueueTimeoutMS(self):
|
||||
client = self.rs_or_single_client(waitQueueTimeoutMS=2000)
|
||||
self.assertEqual((get_pool(client)).opts.wait_queue_timeout, 2)
|
||||
listener = CMAPListener()
|
||||
client = self.rs_or_single_client(
|
||||
waitQueueTimeoutMS=10, maxPoolSize=1, event_listeners=[listener]
|
||||
)
|
||||
pool = get_pool(client)
|
||||
self.assertEqual(pool.opts.wait_queue_timeout, 0.01)
|
||||
with pool.checkout():
|
||||
with self.assertRaises(WaitQueueTimeoutError):
|
||||
client.test.command("ping")
|
||||
self.assertFalse(listener.events_by_type(monitoring.PoolClearedEvent))
|
||||
|
||||
def test_socketKeepAlive(self):
|
||||
pool = get_pool(self.client)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user