示例#1
0
        private IServiceProvider BuildServiceProvider <TStorage>(IPhysicalEndPoint <TestAddress> physicalEndPoint,
                                                                 IDateTimeProvider dateTimeProvider,
                                                                 IStoredEntryManager storedEntryManager,
                                                                 IStoredSessionManager storedSessionManager,
                                                                 TStorage coordinationStorage)
            where TStorage : ICoordinationStorage, ISessionStorage
        {
            IServiceCollection services = new ServiceCollection();

            services.AddSingleton <IAddressConversion <TestAddress>, TestAddressSerializer>();
            //services.AddSingleton(physicalEndPoint);
            services.AddSingleton <IPhysicalEndPointMultiplexer <TestAddress> >(p => new PhysicalEndPointMultiplexer <TestAddress>(physicalEndPoint, p.GetService <ILogger <PhysicalEndPointMultiplexer <TestAddress> > >()));
            services.AddSingleton <ICoordinationStorage>(coordinationStorage);
            services.AddSingleton <ISessionStorage>(coordinationStorage);
            services.AddSingleton <ISessionManager, SessionManager>();
            services.AddSingleton <ICoordinationManager, CoordinationManager <TestAddress> >();
            services.AddSingleton(p => Provider.FromServices <ICoordinationManager>(p));
            services.AddSingleton <ISessionProvider, SessionProvider <TestAddress> >();
            services.AddSingleton(dateTimeProvider);
            services.AddSingleton(storedEntryManager);
            services.AddSingleton(storedSessionManager);
            services.AddLogging(options =>
            {
                options.SetMinimumLevel(LogLevel.Trace);
                options.AddDebug();
            });
            return(services.BuildServiceProvider());
        }
示例#2
0
        public CoordinationLockManager(ICoordinationSessionOwner sessionOwner,
                                       ISessionManager sessionManager,
                                       CoordinationEntryCache cache,
                                       ICoordinationStorage storage,
                                       IStoredEntryManager storedEntryManager,
                                       ICoordinationWaitManager waitManager,
                                       ICoordinationExchangeManager exchangeManager,
                                       ILogger <CoordinationLockManager> logger = null)
        {
            if (cache == null)
            {
                throw new ArgumentNullException(nameof(cache));
            }

            if (storage == null)
            {
                throw new ArgumentNullException(nameof(storage));
            }

            if (storedEntryManager == null)
            {
                throw new ArgumentNullException(nameof(storedEntryManager));
            }

            if (waitManager == null)
            {
                throw new ArgumentNullException(nameof(waitManager));
            }

            if (exchangeManager == null)
            {
                throw new ArgumentNullException(nameof(exchangeManager));
            }

            if (sessionOwner == null)
            {
                throw new ArgumentNullException(nameof(sessionOwner));
            }

            if (sessionManager == null)
            {
                throw new ArgumentNullException(nameof(sessionManager));
            }

            _sessionOwner       = sessionOwner;
            _sessionManager     = sessionManager;
            _cache              = cache;
            _storage            = storage;
            _storedEntryManager = storedEntryManager;
            _waitManager        = waitManager;
            _exchangeManager    = exchangeManager;
            _logger             = logger;

            _sessionTerminationSource = new DisposableAsyncLazy <TaskCancellationTokenSource>(
                factory: BuildSessionTerminationSourceAsync,
                disposal: DestroySessionTerminationSourceAsync,
                DisposableAsyncLazyOptions.Autostart | DisposableAsyncLazyOptions.ExecuteOnCallingThread);
        }
示例#3
0
        public CoordinationWaitManager(ICoordinationSessionOwner sessionOwner,
                                       ICoordinationStorage storage,
                                       IStoredEntryManager storedEntryManager,
                                       ISessionManager sessionManager,
                                       ICoordinationExchangeManager exchangeManager,
                                       ILockWaitDirectory lockWaitDirectory,
                                       ILogger <CoordinationWaitManager> logger = null)
        {
            if (sessionOwner == null)
            {
                throw new ArgumentNullException(nameof(sessionOwner));
            }

            if (storage == null)
            {
                throw new ArgumentNullException(nameof(storage));
            }

            if (storedEntryManager == null)
            {
                throw new ArgumentNullException(nameof(storedEntryManager));
            }

            if (sessionManager == null)
            {
                throw new ArgumentNullException(nameof(sessionManager));
            }

            if (exchangeManager == null)
            {
                throw new ArgumentNullException(nameof(exchangeManager));
            }

            if (lockWaitDirectory == null)
            {
                throw new ArgumentNullException(nameof(lockWaitDirectory));
            }

            _sessionOwner       = sessionOwner;
            _storage            = storage;
            _storedEntryManager = storedEntryManager;
            _sessionManager     = sessionManager;
            _exchangeManager    = exchangeManager;
            _lockWaitDirectory  = lockWaitDirectory;
            _logger             = logger;
        }
        public CoordinationStorage(IFilterableDatabase database,
                                   IStoredSessionManager storedSessionManager,
                                   IStoredEntryManager storedEntryManager)
        {
            if (database == null)
            {
                throw new ArgumentNullException(nameof(database));
            }

            if (storedSessionManager == null)
            {
                throw new ArgumentNullException(nameof(storedSessionManager));
            }

            if (storedEntryManager == null)
            {
                throw new ArgumentNullException(nameof(storedEntryManager));
            }

            _database             = database;
            _storedSessionManager = storedSessionManager;
            _storedEntryManager   = storedEntryManager;
        }
        public CoordinationManager(IServiceScope serviceScope,
                                   ICoordinationStorage storage,
                                   IStoredEntryManager storedEntryManager,
                                   ISessionManager sessionManager,
                                   ICoordinationSessionOwner sessionOwner,
                                   IDateTimeProvider dateTimeProvider,
                                   CoordinationEntryCache cache,
                                   ICoordinationLockManager lockManager,
                                   IOptions <CoordinationManagerOptions> optionsAccessor,
                                   ILogger <CoordinationManager <TAddress> > logger = null)
        {
            if (serviceScope == null)
            {
                throw new ArgumentNullException(nameof(serviceScope));
            }

            if (storage == null)
            {
                throw new ArgumentNullException(nameof(storage));
            }

            if (storedEntryManager == null)
            {
                throw new ArgumentNullException(nameof(storedEntryManager));
            }

            if (sessionManager == null)
            {
                throw new ArgumentNullException(nameof(sessionManager));
            }

            if (sessionOwner == null)
            {
                throw new ArgumentNullException(nameof(sessionOwner));
            }

            if (dateTimeProvider == null)
            {
                throw new ArgumentNullException(nameof(dateTimeProvider));
            }

            if (cache == null)
            {
                throw new ArgumentNullException(nameof(cache));
            }

            if (lockManager == null)
            {
                throw new ArgumentNullException(nameof(lockManager));
            }

            if (optionsAccessor == null)
            {
                throw new ArgumentNullException(nameof(optionsAccessor));
            }

            _serviceScope       = serviceScope;
            _storage            = storage;
            _storedEntryManager = storedEntryManager;
            _sessionManager     = sessionManager;
            _sessionOwner       = sessionOwner;
            _dateTimeProvider   = dateTimeProvider;
            _cache       = cache;
            _lockManager = lockManager;
            _logger      = logger;

            _options = optionsAccessor.Value ?? new CoordinationManagerOptions();

            _updateSessionProcess  = new AsyncProcess(UpdateSessionProcess, start: true);
            _sessionCleanupProcess = new AsyncProcess(SessionCleanupProcess, start: true);
        }