mirror of https://gitee.com/bigwinds/arangodb
Only create traverserEngines that actually have shards
This commit is contained in:
parent
df526c0c0d
commit
d3a251ce47
|
@ -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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue