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

mapReduce command doesn't tolerate null finalize attribute

    XMLWordPrintableJSON

Details

    • Icon: Bug Bug
    • Resolution: Done
    • Icon: Major - P3 Major - P3
    • 1.7.5
    • 1.6.4
    • None
    • None
    • ALL

    Description

      It appears that MR chokes if passed a null finalize function:

      > res = db.items.mapReduce(m, r);
      {
      "result" : "tmp.mr.mapreduce_1291928405_106",
      "timeMillis" : 3,
      "counts" :

      { "input" : 10, "emit" : 10, "output" : 8 }

      ,
      "ok" : 1,
      }
      > res = db.items.mapReduce(m, r,

      { finalize: null }

      );
      Thu Dec 9 13:00:14 uncaught exception: map reduce failed: {
      "assertion" : "not code",
      "assertionCode" : 10062,
      "errmsg" : "db assertion failure",
      "ok" : 0
      }

      The log indicates "can't convert type: 10 to code", which I take to mean MongoDB tried to treat the finalize attribute as code without first checking that it's null.

      Note that this is not the behavior of the query attribute:

      > res = db.items.mapReduce(m, r,

      { query: null }

      );
      {
      "result" : "tmp.mr.mapreduce_1291928582_108",
      "timeMillis" : 33,
      "counts" :

      { "input" : 10, "emit" : 10, "output" : 8 }

      ,
      "ok" : 1,
      }

      Besides simple consistency (and the lack of a more specific error message), it would be nice for MR to be null-safe in finalize because I have some utility code that handles cases both with and without a finalize attribute, and the easy thing is just to pass null as the finalize attribute in cases without it. (I can give illustrative Python code if needed.)

      Attachments

        Activity

          People

            eliot Eliot Horowitz (Inactive)
            jyrinx Luke Maurer
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: