mirror of https://gitee.com/bigwinds/arangodb
Merge branch 'devel' of https://github.com/arangodb/arangodb into devel
This commit is contained in:
commit
ca580170bf
|
@ -445,6 +445,8 @@ std::unique_ptr<GeneralClientConnection> AgencyCommManager::acquire(
|
||||||
} else {
|
} else {
|
||||||
if(endpoint.empty()) {
|
if(endpoint.empty()) {
|
||||||
endpoint = _endpoints.front();
|
endpoint = _endpoints.front();
|
||||||
|
LOG_TOPIC(DEBUG, Logger::AGENCYCOMM) << "Using endpoint " << endpoint
|
||||||
|
<< " for agency communication, full selection:";
|
||||||
}
|
}
|
||||||
if (!_unusedConnections[endpoint].empty()) {
|
if (!_unusedConnections[endpoint].empty()) {
|
||||||
connection.reset(_unusedConnections[endpoint].back().release());
|
connection.reset(_unusedConnections[endpoint].back().release());
|
||||||
|
@ -1214,14 +1216,31 @@ AgencyCommResult AgencyComm::sendWithFailover(
|
||||||
std::chrono::duration<double>(timeout);
|
std::chrono::duration<double>(timeout);
|
||||||
double conTimeout = 1.0;
|
double conTimeout = 1.0;
|
||||||
|
|
||||||
for (uint64_t tries = 0; tries < MAX_TRIES; ++tries) {
|
int tries = 0;
|
||||||
|
while (true) { // will be left by timeout eventually
|
||||||
|
|
||||||
// Raise waits to a maximum 10 seconds
|
// Raise waits to a maximum 10 seconds
|
||||||
auto waitUntil = std::chrono::steady_clock::now() + waitInterval;
|
auto waitUntil = std::chrono::steady_clock::now() + waitInterval;
|
||||||
if (waitInterval.count() < 5.0) {
|
|
||||||
waitInterval *= 2;
|
// timeout exit startegy
|
||||||
|
if (std::chrono::steady_clock::now() < timeOut) {
|
||||||
|
if (tries > 0) {
|
||||||
|
std::this_thread::sleep_for(waitUntil-std::chrono::steady_clock::now());
|
||||||
|
if (waitInterval.count() < 5.0) {
|
||||||
|
waitInterval *= 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
LOG_TOPIC(DEBUG, Logger::AGENCYCOMM)
|
||||||
|
<< "Unsuccessful AgencyComm: Timeout"
|
||||||
|
<< "errorCode: " << result.errorCode()
|
||||||
|
<< " errorMessage: " << result.errorMessage()
|
||||||
|
<< " errorDetails: " << result.errorDetails();
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
++tries;
|
||||||
|
|
||||||
if (connection == nullptr) {
|
if (connection == nullptr) {
|
||||||
AgencyCommResult result(400, "No endpoints for agency found.");
|
AgencyCommResult result(400, "No endpoints for agency found.");
|
||||||
LOG_TOPIC(ERR, Logger::AGENCYCOMM) << result._message;
|
LOG_TOPIC(ERR, Logger::AGENCYCOMM) << result._message;
|
||||||
|
@ -1280,19 +1299,6 @@ AgencyCommResult AgencyComm::sendWithFailover(
|
||||||
AgencyCommManager::MANAGER->failed(std::move(connection), endpoint);
|
AgencyCommManager::MANAGER->failed(std::move(connection), endpoint);
|
||||||
endpoint.clear();
|
endpoint.clear();
|
||||||
connection = AgencyCommManager::MANAGER->acquire(endpoint);
|
connection = AgencyCommManager::MANAGER->acquire(endpoint);
|
||||||
|
|
||||||
// timeout exit startegy
|
|
||||||
if (std::chrono::steady_clock::now() < timeOut) {
|
|
||||||
std::this_thread::sleep_for(waitUntil-std::chrono::steady_clock::now());
|
|
||||||
} else {
|
|
||||||
LOG_TOPIC(DEBUG, Logger::AGENCYCOMM)
|
|
||||||
<< "Unsuccessful AgencyComm: Timeout"
|
|
||||||
<< "errorCode: " << result.errorCode()
|
|
||||||
<< " errorMessage: " << result.errorMessage()
|
|
||||||
<< " errorDetails: " << result.errorDetails();
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// other error
|
// other error
|
||||||
|
|
|
@ -475,7 +475,6 @@ class AgencyComm {
|
||||||
static std::string const AGENCY_URL_PREFIX;
|
static std::string const AGENCY_URL_PREFIX;
|
||||||
static uint64_t const INITIAL_SLEEP_TIME = 5000;
|
static uint64_t const INITIAL_SLEEP_TIME = 5000;
|
||||||
static uint64_t const MAX_SLEEP_TIME = 50000;
|
static uint64_t const MAX_SLEEP_TIME = 50000;
|
||||||
static uint64_t const MAX_TRIES = 3;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
AgencyCommResult sendServerState(double ttl);
|
AgencyCommResult sendServerState(double ttl);
|
||||||
|
|
|
@ -172,7 +172,7 @@ bool GeneralCommTask::handleRequest(std::shared_ptr<RestHandler> handler) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// ok, we need to queue the request
|
// ok, we need to queue the request
|
||||||
LOG_TOPIC(DEBUG, Logger::THREADS) << "too much work, queuing handler";
|
LOG_TOPIC(TRACE, Logger::THREADS) << "too much work, queuing handler";
|
||||||
size_t queue = handler->queue();
|
size_t queue = handler->queue();
|
||||||
uint64_t messageId = handler->messageId();
|
uint64_t messageId = handler->messageId();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue