Merge branch 'master' of github.com:mongodb/mongo-python-driver

This commit is contained in:
Steven Silvester 2024-06-25 06:23:32 -05:00
commit ca7c8c25fe
No known key found for this signature in database
GPG Key ID: B1BF5EC3A8B32F91
3 changed files with 67 additions and 0 deletions

View File

@ -394,6 +394,29 @@ def _truncate_metadata(metadata: MutableMapping[str, Any]) -> None:
metadata["platform"] = plat
else:
metadata.pop("platform", None)
encoded_size = len(bson.encode(metadata))
if encoded_size <= _MAX_METADATA_SIZE:
return
# 5. Truncate driver info.
overflow = encoded_size - _MAX_METADATA_SIZE
driver = metadata.get("driver", {})
if driver:
# Truncate driver version.
driver_version = driver.get("version")[:-overflow]
if len(driver_version) >= len(_METADATA["driver"]["version"]):
metadata["driver"]["version"] = driver_version
else:
metadata["driver"]["version"] = _METADATA["driver"]["version"]
encoded_size = len(bson.encode(metadata))
if encoded_size <= _MAX_METADATA_SIZE:
return
# Truncate driver name.
overflow = encoded_size - _MAX_METADATA_SIZE
driver_name = driver.get("name")[:-overflow]
if len(driver_name) >= len(_METADATA["driver"]["name"]):
metadata["driver"]["name"] = driver_name
else:
metadata["driver"]["name"] = _METADATA["driver"]["name"]
# If the first getaddrinfo call of this interpreter's life is on a thread,

View File

@ -394,6 +394,29 @@ def _truncate_metadata(metadata: MutableMapping[str, Any]) -> None:
metadata["platform"] = plat
else:
metadata.pop("platform", None)
encoded_size = len(bson.encode(metadata))
if encoded_size <= _MAX_METADATA_SIZE:
return
# 5. Truncate driver info.
overflow = encoded_size - _MAX_METADATA_SIZE
driver = metadata.get("driver", {})
if driver:
# Truncate driver version.
driver_version = driver.get("version")[:-overflow]
if len(driver_version) >= len(_METADATA["driver"]["version"]):
metadata["driver"]["version"] = driver_version
else:
metadata["driver"]["version"] = _METADATA["driver"]["version"]
encoded_size = len(bson.encode(metadata))
if encoded_size <= _MAX_METADATA_SIZE:
return
# Truncate driver name.
overflow = encoded_size - _MAX_METADATA_SIZE
driver_name = driver.get("name")[:-overflow]
if len(driver_name) >= len(_METADATA["driver"]["name"]):
metadata["driver"]["name"] = driver_name
else:
metadata["driver"]["name"] = _METADATA["driver"]["name"]
# If the first getaddrinfo call of this interpreter's life is on a thread,

View File

@ -72,6 +72,7 @@ from test.utils import (
wait_until,
)
import bson
import pymongo
from bson import encode
from bson.codec_options import (
@ -106,6 +107,7 @@ from pymongo.synchronous.database import Database
from pymongo.synchronous.mongo_client import MongoClient
from pymongo.synchronous.monitoring import ServerHeartbeatListener, ServerHeartbeatStartedEvent
from pymongo.synchronous.pool import (
_MAX_METADATA_SIZE,
_METADATA,
ENV_VAR_K8S,
Connection,
@ -361,6 +363,25 @@ class ClientUnitTest(unittest.TestCase):
)
options = client.options
self.assertEqual(options.pool_options.metadata, metadata)
# Test truncating driver info metadata.
client = MongoClient(
driver=DriverInfo(name="s" * _MAX_METADATA_SIZE),
connect=False,
)
options = client.options
self.assertLessEqual(
len(bson.encode(options.pool_options.metadata)),
_MAX_METADATA_SIZE,
)
client = MongoClient(
driver=DriverInfo(name="s" * _MAX_METADATA_SIZE, version="s" * _MAX_METADATA_SIZE),
connect=False,
)
options = client.options
self.assertLessEqual(
len(bson.encode(options.pool_options.metadata)),
_MAX_METADATA_SIZE,
)
@mock.patch.dict("os.environ", {ENV_VAR_K8S: "1"})
def test_container_metadata(self):