Interrupted commands by maxTimeMS on mongos should propagate the error code to client

XMLWordPrintableJSON

    • Type: Bug
    • Resolution: Done
    • Priority: Major - P3
    • 2.5.5
    • Affects Version/s: 2.5.3
    • Component/s: MapReduce, Sharding
    • ALL
    • None
    • None
    • None
    • None
    • None
    • None
    • None

      Since drivers depend on the error code to throw exception for maxTimeMS timeout, interrupted commands on mongos should propagate the error code.

      The following commands have this issue.
      + aggregate. Wrong error code 17022, 50 is expected (known bug for javascript interruption error code).

      The others lack top-level error code.
      + count
      + mapreduce
      + text
      + moveChunk
      + collStats

      Commands output:

      ----
      Testing aggregate
      ----
      
      {
           "code" : 17022,
           "ok" : 0,
           "errmsg" : "exception: sharded pipeline failed on shard shard0001: { ok: 0.0, errmsg: \"operation exceeded time limit\", code: 50 }"
      }
      
      ----
      Testing count
      ----
      
      {
           "shards" : {
               
           },
           "cause" : {
                "ok" : 0,
                "errmsg" : "operation exceeded time limit",
                "code" : 50
           },
           "ok" : 0,
           "errmsg" : "failed on : shard0000"
      }
      
      ----
      Testing mapreduce
      ----
      
      {
           "ok" : 0,
           "errmsg" : "MR parallel processing failed: { ok: 0.0, errmsg: \"operation exceeded time limit\", code: 50 }"
      }
      
      ----
      Testing text
      ----
      
      {
           "rawresult" : {
                "ok" : 0,
                "errmsg" : "operation exceeded time limit",
                "code" : 50
           },
           "ok" : 0,
           "errmsg" : "failure on shard: shard0000:localhost:30000: errmsg: \"operation exceeded time limit\""
      }
      
      ----
      Testing moveChunk
      ----
      {
           "cause" : {
                "ok" : 0,
                "errmsg" : "operation exceeded time limit",
                "code" : 50
           },
           "ok" : 0,
           "errmsg" : "move failed"
      }
      
      ----
      Testing collStats
      ----
      {
           "sharded" : true,
           "ok" : 0,
           "errmsg" : "failed on shard: { ok: 0.0, errmsg: \"operation exceeded time limit\", code: 50 }"
      }
      

      For example, to reproduce this issue, running map-reduce against sharded collection with a small maxTimeMS gives the following error.

      mongos> var mapReduceArg = {
      ...     mapreduce: "foo",
      ...     map: function() { emit(this.i, 1); },
      ...     reduce: function(key, value) { return value.length },
      ...     out: { replace: "mapReduceOut" },
      ...     maxTimeMS: 10,
      ... };
      mongos> db.runCommand(mapReduceArg)
      {
      	"ok" : 0,
      	"errmsg" : "MR parallel processing failed: { errmsg: \"exception: JavaScript execution terminated\", code: 13475, ok: 0.0 }"
      }
      

            Assignee:
            J Rassi (Inactive)
            Reporter:
            Siyuan Zhou
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated:
              Resolved: