Пример #1
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 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");
 }
Пример #4
0
        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>();
        }