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");
        }
Exemple #3
0
 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));
 }
Exemple #6
0
 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");
 }
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 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); 
 }
Exemple #12
0
 public SynodConfiguration(ISynodConfigurationProvider configProvider)
 {
     LocalNode = new Node(configProvider.LocalNode, ReceiverIdentifier.CreateIdentity());
     synod     = new HashSet <Uri>(configProvider.Synod);
 }