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
|
||||
|
||||
arangodb::CoordTransactionID coordTransactionID = TRI_NewTickServer();
|
||||
std::unordered_map<std::string, std::string> headers;
|
||||
if (!shardSet.empty()) {
|
||||
arangodb::CoordTransactionID coordTransactionID = TRI_NewTickServer();
|
||||
std::unordered_map<std::string, std::string> headers;
|
||||
|
||||
auto res = cc->syncRequest("", coordTransactionID, "server:" + list.first,
|
||||
RequestType::POST, url, engineInfo.toJson(),
|
||||
headers, 30.0);
|
||||
if (res->status != 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");
|
||||
if (res->errorMessage.length() > 0) {
|
||||
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()) {
|
||||
auto res = cc->syncRequest("", coordTransactionID, "server:" + list.first,
|
||||
RequestType::POST, url, engineInfo.toJson(),
|
||||
headers, 30.0);
|
||||
if (res->status != 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");
|
||||
if (res->errorMessage.length() > 0) {
|
||||
message += std::string(" : ") + res->errorMessage;
|
||||
}
|
||||
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