Esempio n. 1
0
        /// <summary>
        /// Cache for <see cref="GrpcCopyClient"/>.
        /// </summary>
        public GrpcCopyClientCache(Context context, GrpcCopyClientCacheConfiguration?configuration = null, IClock?clock = null)
        {
            configuration ??= new GrpcCopyClientCacheConfiguration();
            _configuration = configuration;

            _grpcCopyClientBufferPool = new ByteArrayPool(configuration.GrpcCopyClientConfiguration.ClientBufferSizeBytes);

            switch (_configuration.ResourcePoolVersion)
            {
            case GrpcCopyClientCacheConfiguration.PoolVersion.Disabled:
                break;

            case GrpcCopyClientCacheConfiguration.PoolVersion.V1:
                _resourcePool = new ResourcePool <GrpcCopyClientKey, GrpcCopyClient>(
                    context,
                    _configuration.ResourcePoolConfiguration,
                    (key) => new GrpcCopyClient(key, _configuration.GrpcCopyClientConfiguration, sharedBufferPool: _grpcCopyClientBufferPool),
                    clock);
                break;

            case GrpcCopyClientCacheConfiguration.PoolVersion.V2:
                _resourcePoolV2 = new ResourcePoolV2 <GrpcCopyClientKey, GrpcCopyClient>(
                    context,
                    _configuration.ResourcePoolConfiguration,
                    (key) => new GrpcCopyClient(key, _configuration.GrpcCopyClientConfiguration, sharedBufferPool: _grpcCopyClientBufferPool),
                    clock);
                break;
            }
        }
Esempio n. 2
0
        private static async Task RunTest <TKey, TObject>(Func <OperationContext, ResourcePoolV2 <TKey, TObject>, Task> func, Func <TKey, TObject> factory, ResourcePoolConfiguration?configuration = null, IClock?clock = null)
            where TKey : notnull
            where TObject : IStartupShutdownSlim
        {
            configuration ??= new ResourcePoolConfiguration();

            var tracingContext = new Context(TestGlobal.Logger);
            var context        = new OperationContext(tracingContext);
            var pool           = new ResourcePoolV2 <TKey, TObject>(tracingContext, configuration, factory, clock);

            try
            {
                await func(context, pool);
            }
            finally
            {
                pool.Dispose();
                ValidateCounters(pool.Counter);
            }
        }