Skip to content

CloneWith ignores Pooling=false with connection from MySqlDataSource #1306

Closed
@bgrainger

Description

@bgrainger

When a connection is obtained from a MySqlDataSource, cancelling a command executed on that connection uses a pooled connection to cancel. It should create and use a new non-pooled connection.

Repro code:

var loggerFactory = LoggerFactory.Create(builder =>
{
	builder.AddFilter("Microsoft", LogLevel.Information)
	   .AddFilter("System", LogLevel.Information)
	   .AddFilter("MySqlConnector", LogLevel.Trace)
	   .AddConsole();
});

var dataSource = new MySqlDataSourceBuilder("server=localhost;userid=root;password=pass")
	.UseLoggerFactory(loggerFactory)
	.Build();
using var connection = dataSource.OpenConnection();

using var command = new MySqlCommand("DO SLEEP(50);", connection);
using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(2));
await command.ExecuteNonQueryAsync(cts.Token);

Log:

info: MySqlConnector.ConnectionPool[3001]
      Creating new connection pool 1 for Server=localhost;User ID=root
info: MySqlConnector.MySqlDataSource[1000]
      Data source 1 created with pool 1
trce: MySqlConnector.ConnectionPool[3000]
      Pool 1 waiting for an available session
trce: MySqlConnector.MySqlConnection[2000]
      Created new session 1.1
dbug: MySqlConnector.ConnectionPool[3018]
      Pool 1 has no pooled session available; created new session 1.1
trce: MySqlConnector.MySqlConnection[2122]
      Session 1.1 connecting to IP address ::1 (1 of 2) for host name localhost (1 of 1)
trce: MySqlConnector.MySqlConnection[2126]
      Session 1.1 connected to IP address ::1 for host name localhost with local port 61868
trce: MySqlConnector.MySqlConnection[2101]
      Session 1.1 server sent auth plugin name caching_sha2_password
dbug: MySqlConnector.MySqlConnection[2104]
      Session 1.1 made connection; server version 8.0.32; connection ID 9; supports: compression False, attributes True, deprecate EOF True, SSL True, session track True, pipelining True, query attributes True
trce: MySqlConnector.MySqlConnection[2131]
      Session 1.1 initializing TLS connection
dbug: MySqlConnector.MySqlConnection[2145]
      Session 1.1 connected TLS using Tls12 and TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
trce: MySqlConnector.MySqlConnection[2153]
      Session 1.1 creating connection attributes
trce: MySqlConnector.MySqlConnection[2115]
      Session 1.1 switching to authentication method caching_sha2_password
trce: MySqlConnector.ConnectionPool[3007]
      Pool 1 returning new session 1.1 to caller; 1 leased session(s)
trce: MySqlConnector.MySqlCommand[2202]
      Session 1.1 ExecuteReader Asynchronous for 1 command(s)
trce: MySqlConnector.MySqlCommand[2204]
      Session 1.1 preparing command payload for: DO SLEEP(50);
dbug: MySqlConnector.MySqlConnection[2304]
      Session 1.1 will cancel command 2 (1 attempts); CommandText: DO SLEEP(50);
dbug: MySqlConnector.MySqlConnection[2301]
      Command 2 for session 1.1 has been canceled via Cancel()
trce: MySqlConnector.ConnectionPool[3000]
      Pool 1 waiting for an available session
trce: MySqlConnector.MySqlConnection[2000]
      Created new session 1.2
dbug: MySqlConnector.ConnectionPool[3018]
      Pool 1 has no pooled session available; created new session 1.2
trce: MySqlConnector.MySqlConnection[2122]
      Session 1.2 connecting to IP address ::1 (1 of 2) for host name localhost (1 of 1)
trce: MySqlConnector.MySqlConnection[2126]
      Session 1.2 connected to IP address ::1 for host name localhost with local port 61869
trce: MySqlConnector.MySqlConnection[2101]
      Session 1.2 server sent auth plugin name caching_sha2_password
dbug: MySqlConnector.MySqlConnection[2104]
      Session 1.2 made connection; server version 8.0.32; connection ID 10; supports: compression False, attributes True, deprecate EOF True, SSL True, session track True, pipelining True, query attributes True
trce: MySqlConnector.MySqlConnection[2131]
      Session 1.2 initializing TLS connection
dbug: MySqlConnector.MySqlConnection[2145]
      Session 1.2 connected TLS using Tls12 and TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
trce: MySqlConnector.MySqlConnection[2115]
      Session 1.2 switching to authentication method caching_sha2_password
trce: MySqlConnector.ConnectionPool[3007]
      Pool 1 returning new session 1.2 to caller; 2 leased session(s)
info: MySqlConnector.MySqlConnection[2305]
      Session 1.1 canceling command 2 from session 1.2; CommandText: DO SLEEP(50);
dbug: MySqlConnector.MySqlConnection[2307]
      Session 1.2 canceling command 2 with text KILL QUERY 9
trce: MySqlConnector.MySqlCommand[2202]
      Session 1.2 ExecuteReader Synchronous for 1 command(s)
trce: MySqlConnector.MySqlCommand[2204]
      Session 1.2 preparing command payload for: KILL QUERY 9
trce: MySqlConnector.MySqlConnection[2201]
      Session 1.1 entering FinishQuerying; state is CancelingQuery
trce: MySqlConnector.MySqlConnection[2201]
      Session 1.2 entering FinishQuerying; state is Querying
dbug: MySqlConnector.MySqlConnection[2308]
      Session 1.1 sending 'SLEEP(0)' command to clear pending cancellation
trce: MySqlConnector.MySqlConnection[2003]
      Session 1.2 returning to pool 1
trce: MySqlConnector.ConnectionPool[3010]
      Pool 1 receiving session 1.2 back
trce: MySqlConnector.MySqlConnection[2003]
      Session 1.1 returning to pool 1
trce: MySqlConnector.ConnectionPool[3010]
      Pool 1 receiving session 1.1 back
trce: MySqlConnector.ConnectionPool[3100]
      Pool 1 reaping connection pool
trce: MySqlConnector.ConnectionPool[3015]
      Pool 1 recovered no sessions

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions