Exemple #1
0
        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);
        }
Exemple #2
0
        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;
 }
Exemple #5
0
 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");
 }
Exemple #8
0
        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>();
        }
Exemple #10
0
        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));
        }
 public RoundBasedRegisterTestSetup(IBallotGenerator ballotGenerator, Node localNode, IRoundBasedRegister roundBasedRegister)
 {
     BallotGenerator = ballotGenerator;
     LocalNode = localNode;
     RoundBasedRegister = roundBasedRegister;
 }