1
0
Fork 0

Merge branch 'devel' of https://github.com/arangodb/arangodb into devel

This commit is contained in:
jsteemann 2017-04-28 14:28:54 +02:00
commit a2db9ad886
3 changed files with 87 additions and 54 deletions

View File

@ -624,67 +624,71 @@ void RocksDBRestReplicationHandler::handleCommandLoggerFollow() {
builder.close();
auto data = builder.slice();
if (result.ok()) {
bool const checkMore =
(result.maxTick() > 0 && result.maxTick() < latestSequenceNumber());
if (result.fail()) {
generateError(rest::ResponseCode::SERVER_ERROR, result.errorNumber(), result.errorMessage());
return;
}
// generate the result
size_t length = data.length();
bool const checkMore =
(result.maxTick() > 0 && result.maxTick() < latestSequenceNumber());
if (length == 0) {
resetResponse(rest::ResponseCode::NO_CONTENT);
} else {
resetResponse(rest::ResponseCode::OK);
}
// generate the result
size_t length = data.length();
// transfer ownership of the buffer contents
_response->setContentType(rest::ContentType::DUMP);
if (length == 0) {
resetResponse(rest::ResponseCode::NO_CONTENT);
} else {
resetResponse(rest::ResponseCode::OK);
}
// set headers
_response->setHeaderNC(TRI_REPLICATION_HEADER_CHECKMORE,
checkMore ? "true" : "false");
_response->setHeaderNC(
TRI_REPLICATION_HEADER_LASTINCLUDED,
StringUtils::itoa((length == 0) ? 0 : result.maxTick()));
_response->setHeaderNC(TRI_REPLICATION_HEADER_LASTTICK,
StringUtils::itoa(latestSequenceNumber()));
_response->setHeaderNC(TRI_REPLICATION_HEADER_ACTIVE, "true");
_response->setHeaderNC(TRI_REPLICATION_HEADER_FROMPRESENT,
result.fromTickIncluded() ? "true" : "false");
// transfer ownership of the buffer contents
_response->setContentType(rest::ContentType::DUMP);
if (length > 0) {
if (useVpp) {
auto iter = arangodb::velocypack::ArrayIterator(data);
auto opts = arangodb::velocypack::Options::Defaults;
for (auto message : iter) {
_response->addPayload(VPackSlice(message), &opts, true);
}
} else {
HttpResponse* httpResponse =
dynamic_cast<HttpResponse*>(_response.get());
// set headers
_response->setHeaderNC(TRI_REPLICATION_HEADER_CHECKMORE,
checkMore ? "true" : "false");
_response->setHeaderNC(
TRI_REPLICATION_HEADER_LASTINCLUDED,
StringUtils::itoa((length == 0) ? 0 : result.maxTick()));
_response->setHeaderNC(TRI_REPLICATION_HEADER_LASTTICK,
StringUtils::itoa(latestSequenceNumber()));
_response->setHeaderNC(TRI_REPLICATION_HEADER_ACTIVE, "true");
_response->setHeaderNC(TRI_REPLICATION_HEADER_FROMPRESENT,
result.fromTickIncluded() ? "true" : "false");
if (httpResponse == nullptr) {
THROW_ARANGO_EXCEPTION_MESSAGE(TRI_ERROR_INTERNAL,
"invalid response type");
}
if (length > 0) {
httpResponse->body().appendText(data.toJson());
}
if (length > 0) {
if (useVpp) {
auto iter = arangodb::velocypack::ArrayIterator(data);
auto opts = arangodb::velocypack::Options::Defaults;
for (auto message : iter) {
_response->addPayload(VPackSlice(message), &opts, true);
}
// add client
bool found;
std::string const& value = _request->value("serverId", found);
} else {
HttpResponse* httpResponse =
dynamic_cast<HttpResponse*>(_response.get());
if (found) {
TRI_server_id_t serverId = (TRI_server_id_t)StringUtils::uint64(value);
if (httpResponse == nullptr) {
THROW_ARANGO_EXCEPTION_MESSAGE(TRI_ERROR_INTERNAL,
"invalid response type");
}
if (serverId > 0) {
_vocbase->updateReplicationClient(serverId, result.maxTick());
}
if (length > 0) {
httpResponse->body().appendText(data.toJson());
}
}
// add client
bool found;
std::string const& value = _request->value("serverId", found);
if (found) {
TRI_server_id_t serverId = (TRI_server_id_t)StringUtils::uint64(value);
if (serverId > 0) {
_vocbase->updateReplicationClient(serverId, result.maxTick());
}
}
}
}
////////////////////////////////////////////////////////////////////////////////
@ -695,7 +699,30 @@ void RocksDBRestReplicationHandler::handleCommandLoggerFollow() {
////////////////////////////////////////////////////////////////////////////////
void RocksDBRestReplicationHandler::handleCommandDetermineOpenTransactions() {
generateResult(rest::ResponseCode::OK, VelocyPackHelper::EmptyArrayValue());
bool useVpp = false;
if (_request->transportType() == Endpoint::TransportType::VPP) {
useVpp = true;
}
//_response->setHeaderNC(TRI_REPLICATION_HEADER_LASTTICK, StringUtils::itoa(dump._lastFoundTick));
_response->setHeaderNC(TRI_REPLICATION_HEADER_LASTTICK, "0");
_response->setContentType(rest::ContentType::DUMP);
//_response->setHeaderNC(TRI_REPLICATION_HEADER_FROMPRESENT, dump._fromTickIncluded ? "true" : "false");
_response->setHeaderNC(TRI_REPLICATION_HEADER_FROMPRESENT, "true");
VPackSlice slice = VelocyPackHelper::EmptyArrayValue();
if (useVpp) {
_response->addPayload(slice, &VPackOptions::Defaults, false);
} else {
HttpResponse* httpResponse =
dynamic_cast<HttpResponse*>(_response.get());
if (httpResponse == nullptr) {
THROW_ARANGO_EXCEPTION_MESSAGE(TRI_ERROR_INTERNAL,
"invalid response type");
}
httpResponse->body().appendText(slice.toJson());
}
_response->setResponseCode(rest::ResponseCode::OK);
}
////////////////////////////////////////////////////////////////////////////////

View File

@ -66,7 +66,9 @@ function dumpTestSuite () {
assertEqual(2, c.type()); // document
assertTrue(p.waitForSync);
assertFalse(p.isVolatile);
assertEqual(256, p.indexBuckets);
if (db._engine().name === "mmfiles") {
assertEqual(256, p.indexBuckets);
}
assertEqual(1, c.getIndexes().length); // just primary index
assertEqual("primary", c.getIndexes()[0].type);
@ -139,7 +141,9 @@ function dumpTestSuite () {
assertEqual(2, c.type()); // document
assertFalse(p.waitForSync);
assertFalse(p.isVolatile);
assertEqual(16, p.indexBuckets);
if (db._engine().name === "mmfiles") {
assertEqual(16, p.indexBuckets);
}
assertEqual(1, c.getIndexes().length); // just primary index
assertEqual("primary", c.getIndexes()[0].type);

View File

@ -175,7 +175,7 @@ function ReplicationSuite() {
}
var slaveState = replication.applier.state();
if (slaveState.state.lastError.errorNum > 0) {
console.log("slave has errored:", JSON.stringify(slaveState.state.lastError));
break;
@ -327,7 +327,9 @@ function ReplicationSuite() {
},
function(state) {
var idx = db._collection(cn).getIndexes();
var col = db._collection(cn);
assertNotNull(col, "collection does not exist");
var idx = col.getIndexes();
assertEqual(2, idx.length);
assertEqual("primary", idx[0].type);
assertEqual("hash", idx[1].type);