8000 Add Activity for Commit and Rollback. · mysql-net/MySqlConnector@225a0d2 · GitHub
[go: up one dir, main page]

Skip to content

Commit 225a0d2

Browse files
committed
Add Activity for Commit and Rollback.
Signed-off-by: Bradley Grainger <bgrainger@gmail.com>
1 parent 2284b2d commit 225a0d2

File tree

4 files changed

+39
-13
lines changed

4 files changed

+39
-13
lines changed

src/MySqlConnector/Core/ServerSession.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -335,14 +335,15 @@ public void FinishQuerying()
335335

336336
public void SetTimeout(int timeoutMilliseconds) => m_payloadHandler!.ByteHandler.RemainingTimeout = timeoutMilliseconds;
337337

338-
public Activity? StartActivity(string name, string tagName1, object tagValue1)
338+
public Activity? StartActivity(string name, string? tagName1 = null, object? tagValue1 = null)
339339
{
340340
var activity = ActivitySourceHelper.StartActivity(name, m_activityTags);
341341
if (activity is { IsAllDataRequested: true })
342342
{
343343
if (DatabaseOverride is not null)
344344
activity.SetTag(ActivitySourceHelper.DatabaseNameTagName, DatabaseOverride);
345-
activity.SetTag(tagName1, tagValue1);
345+
if (tagName1 is not null)
346+
activity.SetTag(tagName1, tagValue1);
346347
}
347348
return activity;
348349
}

src/MySqlConnector/MySqlCommand.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,7 @@ public override void Prepare()
131131
bool IMySqlCommand.AllowUserVariables => AllowUserVariables;
132132

133133
internal bool AllowUserVariables { get; set; }
134+
internal bool NoActivity { get; set; }
134135

135136
private Task PrepareAsync(IOBehavior ioBehavior, CancellationToken cancellationToken)
136137
{
@@ -316,7 +317,7 @@ internal Task<MySqlDataReader> ExecuteReaderNoResetTimeoutAsync(CommandBehavior
316317
if (!IsValid(out var exception))
317318
return Utility.TaskFromException<MySqlDataReader>(exception);
318319

319-
var activity = Connection!.Session.StartActivity(ActivitySourceHelper.ExecuteActivityName,
320+
var activity = NoActivity ? null : Connection!.Session.StartActivity(ActivitySourceHelper.ExecuteActivityName,
320321
ActivitySourceHelper.DatabaseStatementTagName, CommandText);
321322
m_commandBehavior = behavior;
322323
return CommandExecutor.ExecuteReaderAsync(new IMySqlCommand[] { this }, SingleCommandPayloadCreator.Instance, behavior, activity, ioBehavior, cancellationToken);

src/MySqlConnector/MySqlConnection.cs

Lines changed: 1 addition & 1 deletion
< 8000 div data-testid="neutral diffstat" class="DiffSquares-module__diffSquare--h5kjy DiffSquares-module__neutral--VlyoP">
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ private async ValueTask<MySqlTransaction> BeginTransactionAsync(IsolationLevel i
148148
_ => throw new NotSupportedException("IsolationLevel.{0} is not supported.".FormatInvariant(isolationLevel))
149149
};
150150

151-
using (var cmd = new MySqlCommand($"set session transaction isolation level {isolationLevelValue};", this))
151+
using (var cmd = new MySqlCommand($"set session transaction isolation level {isolationLevelValue};", this) { NoActivity = true })
152152
{
153153
await cmd.ExecuteNonQueryAsync(ioBehavior, cancellationToken).ConfigureAwait(false);
154154

src/MySqlConnector/MySqlTransaction.cs

Lines changed: 33 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,20 @@ private async Task CommitAsync(IOBehavior ioBehavior, CancellationToken cancella
2929
{
3030
VerifyValid();
3131

32-
using (var cmd = new MySqlCommand("commit", Connection, this))
33-
await cmd.ExecuteNonQueryAsync(ioBehavior, cancellationToken).ConfigureAwait(false);
34-
Connection!.CurrentTransaction = null;
35-
Connection = null;
32+
using var activity = Connection!.Session.StartActivity("Commit");
33+
try
34+
{
35+
using (var cmd = new MySqlCommand("commit", Connection, this) { NoActivity = true })
36+
await cmd.ExecuteNonQueryAsync(ioBehavior, cancellationToken).ConfigureAwait(false);
37+
Connection!.CurrentTransaction = null;
38+
Connection = null;
39+
activity.SetSuccess();
40+
}
41+
catch (Exception ex) when (activity is { IsAllDataRequested: true })
42+
{
43+
activity.SetException(ex);
44+
throw;
45+
}
3646
}
3747

3848
/// <summary>
@@ -55,8 +65,7 @@ private async Task RollbackAsync(IOBehavior ioBehavior, CancellationToken cancel
5565
{
5666
VerifyValid();
5767

58-
using (var cmd = new MySqlCommand("rollback", Connection, this))
59-
await cmd.ExecuteNonQueryAsync(ioBehavior, cancellationToken).ConfigureAwait(false);
68+
await DoRollback(ioBehavior, cancellationToken).ConfigureAwait(false);
6069
Connection!.CurrentTransaction = null;
6170
Connection = null;
6271
}
@@ -146,7 +155,7 @@ private async Task ExecuteSavepointAsync(string command, string savepointName, I
146155
if (savepointName.Length == 0)
147156
throw new ArgumentException("savepointName must not be empty", nameof(savepointName));
148157

149-
using var cmd = new MySqlCommand(command + "savepoint " + QuoteIdentifier(savepointName), Connection, this);
158+
using var cmd = new MySqlCommand(command + "savepoint " + QuoteIdentifier(savepointName), Connection, this) { NoActivity = true };
150159
await cmd.ExecuteNonQueryAsync(ioBehavior, cancellationToken).ConfigureAwait(false);
151160
}
152161

@@ -224,8 +233,7 @@ private async Task DoDisposeAsync(IOBehavior ioBehavior, CancellationToken cance
224233
{
225234
try
226235
{
227-
using var cmd = new MySqlCommand("rollback", Connection, this);
228-
await cmd.ExecuteNonQueryAsync(ioBehavior, cancellationToken).ConfigureAwait(false);
236+
await DoRollback(ioBehavior, cancellationToken).ConfigureAwait(false);
229237
}
230238
catch (IOException)
231239
{
@@ -245,6 +253,22 @@ internal MySqlTransaction(MySqlConnection connection, IsolationLevel isolationLe
245253
IsolationLevel = isolationLevel;
246254
}
247255

256+
private async Task DoRollback(IOBehavior ioBehavior, CancellationToken cancellationToken)
257+
{
258+
using var activity = Connection!.Session.StartActivity("Rollback");
259+
try
260+
{
261+
using var cmd = new MySqlCommand("rollback", Connection, this) { NoActivity = true };
262+
await cmd.ExecuteNonQueryAsync(ioBehavior, cancellationToken).ConfigureAwait(false);
263+
activity.SetSuccess();
264+
}
265+
catch (Exception ex) when(activity is { IsAllDataRequested: true })
266+
{
267+
activity.SetException(ex);
268+
throw;
269+
}
270+
}
271+
248272
private void VerifyValid()
249273
{
250274
if (m_isDisposed)

0 commit comments

Comments
 (0)
0