1
0
Fork 0

make syncer more compatible and ignore revs if not present

This commit is contained in:
jsteemann 2018-02-19 18:44:08 +01:00
parent 5b58156309
commit aa5e02c82d
2 changed files with 73 additions and 2 deletions

View File

@ -313,14 +313,18 @@ Result TailingSyncer::processDocument(TRI_replication_operation_e type,
// extract "rev"
VPackSlice const rev = doc.get(StaticStrings::RevString);
if (!rev.isString()) {
if (!rev.isNone() && !rev.isString()) {
// _rev is an optional attribute
return Result(TRI_ERROR_REPLICATION_INVALID_RESPONSE, "invalid document revision format");
}
_documentBuilder.clear();
_documentBuilder.openObject();
_documentBuilder.add(StaticStrings::KeyString, key);
_documentBuilder.add(StaticStrings::RevString, rev);
if (rev.isString()) {
// _rev is an optional attribute
_documentBuilder.add(StaticStrings::RevString, rev);
}
_documentBuilder.close();
VPackSlice const old = _documentBuilder.slice();

View File

@ -356,6 +356,73 @@ function BaseTestConfig() {
}
);
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test insert
////////////////////////////////////////////////////////////////////////////////
testInsert: function() {
connectToMaster();
compare(
function(state) {
db._create(cn);
},
function(state) {
for (let i = 0; i < 1000; ++i) {
db[cn].insert({ _key: "test" + i, value: i });
}
state.checksum = collectionChecksum(cn);
state.count = collectionCount(cn);
assertEqual(1000, state.count);
},
function(state) {
},
function(state) {
assertEqual(state.count, collectionCount(cn));
assertEqual(state.checksum, collectionChecksum(cn));
}
);
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test remove
////////////////////////////////////////////////////////////////////////////////
testRemove: function() {
connectToMaster();
compare(
function(state) {
db._create(cn);
},
function(state) {
for (let i = 0; i < 1000; ++i) {
db[cn].insert({ _key: "test" + i, value: i });
}
for (let i = 0; i < 100; ++i) {
db[cn].remove("test" + i);
}
state.checksum = collectionChecksum(cn);
state.count = collectionCount(cn);
assertEqual(900, state.count);
},
function(state) {
},
function(state) {
assertEqual(state.count, collectionCount(cn));
assertEqual(state.checksum, collectionChecksum(cn));
}
);
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test long transaction, blocking