Skip to content

fix(pymongo): don't record failure document values by default - #495

Merged
vastin merged 2 commits into
masterfrom
fix/pymongo-failure-document
Oct 14, 2026
Merged

vastin merged 2 commits into
masterfrom
fix/pymongo-failure-document

Conversation

@vastin

@vastin vastin commented Oct 13, 2026

Copy link
Copy Markdown
Contributor

Issue #, if available: n/a

Description of changes:

XrayCommandListener.failed() recorded the whole pymongo failure document even with record_full_documents=False. Server failures can echo stored document values (errInfo.consideredValue on schema validation errors, errmsg/keyValue on duplicate key errors), which the option is meant to keep out of traces.

Heads-up: by default, failure metadata now keeps only ok, code, codeName, errorLabels and errtype. errmsg is no longer recorded unless record_full_documents=True.

Changes:

  • ext/pymongo/patch.py: filter failure documents unless record_full_documents=True; handle non-mapping failures
  • Add tests/ext/pymongo and a ext-pymongo tox env (no pymongo tests existed)
  • Document the option in docs/thirdparty.rst; CHANGELOG entry

Testing:

  • tox -e py312-ext-pymongo: 12 passed
  • Checked against MongoDB 8: validation and duplicate key failures no longer include document values by default

Follow-up: release needed after merge.

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

XrayCommandListener.failed() recorded the whole failure document even when
record_full_documents=False. Server failures can echo stored document values
(errInfo.consideredValue on schema validation errors, errmsg and keyValue on
duplicate key errors), so by default only keep ok, code, codeName,
errorLabels and errtype. The full document is still recorded with
record_full_documents=True.

Also add unit tests and a tox env for the pymongo patch, and document the
option in docs/thirdparty.rst.
@vastin
vastin requested a review from a team as a code owner October 13, 2026 20:42
@vastin
vastin merged commit b19f5c7 into master Oct 14, 2026
15 checks passed
@vastin
vastin deleted the fix/pymongo-failure-document branch October 14, 2026 20:25
vastin added a commit that referenced this pull request Oct 20, 2026
… exception messages (#496)

requests exception messages include the url of the request with its query
string, e.g. the signature and session token of a presigned S3 url, while
the url recorded by the requests patch has the query string removed.
pymongo exception messages include the server error document, with the
value that failed document validation (consideredValue), which can be a
value already stored in the document, duplicate key values and failed
operations (op), which the failure metadata no longer records since #495.
Both were recorded as is whenever the exception went through a traced
function or framework middleware.

Redact exception messages when they are recorded with a list of rules,
which record redacted values as REDACTED:
- pymongo errors: like the failure metadata, keep only the ok, code,
  codeName, errorLabels and errtype values of the error document, also of
  the error that caused the exception, and the position of write errors
  in a bulk write, and redact the other values, and the duplicate key
  values in the server message, which is otherwise kept. A pymongo
  listener that records full documents (record_full_documents=True) stops
  this in the whole process.
- all errors: the values of a list of sensitive url query parameters,
  e.g. of presigned urls, keeping the keys,
  e.g. "Max retries exceeded with url: /object.txt?X-Amz-Signature=REDACTED"

Messages are not recorded if a rule fails.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants