public void TestPartitionAwarenessDisablesAutomaticallyOnVersionsOlderThan140(
            [Values(0, 1, 2, 3)] short minor)
        {
            var version = new ClientProtocolVersion(1, minor, 0);

            using (var client = GetClient(version, true))
            {
                Assert.IsFalse(client.GetConfiguration().EnablePartitionAwareness);

                var cache = client.GetOrCreateCache <int, int>(TestContext.CurrentContext.Test.Name);
                cache.Put(1, 2);
                Assert.AreEqual(2, cache.Get(1));

                var log = GetLogs(client).FirstOrDefault(e => e.Message.StartsWith("Partition"));

                var expectedMessage = string.Format(
                    "Partition awareness has been disabled: server protocol version " +
                    "{0} is lower than required 1.4.0", version);

                Assert.IsNotNull(log);
                Assert.AreEqual(expectedMessage, log.Message);
                Assert.AreEqual(LogLevel.Warn, log.Level);
                Assert.AreEqual(typeof(ClientFailoverSocket).Name, log.Category);
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Reads query entity of the config.
        /// </summary>
        private static QueryEntity ReadQueryEntity(BinaryReader reader, ClientProtocolVersion srvVer)
        {
            Debug.Assert(reader != null);

            var value = new QueryEntity
            {
                KeyTypeName    = reader.ReadString(),
                ValueTypeName  = reader.ReadString(),
                TableName      = reader.ReadString(),
                KeyFieldName   = reader.ReadString(),
                ValueFieldName = reader.ReadString()
            };

            var count = reader.ReadInt();

            value.Fields = count == 0
                ? null
                : Enumerable.Range(0, count).Select(x => ReadQueryField(reader, srvVer)).ToList();

            count         = reader.ReadInt();
            value.Aliases = count == 0 ? null : Enumerable.Range(0, count)
                            .Select(x => new QueryAlias(reader.ReadString(), reader.ReadString())).ToList();

            count         = reader.ReadInt();
            value.Indexes = count == 0 ? null : Enumerable.Range(0, count).Select(x => new QueryIndex(reader)).ToList();

            return(value);
        }
        /// <summary>
        /// Gets the client with specified protocol version.
        /// </summary>
        private IgniteClient GetClient(ClientProtocolVersion version, bool enablePartitionAwareness = false)
        {
            var cfg = new IgniteClientConfiguration(GetClientConfiguration())
            {
                ProtocolVersion          = version,
                EnablePartitionAwareness = enablePartitionAwareness
            };

            return((IgniteClient)Ignition.StartClient(cfg));
        }
        public void TestClusterOperationsThrowCorrectExceptionOnVersionsOlderThan150(
            [Values(0, 1, 2, 3, 4)] short minor)
        {
            var version = new ClientProtocolVersion(1, minor, 0);

            using (var client = GetClient(version))
            {
                TestClusterOperationsThrowCorrectExceptionOnVersionsOlderThan150(client, version.ToString());
            }
        }
Exemplo n.º 5
0
        public void TestRelationalComparisonOperators()
        {
            var v1 = new ClientProtocolVersion(1, 1, 1);
            var v2 = new ClientProtocolVersion(1, 1, 2);

            Assert.IsTrue(v1 < v2);
            Assert.IsTrue(v1 <= v2);
            Assert.IsTrue(v2 > v1);
            Assert.IsTrue(v2 >= v1);
        }
Exemplo n.º 6
0
        /// <summary>
        /// Initializes a new instance of the <see cref="DataStorageConfiguration"/> class.
        /// </summary>
        /// <param name="reader">The reader.</param>
        /// <param name="srvVer">Server version.</param>
        internal DataStorageConfiguration(IBinaryRawReader reader, ClientProtocolVersion srvVer)
        {
            Debug.Assert(reader != null);

            StoragePath                 = reader.ReadString();
            CheckpointFrequency         = reader.ReadLongAsTimespan();
            CheckpointThreads           = reader.ReadInt();
            LockWaitTime                = reader.ReadLongAsTimespan();
            WalHistorySize              = reader.ReadInt();
            WalSegments                 = reader.ReadInt();
            WalSegmentSize              = reader.ReadInt();
            WalPath                     = reader.ReadString();
            WalArchivePath              = reader.ReadString();
            WalMode                     = (WalMode)reader.ReadInt();
            WalThreadLocalBufferSize    = reader.ReadInt();
            WalFlushFrequency           = reader.ReadLongAsTimespan();
            WalFsyncDelayNanos          = reader.ReadLong();
            WalRecordIteratorBufferSize = reader.ReadInt();
            AlwaysWriteFullPages        = reader.ReadBoolean();
            MetricsEnabled              = reader.ReadBoolean();
            MetricsSubIntervalCount     = reader.ReadInt();
            MetricsRateTimeInterval     = reader.ReadLongAsTimespan();
            CheckpointWriteOrder        = (CheckpointWriteOrder)reader.ReadInt();
            WriteThrottlingEnabled      = reader.ReadBoolean();
            WalCompactionEnabled        = reader.ReadBoolean();
            MaxWalArchiveSize           = reader.ReadLong();

            SystemRegionInitialSize = reader.ReadLong();
            SystemRegionMaxSize     = reader.ReadLong();
            PageSize         = reader.ReadInt();
            ConcurrencyLevel = reader.ReadInt();
            WalAutoArchiveAfterInactivity = reader.ReadLongAsTimespan();
            CheckpointReadLockTimeout     = reader.ReadTimeSpanNullable();
            WalPageCompression            = (DiskPageCompression)reader.ReadInt();
            WalPageCompressionLevel       = reader.ReadIntNullable();

            var count = reader.ReadInt();

            if (count > 0)
            {
                DataRegionConfigurations = Enumerable.Range(0, count)
                                           .Select(x => new DataRegionConfiguration(reader, srvVer))
                                           .ToArray();
            }

            if (reader.ReadBoolean())
            {
                DefaultDataRegionConfiguration = new DataRegionConfiguration(reader, srvVer);
            }
        }
Exemplo n.º 7
0
        public void TestConstructor()
        {
            var v0 = default(ClientProtocolVersion);

            Assert.AreEqual(0, v0.Major);
            Assert.AreEqual(0, v0.Minor);
            Assert.AreEqual(0, v0.Patch);

            var v1 = new ClientProtocolVersion(2, 4, 8);

            Assert.AreEqual(2, v1.Major);
            Assert.AreEqual(4, v1.Minor);
            Assert.AreEqual(8, v1.Patch);
        }
Exemplo n.º 8
0
        public void TestConstructor()
        {
            var v0 = new ClientProtocolVersion();

            Assert.AreEqual(0, v0.Major);
            Assert.AreEqual(0, v0.Minor);
            Assert.AreEqual(0, v0.Maintenance);

            var v1 = new ClientProtocolVersion(2, 4, 8);

            Assert.AreEqual(2, v1.Major);
            Assert.AreEqual(4, v1.Minor);
            Assert.AreEqual(8, v1.Maintenance);
        }
        public void TestCacheOperationsAreSupportedOnAllProtocols(
            [Values(0, 1, 2, 3, 4, 5, 6)] short minor)
        {
            var version = new ClientProtocolVersion(1, minor, 0);

            using (var client = GetClient(version, true))
            {
                var cache = client.GetOrCreateCache <int, int>(TestContext.CurrentContext.Test.Name);
                cache.Put(1, -1);
                cache.PutAll(Enumerable.Range(2, 10).ToDictionary(x => x, x => x));

                Assert.AreEqual(-1, cache.Get(1));
                Assert.AreEqual(11, cache.Query(new ScanQuery <int, int>()).GetAll().Count);
            }
        }
        public void TestComputeThrowsNotSupportedOnVersionsOlderThan170(
            [Values(0, 1, 2, 3, 4, 5, 6)] short minor)
        {
            var version = new ClientProtocolVersion(1, minor, 0);

            using (var client = GetClient(version))
            {
                var compute = client.GetCompute();

                AssertNotSupportedFeatureOperation(
                    () => compute.ExecuteJavaTask <int>("unused", null),
                    ClientBitmaskFeature.ExecuteTaskByName,
                    ClientOp.ComputeTaskExecute);
            }
        }
Exemplo n.º 11
0
        /// <summary>
        /// Writes this instance to the specified writer.
        /// </summary>
        internal void Write(IBinaryRawWriter writer, ClientProtocolVersion srvVer)
        {
            Debug.Assert(writer != null);

            writer.WriteString(Name);
            writer.WriteString(FieldTypeName);
            writer.WriteBoolean(IsKeyField);
            writer.WriteBoolean(NotNull);
            writer.WriteObject(DefaultValue);

            if (srvVer.CompareTo(ClientSocket.Ver120) >= 0)
            {
                writer.WriteInt(Precision);
                writer.WriteInt(Scale);
            }
        }
Exemplo n.º 12
0
        /// <summary>
        /// Writes query field instance to the specified writer.
        /// </summary>
        private static void WriteQueryField(BinaryWriter writer, QueryField field, ClientProtocolVersion srvVer)
        {
            Debug.Assert(writer != null);

            writer.WriteString(field.Name);
            writer.WriteString(field.FieldTypeName);
            writer.WriteBoolean(field.IsKeyField);
            writer.WriteBoolean(field.NotNull);
            writer.WriteObject(field.DefaultValue);

            if (srvVer.CompareTo(ClientSocket.Ver120) >= 0)
            {
                writer.WriteInt(field.Precision);
                writer.WriteInt(field.Scale);
            }
        }
Exemplo n.º 13
0
        /// <summary>
        /// Initializes a new instance of the <see cref="QueryField"/> class.
        /// </summary>
        internal QueryField(IBinaryRawReader reader, ClientProtocolVersion srvVer)
        {
            Debug.Assert(reader != null);

            Name          = reader.ReadString();
            FieldTypeName = reader.ReadString();
            IsKeyField    = reader.ReadBoolean();
            NotNull       = reader.ReadBoolean();
            DefaultValue  = reader.ReadObject <object>();

            if (srvVer.CompareTo(ClientSocket.Ver120) >= 0)
            {
                Precision = reader.ReadInt();
                Scale     = reader.ReadInt();
            }
        }
Exemplo n.º 14
0
        /// <summary>
        /// Reads the config.
        /// </summary>
        public static void Read(IBinaryStream stream, CacheClientConfiguration cfg, ClientProtocolVersion srvVer)
        {
            Debug.Assert(stream != null);

            // Configuration should be read with system marshaller.
            var reader = BinaryUtils.Marshaller.StartUnmarshal(stream);

            var len = reader.ReadInt();
            var pos = reader.Stream.Position;

            cfg.AtomicityMode                = (CacheAtomicityMode)reader.ReadInt();
            cfg.Backups                      = reader.ReadInt();
            cfg.CacheMode                    = (CacheMode)reader.ReadInt();
            cfg.CopyOnRead                   = reader.ReadBoolean();
            cfg.DataRegionName               = reader.ReadString();
            cfg.EagerTtl                     = reader.ReadBoolean();
            cfg.EnableStatistics             = reader.ReadBoolean();
            cfg.GroupName                    = reader.ReadString();
            cfg.LockTimeout                  = reader.ReadLongAsTimespan();
            cfg.MaxConcurrentAsyncOperations = reader.ReadInt();
            cfg.MaxQueryIteratorsCount       = reader.ReadInt();
            cfg.Name = reader.ReadString();
            cfg.OnheapCacheEnabled            = reader.ReadBoolean();
            cfg.PartitionLossPolicy           = (PartitionLossPolicy)reader.ReadInt();
            cfg.QueryDetailMetricsSize        = reader.ReadInt();
            cfg.QueryParallelism              = reader.ReadInt();
            cfg.ReadFromBackup                = reader.ReadBoolean();
            cfg.RebalanceBatchSize            = reader.ReadInt();
            cfg.RebalanceBatchesPrefetchCount = reader.ReadLong();
            cfg.RebalanceDelay                = reader.ReadLongAsTimespan();
            cfg.RebalanceMode            = (CacheRebalanceMode)reader.ReadInt();
            cfg.RebalanceOrder           = reader.ReadInt();
            cfg.RebalanceThrottle        = reader.ReadLongAsTimespan();
            cfg.RebalanceTimeout         = reader.ReadLongAsTimespan();
            cfg.SqlEscapeAll             = reader.ReadBoolean();
            cfg.SqlIndexMaxInlineSize    = reader.ReadInt();
            cfg.SqlSchema                = reader.ReadString();
            cfg.WriteSynchronizationMode = (CacheWriteSynchronizationMode)reader.ReadInt();
            cfg.KeyConfiguration         = reader.ReadCollectionRaw(r => new CacheKeyConfiguration(r));
            cfg.QueryEntities            = reader.ReadCollectionRaw(r => new QueryEntity(r, srvVer));
            if (srvVer.CompareTo(ClientSocket.Ver150) >= 0)
            {
                cfg.ExpiryPolicyFactory = ExpiryPolicySerializer.ReadPolicyFactory(reader);
            }

            Debug.Assert(len == reader.Stream.Position - pos);
        }
        public void TestClientOlderThanServerConnectsOnClientVersion([Values(0, 1, 2, 3, 4, 5)] short minor)
        {
            var version = new ClientProtocolVersion(1, minor, 0);

            using (var client = GetClient(version))
            {
                Assert.AreEqual(version, client.Socket.CurrentProtocolVersion);

                var lastLog     = GetLogs(client).Last(e => e.Level == LogLevel.Debug);
                var expectedLog = string.Format(
                    "Handshake completed on 127.0.0.1:10800, protocol version = {0}", version);

                Assert.AreEqual(expectedLog, lastLog.Message);
                Assert.AreEqual(LogLevel.Debug, lastLog.Level);
                Assert.AreEqual(typeof(ClientSocket).Name, lastLog.Category);
            }
        }
Exemplo n.º 16
0
        /// <summary>
        /// Initializes a new instance of the <see cref="DataRegionConfiguration"/> class.
        /// </summary>
        /// <param name="reader">The reader.</param>
        /// <param name="srvVer">Server version.</param>
        internal DataRegionConfiguration(IBinaryRawReader reader, ClientProtocolVersion srvVer)
        {
            Name = reader.ReadString();
            PersistenceEnabled       = reader.ReadBoolean();
            InitialSize              = reader.ReadLong();
            MaxSize                  = reader.ReadLong();
            SwapPath                 = reader.ReadString();
            PageEvictionMode         = (DataPageEvictionMode)reader.ReadInt();
            EvictionThreshold        = reader.ReadDouble();
            EmptyPagesPoolSize       = reader.ReadInt();
            MetricsEnabled           = reader.ReadBoolean();
            MetricsSubIntervalCount  = reader.ReadInt();
            MetricsRateTimeInterval  = reader.ReadLongAsTimespan();
            CheckpointPageBufferSize = reader.ReadLong();

            if (srvVer.CompareTo(ClientSocket.Ver130) >= 0)
            {
                LazyMemoryAllocation = reader.ReadBoolean();
            }
        }
Exemplo n.º 17
0
        /// <summary>
        /// Writes this instance to a writer.
        /// </summary>
        /// <param name="writer">The writer.</param>
        /// <param name="srvVer">Server version.</param>
        internal void Write(IBinaryRawWriter writer, ClientProtocolVersion srvVer)
        {
            writer.WriteString(Name);
            writer.WriteBoolean(PersistenceEnabled);
            writer.WriteLong(InitialSize);
            writer.WriteLong(MaxSize);
            writer.WriteString(SwapPath);
            writer.WriteInt((int)PageEvictionMode);
            writer.WriteDouble(EvictionThreshold);
            writer.WriteInt(EmptyPagesPoolSize);
            writer.WriteBoolean(MetricsEnabled);
            writer.WriteInt(MetricsSubIntervalCount);
            writer.WriteTimeSpanAsLong(MetricsRateTimeInterval);
            writer.WriteLong(CheckpointPageBufferSize);

            if (srvVer.CompareTo(ClientSocket.Ver130) >= 0)
            {
                writer.WriteBoolean(LazyMemoryAllocation);
            }
        }
Exemplo n.º 18
0
        /// <summary>
        /// Read query field.
        /// </summary>
        private static QueryField ReadQueryField(BinaryReader reader, ClientProtocolVersion srvVer)
        {
            Debug.Assert(reader != null);

            var value = new QueryField
            {
                Name          = reader.ReadString(),
                FieldTypeName = reader.ReadString(),
                IsKeyField    = reader.ReadBoolean(),
                NotNull       = reader.ReadBoolean(),
                DefaultValue  = reader.ReadObject <object>()
            };

            if (srvVer.CompareTo(ClientSocket.Ver120) >= 0)
            {
                value.Precision = reader.ReadInt();
                value.Scale     = reader.ReadInt();
            }

            return(value);
        }
Exemplo n.º 19
0
        /// <summary>
        /// Initializes a new instance of the <see cref="QueryEntity"/> class.
        /// </summary>
        /// <param name="reader">The reader.</param>
        /// <param name="srvVer">Server version.</param>
        internal QueryEntity(IBinaryRawReader reader, ClientProtocolVersion srvVer)
        {
            KeyTypeName    = reader.ReadString();
            ValueTypeName  = reader.ReadString();
            TableName      = reader.ReadString();
            KeyFieldName   = reader.ReadString();
            ValueFieldName = reader.ReadString();

            var count = reader.ReadInt();

            Fields = count == 0
                ? null
                : Enumerable.Range(0, count).Select(x => new QueryField(reader, srvVer)).ToList();

            count   = reader.ReadInt();
            Aliases = count == 0 ? null : Enumerable.Range(0, count)
                      .Select(x => new QueryAlias(reader.ReadString(), reader.ReadString())).ToList();

            count   = reader.ReadInt();
            Indexes = count == 0 ? null : Enumerable.Range(0, count).Select(x => new QueryIndex(reader)).ToList();
        }
        public void TestClientNewerThanServerReconnectsOnServerVersion()
        {
            // Use a non-existent version that is not supported by the server
            var version = new ClientProtocolVersion(1, short.MaxValue, short.MaxValue);

            using (var client = GetClient(version))
            {
                Assert.AreEqual(ClientSocket.CurrentProtocolVersion, client.Socket.CurrentProtocolVersion);

                var logs = GetLogs(client);

                var expectedMessage = "Handshake failed on 127.0.0.1:10800, " +
                                      "requested protocol version = 1.32767.32767, server protocol version = , " +
                                      "status = Fail, message = Unsupported version: 1.32767.32767";

                var message = Regex.Replace(
                    logs[2].Message, @"server protocol version = \d\.\d\.\d", "server protocol version = ");

                Assert.AreEqual(expectedMessage, message);
            }
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="ClientConnectorConfiguration"/> class.
        /// </summary>
        internal ClientConnectorConfiguration(ClientProtocolVersion ver, IBinaryRawReader reader)
        {
            Debug.Assert(reader != null);

            Host                        = reader.ReadString();
            Port                        = reader.ReadInt();
            PortRange                   = reader.ReadInt();
            SocketSendBufferSize        = reader.ReadInt();
            SocketReceiveBufferSize     = reader.ReadInt();
            TcpNoDelay                  = reader.ReadBoolean();
            MaxOpenCursorsPerConnection = reader.ReadInt();
            ThreadPoolSize              = reader.ReadInt();
            IdleTimeout                 = reader.ReadLongAsTimespan();

            ThinClientEnabled = reader.ReadBoolean();
            OdbcEnabled       = reader.ReadBoolean();
            JdbcEnabled       = reader.ReadBoolean();

            if (ver.CompareTo(ClientSocket.Ver130) >= 0)
            {
                HandshakeTimeout = reader.ReadLongAsTimespan();
            }
        }
        /// <summary>
        /// Writes to the specified writer.
        /// </summary>
        internal void Write(ClientProtocolVersion ver, IBinaryRawWriter writer)
        {
            Debug.Assert(writer != null);

            writer.WriteString(Host);
            writer.WriteInt(Port);
            writer.WriteInt(PortRange);
            writer.WriteInt(SocketSendBufferSize);
            writer.WriteInt(SocketReceiveBufferSize);
            writer.WriteBoolean(TcpNoDelay);
            writer.WriteInt(MaxOpenCursorsPerConnection);
            writer.WriteInt(ThreadPoolSize);
            writer.WriteTimeSpanAsLong(IdleTimeout);

            writer.WriteBoolean(ThinClientEnabled);
            writer.WriteBoolean(OdbcEnabled);
            writer.WriteBoolean(JdbcEnabled);

            if (ver.CompareTo(ClientSocket.Ver130) >= 0)
            {
                writer.WriteTimeSpanAsLong(HandshakeTimeout);
            }
        }
Exemplo n.º 23
0
        /// <summary>
        /// Writes the collection of write-aware-ex items.
        /// </summary>
        public static void WriteCollectionRaw <T, TWriter>(this TWriter writer, ICollection <T> collection,
                                                           ClientProtocolVersion srvVer) where T : IBinaryRawWriteAwareEx <TWriter> where TWriter : IBinaryRawWriter
        {
            Debug.Assert(writer != null);

            if (collection != null)
            {
                writer.WriteInt(collection.Count);

                foreach (var x in collection)
                {
                    if (x == null)
                    {
                        throw new ArgumentNullException(string.Format("{0} can not be null", typeof(T).Name));
                    }

                    x.Write(writer, srvVer);
                }
            }
            else
            {
                writer.WriteInt(0);
            }
        }
Exemplo n.º 24
0
        /// <summary>
        /// Writes the specified config.
        /// </summary>
        public static void Write(IBinaryStream stream, CacheClientConfiguration cfg, ClientProtocolVersion srvVer,
                                 bool skipCodes = false)
        {
            Debug.Assert(stream != null);
            Debug.Assert(cfg != null);

            // Configuration should be written with a system marshaller.
            var writer = BinaryUtils.Marshaller.StartMarshal(stream);
            var pos    = writer.Stream.Position;

            writer.WriteInt(0);  // Reserve for length.

            if (!skipCodes)
            {
                writer.WriteShort(PropertyCount); // Property count.
            }

            var code = skipCodes
                ? (Action <Op>)(o => { })
                : o => writer.WriteShort((short)o);

            code(Op.AtomicityMode);
            writer.WriteInt((int)cfg.AtomicityMode);

            code(Op.Backups);
            writer.WriteInt(cfg.Backups);

            code(Op.CacheMode);
            writer.WriteInt((int)cfg.CacheMode);

            code(Op.CopyOnRead);
            writer.WriteBoolean(cfg.CopyOnRead);

            code(Op.DataRegionName);
            writer.WriteString(cfg.DataRegionName);

            code(Op.EagerTtl);
            writer.WriteBoolean(cfg.EagerTtl);

            code(Op.StatisticsEnabled);
            writer.WriteBoolean(cfg.EnableStatistics);

            code(Op.GroupName);
            writer.WriteString(cfg.GroupName);

            code(Op.DefaultLockTimeout);
            writer.WriteTimeSpanAsLong(cfg.LockTimeout);

            code(Op.MaxConcurrentAsyncOperations);
            writer.WriteInt(cfg.MaxConcurrentAsyncOperations);

            code(Op.MaxQueryIteratorsCount);
            writer.WriteInt(cfg.MaxQueryIteratorsCount);

            code(Op.Name);
            writer.WriteString(cfg.Name);

            code(Op.OnheapCacheEnabled);
            writer.WriteBoolean(cfg.OnheapCacheEnabled);

            code(Op.PartitionLossPolicy);
            writer.WriteInt((int)cfg.PartitionLossPolicy);

            code(Op.QueryDetailMetricsSize);
            writer.WriteInt(cfg.QueryDetailMetricsSize);

            code(Op.QueryParallelism);
            writer.WriteInt(cfg.QueryParallelism);

            code(Op.ReadFromBackup);
            writer.WriteBoolean(cfg.ReadFromBackup);

            code(Op.RebalanceBatchSize);
            writer.WriteInt(cfg.RebalanceBatchSize);

            code(Op.RebalanceBatchesPrefetchCount);
            writer.WriteLong(cfg.RebalanceBatchesPrefetchCount);

            code(Op.RebalanceDelay);
            writer.WriteTimeSpanAsLong(cfg.RebalanceDelay);

            code(Op.RebalanceMode);
            writer.WriteInt((int)cfg.RebalanceMode);

            code(Op.RebalanceOrder);
            writer.WriteInt(cfg.RebalanceOrder);

            code(Op.RebalanceThrottle);
            writer.WriteTimeSpanAsLong(cfg.RebalanceThrottle);

            code(Op.RebalanceTimeout);
            writer.WriteTimeSpanAsLong(cfg.RebalanceTimeout);

            code(Op.SqlEscapeAll);
            writer.WriteBoolean(cfg.SqlEscapeAll);

            code(Op.SqlIndexMaxInlineSize);
            writer.WriteInt(cfg.SqlIndexMaxInlineSize);

            code(Op.SqlSchema);
            writer.WriteString(cfg.SqlSchema);

            code(Op.WriteSynchronizationMode);
            writer.WriteInt((int)cfg.WriteSynchronizationMode);

            code(Op.KeyConfiguration);
            writer.WriteCollectionRaw(cfg.KeyConfiguration);

            code(Op.QueryEntities);
            writer.WriteCollectionRaw(cfg.QueryEntities, srvVer);

            code(Op.ExpiryPolicy);
            ExpiryPolicySerializer.WritePolicyFactory(writer, cfg.ExpiryPolicyFactory);

            // Write length (so that part of the config can be skipped).
            var len = writer.Stream.Position - pos - 4;

            writer.Stream.WriteInt(pos, len);
        }
Exemplo n.º 25
0
        /// <summary>
        /// Reads data into this instance from the specified reader.
        /// </summary>
        /// <param name="reader">The reader.</param>
        /// <param name="srvVer">Server version.</param>
        private void Read(BinaryReader reader, ClientProtocolVersion srvVer)
        {
            // Make sure system marshaller is used.
            Debug.Assert(reader.Marshaller == BinaryUtils.Marshaller);

            AtomicityMode     = (CacheAtomicityMode)reader.ReadInt();
            Backups           = reader.ReadInt();
            CacheMode         = (CacheMode)reader.ReadInt();
            CopyOnRead        = reader.ReadBoolean();
            EagerTtl          = reader.ReadBoolean();
            Invalidate        = reader.ReadBoolean();
            KeepBinaryInStore = reader.ReadBoolean();
            LoadPreviousValue = reader.ReadBoolean();
            LockTimeout       = reader.ReadLongAsTimespan();
#pragma warning disable 618
            LongQueryWarningTimeout = reader.ReadLongAsTimespan();
#pragma warning restore 618
            MaxConcurrentAsyncOperations = reader.ReadInt();
            Name                            = reader.ReadString();
            ReadFromBackup                  = reader.ReadBoolean();
            RebalanceBatchSize              = reader.ReadInt();
            RebalanceDelay                  = reader.ReadLongAsTimespan();
            RebalanceMode                   = (CacheRebalanceMode)reader.ReadInt();
            RebalanceThrottle               = reader.ReadLongAsTimespan();
            RebalanceTimeout                = reader.ReadLongAsTimespan();
            SqlEscapeAll                    = reader.ReadBoolean();
            WriteBehindBatchSize            = reader.ReadInt();
            WriteBehindEnabled              = reader.ReadBoolean();
            WriteBehindFlushFrequency       = reader.ReadLongAsTimespan();
            WriteBehindFlushSize            = reader.ReadInt();
            WriteBehindFlushThreadCount     = reader.ReadInt();
            WriteBehindCoalescing           = reader.ReadBoolean();
            WriteSynchronizationMode        = (CacheWriteSynchronizationMode)reader.ReadInt();
            ReadThrough                     = reader.ReadBoolean();
            WriteThrough                    = reader.ReadBoolean();
            EnableStatistics                = reader.ReadBoolean();
            DataRegionName                  = reader.ReadString();
            PartitionLossPolicy             = (PartitionLossPolicy)reader.ReadInt();
            GroupName                       = reader.ReadString();
            CacheStoreFactory               = reader.ReadObject <IFactory <ICacheStore> >();
            SqlIndexMaxInlineSize           = reader.ReadInt();
            OnheapCacheEnabled              = reader.ReadBoolean();
            StoreConcurrentLoadAllThreshold = reader.ReadInt();
            RebalanceOrder                  = reader.ReadInt();
            RebalanceBatchesPrefetchCount   = reader.ReadLong();
            MaxQueryIteratorsCount          = reader.ReadInt();
            QueryDetailMetricsSize          = reader.ReadInt();
            QueryParallelism                = reader.ReadInt();
            SqlSchema                       = reader.ReadString();
            EncryptionEnabled               = reader.ReadBoolean();

            QueryEntities = reader.ReadCollectionRaw(r => new QueryEntity(r, srvVer));

            NearConfiguration = reader.ReadBoolean() ? new NearCacheConfiguration(reader) : null;

            EvictionPolicy      = EvictionPolicyBase.Read(reader);
            AffinityFunction    = AffinityFunctionSerializer.Read(reader);
            ExpiryPolicyFactory = ExpiryPolicySerializer.ReadPolicyFactory(reader);

            KeyConfiguration = reader.ReadCollectionRaw(r => new CacheKeyConfiguration(r));

            if (reader.ReadBoolean())
            {
                PlatformNearConfiguration = new PlatformNearCacheConfiguration(reader);
            }

            var count = reader.ReadInt();

            if (count > 0)
            {
                PluginConfigurations = new List <ICachePluginConfiguration>(count);
                for (int i = 0; i < count; i++)
                {
                    if (reader.ReadBoolean())
                    {
                        // FactoryId-based plugin: skip.
                        reader.ReadInt();                             // Skip factory id.
                        var size = reader.ReadInt();
                        reader.Stream.Seek(size, SeekOrigin.Current); // Skip custom data.
                    }
                    else
                    {
                        // Pure .NET plugin.
                        PluginConfigurations.Add(reader.ReadObject <ICachePluginConfiguration>());
                    }
                }
            }
        }
Exemplo n.º 26
0
 /// <summary>
 /// Initializes a new instance of <see cref="ClientServerCompatibilityTest"/>.
 /// </summary>
 public ClientServerCompatibilityTest(string groupId, string serverVersion, int clientProtocolVersion)
 {
     _groupId               = groupId;
     _serverVersion         = serverVersion;
     _clientProtocolVersion = new ClientProtocolVersion(1, (short)clientProtocolVersion, 0);
 }
Exemplo n.º 27
0
 /// <summary>
 /// Writes this instance to the specified writer.
 /// </summary>
 /// <param name="writer">The writer.</param>
 /// <param name="srvVer">Server version.</param>
 void IBinaryRawWriteAwareEx <BinaryWriter> .Write(BinaryWriter writer, ClientProtocolVersion srvVer)
 {
     Write(writer, srvVer);
 }
Exemplo n.º 28
0
        /// <summary>
        /// Writes this instance.
        /// </summary>
        void IBinaryRawWriteAwareEx <IBinaryRawWriter> .Write(IBinaryRawWriter writer, ClientProtocolVersion srvVer)
        {
            writer.WriteString(KeyTypeName);
            writer.WriteString(ValueTypeName);
            writer.WriteString(TableName);
            writer.WriteString(KeyFieldName);
            writer.WriteString(ValueFieldName);

            if (Fields != null)
            {
                writer.WriteInt(Fields.Count);

                foreach (var field in Fields)
                {
                    field.Write(writer, srvVer);
                }
            }
            else
            {
                writer.WriteInt(0);
            }


            if (Aliases != null)
            {
                writer.WriteInt(Aliases.Count);

                foreach (var queryAlias in Aliases)
                {
                    writer.WriteString(queryAlias.FullName);
                    writer.WriteString(queryAlias.Alias);
                }
            }
            else
            {
                writer.WriteInt(0);
            }

            if (Indexes != null)
            {
                writer.WriteInt(Indexes.Count);

                foreach (var index in Indexes)
                {
                    if (index == null)
                    {
                        throw new InvalidOperationException("Invalid cache configuration: QueryIndex can't be null.");
                    }

                    index.Write(writer);
                }
            }
            else
            {
                writer.WriteInt(0);
            }
        }
Exemplo n.º 29
0
 /// <summary>
 /// Initializes a new instance of the <see cref="CacheConfiguration"/> class.
 /// </summary>
 /// <param name="reader">The reader.</param>
 /// <param name="srvVer">Server version.</param>
 internal CacheConfiguration(BinaryReader reader, ClientProtocolVersion srvVer)
 {
     Read(reader, srvVer);
 }
Exemplo n.º 30
0
        /// <summary>
        /// Writes this instance to the specified writer.
        /// </summary>
        /// <param name="writer">The writer.</param>
        /// <param name="srvVer">Server version.</param>
        internal void Write(BinaryWriter writer, ClientProtocolVersion srvVer)
        {
            // Make sure system marshaller is used.
            Debug.Assert(writer.Marshaller == BinaryUtils.Marshaller);

            writer.WriteInt((int)AtomicityMode);
            writer.WriteInt(Backups);
            writer.WriteInt((int)CacheMode);
            writer.WriteBoolean(CopyOnRead);
            writer.WriteBoolean(EagerTtl);
            writer.WriteBoolean(Invalidate);
            writer.WriteBoolean(KeepBinaryInStore);
            writer.WriteBoolean(LoadPreviousValue);
            writer.WriteLong((long)LockTimeout.TotalMilliseconds);
#pragma warning disable 618
            writer.WriteLong((long)LongQueryWarningTimeout.TotalMilliseconds);
#pragma warning restore 618
            writer.WriteInt(MaxConcurrentAsyncOperations);
            writer.WriteString(Name);
            writer.WriteBoolean(ReadFromBackup);
            writer.WriteInt(RebalanceBatchSize);
            writer.WriteLong((long)RebalanceDelay.TotalMilliseconds);
            writer.WriteInt((int)RebalanceMode);
            writer.WriteLong((long)RebalanceThrottle.TotalMilliseconds);
            writer.WriteLong((long)RebalanceTimeout.TotalMilliseconds);
            writer.WriteBoolean(SqlEscapeAll);
            writer.WriteInt(WriteBehindBatchSize);
            writer.WriteBoolean(WriteBehindEnabled);
            writer.WriteLong((long)WriteBehindFlushFrequency.TotalMilliseconds);
            writer.WriteInt(WriteBehindFlushSize);
            writer.WriteInt(WriteBehindFlushThreadCount);
            writer.WriteBoolean(WriteBehindCoalescing);
            writer.WriteInt((int)WriteSynchronizationMode);
            writer.WriteBoolean(ReadThrough);
            writer.WriteBoolean(WriteThrough);
            writer.WriteBoolean(EnableStatistics);
            writer.WriteString(DataRegionName);
            writer.WriteInt((int)PartitionLossPolicy);
            writer.WriteString(GroupName);
            writer.WriteObject(CacheStoreFactory);
            writer.WriteInt(SqlIndexMaxInlineSize);
            writer.WriteBoolean(OnheapCacheEnabled);
            writer.WriteInt(StoreConcurrentLoadAllThreshold);
            writer.WriteInt(RebalanceOrder);
            writer.WriteLong(RebalanceBatchesPrefetchCount);
            writer.WriteInt(MaxQueryIteratorsCount);
            writer.WriteInt(QueryDetailMetricsSize);
            writer.WriteInt(QueryParallelism);
            writer.WriteString(SqlSchema);
            writer.WriteBoolean(EncryptionEnabled);

            writer.WriteCollectionRaw(QueryEntities, srvVer);

            if (NearConfiguration != null)
            {
                writer.WriteBoolean(true);
                NearConfiguration.Write(writer);
            }
            else
            {
                writer.WriteBoolean(false);
            }

            EvictionPolicyBase.Write(writer, EvictionPolicy);
            AffinityFunctionSerializer.Write(writer, AffinityFunction);
            ExpiryPolicySerializer.WritePolicyFactory(writer, ExpiryPolicyFactory);

            writer.WriteCollectionRaw(KeyConfiguration);

            if (PlatformNearConfiguration != null)
            {
                writer.WriteBoolean(true);
                PlatformNearConfiguration.Write(writer);
            }
            else
            {
                writer.WriteBoolean(false);
            }

            if (PluginConfigurations != null)
            {
                writer.WriteInt(PluginConfigurations.Count);

                foreach (var cachePlugin in PluginConfigurations)
                {
                    if (cachePlugin == null)
                    {
                        throw new InvalidOperationException("Invalid cache configuration: " +
                                                            "ICachePluginConfiguration can't be null.");
                    }

                    if (cachePlugin.CachePluginConfigurationClosureFactoryId != null)
                    {
                        writer.WriteBoolean(true);
                        writer.WriteInt(cachePlugin.CachePluginConfigurationClosureFactoryId.Value);

                        int pos = writer.Stream.Position;
                        writer.WriteInt(0);  // Reserve size.

                        cachePlugin.WriteBinary(writer);

                        writer.Stream.WriteInt(pos, writer.Stream.Position - pos - 4);  // Write size.
                    }
                    else
                    {
                        writer.WriteBoolean(false);
                        writer.WriteObject(cachePlugin);
                    }
                }
            }
            else
            {
                writer.WriteInt(0);
            }
        }