Example #1
0
        public ProtocolServices(
            Grain gr,
            ILoggerFactory loggerFactory,
            IMultiClusterRegistrationStrategy strategy,
            SerializationManager serializationManager,
            IInternalGrainFactory grainFactory,
            IOptions <SiloOptions> siloOptions,
            IOptions <MultiClusterOptions> multiClusterOptions,
            IMultiClusterOracle multiClusterOracle)
        {
            this.grain                = gr;
            this.log                  = loggerFactory.CreateLogger <ProtocolServices>();
            this.grainFactory         = grainFactory;
            this.RegistrationStrategy = strategy;
            this.SerializationManager = serializationManager;
            this.multiClusterOracle   = multiClusterOracle;
            this.siloOptions          = siloOptions.Value;
            this.multiClusterOptions  = multiClusterOptions.Value;

            if (!this.multiClusterOptions.HasMultiClusterNetwork)
            {
                // we are creating a default multi-cluster configuration containing exactly one cluster, this one.
                this.pseudoMultiClusterConfiguration = PseudoMultiClusterConfigurations.FindOrCreate(
                    this.siloOptions.ClusterId,
                    CreatePseudoConfig);
            }
        }
 public MultiClusterGossipChannelFactory(IOptions <SiloOptions> siloOptions, IOptions <MultiClusterOptions> multiClusterOptions, IServiceProvider serviceProvider, ILogger <MultiClusterGossipChannelFactory> logger)
 {
     this.siloOptions         = siloOptions.Value;
     this.multiClusterOptions = multiClusterOptions.Value;
     this.serviceProvider     = serviceProvider;
     this.logger = logger;
 }
Example #3
0
 public GatewayInboundConnection(
     ConnectionContext connection,
     ConnectionDelegate middleware,
     IServiceProvider serviceProvider,
     Gateway gateway,
     OverloadDetector overloadDetector,
     MessageFactory messageFactory,
     INetworkingTrace trace,
     ILocalSiloDetails siloDetails,
     IOptions <MultiClusterOptions> multiClusterOptions,
     ConnectionOptions connectionOptions,
     MessageCenter messageCenter,
     ILocalSiloDetails localSiloDetails)
     : base(connection, middleware, messageFactory, serviceProvider, trace)
 {
     this.connectionOptions      = connectionOptions;
     this.gateway                = gateway;
     this.overloadDetector       = overloadDetector;
     this.siloDetails            = siloDetails;
     this.messageCenter          = messageCenter;
     this.multiClusterOptions    = multiClusterOptions.Value;
     this.loadSheddingCounter    = CounterStatistic.FindOrCreate(StatisticNames.GATEWAY_LOAD_SHEDDING);
     this.myAddress              = localSiloDetails.SiloAddress;
     this.MessageReceivedCounter = CounterStatistic.FindOrCreate(StatisticNames.GATEWAY_RECEIVED);
     this.MessageSentCounter     = CounterStatistic.FindOrCreate(StatisticNames.GATEWAY_SENT);
 }
        internal MembershipOracleData(ILocalSiloDetails siloDetails, ILogger log, MultiClusterOptions multiClusterOptions)
        {
            logger                        = log;
            localTable                    = new Dictionary <SiloAddress, MembershipEntry>();
            localTableCopy                = new Dictionary <SiloAddress, SiloStatus>();
            localTableCopyOnlyActive      = new Dictionary <SiloAddress, SiloStatus>();
            localNamesTableCopy           = new Dictionary <SiloAddress, string>();
            localMultiClusterGatewaysCopy = new List <SiloAddress>();
            statusListeners               = new List <ISiloStatusListener>();

            SiloStartTime                = DateTime.UtcNow;
            MyAddress                    = siloDetails.SiloAddress;
            MyHostname                   = siloDetails.DnsHostName;
            MyProxyPort                  = siloDetails.GatewayAddress?.Endpoint?.Port ?? 0;
            SiloName                     = siloDetails.Name;
            this.multiClusterActive      = multiClusterOptions.HasMultiClusterNetwork;
            this.maxMultiClusterGateways = multiClusterOptions.MaxMultiClusterGateways;
            CurrentStatus                = SiloStatus.Created;
            clusterSizeStatistic         = IntValueStatistic.FindOrCreate(StatisticNames.MEMBERSHIP_ACTIVE_CLUSTER_SIZE, () => localTableCopyOnlyActive.Count);
            clusterStatistic             = StringValueStatistic.FindOrCreate(StatisticNames.MEMBERSHIP_ACTIVE_CLUSTER,
                                                                             () =>
            {
                List <string> list = localTableCopyOnlyActive.Keys.Select(addr => addr.ToLongString()).ToList();
                list.Sort();
                return(Utils.EnumerableToString(list));
            });
        }
Example #5
0
        public FabricMembershipOracleTests(ITestOutputHelper output)
        {
            this.Output      = output;
            this.siloDetails = new MockSiloDetails
            {
                Name        = Guid.NewGuid().ToString("N"),
                SiloAddress = SiloAddressUtils.NewLocalSiloAddress(SiloAddress.AllocateNewGeneration())
            };

            this.resolver = new MockResolver();
            var multiClusterOptions = new MultiClusterOptions
            {
                HasMultiClusterNetwork  = true,
                MaxMultiClusterGateways = 2
            };

            this.fabricClusteringOptions = new ServiceFabricClusteringOptions();
            this.unknownSiloMonitor      = new UnknownSiloMonitor(
                new OptionsWrapper <ServiceFabricClusteringOptions>(this.fabricClusteringOptions),
                new TestOutputLogger <UnknownSiloMonitor>(this.Output));
            this.oracle = new FabricMembershipOracle(
                this.siloDetails,
                this.resolver,
                new NullLogger <FabricMembershipOracle>(),
                this.unknownSiloMonitor,
                Options.Create(multiClusterOptions));
        }
Example #6
0
 /// <summary>
 /// Initializes a new instance of the <see cref="FabricMembershipOracle"/> class.
 /// </summary>
 /// <param name="localSiloDetails">The silo which this instance will provide membership information for.</param>
 /// <param name="fabricServiceSiloResolver">The service resolver which this instance will use.</param>
 /// <param name="logger">The logger.</param>
 /// <param name="unknownSiloMonitor">The unknown silo monitor.</param>
 /// <param name="multiClusterOptions">Multi-cluster configuration parameters.</param>
 public FabricMembershipOracle(
     ILocalSiloDetails localSiloDetails,
     IFabricServiceSiloResolver fabricServiceSiloResolver,
     ILogger <FabricMembershipOracle> logger,
     UnknownSiloMonitor unknownSiloMonitor,
     IOptions <MultiClusterOptions> multiClusterOptions)
 {
     this.log = logger;
     this.localSiloDetails          = localSiloDetails;
     this.fabricServiceSiloResolver = fabricServiceSiloResolver;
     this.unknownSiloMonitor        = unknownSiloMonitor;
     this.multiClusterOptions       = multiClusterOptions.Value;
     this.silos[this.SiloAddress]   = new SiloEntry(SiloStatus.Created, this.SiloName);
 }
Example #7
0
 public ManagementGrain(
     IOptions <MultiClusterOptions> multiClusterOptions,
     IMultiClusterOracle multiClusterOracle,
     IInternalGrainFactory internalGrainFactory,
     ISiloStatusOracle siloStatusOracle,
     MembershipTableFactory membershipTableFactory,
     GrainTypeManager grainTypeManager,
     IVersionStore versionStore)
 {
     this.multiClusterOptions    = multiClusterOptions.Value;
     this.multiClusterOracle     = multiClusterOracle;
     this.internalGrainFactory   = internalGrainFactory;
     this.siloStatusOracle       = siloStatusOracle;
     this.membershipTableFactory = membershipTableFactory;
     this.grainTypeManager       = grainTypeManager;
     this.versionStore           = versionStore;
 }
Example #8
0
 internal GatewayAcceptor(
     MessageCenter msgCtr,
     Gateway gateway,
     IPEndPoint gatewayAddress,
     MessageFactory messageFactory,
     SerializationManager serializationManager,
     ExecutorService executorService,
     ILocalSiloDetails siloDetails,
     IOptions <MultiClusterOptions> multiClusterOptions,
     ILoggerFactory loggerFactory)
     : base(msgCtr, gatewayAddress, SocketDirection.GatewayToClient, messageFactory, serializationManager, executorService, loggerFactory)
 {
     this.gateway               = gateway;
     this.loadSheddingCounter   = CounterStatistic.FindOrCreate(StatisticNames.GATEWAY_LOAD_SHEDDING);
     this.gatewayTrafficCounter = CounterStatistic.FindOrCreate(StatisticNames.GATEWAY_RECEIVED);
     this.siloDetails           = siloDetails;
     this.multiClusterOptions   = multiClusterOptions.Value;
 }
Example #9
0
 public GlobalSingleInstanceActivationMaintainer(
     LocalGrainDirectory router,
     ILogger logger,
     IInternalGrainFactory grainFactory,
     IMultiClusterOracle multiClusterOracle,
     ExecutorService executorService,
     ILocalSiloDetails siloDetails,
     IOptions <MultiClusterOptions> multiClusterOptions,
     ILoggerFactory loggerFactory)
     : base(executorService, loggerFactory)
 {
     this.router              = router;
     this.logger              = logger;
     this.grainFactory        = grainFactory;
     this.multiClusterOracle  = multiClusterOracle;
     this.siloDetails         = siloDetails;
     this.multiClusterOptions = multiClusterOptions.Value;
     this.period              = multiClusterOptions.Value.GlobalSingleInstanceRetryInterval;
     logger.Debug("GSIP:M GlobalSingleInstanceActivationMaintainer Started, Period = {0}", period);
 }