Avoid setting failure status of local addresses in main thread
This commit is contained in:
parent
67ead730cc
commit
9dc65547ad
|
@ -64,6 +64,15 @@ Future<Void> IFailureMonitor::onFailedFor(Endpoint const& endpoint, double susta
|
|||
return waitForContinuousFailure(this, endpoint, sustainedFailureDuration, slope);
|
||||
}
|
||||
|
||||
SimpleFailureMonitor::SimpleFailureMonitor() : endpointKnownFailed() {
|
||||
// Mark ourselves as avaiable in FailureMonitor
|
||||
const auto& localAddresses = FlowTransport::transport().getLocalAddresses();
|
||||
addressStatus[localAddresses.address] = FailureStatus(false);
|
||||
if (localAddresses.secondaryAddress.present()) {
|
||||
addressStatus[localAddresses.secondaryAddress.get()] = FailureStatus(false);
|
||||
}
|
||||
}
|
||||
|
||||
void SimpleFailureMonitor::setStatus(NetworkAddress const& address, FailureStatus const& status) {
|
||||
|
||||
// if (status.failed)
|
||||
|
|
|
@ -136,7 +136,7 @@ public:
|
|||
|
||||
class SimpleFailureMonitor : public IFailureMonitor {
|
||||
public:
|
||||
SimpleFailureMonitor() : endpointKnownFailed() {}
|
||||
SimpleFailureMonitor();
|
||||
void setStatus(NetworkAddress const& address, FailureStatus const& status);
|
||||
void endpointNotFound(Endpoint const&);
|
||||
virtual void notifyDisconnect(NetworkAddress const&);
|
||||
|
|
|
@ -586,6 +586,7 @@ ACTOR Future<Void> connectionKeeper( Reference<Peer> self,
|
|||
if (firstConnFailedTime.present()) {
|
||||
if (now() - firstConnFailedTime.get() > FLOW_KNOBS->PEER_UNAVAILABLE_FOR_LONG_TIME_TIMEOUT) {
|
||||
TraceEvent(SevWarnAlways, "PeerUnavailableForLongTime", conn ? conn->getDebugID() : UID())
|
||||
.suppressFor(1.0)
|
||||
.detail("PeerAddr", self->destination);
|
||||
firstConnFailedTime = now() - FLOW_KNOBS->PEER_UNAVAILABLE_FOR_LONG_TIME_TIMEOUT/2.0;
|
||||
}
|
||||
|
@ -1446,18 +1447,11 @@ bool FlowTransport::incompatibleOutgoingConnectionsPresent() {
|
|||
}
|
||||
|
||||
void FlowTransport::createInstance(bool isClient, uint64_t transportId) {
|
||||
g_network->setGlobal(INetwork::enFailureMonitor, (flowGlobalType) new SimpleFailureMonitor());
|
||||
g_network->setGlobal(INetwork::enClientFailureMonitor, isClient ? (flowGlobalType)1 : nullptr);
|
||||
g_network->setGlobal(INetwork::enFlowTransport, (flowGlobalType) new FlowTransport(transportId));
|
||||
g_network->setGlobal(INetwork::enNetworkAddressFunc, (flowGlobalType) &FlowTransport::getGlobalLocalAddress);
|
||||
g_network->setGlobal(INetwork::enNetworkAddressesFunc, (flowGlobalType) &FlowTransport::getGlobalLocalAddresses);
|
||||
|
||||
// Mark ourselves as avaiable in FailureMonitor
|
||||
const auto& localAddresses = FlowTransport::transport().getLocalAddresses();
|
||||
IFailureMonitor::failureMonitor().setStatus(localAddresses.address, FailureStatus(false));
|
||||
if (localAddresses.secondaryAddress.present()) {
|
||||
IFailureMonitor::failureMonitor().setStatus(localAddresses.secondaryAddress.get(), FailureStatus(false));
|
||||
}
|
||||
g_network->setGlobal(INetwork::enFailureMonitor, (flowGlobalType) new SimpleFailureMonitor());
|
||||
g_network->setGlobal(INetwork::enClientFailureMonitor, isClient ? (flowGlobalType)1 : nullptr);
|
||||
}
|
||||
|
||||
HealthMonitor* FlowTransport::healthMonitor() {
|
||||
|
|
Loading…
Reference in New Issue