public UnitOfWork(ISqlConnectionFactory sqlConnectionFactory, TransactionConfiguration transactionConfiguration) { Ensure.That(sqlConnectionFactory).IsNotNull(); _sqlConnectionFactory = sqlConnectionFactory; _transactionConfiguration = transactionConfiguration; }
public TransactionModule(QueueConfiguration configuration, INetModule net, TransactionConfiguration transactionConfiguration, DistributorHashConfiguration distributorHashConfiguration) { Contract.Requires(net != null); Contract.Requires(transactionConfiguration != null); Contract.Requires(distributorHashConfiguration != null); Contract.Requires(configuration != null); _queueConfiguration = configuration; _transactionPool = new TransactionPool(transactionConfiguration.ElementsCount, net, distributorHashConfiguration); CountReplics = distributorHashConfiguration.CountReplics; _net = net; _queue = GlobalQueue.Queue; }
public DistributorSystem(ServerId localfordb, ServerId localforproxy, DistributorHashConfiguration distributorHashConfiguration, QueueConfiguration queueConfiguration, ConnectionConfiguration connectionConfiguration, DistributorCacheConfiguration cacheConfiguration, NetReceiverConfiguration receiverConfigurationForDb, NetReceiverConfiguration receiverConfigurationForProxy, TransactionConfiguration transactionConfiguration, HashMapConfiguration hashMapConfiguration, AsyncTasksConfiguration pingConfig, AsyncTasksConfiguration checkConfig, ConnectionTimeoutConfiguration connectionTimeoutConfiguration) { Contract.Requires(distributorHashConfiguration != null); Contract.Requires(_queueConfiguration != null); Contract.Requires(connectionConfiguration != null); Contract.Requires(cacheConfiguration != null); Contract.Requires(receiverConfigurationForDb != null); Contract.Requires(receiverConfigurationForProxy != null); Contract.Requires(transactionConfiguration != null); Contract.Requires(localfordb != null); Contract.Requires(localforproxy != null); Contract.Requires(hashMapConfiguration != null); Contract.Requires(pingConfig != null); Contract.Requires(checkConfig != null); _pingConfig = pingConfig; _checkConfig = checkConfig; _connectionTimeoutConfiguration = connectionTimeoutConfiguration; _distributorHashConfiguration = distributorHashConfiguration; _hashMapConfiguration = hashMapConfiguration; _queueConfiguration = queueConfiguration; _connectionConfiguration = connectionConfiguration; _cacheConfiguration = cacheConfiguration; _receiverConfigurationForDb = receiverConfigurationForDb; _receiverConfigurationForProxy = receiverConfigurationForProxy; _transactionConfiguration = transactionConfiguration; _localfordb = localfordb; _localforproxy = localforproxy; }
public DistributorApi(DistributorNetConfiguration netConfiguration, DistributorConfiguration distributorConfiguration, CommonConfiguration commonConfiguration, TimeoutConfiguration timeoutConfiguration) { Contract.Requires(netConfiguration != null); Contract.Requires(distributorConfiguration != null); Contract.Requires(commonConfiguration != null); Contract.Requires(timeoutConfiguration != null); var dbServer = new ServerId(netConfiguration.Host, netConfiguration.PortForStorage); var proxyServer = new ServerId(netConfiguration.Host, netConfiguration.PortForProxy); var distrHash = new DistributorHashConfiguration(distributorConfiguration.CountReplics); var queue = new QueueConfiguration(commonConfiguration.CountThreads, commonConfiguration.QueueSize); var connection = new ConnectionConfiguration(netConfiguration.WcfServiceName, netConfiguration.CountConnectionsToSingleServer); var distrCache = new DistributorCacheConfiguration(distributorConfiguration.DataAliveTime, distributorConfiguration.DataAliveAfterUpdate); var dbNetReceive = new NetReceiverConfiguration(netConfiguration.PortForStorage, netConfiguration.Host, netConfiguration.WcfServiceName); var proxyNetReceive = new NetReceiverConfiguration(netConfiguration.PortForProxy, netConfiguration.Host, netConfiguration.WcfServiceName); var transaction = new TransactionConfiguration(commonConfiguration.CountThreads); var hashMap = new HashMapConfiguration(distributorConfiguration.FileWithHashName, HashMapCreationMode.ReadFromFile, 1, distributorConfiguration.CountReplics, HashFileType.Distributor); var asyncPing = new AsyncTasksConfiguration(distributorConfiguration.PingPeriod); var asyncCheck = new AsyncTasksConfiguration(distributorConfiguration.CheckPeriod); var timeou = new ConnectionTimeoutConfiguration(timeoutConfiguration.OpenTimeout, timeoutConfiguration.SendTimeout); _distributorSystem = new DistributorSystem(dbServer, proxyServer, distrHash, queue, connection, distrCache, dbNetReceive, proxyNetReceive, transaction, hashMap, asyncPing, asyncCheck, timeou); _handler = new DistributorHandler(_distributorSystem); }
/// <summary> /// Obtiene una transacción que permite leer y escribir información /// desde el contexto de datos. /// </summary> /// <param name="configuration"> /// Confiuración de transacción a utilizar. /// </param> /// <returns> /// Una transacción que permite leer y escribir información desde el /// contexto de datos. /// </returns> public ICrudReadWriteTransaction GetTransaction(TransactionConfiguration configuration) { return(new CrudTransaction <T>(configuration)); }
/// <summary> /// Reads data from specified reader into current instance. /// </summary> /// <param name="r">The binary reader.</param> private void ReadCore(IBinaryRawReader r) { // Simple properties _clientMode = r.ReadBooleanNullable(); IncludedEventTypes = r.ReadIntArray(); _metricsExpireTime = r.ReadTimeSpanNullable(); _metricsHistorySize = r.ReadIntNullable(); _metricsLogFrequency = r.ReadTimeSpanNullable(); _metricsUpdateFrequency = r.ReadTimeSpanNullable(); _networkSendRetryCount = r.ReadIntNullable(); _networkSendRetryDelay = r.ReadTimeSpanNullable(); _networkTimeout = r.ReadTimeSpanNullable(); WorkDirectory = r.ReadString(); Localhost = r.ReadString(); _isDaemon = r.ReadBooleanNullable(); _isLateAffinityAssignment = r.ReadBooleanNullable(); _failureDetectionTimeout = r.ReadTimeSpanNullable(); // Cache config var cacheCfgCount = r.ReadInt(); CacheConfiguration = new List <CacheConfiguration>(cacheCfgCount); for (int i = 0; i < cacheCfgCount; i++) { CacheConfiguration.Add(new CacheConfiguration(r)); } // Discovery config DiscoverySpi = r.ReadBoolean() ? new TcpDiscoverySpi(r) : null; // Communication config CommunicationSpi = r.ReadBoolean() ? new TcpCommunicationSpi(r) : null; // Binary config if (r.ReadBoolean()) { BinaryConfiguration = BinaryConfiguration ?? new BinaryConfiguration(); if (r.ReadBoolean()) { BinaryConfiguration.CompactFooter = r.ReadBoolean(); } var typeCount = r.ReadInt(); if (typeCount > 0) { var types = new List <BinaryTypeConfiguration>(typeCount); for (var i = 0; i < typeCount; i++) { types.Add(new BinaryTypeConfiguration { TypeName = r.ReadString(), IsEnum = r.ReadBoolean(), EqualityComparer = BinaryEqualityComparerSerializer.Read(r) }); } BinaryConfiguration.TypeConfigurations = types; } } // User attributes UserAttributes = Enumerable.Range(0, r.ReadInt()) .ToDictionary(x => r.ReadString(), x => r.ReadObject <object>()); // Atomic if (r.ReadBoolean()) { AtomicConfiguration = new AtomicConfiguration { AtomicSequenceReserveSize = r.ReadInt(), Backups = r.ReadInt(), CacheMode = (CacheMode)r.ReadInt() }; } // Tx if (r.ReadBoolean()) { TransactionConfiguration = new TransactionConfiguration { PessimisticTransactionLogSize = r.ReadInt(), DefaultTransactionConcurrency = (TransactionConcurrency)r.ReadInt(), DefaultTransactionIsolation = (TransactionIsolation)r.ReadInt(), DefaultTimeout = TimeSpan.FromMilliseconds(r.ReadLong()), PessimisticTransactionLogLinger = TimeSpan.FromMilliseconds(r.ReadInt()) }; } // Swap SwapSpaceSpi = SwapSpaceSerializer.Read(r); }
/// <summary> /// Inicializa una nueva instancia de la clase /// <see cref="InMemoryCrudTransaction"/>. /// </summary> /// <param name="configuration"> /// Configuración de transacciones a utilizar. /// </param> public InMemoryCrudTransaction(TransactionConfiguration configuration) { Configuration = configuration; }
/// <summary> /// Inicializa una nueva instancia de la clase /// <see cref="CrudTransaction{T}"/>. /// </summary> /// <param name="configuration"> /// Configuración a pasar a las transacciones subyacentes. /// </param> public CrudTransaction(TransactionConfiguration configuration) : base(configuration) { _readTransaction = new CrudReadTransaction <T>(configuration, _context); _writeTransaction = new CrudWriteTransaction <T>(configuration, _context); }
internal CrudWriteTransaction(TransactionConfiguration configuration, T context) : base(configuration, context) { }
/// <summary> /// Inicializa una nueva instancia de la clase /// <see cref="Service"/>, buscando automáticamente la /// configuración de transacciones a utilizar. /// </summary> /// <param name="transactionConfiguration"> /// Configuración a utilizar para las transacciones generadas por este /// servicio. /// </param> public Service(TransactionConfiguration transactionConfiguration) : this(transactionConfiguration, FindT <ITransactionFactory>()) { }
/// <summary> /// Reads data from specified reader into current instance. /// </summary> /// <param name="r">The binary reader.</param> private void ReadCore(BinaryReader r) { // Simple properties _clientMode = r.ReadBooleanNullable(); IncludedEventTypes = r.ReadIntArray(); _metricsExpireTime = r.ReadTimeSpanNullable(); _metricsHistorySize = r.ReadIntNullable(); _metricsLogFrequency = r.ReadTimeSpanNullable(); _metricsUpdateFrequency = r.ReadTimeSpanNullable(); _networkSendRetryCount = r.ReadIntNullable(); _networkSendRetryDelay = r.ReadTimeSpanNullable(); _networkTimeout = r.ReadTimeSpanNullable(); WorkDirectory = r.ReadString(); Localhost = r.ReadString(); _isDaemon = r.ReadBooleanNullable(); _isLateAffinityAssignment = r.ReadBooleanNullable(); _failureDetectionTimeout = r.ReadTimeSpanNullable(); _clientFailureDetectionTimeout = r.ReadTimeSpanNullable(); _longQueryWarningTimeout = r.ReadTimeSpanNullable(); _isActiveOnStart = r.ReadBooleanNullable(); // Thread pools _publicThreadPoolSize = r.ReadIntNullable(); _stripedThreadPoolSize = r.ReadIntNullable(); _serviceThreadPoolSize = r.ReadIntNullable(); _systemThreadPoolSize = r.ReadIntNullable(); _asyncCallbackThreadPoolSize = r.ReadIntNullable(); _managementThreadPoolSize = r.ReadIntNullable(); _dataStreamerThreadPoolSize = r.ReadIntNullable(); _utilityCacheThreadPoolSize = r.ReadIntNullable(); _queryThreadPoolSize = r.ReadIntNullable(); // Cache config var cacheCfgCount = r.ReadInt(); CacheConfiguration = new List <CacheConfiguration>(cacheCfgCount); for (int i = 0; i < cacheCfgCount; i++) { CacheConfiguration.Add(new CacheConfiguration(r)); } // Discovery config DiscoverySpi = r.ReadBoolean() ? new TcpDiscoverySpi(r) : null; // Communication config CommunicationSpi = r.ReadBoolean() ? new TcpCommunicationSpi(r) : null; // Binary config if (r.ReadBoolean()) { BinaryConfiguration = BinaryConfiguration ?? new BinaryConfiguration(); if (r.ReadBoolean()) { BinaryConfiguration.CompactFooter = r.ReadBoolean(); } if (r.ReadBoolean()) { BinaryConfiguration.NameMapper = BinaryBasicNameMapper.SimpleNameInstance; } } // User attributes UserAttributes = Enumerable.Range(0, r.ReadInt()) .ToDictionary(x => r.ReadString(), x => r.ReadObject <object>()); // Atomic if (r.ReadBoolean()) { AtomicConfiguration = new AtomicConfiguration { AtomicSequenceReserveSize = r.ReadInt(), Backups = r.ReadInt(), CacheMode = (CacheMode)r.ReadInt() }; } // Tx if (r.ReadBoolean()) { TransactionConfiguration = new TransactionConfiguration { PessimisticTransactionLogSize = r.ReadInt(), DefaultTransactionConcurrency = (TransactionConcurrency)r.ReadInt(), DefaultTransactionIsolation = (TransactionIsolation)r.ReadInt(), DefaultTimeout = TimeSpan.FromMilliseconds(r.ReadLong()), PessimisticTransactionLogLinger = TimeSpan.FromMilliseconds(r.ReadInt()) }; } // Event storage switch (r.ReadByte()) { case 1: EventStorageSpi = new NoopEventStorageSpi(); break; case 2: EventStorageSpi = MemoryEventStorageSpi.Read(r); break; } if (r.ReadBoolean()) { MemoryConfiguration = new MemoryConfiguration(r); } // SQL if (r.ReadBoolean()) { SqlConnectorConfiguration = new SqlConnectorConfiguration(r); } // Persistence. if (r.ReadBoolean()) { PersistentStoreConfiguration = new PersistentStoreConfiguration(r); } }
/// <summary> /// Agrega una nueva instancia de un servicio de notificación de /// eventos Crud a todas las transacciones de datos. /// </summary> /// <typeparam name="T"> /// Tipo de servicio de notificación a instanciar. /// </typeparam> /// <param name="config"> /// Objeto de configuración de transacciones a configurar. /// </param> /// <returns> /// La misma instancia que <paramref name="config"/>. /// </returns> public static TransactionConfiguration AddNotifyService <T>(this TransactionConfiguration config) where T : ICrudNotifier, new() { return(AddNotifyService(config, new T())); }
/// <summary> /// Construye un nuevo servicio simple utilizando un /// <see cref="EfCoreTransFactory{T}"/> para conectarse a un contexto /// de datos. /// </summary> /// <param name="configuration"> /// Configuración de transacciones a aplicar al nuevo servicio. /// </param> /// <returns> /// Un nuevo servicio con la configuración especificada, utilizando un /// <see cref="EfCoreTransFactory{T}"/> para conectarse a un contexto /// de datos. /// </returns> public static IService BuildService(TransactionConfiguration configuration) { return(new Service(configuration, new EfCoreTransFactory <T>())); }
/// <summary> /// Reads data from specified reader into current instance. /// </summary> /// <param name="r">The binary reader.</param> private void ReadCore(BinaryReader r) { // Simple properties ClientMode = r.ReadBoolean(); IncludedEventTypes = r.ReadIntArray(); MetricsExpireTime = r.ReadLongAsTimespan(); MetricsHistorySize = r.ReadInt(); MetricsLogFrequency = r.ReadLongAsTimespan(); MetricsUpdateFrequency = r.ReadLongAsTimespan(); NetworkSendRetryCount = r.ReadInt(); NetworkSendRetryDelay = r.ReadLongAsTimespan(); NetworkTimeout = r.ReadLongAsTimespan(); WorkDirectory = r.ReadString(); Localhost = r.ReadString(); IsDaemon = r.ReadBoolean(); // Cache config var cacheCfgCount = r.ReadInt(); CacheConfiguration = new List <CacheConfiguration>(cacheCfgCount); for (int i = 0; i < cacheCfgCount; i++) { CacheConfiguration.Add(new CacheConfiguration(r)); } // Discovery config DiscoverySpi = r.ReadBoolean() ? new TcpDiscoverySpi(r) : null; // Binary config if (r.ReadBoolean()) { BinaryConfiguration = BinaryConfiguration ?? new BinaryConfiguration(); BinaryConfiguration.CompactFooter = r.ReadBoolean(); } // User attributes UserAttributes = Enumerable.Range(0, r.ReadInt()) .ToDictionary(x => r.ReadString(), x => r.ReadObject <object>()); // Atomic if (r.ReadBoolean()) { AtomicConfiguration = new AtomicConfiguration { AtomicSequenceReserveSize = r.ReadInt(), Backups = r.ReadInt(), CacheMode = (CacheMode)r.ReadInt() }; } // Tx if (r.ReadBoolean()) { TransactionConfiguration = new TransactionConfiguration { PessimisticTransactionLogSize = r.ReadInt(), DefaultTransactionConcurrency = (TransactionConcurrency)r.ReadInt(), DefaultTransactionIsolation = (TransactionIsolation)r.ReadInt(), DefaultTimeout = TimeSpan.FromMilliseconds(r.ReadLong()), PessimisticTransactionLogLinger = TimeSpan.FromMilliseconds(r.ReadInt()) }; } }
/// <summary> /// Fabrica una transaccion conectada a un almacén volátil sin /// persistencia en la memoria de la aplicación. /// </summary> /// <param name="configuration"> /// Configuración de transacción a utilizar. /// </param> /// <returns> /// Una transacción conectada a un almacén volátil sin persistencia en /// la memoria de la aplicación. /// </returns> public ICrudReadWriteTransaction GetTransaction(TransactionConfiguration configuration) { return(new InMemoryCrudTransaction(configuration)); }
/// <summary> /// Configura la transacción para simular las operaciones sin realizar /// ninguna acción. /// </summary> /// <param name="config"> /// Configuración de transacción sobre la cual aplicar. /// </param> /// <returns> /// La misma instancia que <paramref name="config"/>, permitiendo /// utilizar sintaxis Fluent. /// </returns> public static TransactionConfiguration UseSimulation(this TransactionConfiguration config) { if (_config is { })
/// <summary> /// Inicializa una nueva instancia de la clase /// <see cref="Service"/>, especificando la configuración a utilizar. /// </summary> /// <param name="transactionConfiguration"> /// Configuración a utilizar para las transacciones generadas por este /// servicio. /// </param> /// <param name="factory">Fábrica de transacciones a utilizar.</param> public Service(TransactionConfiguration transactionConfiguration, ITransactionFactory factory) { Configuration = transactionConfiguration ?? throw new ArgumentNullException(nameof(transactionConfiguration)); _factory = factory ?? throw new ArgumentNullException(nameof(factory)); }
/// <summary> /// Agrega un servicio de notificación de eventos Crud a todas las /// transacciones de datos. /// </summary> /// <typeparam name="T"> /// Tipo de servicio de notificación a agregar. /// </typeparam> /// <param name="config"> /// Objeto de configuración de transacciones a configurar. /// </param> /// <param name="crudNotifier"> /// Instancia de un servicio de notificaciones de eventos Crud a /// agregar a las transacciones de datos. /// </param> /// <returns> /// La misma instancia que <paramref name="config"/>. /// </returns> public static TransactionConfiguration AddNotifyService <T>(this TransactionConfiguration config, T crudNotifier) where T : ICrudNotifier { return(config.AddEpilog(crudNotifier.PushInto(_notifiers).NotifyPeers)); }
public void ClientProxy_CrudOperations() { const int distrServer1 = 22206; const int distrServer12 = 22207; const int storageServer = 22208; #region hell var writer = new HashWriter(new HashMapConfiguration("TestClientProxy", HashMapCreationMode.CreateNew, 1, 1, HashFileType.Distributor)); writer.CreateMap(); writer.SetServer(0, "localhost", storageServer, 157); writer.Save(); var distrHash = new DistributorHashConfiguration(1); var queue = new QueueConfiguration(1, 100); var connection = new ConnectionConfiguration("testService", 10); var distrCache = new DistributorCacheConfiguration(TimeSpan.FromMilliseconds(10000), TimeSpan.FromMilliseconds(1000000)); var netReceive1 = new NetReceiverConfiguration(distrServer1, "localhost", "testService"); var netReceive12 = new NetReceiverConfiguration(distrServer12, "localhost", "testService"); var trans = new TransactionConfiguration(1); var hashMap = new HashMapConfiguration("TestClientProxy", HashMapCreationMode.ReadFromFile, 1, 1, HashFileType.Writer); var async = new AsyncTasksConfiguration(TimeSpan.FromSeconds(10)); var distr = new DistributorSystem(new ServerId("localhost", distrServer1), new ServerId("localhost", distrServer12), distrHash, queue, connection, distrCache, netReceive1, netReceive12, trans, new HashMapConfiguration("TestClientProxy", HashMapCreationMode.ReadFromFile, 1, 1, HashFileType.Distributor), async, async, new ConnectionTimeoutConfiguration(Consts.OpenTimeout, Consts.SendTimeout)); var netReceivedb = new NetReceiverConfiguration(storageServer, "localhost", "testService"); var restore = new RestoreModuleConfiguration(4, TimeSpan.FromMinutes(1)); var storage = new WriterSystem(new ServerId("localhost", storageServer), queue, netReceivedb, new NetReceiverConfiguration(1, "fake", "fake"), hashMap, connection, restore, restore, new ConnectionTimeoutConfiguration(Consts.OpenTimeout, Consts.SendTimeout), new RestoreModuleConfiguration(-1, TimeSpan.FromHours(1), false, TimeSpan.FromHours(1))); #endregion distr.Build(); distr.Start(); _proxy.Int.SayIAmHere("localhost", distrServer12); storage.Build(); storage.DbModule.AddDbModule(new TestDbInMemory()); storage.Start(); const int count = 50; for (int i = 0; i < count; i++) { var state = _proxy.Int.CreateSync(i, i); Assert.AreEqual(RequestState.Complete, state.State); } for (int i = 0; i < count; i++) { RequestDescription description; var read = _proxy.Int.Read(i, out description); Assert.AreEqual(i, read); Assert.AreEqual(RequestState.Complete, description.State); } for (int i = 0; i < count; i++) { var state = _proxy.Int.DeleteSync(i); Assert.AreEqual(RequestState.Complete, state.State); } for (int i = 0; i < count; i++) { RequestDescription description; _proxy.Int.Read(i, out description); Assert.AreEqual(RequestState.DataNotFound, description.State); } distr.Dispose(); storage.Dispose(); }
/// <summary> /// Inicializa una nueva instancia de la clase /// <see cref="CrudWriteTransaction{T}"/>. /// </summary> /// <param name="configuration"> /// Configuración a utilizar para la transacción. /// </param> public CrudWriteTransaction(TransactionConfiguration configuration) : base(configuration) { }
/// <summary> /// Inicializa una nueva instancia de la clase /// <see cref="CrudReadTransaction{T}"/>. /// </summary> /// <param name="configuration"> /// Configuración a utilizar para la transacción. /// </param> public CrudReadTransaction(TransactionConfiguration configuration) : base(configuration) { }