private void OnOutgoingSendingFailed(OutgoingReplicationHandler instance, Exception e) { using (instance) { instance.Failed -= OnOutgoingSendingFailed; instance.SuccessfulTwoWaysCommunication -= OnOutgoingSendingSucceeded; _outgoing.TryRemove(instance); OutgoingReplicationRemoved?.Invoke(instance); if (_outgoingFailureInfo.TryGetValue(instance.Node, out ConnectionShutdownInfo failureInfo) == false) { return; } UpdateLastEtag(instance); failureInfo.OnError(e); failureInfo.DestinationDbId = instance.DestinationDbId; failureInfo.LastHeartbeatTicks = instance.LastHeartbeatTicks; _reconnectQueue.Add(failureInfo); if (_log.IsInfoEnabled) { _log.Info($"Document replication connection ({instance.Node}) failed, and the connection will be retried later.", e); } ReplicationFailed?.Invoke(instance.Node.ToString(), e); } }
private void OnIncomingReceiveFailed(IncomingReplicationHandler instance, Exception e) { using (instance) { if (_incoming.TryRemove(instance.ConnectionInfo.SourceDatabaseId, out _)) { IncomingReplicationRemoved?.Invoke(instance); } instance.Failed -= OnIncomingReceiveFailed; instance.DocumentsReceived -= OnIncomingReceiveSucceeded; if (_log.IsInfoEnabled) { _log.Info($"Incoming replication handler has thrown an unhandled exception. ({instance.FromToString})", e); } ReplicationFailed?.Invoke(instance.FromToString, e); } }