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"); }
public RoundBasedRegister(IIntercomMessageHub intercomMessageHub, IBallotGenerator ballotGenerator, ISynodConfiguration synodConfig, LeaseConfiguration leaseConfig, ILogger logger) { this.logger = logger; this.synodConfig = synodConfig; this.leaseConfig = leaseConfig; this.intercomMessageHub = intercomMessageHub; intercomMessageHub.Start(); readBallot = ballotGenerator.Null(); writeBallot = ballotGenerator.Null(); listener = intercomMessageHub.Subscribe(); listener.Where(m => Unsafe.Equals(m.Identity, LeaseReadMessage.MessageIdentity)) .Subscribe(OnReadReceived); listener.Where(m => Unsafe.Equals(m.Identity, LeaseWriteMessage.MessageIdentity)) .Subscribe(OnWriteReceived); ackReadStream = listener.Where(m => Unsafe.Equals(m.Identity, LeaseAckReadMessage.MessageIdentity)); nackReadStream = listener.Where(m => Unsafe.Equals(m.Identity, LeaseNackReadMessage.MessageIdentity)); ackWriteStream = listener.Where(m => Unsafe.Equals(m.Identity, LeaseAckWriteMessage.MessageIdentity)); nackWriteStream = listener.Where(m => Unsafe.Equals(m.Identity, LeaseNackWriteMessage.MessageIdentity)); }
public RoundBasedRegisterTestSetup(IBallotGenerator ballotGenerator, Node localNode, IRoundBasedRegister roundBasedRegister) { BallotGenerator = ballotGenerator; LocalNode = localNode; RoundBasedRegister = roundBasedRegister; }
public RoundBasedRegisterTestSetup(IBallotGenerator ballotGenerator, Node localNode, IRoundBasedRegister roundBasedRegister, TimeSpan maxLeaseTimeSpan) { this.maxLeaseTimeSpan = maxLeaseTimeSpan; BallotGenerator = ballotGenerator; LocalNode = localNode; RoundBasedRegister = roundBasedRegister; }
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 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 LeaseProvider(IRoundBasedRegister register, IBallotGenerator ballotGenerator, LeaseConfiguration config, ISynodConfiguration synodConfig, RendezvousConfiguration rendezvousConfig, ILogger logger) { ValidateConfiguration(config); WaitBeforeNextLeaseIssued(config); localNode = synodConfig.LocalNode; this.logger = logger; this.config = config; this.rendezvousConfig = rendezvousConfig; 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)); }