mirror of https://gitee.com/bigwinds/arangodb
make syncer more compatible and ignore revs if not present
This commit is contained in:
parent
5b58156309
commit
aa5e02c82d
|
@ -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();
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue