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()); }
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); }
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); }