public RoundBasedRegister(IIntercomMessageHub intercomMessageHub, IBallotGenerator ballotGenerator, ISynodConfigurationProvider synodConfigProvider, LeaseConfiguration leaseConfig, ILogger logger) { this.logger = logger; this.synodConfigProvider = synodConfigProvider; this.leaseConfig = leaseConfig; this.intercomMessageHub = intercomMessageHub; readBallot = ballotGenerator.Null(); writeBallot = ballotGenerator.Null(); listener = intercomMessageHub.Subscribe(); listener.Where(m => m.Equals(ConsensusMessages.LeaseRead)).Subscribe(OnReadReceived); listener.Where(m => m.Equals(ConsensusMessages.LeaseWrite)).Subscribe(OnWriteReceived); ackReadStream = listener.Where(m => m.Equals(ConsensusMessages.LeaseAckRead)); nackReadStream = listener.Where(m => m.Equals(ConsensusMessages.LeaseNackRead)); ackWriteStream = listener.Where(m => m.Equals(ConsensusMessages.LeaseAckWrite)); nackWriteStream = listener.Where(m => m.Equals(ConsensusMessages.LeaseNackWrite)); WaitBeforeNextLeaseIssued(leaseConfig); }
public InstanceRoundBasedRegister(Instance instance, IIntercomMessageHub intercomMessageHub, IBallotGenerator ballotGenerator, ISynodConfigurationProvider synodConfigProvider, InstanceLeaseProviderConfiguration leaseConfig, ILogger logger) { this.instance = instance; this.logger = logger; this.synodConfigProvider = synodConfigProvider; this.leaseConfig = leaseConfig; this.intercomMessageHub = intercomMessageHub; readBallot = ballotGenerator.Null(); writeBallot = ballotGenerator.Null(); lastIntercomeMessageTimestamp = DateTime.UtcNow.Ticks; listener = intercomMessageHub.Subscribe(); listener.Where(IsLeaseRead) .Subscribe(OnReadReceived); listener.Where(IsWriteLease) .Subscribe(OnWriteReceived); ackReadStream = listener.Where(IsLeaseAckReadMessage); nackReadStream = listener.Where(IsLeaseNackReadMessage); ackWriteStream = listener.Where(IsLeaseAckWriteMessage); nackWriteStream = listener.Where(IsLeaseNackWriteMessage); logger.Info($"{instance.Identity.GetAnyString()}-InstanceRoundBasedRegister created"); }
private static IEnumerable <NodeHealthInfo> CreateNodeHealthInfoMap(ISynodConfigurationProvider synodConfigProvider) => synodConfigProvider.Synod .Where(node => node.Uri != synodConfigProvider.LocalNode.Uri) .Select(node => new NodeHealthInfo(synodConfigProvider.HeartBeatInterval, synodConfigProvider.MissingHeartBeatsBeforeReconnect, node)) .ToList();
public LeaderElectionMessageFilter(Ballot ballot, Func <IMessage, ILeaseMessage> payload, ISynodConfigurationProvider synodConfigProvider) { this.ballot = ballot; this.synodConfigProvider = synodConfigProvider; this.payload = payload; }
public DelayedInstanceWrap(Instance instance, IIntercomMessageHub intercomMessageHub, IBallotGenerator ballotGenerator, ISynodConfigurationProvider synodConfigProvider, InstanceLeaseProviderConfiguration leaseConfig, ILogger logger) { this.intercomMessageHub = intercomMessageHub; this.ballotGenerator = ballotGenerator; this.synodConfigProvider = synodConfigProvider; this.leaseConfig = leaseConfig; this.logger = logger; Task.Delay(leaseConfig.ClockDrift).ContinueWith(_ => CreateInstanceLeaseProvider(instance)); }
public IntercomMessageHub(ISocketFactory socketFactory, ISynodConfigurationProvider synodConfigProvider, IPerformanceCounterManager <KinoPerformanceCounters> performanceCounterManager, ILogger logger) { this.socketFactory = socketFactory; this.logger = logger; cancellationTokenSource = new CancellationTokenSource(); this.synodConfigProvider = synodConfigProvider; this.performanceCounterManager = performanceCounterManager; inMessageQueue = new BlockingCollection <IMessage>(new ConcurrentQueue <IMessage>()); outMessageQueue = new BlockingCollection <IMessage>(new ConcurrentQueue <IMessage>()); subscriptions = new ConcurrentDictionary <Listener, object>(); nodeHealthInfo = CreateNodeHealthInfoMap(synodConfigProvider); }
public InstanceLeaseProvider(Instance instance, IInstanceRoundBasedRegister register, IBallotGenerator ballotGenerator, InstanceLeaseProviderConfiguration leaseConfig, ISynodConfigurationProvider synodConfigProvider, ILogger logger) { localNode = synodConfigProvider.LocalNode; this.instance = instance; this.register = register; this.ballotGenerator = ballotGenerator; this.leaseConfig = leaseConfig; this.logger = logger; minLeaseValidityPeriod = leaseConfig.MessageRoundtrip.MultiplyBy(2) + leaseConfig.ClockDrift; logger.Info($"{instance.Identity.GetAnyString()}-InstanceLeaseProvider created"); }
public LeaseProvider(IRoundBasedRegister register, IBallotGenerator ballotGenerator, LeaseConfiguration config, ISynodConfigurationProvider synodConfigProvider, ILogger logger) { ValidateConfiguration(config); localNode = synodConfigProvider.LocalNode; this.logger = logger; this.config = config; this.ballotGenerator = ballotGenerator; this.register = register; leaseRenewWaitTimeout = TimeSpan.FromMilliseconds(10); renewGateway = new SemaphoreSlim(1); leaseTimer = new Timer(state => ScheduledReadOrRenewLease(), null, TimeSpan.FromMilliseconds(-1), TimeSpan.FromMilliseconds(-1)); }
public LeaseProvider(IIntercomMessageHub intercomMessageHub, IBallotGenerator ballotGenerator, ISynodConfigurationProvider synodConfigProvider, InstanceLeaseProviderConfiguration leaseConfiguration, LeaseProviderConfiguration leaseProviderConfiguration, IMessageHub messageHub, ILogger logger) { ValidateConfiguration(leaseConfiguration); this.intercomMessageHub = intercomMessageHub; this.ballotGenerator = ballotGenerator; this.synodConfigProvider = synodConfigProvider; this.leaseConfiguration = leaseConfiguration; this.messageHub = messageHub; this.logger = logger; clusterName = leaseProviderConfiguration.ClusterName.GetBytes(); staleInstancesCleanupPeriod = leaseProviderConfiguration.StaleInstancesCleanupPeriod; leaseProviders = new ConcurrentDictionary <Instance, DelayedInstanceWrap>(); }
public RendezvousService(ILeaseProvider leaseProvider, ISynodConfigurationProvider synodConfigProvider, ISocketFactory socketFactory, IMessageSerializer serializer, IRendezvousConfigurationProvider configProvider, IPerformanceCounterManager <KinoPerformanceCounters> performanceCounterManager, ILogger logger) { this.socketFactory = socketFactory; this.logger = logger; this.serializer = serializer; localNode = synodConfigProvider.LocalNode; this.leaseProvider = leaseProvider; this.configProvider = configProvider; this.performanceCounterManager = performanceCounterManager; cancellationTokenSource = new CancellationTokenSource(); pongMessage = Message.Create(new PongMessage()); leaderPayload = serializer.Serialize(new RendezvousNode { BroadcastUri = configProvider.BroadcastUri.ToSocketAddress(), UnicastUri = configProvider.UnicastUri.ToSocketAddress() }); }
public SynodConfiguration(ISynodConfigurationProvider configProvider) { LocalNode = new Node(configProvider.LocalNode, SocketIdentifier.CreateIdentity()); synod = new HashSet<Uri>(configProvider.Synod); }
public SynodConfiguration(ISynodConfigurationProvider configProvider) { LocalNode = new Node(configProvider.LocalNode, ReceiverIdentifier.CreateIdentity()); synod = new HashSet <Uri>(configProvider.Synod); }