Uploaded image for project: 'Core Server'
  1. Core Server
  2. SERVER-10554

memory leak in MutableDocument::setNestedField

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major - P3
    • Resolution: Fixed
    • Affects Version/s: 2.4.5
    • Fix Version/s: 2.4.7, 2.5.2
    • Component/s: Aggregation Framework
    • Labels:
      None
    • Environment:
      Win2008R2
      3-node replica set
    • Backwards Compatibility:
      Fully Compatible
    • Operating System:
      ALL

      Description

      Issue Status as of October 23rd, 2013

      ISSUE SUMMARY
      Memory leak in aggregation in MutableDocument::setNestedField

      USER IMPACT
      This leak can manifest in two different scenarios:

      1. Accessing nested fields in the original document fetched from the collection. This leads to a leak of a few hundred bytes per aggregation command. The amount of memory leaked in this case does not depend on the amount of data processed in the aggregation. If the nested fields are only used by a $match expression but not any other pipeline stages, this leak does not apply.
      2. Using a $geoNear pipeline stage and using distanceField or includeLocs to inject information into a nested field. This results in a leak of a few hundred bytes per document returned from geoNear.

      It is present in versions of MongoDB prior to and including v2.4.6.

      SOLUTION
      Fix ref counting of NULL pointers in MutableDocument.

      WORKAROUNDS
      None.

      PATCHES
      Production release v2.4.7 contains the fix for this issue, and production release v2.6.0 will contain the fix as well.

      Original Description

      Aggregation queries are causing memory leak on primary. Detected by comparing umdh memory dumps before and after running aggregation.

      There are two cases in the current codebase that can cause this leak:

      1) Accessing nested fields in the original document fetched from the collection. This leads to a leak of a few hundred bytes per aggregation command. The amount of memory leaked in this case does not depend on the amount of data processed in the aggregation. If the nested fields are only used by a $match expression but not any other pipeline stages, this leak does not apply.

      2) Using a $geoNear pipeline stage and using distanceField or includeLocs to inject information into a nested field. This results in a leak of a few hundred bytes per documented returned from geoNear.

        Attachments

          Activity

            People

            • Votes:
              0 Vote for this issue
              Watchers:
              6 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: