bool Acceptor::canAccept(const SocketAddress& address) { if (!connectionCounter_) { return true; } uint64_t maxConnections = connectionCounter_->getMaxConnections(); if (maxConnections == 0) { return true; } uint64_t currentConnections = connectionCounter_->getNumConnections(); if (currentConnections < maxConnections) { return true; } if (loadShedConfig_.isWhitelisted(address)) { return true; } // Take care of the connection counts across all acceptors. // Expensive since a lock must be taken to get the counter. const auto activeConnectionCountForLoadShedding = getActiveConnectionCountForLoadShedding(); const auto connectionCountForLoadShedding = getConnectionCountForLoadShedding(); if (activeConnectionCountForLoadShedding < loadShedConfig_.getMaxActiveConnections() && connectionCountForLoadShedding < loadShedConfig_.getMaxConnections()) { return true; } VLOG(4) << address.describe() << " not whitelisted"; return false; }
bool Acceptor::canAccept(const SocketAddress& address) { if (!connectionCounter_) { return true; } const auto totalConnLimit = loadShedConfig_.getMaxConnections(); if (totalConnLimit == 0) { return true; } uint64_t currentConnections = connectionCounter_->getNumConnections(); uint64_t maxConnections = getWorkerMaxConnections(); if (currentConnections < maxConnections) { return true; } if (loadShedConfig_.isWhitelisted(address)) { return true; } // Take care of the connection counts across all acceptors. // Expensive since a lock must be taken to get the counter. // getConnectionCountForLoadShedding() call can be very expensive, // don't call it if you are not going to use the results. const auto totalConnExceeded = totalConnLimit > 0 && getConnectionCountForLoadShedding() >= totalConnLimit; const auto activeConnLimit = loadShedConfig_.getMaxActiveConnections(); // getActiveConnectionCountForLoadShedding() call can be very expensive, // don't call it if you are not going to use the results. const auto activeConnExceeded = !totalConnExceeded && activeConnLimit > 0 && getActiveConnectionCountForLoadShedding() >= activeConnLimit; if (!activeConnExceeded && !totalConnExceeded) { return true; } VLOG(4) << address.describe() << " not whitelisted"; return false; }