1
0
Fork 0

Only create traverserEngines that actually have shards

This commit is contained in:
Michael Hackstein 2016-10-21 11:28:46 +02:00
parent df526c0c0d
commit d3a251ce47
1 changed files with 28 additions and 26 deletions

View File

@ -920,35 +920,37 @@ struct CoordinatorInstanciator : public WalkerWorker<ExecutionNode> {
engineInfo.close(); // base engineInfo.close(); // base
arangodb::CoordTransactionID coordTransactionID = TRI_NewTickServer(); if (!shardSet.empty()) {
std::unordered_map<std::string, std::string> headers; arangodb::CoordTransactionID coordTransactionID = TRI_NewTickServer();
std::unordered_map<std::string, std::string> headers;
auto res = cc->syncRequest("", coordTransactionID, "server:" + list.first, auto res = cc->syncRequest("", coordTransactionID, "server:" + list.first,
RequestType::POST, url, engineInfo.toJson(), RequestType::POST, url, engineInfo.toJson(),
headers, 30.0); headers, 30.0);
if (res->status != CL_COMM_SENT) { if (res->status != CL_COMM_SENT) {
// Note If there was an error on server side we do not have CL_COMM_SENT // Note If there was an error on server side we do not have CL_COMM_SENT
std::string message("could not start all traversal engines"); std::string message("could not start all traversal engines");
if (res->errorMessage.length() > 0) { if (res->errorMessage.length() > 0) {
message += std::string(" : ") + res->errorMessage; message += std::string(" : ") + res->errorMessage;
} }
THROW_ARANGO_EXCEPTION_MESSAGE(
TRI_ERROR_QUERY_COLLECTION_LOCK_FAILED, message);
} else {
// Only if the result was successful we will get here
arangodb::basics::StringBuffer& body = res->result->getBody();
std::shared_ptr<VPackBuilder> builder =
VPackParser::fromJson(body.c_str(), body.length());
VPackSlice resultSlice = builder->slice();
if (!resultSlice.isNumber()) {
THROW_ARANGO_EXCEPTION_MESSAGE( THROW_ARANGO_EXCEPTION_MESSAGE(
TRI_ERROR_INTERNAL, "got unexpected response from engine lock request"); TRI_ERROR_QUERY_COLLECTION_LOCK_FAILED, message);
} else {
// Only if the result was successful we will get here
arangodb::basics::StringBuffer& body = res->result->getBody();
std::shared_ptr<VPackBuilder> builder =
VPackParser::fromJson(body.c_str(), body.length());
VPackSlice resultSlice = builder->slice();
if (!resultSlice.isNumber()) {
THROW_ARANGO_EXCEPTION_MESSAGE(
TRI_ERROR_INTERNAL, "got unexpected response from engine lock request");
}
auto engineId = resultSlice.getNumericValue<traverser::TraverserEngineID>();
TRI_ASSERT(engineId != 0);
traverserEngines.emplace(engineId, shardSet);
en->addEngine(engineId, list.first);
} }
auto engineId = resultSlice.getNumericValue<traverser::TraverserEngineID>();
TRI_ASSERT(engineId != 0);
traverserEngines.emplace(engineId, shardSet);
en->addEngine(engineId, list.first);
} }
} }
} }