Ejemplo n.º 1
0
        public ShardSetsBase(
            IOptions <TConfiguration> configOptions,
            IDataProviderServiceFactory dataProviderServices,
            DataConnectionConfigurationBase globalConfiguration,
            ILogger <ShardSetsBase <TConfiguration> > logger)
        {
            this._logger = logger;
            if (configOptions?.Value?.ShardSetsConfigInternal is null)
            {
                logger?.LogWarning("The ShardSets collection is missing required data connection information. Your application configuration may be missing a shard configuration section.");
            }
            this._dataProviderServices = dataProviderServices;
            this._globalConfiguration  = globalConfiguration;
            var bdr = ImmutableDictionary.CreateBuilder <string, ShardSet>();

            if (!(configOptions?.Value?.ShardSetsConfigInternal is null))
            {
                foreach (var set in configOptions.Value.ShardSetsConfigInternal)
                {
                    if (set is null)
                    {
                        throw new Exception($"A shard set configuration is not valid; the configuration provider returned null.");
                    }
                    bdr.Add(set.ShardSetName, new ShardSet(this, set));
                }
                this.dtn = bdr.ToImmutable();
            }
Ejemplo n.º 2
0
 internal DataConnectionManager(short shardId, IDataProviderServiceFactory dataProviderServices, IDataConnection connectionConfig, string connectionName, ILogger logger)
 {
     this._logger = logger;
     this._dataProviderServices = dataProviderServices;
     this._connectionName       = connectionName;
     _shardId          = shardId;
     _connectionConfig = connectionConfig;
     _resiliencePolicy = GetConnectionResiliencePolicy();
 }
Ejemplo n.º 3
0
            protected internal override async Task <object> Execute(short shardId, DbConnection connection, DbTransaction transaction, string connectionName, IDataProviderServiceFactory services, ILogger logger, CancellationToken cancellationToken)
            {
                cancellationToken.ThrowIfCancellationRequested();
                using (var cmd = services.NewCommand(_query.Sql, connection))
                {
                    cmd.CommandType = _query.Type;
                    cmd.Transaction = transaction;
                    services.SetParameters(cmd, _query.ParameterNames, _parameters, null);
                    await cmd.ExecuteNonQueryAsync().ConfigureAwait(false);

                    return(null);
                }
            }
Ejemplo n.º 4
0
        internal protected override async Task <object> Execute(short shardId, DbConnection connection, DbTransaction transaction, string connectionName, IDataProviderServiceFactory services, ILogger logger, CancellationToken cancellationToken)
        {
            for (var i = 0; i < _processes.Count; i++)
            {
                var process = _processes[i];
                logger.BatchStepStart(i, connectionName);
                await process.Execute(shardId, connection, transaction, connectionName, services, logger, cancellationToken);

                logger.BatchStepStart(i, connectionName);
            }
            return(null);
        }
Ejemplo n.º 5
0
 abstract internal protected Task <TResult> Execute(short shardId, DbConnection connection, DbTransaction transaction, string connectionName, IDataProviderServiceFactory services, ILogger logger, CancellationToken cancellationToken);
Ejemplo n.º 6
0
        internal protected override async Task <TResult> Execute(short shardId, DbConnection connection, DbTransaction transaction, string connectionName, IDataProviderServiceFactory services, ILogger logger, CancellationToken cancellationToken)
        {
            var result = default(TResult);

            for (var i = 0; i < _processes.Count; i++)
            {
                var process = _processes[i];
                logger.BatchStepStart(i, connectionName);
                var callResult = await process.Execute(shardId, connection, transaction, connectionName, services, logger, cancellationToken);

                logger.BatchStepEnd(i, connectionName);
                if (!EqualityComparer <TResult> .Default.Equals(callResult, default(TResult)))
                {
                    result = callResult;
                }
            }
            return(result);
        }
Ejemplo n.º 7
0
            protected internal override async Task <IList <TRecord> > Execute(short shardId, DbConnection connection, DbTransaction transaction, string connectionName, IDataProviderServiceFactory services, ILogger logger, CancellationToken cancellationToken)
            {
                var result = new List <TRecord>();

                cancellationToken.ThrowIfCancellationRequested();
                using (var cmd = services.NewCommand(_query.Sql, connection))
                {
                    cmd.CommandType = _query.Type;
                    cmd.Transaction = transaction;
                    services.SetParameters(cmd, _query.ParameterNames, _parameters, null);
                    using (var dataReader = await cmd.ExecuteReaderAsync(System.Data.CommandBehavior.Default, cancellationToken).ConfigureAwait(false))
                    {
                        cancellationToken.ThrowIfCancellationRequested();
                        var recordOrd = dataReader.GetOrdinal(_dataColumnName);
                        while (dataReader.Read())
                        {
                            result.Add(dataReader.GetFieldValue <TRecord>(recordOrd));
                        }
                    }
                }
                return(result);
            }
Ejemplo n.º 8
0
            protected internal override async Task <TModel> Execute(short shardId, DbConnection connection, DbTransaction transaction, string connectionName, IDataProviderServiceFactory services, ILogger logger, CancellationToken cancellationToken)
            {
                var result = default(TModel);

                cancellationToken.ThrowIfCancellationRequested();
                using (var cmd = services.NewCommand(_query.Sql, connection))
                {
                    cmd.CommandType = _query.Type;
                    cmd.Transaction = transaction;
                    services.SetParameters(cmd, _query.ParameterNames, _parameters, null);
                    var cmdType = System.Data.CommandBehavior.Default;
                    if (_isTopOne)
                    {
                        cmdType = System.Data.CommandBehavior.SingleRow;
                    }
                    using (var dataReader = await cmd.ExecuteReaderAsync(cmdType, cancellationToken).ConfigureAwait(false))
                    {
                        cancellationToken.ThrowIfCancellationRequested();

                        result = _resultHandler(shardId, _query.Sql, _optionalArgument, dataReader, cmd.Parameters, connectionName, logger);
                    }
                }
                return(result);
            }
Ejemplo n.º 9
0
 protected internal override async Task <ShardKey <TRecord, TChildId> > Execute(short shardId, DbConnection connection, DbTransaction transaction, string connectionName, IDataProviderServiceFactory services, ILogger logger, CancellationToken cancellationToken)
 {
     cancellationToken.ThrowIfCancellationRequested();
     using (var cmd = services.NewCommand(_query.Sql, connection))
     {
         cmd.CommandType = _query.Type;
         cmd.Transaction = transaction;
         services.SetParameters(cmd, _query.ParameterNames, _parameters, null);
         using (var dataReader = await cmd.ExecuteReaderAsync(System.Data.CommandBehavior.SingleRow, cancellationToken).ConfigureAwait(false))
         {
             cancellationToken.ThrowIfCancellationRequested();
             var shardOrd    = -1;
             var shardIdData = shardId;
             if (!(_shardIdColumnName is null))
             {
                 shardOrd = dataReader.GetOrdinal(_shardIdColumnName);
             }
             var recordOrd = dataReader.GetOrdinal(_recordIdColumnName);
             var childOrd  = dataReader.GetOrdinal(_childIdColumnName);
             if (dataReader.Read())
             {
                 if (shardOrd != -1)
                 {
                     shardIdData = dataReader.GetFieldValue <short>(shardOrd);
                 }
                 var recordid = dataReader.GetFieldValue <TRecord>(recordOrd);
                 var childid  = dataReader.GetFieldValue <TChildId>(childOrd);
                 return(new ShardKey <TRecord, TChildId>(_dataOrigin, shardIdData, recordid, childid));
             }
         }
     }
     return(ShardKey <TRecord, TChildId> .Empty);
 }