Skip to content

Commit 441b3c1

Browse files
committed
SERVER-8192 rewritten V1 btree key generation
1 parent ce04ab3 commit 441b3c1

File tree

6 files changed

+487
-177
lines changed

6 files changed

+487
-177
lines changed

jstests/core/insert_illegal_doc.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,19 +8,19 @@ var res;
88
// test upsert
99
res = coll.update({}, {_id: 1, a: [1, 2, 3], b: [4, 5, 6]}, true);
1010
assert.writeError(res);
11-
assert.eq(res.getWriteError().code, 10088);
11+
assert.eq(res.getWriteError().code, 17485);
1212
assert.eq(0, coll.find().itcount(), "should not be a doc");
1313

1414
// test insert
1515
res = coll.insert({_id: 1, a: [1, 2, 3], b: [4, 5, 6]});
1616
assert.writeError(res);
17-
assert.eq(res.getWriteError().code, 10088);
17+
assert.eq(res.getWriteError().code, 17485);
1818
assert.eq(0, coll.find().itcount(), "should not be a doc");
1919

2020
// test update
2121
res = coll.insert({_id: 1});
2222
assert.writeOK(res, "insert failed");
2323
res = coll.update({_id: 1}, {$set : { a : [1, 2, 3], b: [4, 5, 6]}});
2424
assert.writeError(res);
25-
assert.eq(res.getWriteError().code, 10088);
25+
assert.eq(res.getWriteError().code, 17485);
2626
assert.eq(undefined, coll.findOne().a, "update should have failed");

src/mongo/db/exec/sort.cpp

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -172,21 +172,9 @@ namespace mongo {
172172
BSONObjCmp patternCmp(_btreeObj);
173173
BSONObjSet keys(patternCmp);
174174

175-
try {
176-
_keyGen->getKeys(memberObj, &keys);
177-
}
178-
catch (const UserException& e) {
179-
// Probably a parallel array.
180-
if (BtreeKeyGenerator::ParallelArraysCode == e.getCode()) {
181-
return Status(ErrorCodes::BadValue,
182-
"cannot sort with keys that are parallel arrays");
183-
}
184-
else {
185-
return e.toStatus();
186-
}
187-
}
188-
catch (...) {
189-
return Status(ErrorCodes::InternalError, "unknown error during sort key generation");
175+
Status keygenStatus = _keyGen->getKeys(memberObj, &keys);
176+
if (!keygenStatus.isOK()) {
177+
return keygenStatus;
190178
}
191179

192180
// Key generator isn't sparse so we should at least get an all-null key.

src/mongo/db/index/btree_access_method.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,10 @@ namespace mongo {
6666
}
6767

6868
void BtreeAccessMethod::getKeys(const BSONObj& obj, BSONObjSet* keys) {
69-
_keyGenerator->getKeys(obj, keys);
69+
Status s = _keyGenerator->getKeys(obj, keys);
70+
if (!s.isOK()) {
71+
uasserted(17485, s.toString());
72+
}
7073
}
7174

7275
} // namespace mongo

0 commit comments

Comments
 (0)