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

Sort criteria with empty field name results in confusing error message

    • Fully Compatible
    • ALL

      Sorting on an empty field name causes a flood of assertions which do not clearly indicate that the sort criteria is invalid. Note that in the following case, the only index is the default index on _id. Also note this query was sent via DBDirectClient.

      Simplified Query:

      { query: { arrayField: "To the man who only has a hammer, everything he encounters begins to look like a nail. anything" }, orderby: { : -1 } }
      

      From generated C++ code (which is a bit convoluted):

      struct GeneratedQuery980 {
            static Query getQuery() { return sortedQuery; }
            static BSONObj* getProjection() { return NULL; }
            static int nToSkip() { return 10; }
            static int nToLimit() { return -1; }
            static Query& appendSort(Query& query) { return query.sort(fromjson("{\"\":-1}")); }
            static Query query;
            static Query sortedQuery;
      };
      Query GeneratedQuery980::query("{\"arrayField\":'To the man who only has a hammer, everything he encounters begins to look like a nail. anything'}");
      Query GeneratedQuery980::sortedQuery = appendSort(GeneratedQuery980::query);    
      
      ...
      
          template <typename Q>
          struct GeneratedQueryRunner : ClientBase {
              virtual void run(){
                  ::mongo::unittest::ScopedProbe::lastQuery = Q::getQuery();
                  ::mongo::unittest::ScopedProbe::lastLimit = Q::nToLimit();
                  ::mongo::unittest::ScopedProbe::lastSkip = Q::nToSkip();
                  ::mongo::unittest::ScopedProbe::lastProjection = Q::getProjection();
                  ::mongo::unittest::ScopedProbe::lastCount = -1;
                  auto_ptr<DBClientCursor> cursor = _client.query(kNameSpace,
                                                                  Q::getQuery(),
                                                                  Q::nToLimit(),
                                                                  Q::nToSkip(),
                                                                  Q::getProjection());
                  ASSERT(!error());
                  int count = 0;
                  while (cursor->more()) {
                      ++count;
                      cursor->next();
                  }
                  ::mongo::unittest::ScopedProbe::lastCount = count;
              }
          };
      
      ...
      
          class All : public Suite {
          public:
              All() : Suite( "GeneratedQueries" ) { }
              void setupTests() {
                  add< GeneratedQueryRunner<GeneratedQuery980> >();
              }
          } myall;
      

      Output:

      2014-01-19T05:16:14.652-0800 [testsuite] 	 going to run test: GeneratedTests::GeneratedQueryRunner<GeneratedTests::GeneratedQuery980>
      2014-01-19T05:16:14.652-0800 [testsuite] Assertion failure !e.eoo() src/mongo/bson/bsonobjbuilder.h 93
      2014-01-19T05:16:14.663-0800 [testsuite] 0x1497186 0x1456888 0x143e72f 0x9f2763 0x1104acd 0x1105091 0x11025ec 0x10aadbb 0x10ab42f 0x10ad5ce 0x10aa733 0x1218f29 0x1209108 0x1116547 0x111803f 0xf3408d 0xf24150 0x110e56d 0xb3ce41 0x143a4d3 
       ./test(_ZN5mongo15printStackTraceERSo+0x26) [0x1497186]
       ./test(_ZN5mongo10logContextEPKc+0x188) [0x1456888]
       ./test(_ZN5mongo12verifyFailedEPKcS1_j+0xef) [0x143e72f]
       ./test() [0x9f2763]
       ./test(_ZNK5mongo19BtreeKeyGeneratorV120getKeysImplWithArrayESt6vectorIPKcSaIS3_EES1_INS_11BSONElementESaIS6_EERKNS_7BSONObjEPSt3setIS9_NS_10BSONObjCmpESaIS9_EEjSB_+0x59d) [0x1104acd]
       ./test(_ZNK5mongo19BtreeKeyGeneratorV111getKeysImplESt6vectorIPKcSaIS3_EES1_INS_11BSONElementESaIS6_EERKNS_7BSONObjEPSt3setIS9_NS_10BSONObjCmpESaIS9_EE+0x151) [0x1105091]
       ./test(_ZNK5mongo17BtreeKeyGenerator7getKeysERKNS_7BSONObjEPSt3setIS1_NS_10BSONObjCmpESaIS1_EE+0x1cc) [0x11025ec]
       ./test(_ZNK5mongo21SortStageKeyGenerator11getBtreeKeyERKNS_7BSONObjE+0xab) [0x10aadbb]
       ./test(_ZNK5mongo21SortStageKeyGenerator10getSortKeyERKNS_16WorkingSetMemberE+0x2f) [0x10ab42f]
       ./test(_ZN5mongo9SortStage4workEPm+0x38e) [0x10ad5ce]
       ./test(_ZN5mongo9SkipStage4workEPm+0x33) [0x10aa733]
       ./test(_ZN5mongo12PlanExecutor7getNextEPNS_7BSONObjEPNS_7DiskLocE+0xb9) [0x1218f29]
       ./test(_ZN5mongo11newRunQueryERNS_7MessageERNS_12QueryMessageERNS_5CurOpES1_+0x878) [0x1209108]
       ./test(_ZN5mongo16assembleResponseERNS_7MessageERNS_10DbResponseERKNS_11HostAndPortE+0x5e7) [0x1116547]
       ./test(_ZN5mongo14DBDirectClient4callERNS_7MessageES2_bPSs+0x9f) [0x111803f]
       ./test(_ZN5mongo14DBClientCursor4initEv+0x9d) [0xf3408d]
       ./test(_ZN5mongo12DBClientBase5queryERKSsNS_5QueryEiiPKNS_7BSONObjEii+0x270) [0xf24150]
       ./test(_ZN5mongo14DBDirectClient5queryERKSsNS_5QueryEiiPKNS_7BSONObjEii+0x4d) [0x110e56d]
       ./test(_ZN5mongo8unittest5Suite13runTestObjectIN14GeneratedTests20GeneratedQueryRunnerINS3_17GeneratedQuery980EEEEEvv+0x101) [0xb3ce41]
       ./test(_ZN5mongo8unittest5Suite3runERKSsi+0x3a3) [0x143a4d3]
      2014-01-19T05:16:14.663-0800 [testsuite] Assertion failure !e.eoo() src/mongo/bson/bsonobjbuilder.h 93
      2014-01-19T05:16:14.674-0800 [testsuite] 0x1497186 0x1456888 0x143e72f 0x9f2763 0x1104acd 0x1105091 0x11025ec 0x10aadbb 0x10ab42f 0x10ad5ce 0x10aa733 0x1218f29 0x1209108 0x1116547 0x111803f 0xf3408d 0xf24150 0x110e56d 0xb3ce41 0x143a4d3 
       ./test(_ZN5mongo15printStackTraceERSo+0x26) [0x1497186]
       ./test(_ZN5mongo10logContextEPKc+0x188) [0x1456888]
       ./test(_ZN5mongo12verifyFailedEPKcS1_j+0xef) [0x143e72f]
       ./test() [0x9f2763]
       ./test(_ZNK5mongo19BtreeKeyGeneratorV120getKeysImplWithArrayESt6vectorIPKcSaIS3_EES1_INS_11BSONElementESaIS6_EERKNS_7BSONObjEPSt3setIS9_NS_10BSONObjCmpESaIS9_EEjSB_+0x59d) [0x1104acd]
       ./test(_ZNK5mongo19BtreeKeyGeneratorV111getKeysImplESt6vectorIPKcSaIS3_EES1_INS_11BSONElementESaIS6_EERKNS_7BSONObjEPSt3setIS9_NS_10BSONObjCmpESaIS9_EE+0x151) [0x1105091]
       ./test(_ZNK5mongo17BtreeKeyGenerator7getKeysERKNS_7BSONObjEPSt3setIS1_NS_10BSONObjCmpESaIS1_EE+0x1cc) [0x11025ec]
       ./test(_ZNK5mongo21SortStageKeyGenerator11getBtreeKeyERKNS_7BSONObjE+0xab) [0x10aadbb]
       ./test(_ZNK5mongo21SortStageKeyGenerator10getSortKeyERKNS_16WorkingSetMemberE+0x2f) [0x10ab42f]
       ./test(_ZN5mongo9SortStage4workEPm+0x38e) [0x10ad5ce]
       ./test(_ZN5mongo9SkipStage4workEPm+0x33) [0x10aa733]
       ./test(_ZN5mongo12PlanExecutor7getNextEPNS_7BSONObjEPNS_7DiskLocE+0xb9) [0x1218f29]
       ./test(_ZN5mongo11newRunQueryERNS_7MessageERNS_12QueryMessageERNS_5CurOpES1_+0x878) [0x1209108]
       ./test(_ZN5mongo16assembleResponseERNS_7MessageERNS_10DbResponseERKNS_11HostAndPortE+0x5e7) [0x1116547]
       ./test(_ZN5mongo14DBDirectClient4callERNS_7MessageES2_bPSs+0x9f) [0x111803f]
       ./test(_ZN5mongo14DBClientCursor4initEv+0x9d) [0xf3408d]
       ./test(_ZN5mongo12DBClientBase5queryERKSsNS_5QueryEiiPKNS_7BSONObjEii+0x270) [0xf24150]
       ./test(_ZN5mongo14DBDirectClient5queryERKSsNS_5QueryEiiPKNS_7BSONObjEii+0x4d) [0x110e56d]
       ./test(_ZN5mongo8unittest5Suite13runTestObjectIN14GeneratedTests20GeneratedQueryRunnerINS3_17GeneratedQuery980EEEEEvv+0x101) [0xb3ce41]
       ./test(_ZN5mongo8unittest5Suite3runERKSsi+0x3a3) [0x143a4d3]
      2014-01-19T05:16:14.674-0800 [testsuite] Assertion failure !e.eoo() src/mongo/bson/bsonobjbuilder.h 93
      2014-01-19T05:16:14.685-0800 [testsuite] 0x1497186 0x1456888 0x143e72f 0x9f2763 0x1104acd 0x1105091 0x11025ec 0x10aadbb 0x10ab42f 0x10ad5ce 0x10aa733 0x1218f29 0x1209108 0x1116547 0x111803f 0xf3408d 0xf24150 0x110e56d 0xb3ce41 0x143a4d3 
       ./test(_ZN5mongo15printStackTraceERSo+0x26) [0x1497186]
       ./test(_ZN5mongo10logContextEPKc+0x188) [0x1456888]
       ./test(_ZN5mongo12verifyFailedEPKcS1_j+0xef) [0x143e72f]
       ./test() [0x9f2763]
       ./test(_ZNK5mongo19BtreeKeyGeneratorV120getKeysImplWithArrayESt6vectorIPKcSaIS3_EES1_INS_11BSONElementESaIS6_EERKNS_7BSONObjEPSt3setIS9_NS_10BSONObjCmpESaIS9_EEjSB_+0x59d) [0x1104acd]
       ./test(_ZNK5mongo19BtreeKeyGeneratorV111getKeysImplESt6vectorIPKcSaIS3_EES1_INS_11BSONElementESaIS6_EERKNS_7BSONObjEPSt3setIS9_NS_10BSONObjCmpESaIS9_EE+0x151) [0x1105091]
       ./test(_ZNK5mongo17BtreeKeyGenerator7getKeysERKNS_7BSONObjEPSt3setIS1_NS_10BSONObjCmpESaIS1_EE+0x1cc) [0x11025ec]
       ./test(_ZNK5mongo21SortStageKeyGenerator11getBtreeKeyERKNS_7BSONObjE+0xab) [0x10aadbb]
       ./test(_ZNK5mongo21SortStageKeyGenerator10getSortKeyERKNS_16WorkingSetMemberE+0x2f) [0x10ab42f]
       ./test(_ZN5mongo9SortStage4workEPm+0x38e) [0x10ad5ce]
       ./test(_ZN5mongo9SkipStage4workEPm+0x33) [0x10aa733]
       ./test(_ZN5mongo12PlanExecutor7getNextEPNS_7BSONObjEPNS_7DiskLocE+0xb9) [0x1218f29]
       ./test(_ZN5mongo11newRunQueryERNS_7MessageERNS_12QueryMessageERNS_5CurOpES1_+0x878) [0x1209108]
       ./test(_ZN5mongo16assembleResponseERNS_7MessageERNS_10DbResponseERKNS_11HostAndPortE+0x5e7) [0x1116547]
       ./test(_ZN5mongo14DBDirectClient4callERNS_7MessageES2_bPSs+0x9f) [0x111803f]
       ./test(_ZN5mongo14DBClientCursor4initEv+0x9d) [0xf3408d]
       ./test(_ZN5mongo12DBClientBase5queryERKSsNS_5QueryEiiPKNS_7BSONObjEii+0x270) [0xf24150]
       ./test(_ZN5mongo14DBDirectClient5queryERKSsNS_5QueryEiiPKNS_7BSONObjEii+0x4d) [0x110e56d]
       ./test(_ZN5mongo8unittest5Suite13runTestObjectIN14GeneratedTests20GeneratedQueryRunnerINS3_17GeneratedQuery980EEEEEvv+0x101) [0xb3ce41]
       ./test(_ZN5mongo8unittest5Suite3runERKSsi+0x3a3) [0x143a4d3]
      2014-01-19T05:16:14.685-0800 [testsuite] FAIL: GeneratedTests::GeneratedQueryRunner<GeneratedTests::GeneratedQuery980>	Expected: !error() @src/mongo/dbtests/QA401.cpp:83
      

            Assignee:
            benety.goh@mongodb.com Benety Goh
            Reporter:
            benjamin.becker Ben Becker
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved: