예제 #1
0
        /// <summary>
        /// <see cref="BobNodeClient"/> constructor
        /// </summary>
        /// <param name="innerClient">Low-level BobNodeClient</param>
        /// <param name="keySerializer">Serializer for <typeparamref name="TKey"/>  (null for default serializer)</param>
        /// <param name="keySerializationPoolSize">Size of the Key serialization pool (null - shared pool, 0 or less - pool is disabled, 1 or greater - custom pool with specified size)</param>
        protected internal BobNodeClient(BobNodeClient innerClient, BobKeySerializer <TKey> keySerializer, int?keySerializationPoolSize)
        {
            if (innerClient == null)
            {
                throw new ArgumentNullException(nameof(innerClient));
            }

            _innerClient = innerClient;

            if (keySerializer != null || BobDefaultKeySerializers.TryGetKeySerializer <TKey>(out keySerializer))
            {
                _keySerializer = keySerializer;
            }
            else
            {
                throw new ArgumentException($"KeySerializer is null and no default key serializer found for key type '{typeof(TKey).Name}'", nameof(keySerializer));
            }

            keySerializationPoolSize = keySerializationPoolSize ?? innerClient.ConnectionParameters.KeySerializationPoolSize;
            if (keySerializationPoolSize == null)
            {
                _keySerializationPool = SharedKeySerializationArrayPools.GetOrCreateSharedPool(_keySerializer);
            }
            else if (keySerializationPoolSize.Value > 0)
            {
                _keySerializationPool = new ByteArrayPool(_keySerializer.SerializedSize, keySerializationPoolSize.Value);
            }
            else
            {
                _keySerializationPool = null;
            }
        }
예제 #2
0
        public void GetOrCreateTest(Type keyType)
        {
            void CoreLogic <TKey>()
            {
                BobKeySerializer <TKey> keySerializer = null;

                Assert.True(BobDefaultKeySerializers.TryGetKeySerializer <TKey>(out keySerializer));

                ByteArrayPool pool = SharedKeySerializationArrayPools.GetOrCreateSharedPool(keySerializer);

                Assert.NotNull(pool);
                Assert.True(pool.MaxElementCount > 0);
                Assert.Equal(keySerializer.SerializedSize, pool.ByteArrayLength);

                var pool2 = SharedKeySerializationArrayPools.GetOrCreateSharedPool(keySerializer);

                Assert.True(object.ReferenceEquals(pool, pool2));

                Assert.True(SharedKeySerializationArrayPools.TryGetSharedPool(keySerializer, out pool2));
                Assert.True(object.ReferenceEquals(pool, pool2));
            }

            var referenceDelegate = new Action(CoreLogic <int>);
            var typedDelegate     = (Action)Delegate.CreateDelegate(typeof(Action), referenceDelegate.Method.GetGenericMethodDefinition().MakeGenericMethod(keyType));

            typedDelegate();
        }
예제 #3
0
 /// <summary>
 /// <see cref="BobClusterBuilder{TKey}"/> constructor
 /// </summary>
 public BobClusterBuilder()
 {
     _nodeConnectionParameters   = new List <BobConnectionParameters>();
     _operationTimeout           = null;
     _connectionTimeout          = null;
     _nodeSelectionPolicyFactory = null;
     _operationRetryCount        = null;
     _keySerializer            = null;
     _keySerializationPoolSize = null;
     _user     = null;
     _password = null;
 }
예제 #4
0
 /// <summary>
 /// <see cref="BobNodeClient"/> constructor
 /// </summary>
 /// <param name="connectionParameters">Node connection parameters</param>
 /// <param name="keySerializer">Serializer for <typeparamref name="TKey"/> (null for default serializer)</param>
 /// <param name="keySerializationPoolSize">Size of the Key serialization pool (null - shared pool, 0 or less - pool is disabled, 1 or greater - custom pool with specified size)</param>
 public BobNodeClient(BobConnectionParameters connectionParameters, BobKeySerializer <TKey> keySerializer, int?keySerializationPoolSize)
     : this(new BobNodeClient(connectionParameters), keySerializer, keySerializationPoolSize)
 {
 }
예제 #5
0
 /// <summary>
 /// <see cref="BobClusterClient"/> constructor
 /// </summary>
 /// <param name="clients">List of clients for every bob node</param>
 /// <param name="nodeSelectionPolicyFactory">Factory to create node selection policy (null for <see cref="SequentialNodeSelectionPolicy"/>)</param>
 /// <param name="operationRetryCount">The number of times the operation retries in case of failure (null - default value (no retries), 0 - no retries, >= 1 - number of retries after failure, -1 - number of retries is equal to number of nodes)</param>
 /// <param name="keySerializer">Serializer for <typeparamref name="TKey"/> (null for default serializer)</param>
 /// <param name="keySerializationPoolSize">Size of the Key serialization pool (null - shared pool, 0 or less - pool is disabled, 1 or greater - custom pool with specified size)</param>
 public BobClusterClient(IEnumerable <BobNodeClient> clients, BobNodeSelectionPolicyFactory nodeSelectionPolicyFactory, int?operationRetryCount, BobKeySerializer <TKey> keySerializer, int?keySerializationPoolSize)
     : this(new BobClusterClient(clients, nodeSelectionPolicyFactory, operationRetryCount), keySerializer, keySerializationPoolSize)
 {
 }
예제 #6
0
 /// <summary>
 /// <see cref="BobClusterClient"/> constructor
 /// </summary>
 /// <param name="nodeConnectionStrings">List of connection strings to nodes</param>
 /// <param name="nodeSelectionPolicyFactory">Factory to create node selection policy (null for <see cref="SequentialNodeSelectionPolicy"/>)</param>
 /// <param name="operationRetryCount">The number of times the operation retries in case of failure (null - default value (no retries), 0 - no retries, >= 1 - number of retries after failure, -1 - number of retries is equal to number of nodes)</param>
 /// <param name="keySerializer">Serializer for <typeparamref name="TKey"/> (null for default serializer)</param>
 /// <param name="keySerializationPoolSize">Size of the Key serialization pool (null - shared pool, 0 or less - pool is disabled, 1 or greater - custom pool with specified size)</param>
 public BobClusterClient(IEnumerable <string> nodeConnectionStrings, BobNodeSelectionPolicyFactory nodeSelectionPolicyFactory, int?operationRetryCount, BobKeySerializer <TKey> keySerializer, int?keySerializationPoolSize)
     : this(nodeConnectionStrings.Select(o => new BobNodeClient(o)).ToList(), nodeSelectionPolicyFactory, operationRetryCount, keySerializer, keySerializationPoolSize)
 {
 }
예제 #7
0
 /// <summary>
 /// Specifies key serializer to convert <typeparamref name="TKey"/> into byte array
 /// </summary>
 /// <param name="keySerializer">Key serializer for <typeparamref name="TKey"/></param>
 /// <returns>The reference to the current builder instatnce</returns>
 public BobClusterBuilder <TKey> WithKeySerializer(BobKeySerializer <TKey> keySerializer)
 {
     _keySerializer = keySerializer;
     return(this);
 }