/// <summary> /// Initializes a new instance of the <see cref="TcpCommunicationListener" /> class. /// </summary> /// <param name="server">RingMaster server</param> /// <param name="port">Port where this listener will listen</param> /// <param name="uriPublished">The specific uri to listen on</param> /// <param name="executor">RingMaster request executor</param> /// <param name="instrumentation">Instrumentation consumer</param> /// <param name="protocol">The Marshalling protocol</param> /// <param name="maximumSupportedProtocolVersion">Maximum supported version</param> public TcpCommunicationListener( RingMasterServer server, int port, string uriPublished, IRingMasterRequestExecutor executor, IRingMasterServerInstrumentation instrumentation, ICommunicationProtocol protocol, uint maximumSupportedProtocolVersion) { this.server = server; this.port = port; this.uriPublished = uriPublished; this.instrumentation = instrumentation; this.protocol = protocol; var transportConfig = new SecureTransport.Configuration { UseSecureConnection = false, IsClientCertificateRequired = false, CommunicationProtocolVersion = maximumSupportedProtocolVersion, }; this.transport = new SecureTransport(transportConfig); this.executor = executor; }
/// <summary> /// Initializes a new instance of the <see cref="RingMasterService"/> class. /// </summary> /// <param name="context">Service context</param> /// <param name="ringMasterMetricsFactory">Metrics factory for MDM</param> /// <param name="persistenceMetricsFactory">Metrics factory for persistence</param> public RingMasterService(StatefulServiceContext context, IMetricsFactory ringMasterMetricsFactory, IMetricsFactory persistenceMetricsFactory) : base(context, PersistedDataFactory.CreateStateManager(context)) { var path = System.Reflection.Assembly.GetExecutingAssembly().Location; var builder = new ConfigurationBuilder().SetBasePath(Path.GetDirectoryName(path)).AddJsonFile("appSettings.json"); appSettings = builder.Build(); RingMasterBackendCore.GetSettingFunction = GetSetting; string factoryName = $"{this.Context.ServiceTypeName}-{this.Context.ReplicaId}-{this.Context.NodeContext.NodeName}"; this.zooKeeperServerInstrumentation = new ZooKeeperServerInstrumentation(ringMasterMetricsFactory); this.ringMasterServerInstrumentation = new RingMasterServerInstrumentation(ringMasterMetricsFactory); var ringMasterInstrumentation = new RingMasterBackendInstrumentation(ringMasterMetricsFactory); var persistenceInstrumentation = new ServiceFabricPersistenceInstrumentation(persistenceMetricsFactory); RingMasterBackendCoreInstrumentation.Instance = ringMasterInstrumentation; bool needFixStatDuringLoad = bool.TryParse(GetSetting("WinFabPersistence.FixStatDuringLoad"), out needFixStatDuringLoad) && needFixStatDuringLoad; var persistenceConfiguration = new PersistedDataFactory.Configuration { EnableActiveSecondary = true, FixStatDuringLoad = needFixStatDuringLoad, }; bool useInMemoryPersistence; if (bool.TryParse(GetSetting("InMemoryPersistence"), out useInMemoryPersistence) && useInMemoryPersistence) { this.factory = new InMemoryFactory(); } else { this.factory = new PersistedDataFactory( this.StateManager, factoryName, persistenceConfiguration, persistenceInstrumentation, this.cancellationSource.Token); } this.backend = new RingMasterBackendCore(this.factory); this.factory.SetBackend(this.backend); this.executor = this.backend; }
/// <summary> /// Initializes a new instance of the <see cref="CoreRequestHandler"/> class. /// </summary> /// <param name="executor">Interface to an object that can execute RingMasterRequests</param> /// <param name="initRequest">Init request</param> public CoreRequestHandler(IRingMasterRequestExecutor executor, CommonRequestInit initRequest = null) { this.executor = executor ?? throw new ArgumentNullException(nameof(executor)); this.session = new ClientSession((requestCall, clientSession, responseAction) => { this.executor.ProcessMessage(requestCall.Request, clientSession, responseAction); }); BackendRequestInit backendInitRequest = (initRequest != null) ? new BackendRequestInit(initRequest, null) : new BackendRequestInit(0, Guid.NewGuid().ToString(), null, true, RedirectionPolicy.RedirectPreferred); this.InitResponse = this.executor.ProcessSessionInitialization( new RequestCall { CallId = 0, Request = backendInitRequest, }, this.session); }