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)); } }
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); } }
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); }
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(); } }