Skip to content

Commit d91f6a8

Browse files
committed
add SessionKeyspace to RequestTrackingInfo
1 parent 5ed9c20 commit d91f6a8

File tree

7 files changed

+43
-32
lines changed

7 files changed

+43
-32
lines changed

src/Cassandra.IntegrationTests/OpenTelemetry/OpenTelemetryTests.cs

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ public void AddOpenTelemetry_WithoutKeyspace_DbNameIsNotIncluded()
104104
var statement = new SimpleStatement("SELECT key FROM system.local");
105105
session.Execute(statement);
106106

107-
RetryUntilActivities(_testStartDateTime, SessionActivityName, 1);
107+
RetryUntilActivities(_testStartDateTime, $"{SessionActivityName}({nameof(SimpleStatement)})", 1);
108108

109109
var activity = GetActivities(_testStartDateTime).First(x => x.DisplayName.StartsWith(SessionActivityName));
110110

@@ -124,7 +124,7 @@ public void AddOpenTelemetry_WithDefaultOptions_DbStatementIsNotIncludedAsAttrib
124124
var statement = new SimpleStatement("SELECT key FROM system.local");
125125
session.Execute(statement);
126126

127-
RetryUntilActivities(_testStartDateTime, SessionActivityName, 1);
127+
RetryUntilActivities(_testStartDateTime, $"{SessionActivityName}({nameof(SimpleStatement)})", 1);
128128

129129
var activity = GetActivities(_testStartDateTime).First(x => x.DisplayName.StartsWith(SessionActivityName));
130130

@@ -145,7 +145,7 @@ public void AddOpenTelemetry_WithIncludeDatabaseStatementOption_DbStatementIsInc
145145
var statement = new SimpleStatement("SELECT key FROM system.local");
146146
session.Execute(statement);
147147

148-
RetryUntilActivities(_testStartDateTime, SessionActivityName, 1);
148+
RetryUntilActivities(_testStartDateTime, $"{SessionActivityName}({nameof(SimpleStatement)})", 1);
149149

150150
var activity = GetActivities(_testStartDateTime).First(x => x.DisplayName.StartsWith(SessionActivityName));
151151

@@ -165,8 +165,8 @@ public async Task AddOpenTelemetry_ExecuteAndExecuteAsync_SessionRequestIsParent
165165
var statement = new SimpleStatement("SELECT key FROM system.local");
166166
await session.ExecuteAsync(statement).ContinueWith(t =>
167167
{
168-
RetryUntilActivities(localDateTime, SessionActivityName, 1);
169-
RetryUntilActivities(localDateTime, NodeActivityName, 1);
168+
RetryUntilActivities(localDateTime, $"{SessionActivityName}({nameof(SimpleStatement)})", 1);
169+
RetryUntilActivities(localDateTime, $"{NodeActivityName}({nameof(SimpleStatement)})", 1);
170170
var activities = GetActivities(localDateTime);
171171
var sessionActivity = activities.First(x => x.DisplayName.StartsWith(SessionActivityName));
172172
var nodeActivity = activities.First(x => x.DisplayName.StartsWith(NodeActivityName));
@@ -184,8 +184,8 @@ await session.ExecuteAsync(statement).ContinueWith(t =>
184184

185185
session.Execute(statement);
186186

187-
RetryUntilActivities(localDateTime, SessionActivityName, 1);
188-
RetryUntilActivities(localDateTime, NodeActivityName, 1);
187+
RetryUntilActivities(localDateTime, $"{SessionActivityName}({nameof(SimpleStatement)})", 1);
188+
RetryUntilActivities(localDateTime, $"{NodeActivityName}({nameof(SimpleStatement)})", 1);
189189

190190
var syncActivities = GetActivities(localDateTime);
191191
var syncSessionActivity = syncActivities.First(x => x.DisplayName.StartsWith(SessionActivityName));
@@ -354,7 +354,7 @@ public void AddOpenTelemetry_WhenMethodIsInvokedAfterQuery_TraceIdIsTheSameThrou
354354

355355
var prepareCount = 2 * this.AmountOfNodes; // 2 * because Mapper + LINQ, AmountOfNodes because PREPARE goes to every node by default
356356

357-
RetryUntilActivities(_testStartDateTime, SessionActivityName, 7 + prepareCount); // create + change keyspace + simple + 2xlinq(create+bound) + 2xmapper(create+bound) + PREPAREs
357+
RetryUntilActivities(_testStartDateTime, SessionActivityName, 7 + prepareCount, displayNameStartsWith: true); // create + change keyspace + simple + 2xlinq(create+bound) + 2xmapper(create+bound) + PREPAREs
358358
RetryUntilActivities(_testStartDateTime, secondMethodName, 1);
359359
RetryUntilActivities(_testStartDateTime, firstMethodName, 1);
360360
var activities = GetActivities(_testStartDateTime).ToList();
@@ -400,7 +400,7 @@ public async Task AddOpenTelemetry_WhenMethodIsInvokedAfterQuery_TraceIdIsTheSam
400400

401401
var prepareCount = 2 * this.AmountOfNodes; // 2 * because Mapper + LINQ, AmountOfNodes because PREPARE goes to every node by default
402402

403-
RetryUntilActivities(_testStartDateTime, SessionActivityName, 7 + prepareCount); // create + change keyspace + simple + 2xlinq(create+bound) + 2xmapper(create+bound) + PREPAREs
403+
RetryUntilActivities(_testStartDateTime, SessionActivityName, 7 + prepareCount, displayNameStartsWith: true); // create + change keyspace + simple + 2xlinq(create+bound) + 2xmapper(create+bound) + PREPAREs
404404
RetryUntilActivities(_testStartDateTime, secondMethodName, 1);
405405
RetryUntilActivities(_testStartDateTime, firstMethodName, 1);
406406
var activities = GetActivities(_testStartDateTime).ToList();
@@ -457,8 +457,8 @@ public void AddOpenTelemetry_RetryOnNextHost_ShouldProduceOneErrorAndOneValidSpa
457457

458458
session.Execute(new SimpleStatement(cql).SetConsistencyLevel(ConsistencyLevel.One));
459459

460-
RetryUntilActivities(_testStartDateTime, SessionActivityName, 1);
461-
RetryUntilActivities(_testStartDateTime, NodeActivityName, 2);
460+
RetryUntilActivities(_testStartDateTime, $"{SessionActivityName}({nameof(SimpleStatement)})", 1);
461+
RetryUntilActivities(_testStartDateTime, $"{NodeActivityName}({nameof(SimpleStatement)})", 2);
462462
var activities = GetActivities(_testStartDateTime);
463463
var sessionActivity = activities.First(x => x.DisplayName.StartsWith(SessionActivityName));
464464
var validNodeActivity = activities.First(x => x.DisplayName.StartsWith(NodeActivityName) && x.Status != ActivityStatusCode.Error);
@@ -511,8 +511,8 @@ public void AddOpenTelemetry_WithSpeculativeExecutionOnSameNode_ShouldProduceVal
511511

512512
session.Execute(new SimpleStatement(cql).SetConsistencyLevel(ConsistencyLevel.One).SetIdempotence(true));
513513

514-
RetryUntilActivities(_testStartDateTime, SessionActivityName, 1);
515-
RetryUntilActivities(_testStartDateTime, NodeActivityName, 3);
514+
RetryUntilActivities(_testStartDateTime, $"{SessionActivityName}({nameof(SimpleStatement)})", 1);
515+
RetryUntilActivities(_testStartDateTime, $"{NodeActivityName}({nameof(SimpleStatement)})", 3);
516516
var activities = GetActivities(_testStartDateTime);
517517
var sessionActivity = activities.First(x => x.DisplayName.StartsWith(SessionActivityName));
518518
var validNodeActivity1 = activities.Where(x => x.DisplayName.StartsWith(NodeActivityName)).ElementAt(0);
@@ -563,7 +563,7 @@ public void AddOpenTelemetry_WithPaginationOnQuery_ShouldMultipleSpansForTheSame
563563
var rs = session.Execute(new SimpleStatement($"SELECT * FROM {KeyspaceName}.song").SetPageSize(1));
564564
_ = rs.ToList();
565565

566-
RetryUntilActivities(_testStartDateTime, SessionActivityName, 2, true);
566+
RetryUntilActivities(_testStartDateTime, $"{SessionActivityName}({nameof(SimpleStatement)}) {KeyspaceName}", 2, true);
567567
var sessionActivities = GetActivities(localDateTime).Where(x => x.DisplayName.StartsWith(SessionActivityName)).ToList();
568568

569569
Assert.Greater(sessionActivities.Count, 1);
@@ -680,14 +680,14 @@ public async Task AddOpenTelemetry_Mapper_ExpectedPrepareActivities(bool prepare
680680

681681
RetryUntilActivities(localDateTime, $"{SessionActivityName}({nameof(BoundStatement)}) {keyspace}", 1);
682682
RetryUntilActivities(localDateTime, $"{NodeActivityName}({nameof(BoundStatement)}) {keyspace}", 1);
683-
RetryUntilActivities(localDateTime, $"{SessionActivityName}({nameof(PrepareRequest)})", prepareOnAllHosts ? AmountOfNodes : 1);
684-
RetryUntilActivities(localDateTime, $"{NodeActivityName}({nameof(PrepareRequest)})", prepareOnAllHosts ? AmountOfNodes : 1);
683+
RetryUntilActivities(localDateTime, $"{SessionActivityName}({nameof(PrepareRequest)}) {keyspace}", prepareOnAllHosts ? AmountOfNodes : 1);
684+
RetryUntilActivities(localDateTime, $"{NodeActivityName}({nameof(PrepareRequest)}) {keyspace}", prepareOnAllHosts ? AmountOfNodes : 1);
685685

686686
var allActivities = GetActivities(localDateTime).ToList();
687687
var boundStmtSessionActivity = allActivities.Single(x => x.DisplayName == $"{SessionActivityName}({nameof(BoundStatement)}) {keyspace}");
688688
var boundStmtNodeActivity = allActivities.Single(x => x.DisplayName == $"{NodeActivityName}({nameof(BoundStatement)}) {keyspace}");
689-
var prepareStmtSessionActivities = allActivities.Where(x => x.DisplayName == $"{SessionActivityName}({nameof(PrepareRequest)})").ToList();
690-
var prepareStmtNodeActivities = allActivities.Where(x => x.DisplayName == $"{NodeActivityName}({nameof(PrepareRequest)})").ToList();
689+
var prepareStmtSessionActivities = allActivities.Where(x => x.DisplayName == $"{SessionActivityName}({nameof(PrepareRequest)}) {keyspace}").ToList();
690+
var prepareStmtNodeActivities = allActivities.Where(x => x.DisplayName == $"{NodeActivityName}({nameof(PrepareRequest)}) {keyspace}").ToList();
691691

692692
Assert.IsNull(boundStmtSessionActivity.ParentId);
693693
Assert.AreEqual(boundStmtSessionActivity.TraceId, boundStmtNodeActivity.TraceId);
@@ -863,7 +863,7 @@ private void SecondMethod(string activityName)
863863
}
864864
}
865865

866-
private void RetryUntilActivities(DateTime dt, string displayName, int count, bool greaterOrEqual = false, bool displayNameStartsWith = true, int retries = 50, int delayPerRetryMs = 100)
866+
private void RetryUntilActivities(DateTime dt, string displayName, int count, bool greaterOrEqual = false, bool displayNameStartsWith = false, int retries = 50, int delayPerRetryMs = 100)
867867
{
868868
var lastCount = 0;
869869
for (var i = 0; i < retries; i++)

src/Cassandra.Tests/OpenTelemetryTests.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public async Task OpenTelemetryRequestTrackerOnStartAsync_StatementIsNull_DbQuer
4444
var cassandraInstrumentationOptions = new CassandraInstrumentationOptions { IncludeDatabaseStatement = true };
4545
var requestTracker = new OpenTelemetryRequestTracker(cassandraInstrumentationOptions);
4646
IStatement statement = null;
47-
var requestTrackingInfo = new RequestTrackingInfo(statement);
47+
var requestTrackingInfo = new RequestTrackingInfo(statement, null);
4848

4949
await requestTracker.OnStartAsync(requestTrackingInfo).ConfigureAwait(false);
5050

@@ -72,7 +72,7 @@ public async Task OpenTelemetryRequestTrackerOnStartAsync_ListenerNotSampling_Ac
7272
var cassandraInstrumentationOptions = new CassandraInstrumentationOptions { IncludeDatabaseStatement = true };
7373
var requestTracker = new OpenTelemetryRequestTracker(cassandraInstrumentationOptions);
7474
IStatement statement = null;
75-
var requestTrackingInfo = new RequestTrackingInfo(statement);
75+
var requestTrackingInfo = new RequestTrackingInfo(statement, null);
7676

7777
await requestTracker.OnStartAsync(requestTrackingInfo).ConfigureAwait(false);
7878

@@ -99,7 +99,7 @@ public async Task OpenTelemetryRequestTrackerOnNodeStartAsync_StatementIsNull_Db
9999
var requestTracker = new OpenTelemetryRequestTracker(cassandraInstrumentationOptions);
100100

101101
IStatement statement = null;
102-
var requestTrackingInfo = new RequestTrackingInfo(statement);
102+
var requestTrackingInfo = new RequestTrackingInfo(statement, null);
103103

104104
var host = new Host(new System.Net.IPEndPoint(1, 9042), new ConstantReconnectionPolicy(1));
105105
var hostTrackingInfo = new HostTrackingInfo(host, Guid.NewGuid());
@@ -132,7 +132,7 @@ public async Task OpenTelemetryRequestTrackerOnNodeStartAsync_ListenerNotSamplin
132132
var requestTracker = new OpenTelemetryRequestTracker(cassandraInstrumentationOptions);
133133

134134
IStatement statement = null;
135-
var requestTrackingInfo = new RequestTrackingInfo(statement);
135+
var requestTrackingInfo = new RequestTrackingInfo(statement, null);
136136

137137
var host = new Host(new System.Net.IPEndPoint(1, 9042), new ConstantReconnectionPolicy(1));
138138
var hostTrackingInfo = new HostTrackingInfo(host, Guid.NewGuid());

src/Cassandra.Tests/RequestExecutionTests.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public void Should_ThrowException_When_NoValidHosts(bool currentHostRetry)
3939
var mockSession = Mock.Of<IInternalSession>();
4040
var mockStatement = Mock.Of<IStatement>();
4141
var requestHandlerFactory = Mock.Of<IRequestHandlerFactory>();
42-
var requestTrackingInfo = new RequestTrackingInfo(mockStatement);
42+
var requestTrackingInfo = new RequestTrackingInfo(mockStatement, null);
4343
Mock.Get(requestHandlerFactory)
4444
.Setup(r => r.CreateAsync(
4545
It.IsAny<IInternalSession>(),
@@ -69,7 +69,7 @@ public void Should_NotThrowException_When_AValidHostIsObtained(bool currentHostR
6969
var mockSession = Mock.Of<IInternalSession>();
7070
var requestHandlerFactory = Mock.Of<IRequestHandlerFactory>();
7171
var mockStatement = Mock.Of<IStatement>();
72-
var requestTrackingInfo = new RequestTrackingInfo(mockStatement);
72+
var requestTrackingInfo = new RequestTrackingInfo(mockStatement, null);
7373
Mock.Get(requestHandlerFactory)
7474
.Setup(r => r.CreateAsync(
7575
It.IsAny<IInternalSession>(),
@@ -106,7 +106,7 @@ public void Should_SendRequest_When_AConnectionIsObtained(bool currentHostRetry)
106106
var mockSession = Mock.Of<IInternalSession>();
107107
var requestHandlerFactory = Mock.Of<IRequestHandlerFactory>();
108108
var mockStatement = Mock.Of<IStatement>();
109-
var requestTrackingInfo = new RequestTrackingInfo(mockStatement);
109+
var requestTrackingInfo = new RequestTrackingInfo(mockStatement, null);
110110
Mock.Get(requestHandlerFactory)
111111
.Setup(r => r.CreateAsync(
112112
It.IsAny<IInternalSession>(),
@@ -157,7 +157,7 @@ public void Should_RetryRequestToSameHost_When_ConnectionFailsAndRetryDecisionIs
157157
var mockSession = Mock.Of<IInternalSession>();
158158
var requestHandlerFactory = Mock.Of<IRequestHandlerFactory>();
159159
var mockStatement = Mock.Of<IStatement>();
160-
var requestTrackingInfo = new RequestTrackingInfo(mockStatement);
160+
var requestTrackingInfo = new RequestTrackingInfo(mockStatement, null);
161161
Mock.Get(requestHandlerFactory)
162162
.Setup(r => r.CreateAsync(
163163
It.IsAny<IInternalSession>(),

src/Cassandra/RequestTrackingInfo.cs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,17 @@ namespace Cassandra
2525
/// </summary>
2626
public sealed class RequestTrackingInfo
2727
{
28-
internal RequestTrackingInfo(IStatement statement)
28+
private RequestTrackingInfo(string sessionKeyspace)
29+
{
30+
SessionKeyspace = sessionKeyspace;
31+
}
32+
33+
internal RequestTrackingInfo(IStatement statement, string sessionKeyspace) : this(sessionKeyspace)
2934
{
3035
Statement = statement;
3136
}
3237

33-
internal RequestTrackingInfo(InternalPrepareRequest prepareRequest)
38+
internal RequestTrackingInfo(InternalPrepareRequest prepareRequest, string sessionKeyspace) : this(sessionKeyspace)
3439
{
3540
PrepareRequest = new PrepareRequest(prepareRequest.Query, prepareRequest.Keyspace);
3641
}
@@ -46,6 +51,11 @@ internal RequestTrackingInfo(InternalPrepareRequest prepareRequest)
4651
/// If this request is a PREPARE request, then this property is set.
4752
/// </summary>
4853
public PrepareRequest PrepareRequest { get; }
54+
55+
/// <summary>
56+
/// Returns the session's current keyspace (if it was set).
57+
/// </summary>
58+
public string SessionKeyspace { get; }
4959

5060
}
5161
}

src/Cassandra/Requests/PrepareHandler.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ public async Task<PreparedStatement> Prepare(
7070

7171
public static async Task<Tuple<RequestTrackingInfo, IRequestObserver>> CreateRequestObserverAsync(IInternalSession session, InternalPrepareRequest request)
7272
{
73-
var requestTrackingInfo = new RequestTrackingInfo(request);
73+
var requestTrackingInfo = new RequestTrackingInfo(request, session.Keyspace);
7474
var observer = session.ObserverFactory.CreateRequestObserver();
7575
await observer.OnRequestStartAsync(requestTrackingInfo).ConfigureAwait(false);
7676
return new Tuple<RequestTrackingInfo, IRequestObserver>(requestTrackingInfo, observer);

src/Cassandra/Requests/RequestHandler.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -522,7 +522,7 @@ private void ScheduleNext(Host currentHost)
522522

523523
public static async Task<Tuple<RequestTrackingInfo, IRequestObserver>> CreateRequestObserver(IInternalSession session, IStatement statement)
524524
{
525-
var requestTrackingInfo = new RequestTrackingInfo(statement);
525+
var requestTrackingInfo = new RequestTrackingInfo(statement, session.Keyspace);
526526
var observer = session.ObserverFactory.CreateRequestObserver();
527527
await observer.OnRequestStartAsync(requestTrackingInfo).ConfigureAwait(false);
528528
return new Tuple<RequestTrackingInfo, IRequestObserver>(requestTrackingInfo, observer);

src/Extensions/Cassandra.OpenTelemetry/OpenTelemetryRequestTracker.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,8 @@ private string GetNodeOperationName(RequestTrackingInfo request)
293293

294294
private string GetKeyspace(RequestTrackingInfo request)
295295
{
296-
return request.Statement == null ? request.PrepareRequest?.Keyspace : request.Statement?.Keyspace;
296+
var ks = request.Statement == null ? request.PrepareRequest?.Keyspace : request.Statement?.Keyspace;
297+
return ks ?? request.SessionKeyspace;
297298
}
298299

299300
private string GetQueryText(RequestTrackingInfo request)

0 commit comments

Comments
 (0)