Example #1
0
        internal Response(Frame frame)
        {
            if (frame == null)
            {
                throw new ArgumentNullException("frame");
            }
            if (frame.Body == null)
            {
                throw new InvalidOperationException("Response body of the received frame was null");
            }
            if (!frame.Header.Flags.HasFlag(HeaderFlag.Compression) && frame.Header.BodyLength > frame.Body.Length - frame.Body.Position)
            {
                throw new DriverInternalError(string.Format(
                                                  "Response body length should be contained in stream: Expected {0} but was {1} (position {2})",
                                                  frame.Header.BodyLength, frame.Body.Length - frame.Body.Position, frame.Body.Position));
            }

            Reader = new FrameReader(frame.Body, frame.Serializer);

            if (frame.Header.Flags.HasFlag(HeaderFlag.Tracing))
            {
                //If a response frame has the tracing flag set, the first item in its body is the trace id
                var buffer = new byte[16];
                Reader.Read(buffer, 0, 16);
                TraceId = new Guid(TypeSerializer.GuidShuffle(buffer));
            }
        }
Example #2
0
        public void TokenAware_Guid_NoHops()
        {
            // Setup
            var policyTestTools = new PolicyTestTools();
            var cluster         = GetNewTemporaryCluster(b => b.WithLoadBalancingPolicy(new TokenAwarePolicy(new RoundRobinPolicy())));

            // Test
            var    session         = cluster.Connect();
            string uniqueTableName = TestUtils.GetUniqueTableName();

            policyTestTools.CreateSchema(session);
            session.Execute($"CREATE TABLE {uniqueTableName} (k uuid PRIMARY KEY, i int)");
            var traces = new List <QueryTrace>();

            for (var i = 0; i < 10; i++)
            {
                var key       = Guid.NewGuid();
                var statement = new SimpleStatement(string.Format("INSERT INTO " + uniqueTableName + " (k, i) VALUES ({0}, {1})", key, i))
                                .SetRoutingKey(
                    new RoutingKey()
                {
                    RawRoutingKey = TypeSerializer.GuidShuffle(key.ToByteArray())
                })
                                .EnableTracing();
                var rs = session.Execute(statement);
                traces.Add(rs.Info.QueryTrace);
            }
            //Check that there weren't any hops
            foreach (var t in traces)
            {
                //The coordinator must be the only one executing the query
                Assert.True(t.Events.All(e => e.Source.ToString() == t.Coordinator.ToString()), "There were trace events from another host for coordinator " + t.Coordinator);
            }
        }
Example #3
0
        public void Ctor_TraceFlagSet_TraceIdIsSet()
        {
            // Arrange
            var header = new FrameHeader {Flags = FrameHeader.HeaderFlag.Tracing};
            var rnd = new Random();
            var buffer = new byte[16];
            rnd.NextBytes(buffer);
            var expected = new Guid(TypeSerializer.GuidShuffle(buffer));
            var body = new MemoryStream(buffer);
            var frame = new Frame(header, body, new Serializer(ProtocolVersion.V4));

            // Act
            var uut = new Response(frame);

            // Assert
            Assert.AreEqual(expected, uut.TraceId);
        }
Example #4
0
        public void TokenAware_VNodes_Test()
        {
            var testCluster = TestClusterManager.CreateNew(3, new TestClusterOptions {
                UseVNodes = true
            });
            var cluster = Cluster.Builder().AddContactPoint(testCluster.InitialContactPoint).Build();

            try
            {
                var session = cluster.Connect();
                Assert.AreEqual(256, cluster.AllHosts().First().Tokens.Count());
                session.Execute("CREATE KEYSPACE ks1 WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 1}");
                Thread.Sleep(3000);
                session.ChangeKeyspace("ks1");
                session.Execute("CREATE TABLE tbl1 (id uuid primary key)");
                Thread.Sleep(3000);
                var ps     = session.Prepare("INSERT INTO tbl1 (id) VALUES (?)");
                var traces = new List <QueryTrace>();
                for (var i = 0; i < 10; i++)
                {
                    var id    = Guid.NewGuid();
                    var bound = ps
                                .Bind(id)
                                .SetRoutingKey(new RoutingKey()
                    {
                        RawRoutingKey = TypeSerializer.GuidShuffle(id.ToByteArray())
                    })
                                .EnableTracing();
                    var rs = session.Execute(bound);
                    traces.Add(rs.Info.QueryTrace);
                }
                //Check that there weren't any hops
                foreach (var t in traces)
                {
                    //The coordinator must be the only one executing the query
                    Assert.True(t.Events.All(e => e.Source.ToString() == t.Coordinator.ToString()), "There were trace events from another host for coordinator " + t.Coordinator);
                }
            }
            finally
            {
                cluster.Dispose();
                testCluster.Remove();
            }
        }