8000 Cleanup | SqlDiagnosticListener Classes (#3232) · dotnet/SqlClient@33083f3 · GitHub
[go: up one dir, main page]

Skip to content

Commit 33083f3

Browse files
authored
Cleanup | SqlDiagnosticListener Classes (#3232)
* Light cleanup of DiagnosticScope classes * Very light cleanup of SqlClient* classes * Some more heavy cleanup on SqlDiagnosticListener
1 parent adce139 commit 33083f3

21 files changed

+623
-311
lines changed

src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlCommand.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ protected override void AfterCleared(SqlCommand owner)
159159
private static bool _forceRetryableEnclaveQueryExecutionExceptionDuringGenerateEnclavePackage = false;
160160
#endif
161161

162-
private static readonly SqlDiagnosticListener s_diagnosticListener = new SqlDiagnosticListener(SqlDiagnosticListener.DiagnosticListenerName);
162+
private static readonly SqlDiagnosticListener s_diagnosticListener = new SqlDiagnosticListener();
163163
private bool _parentOperationStarted = false;
164164

165165
internal static readonly Action<object> s_cancelIgnoreFailure = CancelIgnoreFailureCallback;

src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlConnection.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ private enum CultureCheckState : uint
6767
private SqlRetryLogicBaseProvider _retryLogicProvider;
6868

6969
// diagnostics listener
70-
private static readonly SqlDiagnosticListener s_diagnosticListener = new SqlDiagnosticListener(SqlDiagnosticListener.DiagnosticListenerName);
70+
private static readonly SqlDiagnosticListener s_diagnosticListener = new SqlDiagnosticListener();
7171

7272
// Transient Fault handling flag. This is needed to convey to the downstream mechanism of connection establishment, if Transient Fault handling should be used or not
7373
// The downstream handling of Connection open is the same for idle connection resiliency. Currently we want to apply transient fault handling only to the connections opened

src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlTransaction.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ namespace Microsoft.Data.SqlClient
1313
/// <include file='../../../../../../../doc/snippets/Microsoft.Data.SqlClient/SqlTransaction.xml' path='docs/members[@name="SqlTransaction"]/SqlTransaction/*' />
1414
public sealed partial class SqlTransaction : DbTransaction
1515
{
16-
private static readonly SqlDiagnosticListener s_diagnosticListener = new(SqlDiagnosticListener.DiagnosticListenerName);
16+
private static readonly SqlDiagnosticListener s_diagnosticListener = new();
1717

1818
////////////////////////////////////////////////////////////////////////////////////////
1919
// PUBLIC METHODS

src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/Diagnostics/DiagnosticScope.netcore.cs

Lines changed: 47 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,27 @@
99

1010
namespace Microsoft.Data.SqlClient.Diagnostics
1111
{
12-
internal ref struct DiagnosticScope //: IDisposable //ref structs cannot implement interfaces but the compiler will use pattern matching
12+
internal ref struct DiagnosticScope //: IDisposable
1313
{
1414
private const int CommandOperation = 1;
1515
private const int ConnectionOpenOperation = 2;
1616

17+
private readonly object _context1;
18+
private readonly object _context2;
1719
private readonly SqlDiagnosticListener _diagnostics;
1820
private readonly int _operation;
19-
private readonly string _operationName;
2021
private readonly Guid _operationId;
21-
private readonly object _context1;
22-
private readonly object _context2;
22+
private readonly string _operationName;
23+
2324
private Exception _exception;
2425

25-
private DiagnosticScope(SqlDiagnosticListener diagnostics, int operation, Guid operationsId, string operationName, object context1, object context2)
26+
private DiagnosticScope(
27+
SqlDiagnosticListener diagnostics,
28+
int operation,
29+
Guid operationsId,
30+
string operationName,
31+
object context1,
32+
object context2)
2633
{
2734
_diagnostics = diagnostics;
2835
_operation = operation;
@@ -33,46 +40,70 @@ private DiagnosticScope(SqlDiagnosticListener diagnostics, int operation, Guid o
3340
_exception = null;
3441
}
3542

43+
public static DiagnosticScope CreateCommandScope(
44+
SqlDiagnosticListener diagnostics,
45+
SqlCommand command,
46+
SqlTransaction transaction,
47+
[CallerMemberName]
48+
string operationName = "")
49+
{
50+
Guid operationId = diagnostics.WriteCommandBefore(command, transaction, operationName);
51+
return new DiagnosticScope(diagnostics, CommandOperation, operationId, operationName, command, transaction);
52+
}
53+
54+
// Although ref structs do not allow for inheriting from interfaces (< C#13), but the
55+
// compiler will know to treat this like an IDisposable (> C# 8)
3656
public void Dispose()
3757
{
3858
switch (_operation)
3959
{
4060
case CommandOperation:
4161
if (_exception != null)
4262
{
43-
_diagnostics.WriteCommandError(_operationId, (SqlCommand)_context1, (SqlTransaction)_context2, _exception, _operationName);
63+
_diagnostics.WriteCommandError(
64+
_operationId,
65+
(SqlCommand)_context1,
66+
(SqlTransaction)_context2,
67+
_exception,
68+
_operationName);
4469
}
4570
else
4671
{
47-
_diagnostics.WriteCommandAfter(_operationId, (SqlCommand)_context1, (SqlTransaction)_context2, _operationName);
72+
_diagnostics.WriteCommandAfter(
73+
_operationId,
74+
(SqlCommand)_context1,
75+
(SqlTransaction)_context2,
76+
_operationName);
4877
}
4978
break;
5079

5180
case ConnectionOpenOperation:
5281
if (_exception != null)
5382
{
54-
_diagnostics.WriteConnectionOpenError(_operationId, (SqlConnection)_context1, _exception, _operationName);
83+
_diagnostics.WriteConnectionOpenError(
84+
_operationId,
85+
(SqlConnection)_context1,
86+
_exception,
87+
_operationName);
5588
}
5689
else
5790
{
58-
_diagnostics.WriteConnectionOpenAfter(_operationId, (SqlConnection)_context1, _operationName);
91+
_diagnostics.WriteConnectionOpenAfter(
92+
_operationId,
93+
(SqlConnection)_context1,
94+
_operationName);
5995
}
6096
break;
6197

62-
// ConnectionCloseOperation is not implemented because it is conditionally emitted and that requires manual calls to the write apis
98+
// ConnectionCloseOperation is not implemented because it is conditionally
99+
// emitted and that requires manual calls to the write apis
63100
}
64101
}
65102

66103
public void SetException(Exception ex)
67104
{
68105
_exception = ex;
69106
}
70-
71-
public static DiagnosticScope CreateCommandScope(SqlDiagnosticListener diagnostics, SqlCommand command, SqlTransaction transaction, [CallerMemberName] string operationName = "")
72-
{
73-
Guid operationId = diagnostics.WriteCommandBefore(command, transaction, operationName);
74-
return new DiagnosticScope(diagnostics, CommandOperation, operationId, operationName, command, transaction);
75-
}
76107
}
77108
}
78109

src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/Diagnostics/DiagnosticTransactionScope.netcore.cs

Lines changed: 92 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -10,22 +10,31 @@
1010

1111
namespace Microsoft.Data.SqlClient.Diagnostics
1212
{
13-
internal ref struct DiagnosticTransactionScope //: IDisposable //ref structs cannot implement interfaces but the compiler will use pattern matching
13+
internal ref struct DiagnosticTransactionScope //: IDisposable
1414
{
1515
public const int TransactionCommit = 1;
1616
public const int TransactionRollback = 2;
1717

18+
private readonly SqlConnection _connection;
1819
private readonly SqlDiagnosticListener _diagnostics;
1920
private readonly int _operation;
2021
private readonly Guid _operationId;
2122
private readonly string _operationName;
2223
private readonly IsolationLevel _isolationLevel;
23-
private readonly SqlConnection _connection;
2424
private readonly SqlInternalTransaction _transaction;
2525
private readonly string _transactionName;
26+
2627
private Exception _exception;
2728

28-
public DiagnosticTransactionScope(SqlDiagnosticListener diagnostics, int operation, Guid operationId, string operationName, IsolationLevel isolationLevel, SqlConnection connection, SqlInternalTransaction transaction, string transactionName)
29+
public DiagnosticTransactionScope(
30+
SqlDiagnosticListener diagnostics,
31+
int operation,
32+
Guid operationId,
33+
string operationName,
34+
IsolationLevel isolationLevel,
35+
SqlConnection connection,
36+
SqlInternalTransaction transaction,
37+
string transactionName)
2938
{
3039
_diagnostics = diagnostics;
3140
_operation = operation;
@@ -38,29 +47,105 @@ public DiagnosticTransactionScope(SqlDiagnosticListener diagnostics, int operati
3847
_exception = null;
3948
}
4049

50+
public static DiagnosticTransactionScope CreateTransactionCommitScope(
51+
SqlDiagnosticListener diagnostics,
52+
IsolationLevel isolationLevel,
53+
SqlConnection connection,
54+
SqlInternalTransaction transaction,
55+
[CallerMemberName]
56+
string operationName = "")
57+
{
58+
Guid operationId = diagnostics.WriteTransactionCommitBefore(
59+
isolationLevel,
60+
connection,
61+
transaction,
62+
operationName);
63+
return new DiagnosticTransactionScope(
64+
diagnostics,
65+
TransactionCommit,
66+
operationId,
67+
operationName,
68+
isolationLevel,
69+
connection,
70+
transaction,
71+
transactionName: null);
72+
}
73+
74+
public static DiagnosticTransactionScope CreateTransactionRollbackScope(
75+
SqlDiagnosticListener diagnostics,
76+
IsolationLevel isolationLevel,
77+
SqlConnection connection,
78+
SqlInternalTransaction transaction,
79+
string transactionName,
80+
[CallerMemberName]
81+
string operationName = "")
82+
{
83+
Guid operationId = diagnostics.WriteTransactionRollbackBefore(
84+
isolationLevel,
85+
connection,
86+
transaction,
87+
transactionName,
88+
operationName);
89+
return new DiagnosticTransactionScope(
90+
diagnostics,
91+
TransactionCommit,
92+
operationId,
93+
operationName,
94+
isolationLevel,
95+
connection,
96+
transaction,
97+
transactionName);
98+
}
99+
100+
// Although ref structs do not allow for inheriting from interfaces (< C#13), but the
101+
// compiler will know to treat this like an IDisposable (> C# 8)
41102
public void Dispose()
42103
{
43104
switch (_operation)
44105
{
45106
case TransactionCommit:
46107
if (_exception != null)
47108
{
48-
_diagnostics.WriteTransactionCommitError(_operationId, _isolationLevel, _connection, _transaction, _exception, _operationName);
109+
_diagnostics.WriteTransactionCommitError(
110+
_operationId,
111+
_isolationLevel,
112+
_connection,
113+
_transaction,
114+
_exception,
115+
_operationName);
49116
}
50117
else
51118
{
52-
_diagnostics.WriteTransactionCommitAfter(_operationId, _isolationLevel, _connection, _transaction, _operationName);
119+
_diagnostics.WriteTransactionCommitAfter(
120+
_operationId,
121+
_isolationLevel,
122+
_connection,
123+
_transaction,
124+
_operationName);
53125
}
54126
break;
55127

56128
case TransactionRollback:
57129
if (_exception != null)
58130
{
59-
_diagnostics.WriteTransactionRollbackError(_operationId, _isolationLevel, _connection, _transaction, _exception, _transactionName, _operationName);
131+
_diagnostics.WriteTransactionRollbackError(
132+
_operationId,
133+
_isolationLevel,
134+
_connection,
135+
_transaction,
136+
_exception,
137+
_transactionName,
138+
_operationName);
60139
}
61140
else
62141
{
63-
_diagnostics.WriteTransactionRollbackAfter(_operationId, _isolationLevel, _connection, _transaction, _transactionName, _operationName);
142+
_diagnostics.WriteTransactionRollbackAfter(
143+
_operationId,
144+
_isolationLevel,
145+
_connection,
146+
_transaction,
147+
_transactionName,
148+
_operationName);
64149
}
65150
break;
66151
}
@@ -70,18 +155,6 @@ public void SetException(Exception ex)
70155
{
71156
_exception = ex;
72157
}
73-
74-
public static DiagnosticTransactionScope CreateTransactionCommitScope(SqlDiagnosticListener diagnostics, IsolationLevel isolationLevel, SqlConnection connection, SqlInternalTransaction transaction, [CallerMemberName] string operationName = "")
75-
{
76-
Guid operationId = diagnostics.WriteTransactionCommitBefore(isolationLevel, connection, transaction, operationName);
77-
return new DiagnosticTransactionScope(diagnostics, TransactionCommit, operationId, operationName, isolationLevel, connection, transaction, null);
78-
}
79-
80-
public static DiagnosticTransactionScope CreateTransactionRollbackScope(SqlDiagnosticListener diagnostics, IsolationLevel isolationLevel, SqlConnection connection, SqlInternalTransaction transaction, string transactionName, [CallerMemberName] string operationName = "")
81-
{
82-
Guid operationId = diagnostics.WriteTransactionRollbackBefore(isolationLevel, connection, transaction, transactionName, operationName);
83-
return new DiagnosticTransactionScope(diagnostics, TransactionCommit, operationId, operationName, isolationLevel, connection, transaction, transactionName);
84-
}
85158
}
86159
}
87160

src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/Diagnostics/SqlClientCommandAfter.netcore.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,14 @@ public sealed class SqlClientCommandAfter : IReadOnlyList<KeyValuePair<string, o
1616
/// <include file='../../../../../../../doc/snippets/Microsoft.Data.SqlClient/SqlClientDiagnostic.xml' path='docs/members[@name="SqlClientCommandAfter"]/Name/*'/>
1717
public const string Name = "Microsoft.Da 10000 ta.SqlClient.WriteCommandAfter";
1818

19-
internal SqlClientCommandAfter(Guid operationId, string operation, long timestamp, Guid? connectionId, long? transactionId, SqlCommand command, IDictionary statistics)
19+
internal SqlClientCommandAfter(
20+
Guid operationId,
21+
string operation,
22+
long timestamp,
23+
Guid? connectionId,
24+
long? transactionId,
25+
SqlCommand command,
26+
IDictionary statistics)
2027
{
2128
OperationId = operationId;
2229
Operation = operation;

src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/Diagnostics/SqlClientCommandBefore.netcore.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,13 @@ public sealed class SqlClientCommandBefore : IReadOnlyList<KeyValuePair<string,
1616
/// <include file='../../../../../../../doc/snippets/Microsoft.Data.SqlClient/SqlClientDiagnostic.xml' path='docs/members[@name="SqlClientCommandBefore"]/SqlClientCommandBefore/*'/>
1717
public const string Name = "Microsoft.Data.SqlClient.WriteCommandBefore";
1818

19-
internal SqlClientCommandBefore(Guid operationId, string operation, long timestamp, Guid? connectionId, long? transactionId, SqlCommand command)
19+
internal SqlClientCommandBefore(
20+
Guid operationId,
21+
string operation,
22+
long timestamp,
23+
Guid? connectionId,
24+
long? transactionId,
25+
SqlCommand command)
2026
{
2127
OperationId = operationId;
2228
Operation = operation;

src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/Diagnostics/SqlClientCommandError.netcore.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,14 @@ public sealed class SqlClientCommandError : IReadOnlyList<KeyValuePair<string, o
1717

1818
public const string Name = "Microsoft.Data.SqlClient.WriteCommandError";
1919

20-
internal SqlClientCommandError(Guid operationId, string operation, long timestamp, Guid? connectionId, long? transactionId, SqlCommand command, Exception exception)
20+
internal SqlClientCommandError(
21+
Guid operationId,
22+
string operation,
23+
long timestamp,
24+
Guid? connectionId,
25+
long? transactionId,
26+
SqlCommand command,
27+
Exception exception)
2128
{
2229
OperationId = operationId;
2330
Operation = operation;

src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/Diagnostics/SqlClientConnectionCloseAfter.netcore.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,13 @@ public sealed class SqlClientConnectionCloseAfter : IReadOnlyList<KeyValuePair<s
1616
/// <include file='../../../../../../../doc/snippets/Microsoft.Data.SqlClient/SqlClientDiagnostic.xml' path='docs/members[@name="SqlClientConnectionCloseAfter"]/Name/*'/>
1717
public const string Name = "Microsoft.Data.SqlClient.WriteConnectionCloseAfter";
1818

19-
internal SqlClientConnectionCloseAfter(Guid operationId, string operation, long timestamp, Guid? connectionId, SqlConnection connection, IDictionary statistics)
19+
internal SqlClientConnectionCloseAfter(
20+
Guid operationId,
21+
string operation,
22+
long timestamp,
23+
Guid? connectionId,
24+
SqlConnection connection,
25+
IDictionary statistics)
2026
{
2127
OperationId = operationId;
2228
Operation = operation;

src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/Diagnostics/SqlClientConnectionCloseBefore.netcore.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,13 @@ public sealed class SqlClientConnectionCloseBefore : IReadOnlyList<KeyValuePair<
1616
/// <include file='../../../../../../../doc/snippets/Microsoft.Data.SqlClient/SqlClientDiagnostic.xml' path='docs/members[@name="SqlClientConnectionCloseBefore"]//*'/>
1717
public const string Name = "Microsoft.Data.SqlClient.WriteConnectionCloseBefore";
1818

19-
internal SqlClientConnectionCloseBefore(Guid operationId, string operation, long timestamp, Guid? connectionId, SqlConnection connection, IDictionary statistics)
19+
internal SqlClientConnectionCloseBefore(
20+
Guid operationId,
21+
string operation,
22+
long timestamp,
23+
Guid? connectionId,
24+
SqlConnection connection,
25+
IDictionary statistics)
2026
{
2127
OperationId = operationId;
2228
Operation = operation;

src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/Diagnostics/SqlClientConnectionCloseError.netcore.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,14 @@ public sealed class SqlClientConnectionCloseError : IReadOnlyList<KeyValuePair<s
1616
/// <include file='../../../../../../../doc/snippets/Microsoft.Data.SqlClient/SqlClientDiagnostic.xml' path='docs/members[@name="SqlClientConnectionCloseError"]/Name/*'/>
1717
public const string Name = "Microsoft.Data.SqlClient.WriteConnectionCloseError";
1818

19-
internal SqlClientConnectionCloseError(Guid operationId, string operation, long timestamp, Guid? connectionId, SqlConnection connection, IDictionary statistics, Exception ex)
19+
internal SqlClientConnectionCloseError(
20+
Guid operationId,
21+
string operation,
22+
long timestamp,
23+
Guid? connectionId,
24+
SqlConnection connection,
25+
IDictionary statistics,
26+
Exception ex)
2027
{
2128
OperationId = operationId;
2229
Operation = operation;

0 commit comments

Comments
 (0)
0