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

[CQF] Investigate reference tracker stack-overflow

    XMLWordPrintableJSON

Details

    • Icon: Task Task
    • Resolution: Done
    • Icon: Major - P3 Major - P3
    • None
    • None
    • None
    • None
    • Query Optimization
    • QO 2023-07-24, QO 2023-08-07, QO 2023-08-21, QO 2023-09-04

    Description

      The maximum number of aggregation stages allowed is 1000 for non-debug builds. For the following pipeline (and other long pipelines) the classic engine has no issues, while Bonsai fails with a stack overflow in the first call to the reference tracker.

      db.c.drop();
      const stage = {$addFields: {a: {$add: ["$a", "$b"]}}};
      // Make a pipeline with 990 stages (all the same stage)
      const pipeline = [...Array(990).keys()].map(_ => stage);
      db.c.aggregate(pipeline).toArray();
      // Stack overflow
      

      We should investigate why the stack frames are so large. Are we allocating unnecessarily at all?

      The overall goal is to determine if the transport infrastructure needs to fundamentally change to be able to handle deep trees, or is there a less extreme change we can make?

      Attachments

        Activity

          People

            david.percy@mongodb.com David Percy
            matt.boros@mongodb.com Matt Boros
            Votes:
            0 Vote for this issue
            Watchers:
            7 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: