[Build Failure] Serverless - test_crud_unified

XMLWordPrintableJSON

    • Type: Build Failure
    • Resolution: Gone away
    • Priority: Unknown
    • None
    • Affects Version/s: None
    • Component/s: None
    • None
    • Python Drivers
    • Hide

      1. What would you like to communicate to the user about this feature?
      2. Would you like the user to see examples of the syntax and/or executable code and its output?
      3. Which versions of the driver/connector does this apply to?

      Show
      1. What would you like to communicate to the user about this feature? 2. Would you like the user to see examples of the syntax and/or executable code and its output? 3. Which versions of the driver/connector does this apply to?
    • None
    • None
    • None
    • None
    • None
    • None

      Name of Failure:

      test.asynchronous.test_crud_unified.TestUnifiedClientBulkWriteReplaceOneSort.test_client_bulkWrite_replaceOne_with_sort_option
      test.asynchronous.test_crud_unified.TestUnifiedClientBulkWriteUpdateOneSort.test_client_bulkWrite_updateOne_with_sort_option
      test.asynchronous.test_crud_unified.TestUnifiedCreateNullIds.test_inserting__id_with_type_null_via_clientBulkWrite
      test.test_crud_unified.TestUnifiedClientBulkWriteReplaceOneSort.test_client_bulkWrite_replaceOne_with_sort_option
      test.test_crud_unified.TestUnifiedClientBulkWriteUpdateOneSort.test_client_bulkWrite_updateOne_with_sort_option
      test.test_crud_unified.TestUnifiedCreateNullIds.test_inserting__id_with_type_null_via_clientBulkWrite

      Link to task:

      https://spruce.mongodb.com/task/mongo_python_driver_serverless_rhel8_python3.13_test_serverless_5b00a3d48a9052b00680b71124ee4ef82358fef7_24_11_11_15_34_05/tests?execution=0&sortBy=STATUS&sortDir=ASC

      Context of when and why the failure occurred:

      Unknown

      Stack trace:

       [2024/11/11 09:46:11.455] FAILURE: pymongo.errors.ClientBulkWriteException: batch op errors occurred, full error: {'anySuccessful': False, 'error': OperationFailure('(Unauthorized) not authorized on admin to execute command { bulkWrite: 1, errorsOnly: true, ordered: true, lsid: { id: {4 [194 141 87 18 29 228 71 22 179 16 122 167 82 61 72 15]} }, txnNumber: 1.000000, $db: "admin" }, full error: {\'ok\': 0, \'errmsg\': \'(Unauthorized) not authorized on admin to execute command { bulkWrite: 1, errorsOnly: true, ordered: true, lsid: { id: {4 [194 141 87 18 29 228 71 22 179 16 122 167 82 61 72 15]} }, txnNumber: 1.000000, $db: "admin" }\', \'code\': 8000, \'codeName\': \'AtlasError\'}'), 'writeErrors': [], 'writeConcernErrors': [], 'nInserted': 0, 'nUpserted': 0, 'nMatched': 0, 'nModified': 0, 'nDeleted': 0, 'insertResults': {}, 'updateResults': {}, 'deleteResults': {}} ()
       [2024/11/11 09:46:11.455] self = <pymongo.asynchronous.client_bulk._AsyncClientBulk object at 0x7f3884db56a0>
       [2024/11/11 09:46:11.455] bwc = <pymongo.message._ClientBulkWriteContext object at 0x7f387cf1d9c0>
       [2024/11/11 09:46:11.455] cmd = {'$db': 'admin', 'bulkWrite': 1, 'errorsOnly': True, 'lsid': {'id': Binary(b'\xc2\x8dW\x12\x1d\xe4G\x16\xb3\x10z\xa7R=H\x0f', 4)}, ...}
       [2024/11/11 09:46:11.455] request_id = -1355612817
       [2024/11/11 09:46:11.455] msg = b'\x1e\x01\x00\x00o\xfd2\xaf\x00\x00\x00\x00\xdd\x07\x00\x00\x00\x00\x00\x00\x00q\x00\x00\x00\x10bulkWrite\x00\x01\x00...0\xff\xff\xff\xff\x00\x00\x01)\x00\x00\x00nsInfo\x00\x1e\x00\x00\x00\x02ns\x00\x11\x00\x00\x00crud-tests.coll0\x00\x00'
       [2024/11/11 09:46:11.455] op_docs = [{'filter': {'_id': {'$gt': 1}}, 'multi': False, 'sort': {'_id': -1}, 'update': 0, ...}]
       [2024/11/11 09:46:11.455] ns_docs = [{'ns': 'crud-tests.coll0'}]
       [2024/11/11 09:46:11.455] client = AsyncMongoClient(host=['13480-drivertest-lb.3x79d.mongodb-dev.net:27017'], document_class=dict, tz_aware=False, connec...pressors=['zlib'], tls=True, event_listeners=[<test.unified_format_shared.EventListenerUtil object at 0x7f387d298dd0>])
       [2024/11/11 09:46:11.455]     @_handle_reauth
       [2024/11/11 09:46:11.455]     async def write_command(
       [2024/11/11 09:46:11.455]         self,
       [2024/11/11 09:46:11.455]         bwc: _ClientBulkWriteContext,
       [2024/11/11 09:46:11.455]         cmd: MutableMapping[str, Any],
       [2024/11/11 09:46:11.455]         request_id: int,
       [2024/11/11 09:46:11.455]         msg: Union[bytes, dict[str, Any]],
       [2024/11/11 09:46:11.455]         op_docs: list[Mapping[str, Any]],
       [2024/11/11 09:46:11.455]         ns_docs: list[Mapping[str, Any]],
       [2024/11/11 09:46:11.455]         client: AsyncMongoClient,
       [2024/11/11 09:46:11.455]     ) -> dict[str, Any]:
       [2024/11/11 09:46:11.455]         """A proxy for AsyncConnection.write_command that handles event publishing."""
       [2024/11/11 09:46:11.455]         cmd["ops"] = op_docs
       [2024/11/11 09:46:11.455]         cmd["nsInfo"] = ns_docs
       [2024/11/11 09:46:11.455]         if _COMMAND_LOGGER.isEnabledFor(logging.DEBUG):
       [2024/11/11 09:46:11.455]             _debug_log(
       [2024/11/11 09:46:11.455]                 _COMMAND_LOGGER,
       [2024/11/11 09:46:11.455]                 clientId=client._topology_settings._topology_id,
       [2024/11/11 09:46:11.455]                 message=_CommandStatusMessage.STARTED,
       [2024/11/11 09:46:11.455]                 command=cmd,
       [2024/11/11 09:46:11.455]                 commandName=next(iter(cmd)),
       [2024/11/11 09:46:11.455]                 databaseName=bwc.db_name,
       [2024/11/11 09:46:11.455]                 requestId=request_id,
       [2024/11/11 09:46:11.455]                 operationId=request_id,
       [2024/11/11 09:46:11.455]                 driverConnectionId=bwc.conn.id,
       [2024/11/11 09:46:11.455]                 serverConnectionId=bwc.conn.server_connection_id,
       [2024/11/11 09:46:11.455]                 serverHost=bwc.conn.address[0],
       [2024/11/11 09:46:11.455]                 serverPort=bwc.conn.address[1],
       [2024/11/11 09:46:11.455]                 serviceId=bwc.conn.service_id,
       [2024/11/11 09:46:11.455]             )
       [2024/11/11 09:46:11.455]         if bwc.publish:
       [2024/11/11 09:46:11.455]             bwc._start(cmd, request_id, op_docs, ns_docs)
       [2024/11/11 09:46:11.455]         try:
       [2024/11/11 09:46:11.455] >           reply = await bwc.conn.write_command(request_id, msg, bwc.codec)  # type: ignore[misc, arg-type]
       [2024/11/11 09:46:11.455] pymongo/asynchronous/client_bulk.py:260: 
       [2024/11/11 09:46:11.455] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
       [2024/11/11 09:46:11.455] pymongo/asynchronous/pool.py:628: in write_command
       [2024/11/11 09:46:11.455]     helpers_shared._check_command_response(result, self.max_wire_version)
       [2024/11/11 09:46:11.455] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
       [2024/11/11 09:46:11.455] response = {'code': 8000, 'codeName': 'AtlasError', 'errmsg': '(Unauthorized) not authorized on admin to execute command { bulkWr...id: { id: {4 [194 141 87 18 29 228 71 22 179 16 122 167 82 61 72 15]} }, txnNumber: 1.000000, $db: "admin" }', 'ok': 0}
       [2024/11/11 09:46:11.455] max_wire_version = 25, allowable_errors = None
       [2024/11/11 09:46:11.455] parse_write_concern_error = False
       [2024/11/11 09:46:11.455]     def _check_command_response(
       [2024/11/11 09:46:11.455]         response: _DocumentOut,
       [2024/11/11 09:46:11.455]         max_wire_version: Optional[int],
       [2024/11/11 09:46:11.455]         allowable_errors: Optional[Container[Union[int, str]]] = None,
       [2024/11/11 09:46:11.455]         parse_write_concern_error: bool = False,
       [2024/11/11 09:46:11.455]     ) -> None:
       [2024/11/11 09:46:11.455]         """Check the response to a command for errors."""
       [2024/11/11 09:46:11.455]         if "ok" not in response:
       [2024/11/11 09:46:11.455]             # Server didn't recognize our message as a command.
       [2024/11/11 09:46:11.455]             raise OperationFailure(
       [2024/11/11 09:46:11.455]                 response.get("$err"),  # type: ignore[arg-type]
       [2024/11/11 09:46:11.455]                 response.get("code"),
       [2024/11/11 09:46:11.455]                 response,
       [2024/11/11 09:46:11.455]                 max_wire_version,
       [2024/11/11 09:46:11.455]             )
       [2024/11/11 09:46:11.455]     
       [2024/11/11 09:46:11.455]         if parse_write_concern_error and "writeConcernError" in response:
       [2024/11/11 09:46:11.455]             _error = response["writeConcernError"]
       [2024/11/11 09:46:11.455]             _labels = response.get("errorLabels")
       [2024/11/11 09:46:11.455]             if _labels:
       [2024/11/11 09:46:11.455]                 _error.update({"errorLabels": _labels})
       [2024/11/11 09:46:11.455]             _raise_write_concern_error(_error)
       [2024/11/11 09:46:11.455]     
       [2024/11/11 09:46:11.455]         if response["ok"]:
       [2024/11/11 09:46:11.455]             return
       [2024/11/11 09:46:11.455]     
       [2024/11/11 09:46:11.455]         details = response
       [2024/11/11 09:46:11.455]         # Mongos returns the error details in a 'raw' object
       [2024/11/11 09:46:11.455]         # for some errors.
       [2024/11/11 09:46:11.455]         if "raw" in response:
       [2024/11/11 09:46:11.455]             for shard in response["raw"].values():
       [2024/11/11 09:46:11.455]                 # Grab the first non-empty raw error from a shard.
       [2024/11/11 09:46:11.455]                 if shard.get("errmsg") and not shard.get("ok"):
       [2024/11/11 09:46:11.455]                     details = shard
       [2024/11/11 09:46:11.455]                     break
       [2024/11/11 09:46:11.455]     
       [2024/11/11 09:46:11.455]         errmsg = details["errmsg"]
       [2024/11/11 09:46:11.455]         code = details.get("code")
       [2024/11/11 09:46:11.455]     
       [2024/11/11 09:46:11.455]         # For allowable errors, only check for error messages when the code is not
       [2024/11/11 09:46:11.455]         # included.
       [2024/11/11 09:46:11.455]         if allowable_errors:
       [2024/11/11 09:46:11.455]             if code is not None:
       [2024/11/11 09:46:11.455]                 if code in allowable_errors:
       [2024/11/11 09:46:11.455]                     return
       [2024/11/11 09:46:11.455]             elif errmsg in allowable_errors:
       [2024/11/11 09:46:11.455]                 return
       [2024/11/11 09:46:11.455]     
       [2024/11/11 09:46:11.455]         # Server is "not primary" or "recovering"
       [2024/11/11 09:46:11.455]         if code is not None:
       [2024/11/11 09:46:11.455]             if code in _NOT_PRIMARY_CODES:
       [2024/11/11 09:46:11.455]                 raise NotPrimaryError(errmsg, response)
       [2024/11/11 09:46:11.455]         elif HelloCompat.LEGACY_ERROR in errmsg or "node is recovering" in errmsg:
       [2024/11/11 09:46:11.455]             raise NotPrimaryError(errmsg, response)
       [2024/11/11 09:46:11.455]     
       [2024/11/11 09:46:11.455]         # Other errors
       [2024/11/11 09:46:11.455]         # findAndModify with upsert can raise duplicate key error
       [2024/11/11 09:46:11.455]         if code in (11000, 11001, 12582):
       [2024/11/11 09:46:11.455]             raise DuplicateKeyError(errmsg, code, response, max_wire_version)
       [2024/11/11 09:46:11.455]         elif code == 50:
       [2024/11/11 09:46:11.455]             raise ExecutionTimeout(errmsg, code, response, max_wire_version)
       [2024/11/11 09:46:11.455]         elif code == 43:
       [2024/11/11 09:46:11.455]             raise CursorNotFound(errmsg, code, response, max_wire_version)
       [2024/11/11 09:46:11.455]     
       [2024/11/11 09:46:11.455] >       raise OperationFailure(errmsg, code, response, max_wire_version)
       [2024/11/11 09:46:11.455] E       pymongo.errors.OperationFailure: (Unauthorized) not authorized on admin to execute command { bulkWrite: 1, errorsOnly: true, ordered: true, lsid: { id: {4 [194 141 87 18 29 228 71 22 179 16 122 167 82 61 72 15]} }, txnNumber: 1.000000, $db: "admin" }, full error: {'ok': 0, 'errmsg': '(Unauthorized) not authorized on admin to execute command { bulkWrite: 1, errorsOnly: true, ordered: true, lsid: { id: {4 [194 141 87 18 29 228 71 22 179 16 122 167 82 61 72 15]} }, txnNumber: 1.000000, $db: "admin" }', 'code': 8000, 'codeName': 'AtlasError'}
       [2024/11/11 09:46:11.455] pymongo/helpers_shared.py:247: OperationFailure
       [2024/11/11 09:46:11.455] The above exception was the direct cause of the following exception:
       [2024/11/11 09:46:11.455] self = <test.asynchronous.test_crud_unified.TestUnifiedClientBulkWriteReplaceOneSort testMethod=test_client_bulkWrite_replaceOne_with_sort_option>
       [2024/11/11 09:46:11.455]     async def test_case(self):
       [2024/11/11 09:46:11.455] >       await self.run_scenario(spec)
       [2024/11/11 09:46:11.455] test/asynchronous/unified_format.py:1482: 
       [2024/11/11 09:46:11.455] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
       [2024/11/11 09:46:11.455] test/asynchronous/unified_format.py:1424: in run_scenario
       [2024/11/11 09:46:11.455]     await self._run_scenario(spec, uri)
       [2024/11/11 09:46:11.455] test/asynchronous/unified_format.py:1459: in _run_scenario
       [2024/11/11 09:46:11.455]     await self.run_operations(spec["operations"])
       [2024/11/11 09:46:11.455] test/asynchronous/unified_format.py:1264: in run_operations
       [2024/11/11 09:46:11.455]     await self.run_entity_operation(op)
       [2024/11/11 09:46:11.455] test/asynchronous/unified_format.py:994: in run_entity_operation
       [2024/11/11 09:46:11.455]     result = await cmd(**dict(arguments))
       [2024/11/11 09:46:11.455] pymongo/_csot.py:109: in csot_wrapper
       [2024/11/11 09:46:11.455]     return await func(self, *args, **kwargs)
       [2024/11/11 09:46:11.455] pymongo/asynchronous/mongo_client.py:2381: in bulk_write
       [2024/11/11 09:46:11.455]     return await blk.execute(session, _Op.BULK_WRITE)
       [2024/11/11 09:46:11.455] pymongo/asynchronous/client_bulk.py:751: in execute
       [2024/11/11 09:46:11.455]     result = await self.execute_command(session, operation)
       [2024/11/11 09:46:11.455] pymongo/asynchronous/client_bulk.py:657: in execute_command
       [2024/11/11 09:46:11.455]     await self.client._retryable_write(
       [2024/11/11 09:46:11.455] pymongo/asynchronous/mongo_client.py:1896: in _retryable_write
       [2024/11/11 09:46:11.455]     return await self._retry_with_session(retryable, func, s, bulk, operation, operation_id)
       [2024/11/11 09:46:11.455] pymongo/asynchronous/mongo_client.py:1782: in _retry_with_session
       [2024/11/11 09:46:11.455]     return await self._retry_internal(
       [2024/11/11 09:46:11.455] pymongo/_csot.py:109: in csot_wrapper
       [2024/11/11 09:46:11.455]     return await func(self, *args, **kwargs)
       [2024/11/11 09:46:11.455] pymongo/asynchronous/mongo_client.py:1817: in _retry_internal
       [2024/11/11 09:46:11.455]     return await _ClientConnectionRetryable(
       [2024/11/11 09:46:11.455] pymongo/asynchronous/mongo_client.py:2567: in run
       [2024/11/11 09:46:11.455]     return await self._read() if self._is_read else await self._write()
       [2024/11/11 09:46:11.455] pymongo/asynchronous/mongo_client.py:2689: in _write
       [2024/11/11 09:46:11.455]     return await self._func(self._session, conn, self._retryable)  # type: ignore
       [2024/11/11 09:46:11.455] pymongo/asynchronous/client_bulk.py:648: in retryable_bulk
       [2024/11/11 09:46:11.455]     await self._execute_command(
       [2024/11/11 09:46:11.455] pymongo/asynchronous/client_bulk.py:574: in _execute_command
       [2024/11/11 09:46:11.455]     _throw_client_bulk_write_exception(full_result, self.verbose_results)
       [2024/11/11 09:46:11.455] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
       [2024/11/11 09:46:11.455] full_result = {'anySuccessful': False, 'deleteResults': {}, 'error': OperationFailure('(Unauthorized) not authorized on admin to exe...]} }, txnNumber: 1.000000, $db: "admin" }\', \'code\': 8000, \'codeName\': \'AtlasError\'}'), 'insertResults': {}, ...}
       [2024/11/11 09:46:11.455] verbose_results = False
       [2024/11/11 09:46:11.455]     def _throw_client_bulk_write_exception(
       [2024/11/11 09:46:11.455]         full_result: _DocumentOut, verbose_results: bool
       [2024/11/11 09:46:11.455]     ) -> NoReturn:
       [2024/11/11 09:46:11.455]         """Raise a ClientBulkWriteException from the full result."""
       [2024/11/11 09:46:11.455]         # retryWrites on MMAPv1 should raise an actionable error.
       [2024/11/11 09:46:11.455]         if full_result["writeErrors"]:
       [2024/11/11 09:46:11.455]             full_result["writeErrors"].sort(key=lambda error: error["idx"])
       [2024/11/11 09:46:11.455]             err = full_result["writeErrors"][0]
       [2024/11/11 09:46:11.455]             code = err["code"]
       [2024/11/11 09:46:11.455]             msg = err["errmsg"]
       [2024/11/11 09:46:11.455]             if code == 20 and msg.startswith("Transaction numbers"):
       [2024/11/11 09:46:11.455]                 errmsg = (
       [2024/11/11 09:46:11.455]                     "This MongoDB deployment does not support "
       [2024/11/11 09:46:11.455]                     "retryable writes. Please add retryWrites=false "
       [2024/11/11 09:46:11.455]                     "to your connection string."
       [2024/11/11 09:46:11.455]                 )
       [2024/11/11 09:46:11.455]                 raise OperationFailure(errmsg, code, full_result)
       [2024/11/11 09:46:11.455]         if isinstance(full_result["error"], BaseException):
       [2024/11/11 09:46:11.455] >           raise ClientBulkWriteException(full_result, verbose_results) from full_result["error"]
       [2024/11/11 09:46:11.455] E           pymongo.errors.ClientBulkWriteException: batch op errors occurred, full error: {'anySuccessful': False, 'error': OperationFailure('(Unauthorized) not authorized on admin to execute command { bulkWrite: 1, errorsOnly: true, ordered: true, lsid: { id: {4 [194 141 87 18 29 228 71 22 179 16 122 167 82 61 72 15]} }, txnNumber: 1.000000, $db: "admin" }, full error: {\'ok\': 0, \'errmsg\': \'(Unauthorized) not authorized on admin to execute command { bulkWrite: 1, errorsOnly: true, ordered: true, lsid: { id: {4 [194 141 87 18 29 228 71 22 179 16 122 167 82 61 72 15]} }, txnNumber: 1.000000, $db: "admin" }\', \'code\': 8000, \'codeName\': \'AtlasError\'}'), 'writeErrors': [], 'writeConcernErrors': [], 'nInserted': 0, 'nUpserted': 0, 'nMatched': 0, 'nModified': 0, 'nDeleted': 0, 'insertResults': {}, 'updateResults': {}, 'deleteResults': {}}
       [2024/11/11 09:46:11.455] pymongo/_client_bulk_shared.py:78: ClientBulkWriteException
      
          
      

              Assignee:
              Noah Stapp
              Reporter:
              Steve Silvester
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

                Created:
                Updated:
                Resolved: