1
0
Fork 0

fixed incompatible replication API responses

This commit is contained in:
Jan Steemann 2016-09-19 12:32:29 +02:00
parent fb15364c2a
commit 19f667c1d6
2 changed files with 29 additions and 22 deletions

View File

@ -980,9 +980,9 @@ void RestReplicationHandler::handleCommandLoggerFollow() {
// generate the result
size_t length = 0;
if (useVpp) {
length = TRI_LengthStringBuffer(dump._buffer);
} else {
length = dump._slices.size();
} else {
length = TRI_LengthStringBuffer(dump._buffer);
}
if (length == 0) {
@ -991,25 +991,25 @@ void RestReplicationHandler::handleCommandLoggerFollow() {
resetResponse(rest::ResponseCode::OK);
}
// transfer ownership of the buffer contents
_response->setContentType(rest::ContentType::DUMP);
// set headers
_response->setHeaderNC(TRI_REPLICATION_HEADER_CHECKMORE,
checkMore ? "true" : "false");
_response->setHeaderNC(TRI_REPLICATION_HEADER_LASTINCLUDED,
StringUtils::itoa(dump._lastFoundTick));
_response->setHeaderNC(TRI_REPLICATION_HEADER_LASTTICK,
StringUtils::itoa(state.lastCommittedTick));
_response->setHeaderNC(TRI_REPLICATION_HEADER_ACTIVE, "true");
_response->setHeaderNC(TRI_REPLICATION_HEADER_FROMPRESENT,
dump._fromTickIncluded ? "true" : "false");
if (length > 0) {
// transfer ownership of the buffer contents
_response->setContentType(rest::ContentType::DUMP);
// set headers
_response->setHeaderNC(TRI_REPLICATION_HEADER_CHECKMORE,
checkMore ? "true" : "false");
_response->setHeaderNC(TRI_REPLICATION_HEADER_LASTINCLUDED,
StringUtils::itoa(dump._lastFoundTick));
_response->setHeaderNC(TRI_REPLICATION_HEADER_LASTTICK,
StringUtils::itoa(state.lastCommittedTick));
_response->setHeaderNC(TRI_REPLICATION_HEADER_ACTIVE, "true");
_response->setHeaderNC(TRI_REPLICATION_HEADER_FROMPRESENT,
dump._fromTickIncluded ? "true" : "false");
if (useVpp) {
for (auto message : dump._slices) {
_response->addPayload(std::move(message), &dump._vpackOptions, true);

View File

@ -328,7 +328,11 @@ static int SliceifyMarker(TRI_replication_dump_t* dump,
TRI_ASSERT(MustReplicateWalMarkerType(marker));
TRI_df_marker_type_t const type = marker->getType();
VPackBuilder builder(&dump->_vpackOptions);
VPackBuffer<uint8_t> buffer;
std::shared_ptr<VPackBuffer<uint8_t>> bufferPtr;
bufferPtr.reset(&buffer, arangodb::velocypack::BufferNonDeleter<uint8_t>());
VPackBuilder builder(bufferPtr, &dump->_vpackOptions);
builder.openObject();
if (!isDump) {
@ -437,6 +441,9 @@ static int SliceifyMarker(TRI_replication_dump_t* dump,
}
builder.close();
dump->_slices.push_back(std::move(buffer));
return TRI_ERROR_NO_ERROR;
}
////////////////////////////////////////////////////////////////////////////////
@ -948,7 +955,7 @@ int TRI_DetermineOpenTransactionsReplication(TRI_replication_dump_t* dump,
dump->_lastFoundTick = lastFoundTick;
// LOG(INFO) << "last tick2: " << lastFoundTick;
(dump->_slices).push_back(std::move(buffer));
dump->_slices.push_back(std::move(buffer));
} catch (arangodb::basics::Exception const& ex) {
res = ex.code();