Type:
Bug
Priority:
Critical
Resolution:
Fixed
Affects Version/s:
10.3(EOL) , 10.4(EOL) , 10.5 , 10.6 , 10.7(EOL) , 10.8(EOL)
created after CONJ-948
Synchronous connectors can rely on OK_Packet/EOF_Packet server status's SERVER_STATUS_IN_TRANS flag that explicitly indicate if a transaction is currently active.
Java connector use that information to avoid issuing a rollback/commit command, skipping the command if there is no transaction.
Problem concerns only MyISAM that never set SERVER_STATUS_IN_TRANS flag. Still there is some case when there is some kind of lock : ( example from serg: )
create table t1 (a int ) engine=myisam;
insert t1 values (1);
and in another
this DROP TABLE will wait until the transaction ends.
either MyISAM should return SERVER_STATUS_IN_TRANS flag, so connector know there is really a commit to be issued.
either MyISAM doesn't set any lock. (It may be just an issue : for some metadata locks are taken on the object name , before the table is opened, before we know it's a MyISAM table.)
Either way is ok.
(Another solution would be to always issue a COMMIT/ROLLBACK statement when there is no need, but that would degrade performance dramatically for some application. For example when connections are given back to pools, pools generally issues a connection.rollback() to ensure connection state, and there is lots of application where that command would represent 25% of the commands)
{"report":{"fcp":1682.2999997138977,"ttfb":298.19999980926514,"pageVisibility":"visible","entityId":111873,"key":"jira.project.issue.view-issue","isInitial":true,"threshold":1000,"elementTimings":{},"userDeviceMemory":8,"userDeviceProcessors":32,"apdex":0.5,"journeyId":"208d1892-8ee8-4037-b4fc-d5dd2157dffe","navigationType":0,"readyForUser":1771.7999997138977,"redirectCount":0,"resourceLoadedEnd":2093.199999809265,"resourceLoadedStart":303.40000009536743,"resourceTiming":[{"duration":597.8999996185303,"initiatorType":"link","name":"https://jira.mariadb.org/s/2c21342762a6a02add1c328bed317ffd-CDN/lu2cib/820016/12ta74/0a8bac35585be7fc6c9cc5a0464cd4cf/_/download/contextbatch/css/_super/batch.css","startTime":303.40000009536743,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":303.40000009536743,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":901.2999997138977,"responseStart":0,"secureConnectionStart":0},{"duration":598.0999999046326,"initiatorType":"link","name":"https://jira.mariadb.org/s/7ebd35e77e471bc30ff0eba799ebc151-CDN/lu2cib/820016/12ta74/2bf333562ca6724060a9d5f1535471f6/_/download/contextbatch/css/jira.browse.project,project.issue.navigator,jira.view.issue,jira.general,jira.global,atl.general,-_super/batch.css?agile_global_admin_condition=true&jag=true&jira.create.linked.issue=true&slack-enabled=true","startTime":303.59999990463257,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":303.59999990463257,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":901.6999998092651,"responseStart":0,"secureConnectionStart":0},{"duration":607.5,"initiatorType":"script","name":"https://jira.mariadb.org/s/0917945aaa57108d00c5076fea35e069-CDN/lu2cib/820016/12ta74/0a8bac35585be7fc6c9cc5a0464cd4cf/_/download/contextbatch/js/_super/batch.js?locale=en","startTime":303.90000009536743,"connectEnd":303.90000009536743,"connectStart":303.90000009536743,"domainLookupEnd":303.90000009536743,"domainLookupStart":303.90000009536743,"fetchStart":303.90000009536743,"redirectEnd":0,"redirectStart":0,"requestStart":303.90000009536743,"responseEnd":911.4000000953674,"responseStart":911.4000000953674,"secureConnectionStart":303.90000009536743},{"duration":694.4000000953674,"initiatorType":"script","name":"https://jira.mariadb.org/s/2d8175ec2fa4c816e8023260bd8c1786-CDN/lu2cib/820016/12ta74/2bf333562ca6724060a9d5f1535471f6/_/download/contextbatch/js/jira.browse.project,project.issue.navigator,jira.view.issue,jira.general,jira.global,atl.general,-_super/batch.js?agile_global_admin_condition=true&jag=true&jira.create.linked.issue=true&locale=en&slack-enabled=true","startTime":304.09999990463257,"connectEnd":304.09999990463257,"connectStart":304.09999990463257,"domainLookupEnd":304.09999990463257,"domainLookupStart":304.09999990463257,"fetchStart":304.09999990463257,"redirectEnd":0,"redirectStart":0,"requestStart":304.09999990463257,"responseEnd":998.5,"responseStart":998.5,"secureConnectionStart":304.09999990463257},{"duration":697.8000001907349,"initiatorType":"script","name":"https://jira.mariadb.org/s/a9324d6758d385eb45c462685ad88f1d-CDN/lu2cib/820016/12ta74/c92c0caa9a024ae85b0ebdbed7fb4bd7/_/download/contextbatch/js/atl.global,-_super/batch.js?locale=en","startTime":304.2999997138977,"connectEnd":304.2999997138977,"connectStart":304.2999997138977,"domainLookupEnd":304.2999997138977,"domainLookupStart":304.2999997138977,"fetchStart":304.2999997138977,"redirectEnd":0,"redirectStart":0,"requestStart":304.2999997138977,"responseEnd":1002.0999999046326,"responseStart":1002.0999999046326,"secureConnectionStart":304.2999997138977},{"duration":698.1999998092651,"initiatorType":"script","name":"https://jira.mariadb.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/lu2cib/820016/12ta74/1.0/_/download/batch/jira.webresources:calendar-en/jira.webresources:calendar-en.js","startTime":304.40000009536743,"connectEnd":304.40000009536743,"connectStart":304.40000009536743,"domainLookupEnd":304.40000009536743,"domainLookupStart":304.40000009536743,"fetchStart":304.40000009536743,"redirectEnd":0,"redirectStart":0,"requestStart":304.40000009536743,"responseEnd":1002.5999999046326,"responseStart":1002.5999999046326,"secureConnectionStart":304.40000009536743},{"duration":698.2000002861023,"initiatorType":"script","name":"https://jira.mariadb.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/lu2cib/820016/12ta74/1.0/_/download/batch/jira.webresources:calendar-localisation-moment/jira.webresources:calendar-localisation-moment.js","startTime":304.69999980926514,"connectEnd":304.69999980926514,"connectStart":304.69999980926514,"domainLookupEnd":304.69999980926514,"domainLookupStart":304.69999980926514,"fetchStart":304.69999980926514,"redirectEnd":0,"redirectStart":0,"requestStart":304.69999980926514,"responseEnd":1002.9000000953674,"responseStart":1002.9000000953674,"secureConnectionStart":304.69999980926514},{"duration":887.7000002861023,"initiatorType":"link","name":"https://jira.mariadb.org/s/b04b06a02d1959df322d9cded3aeecc1-CDN/lu2cib/820016/12ta74/a2ff6aa845ffc9a1d22fe23d9ee791fc/_/download/contextbatch/css/jira.global.look-and-feel,-_super/batch.css","startTime":304.7999997138977,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":304.7999997138977,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":1192.5,"responseStart":0,"secureConnectionStart":0},{"duration":698.4000000953674,"initiatorType":"script","name":"https://jira.mariadb.org/rest/api/1.0/shortcuts/820016/47140b6e0a9bc2e4913da06536125810/shortcuts.js?context=issuenavigation&context=issueaction","startTime":305,"connectEnd":305,"connectStart":305,"domainLookupEnd":305,"domainLookupStart":305,"fetchStart":305,"redirectEnd":0,"redirectStart":0,"requestStart":305,"responseEnd":1003.4000000953674,"responseStart":1003.4000000953674,"secureConnectionStart":305},{"duration":887.7000002861023,"initiatorType":"link","name":"https://jira.mariadb.org/s/3ac36323ba5e4eb0af2aa7ac7211b4bb-CDN/lu2cib/820016/12ta74/d176f0986478cc64f24226b3d20c140d/_/download/contextbatch/css/com.atlassian.jira.projects.sidebar.init,-_super,-project.issue.navigator,-jira.view.issue/batch.css?jira.create.linked.issue=true","startTime":305.19999980926514,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":305.19999980926514,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":1192.9000000953674,"responseStart":0,"secureConnectionStart":0},{"duration":698.9000000953674,"initiatorType":"script","name":"https://jira.mariadb.org/s/5d5e8fe91fbc506585e83ea3b62ccc4b-CDN/lu2cib/820016/12ta74/d176f0986478cc64f24226b3d20c140d/_/download/contextbatch/js/com.atlassian.jira.projects.sidebar.init,-_super,-project.issue.navigator,-jira.view.issue/batch.js?jira.create.linked.issue=true&locale=en","startTime":305.2999997138977,"connectEnd":305.2999997138977,"connectStart":305.2999997138977,"domainLookupEnd":305.2999997138977,"domainLookupStart":305.2999997138977,"fetchStart":305.2999997138977,"redirectEnd":0,"redirectStart":0,"requestStart":305.2999997138977,"responseEnd":1004.1999998092651,"responseStart":1004.1999998092651,"secureConnectionStart":305.2999997138977},{"duration":1118.8000001907349,"initiatorType":"script","name":"https://jira.mariadb.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/lu2cib/820016/12ta74/1.0/_/download/batch/jira.webresources:bigpipe-js/jira.webresources:bigpipe-js.js","startTime":312.09999990463257,"connectEnd":312.09999990463257,"connectStart":312.09999990463257,"domainLookupEnd":312.09999990463257,"domainLookupStart":312.09999990463257,"fetchStart":312.09999990463257,"redirectEnd":0,"redirectStart":0,"requestStart":312.09999990463257,"responseEnd":1430.9000000953674,"responseStart":1430.9000000953674,"secureConnectionStart":312.09999990463257},{"duration":1730.5,"initiatorType":"script","name":"https://jira.mariadb.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/lu2cib/820016/12ta74/1.0/_/download/batch/jira.webresources:bigpipe-init/jira.webresources:bigpipe-init.js","startTime":340.19999980926514,"connectEnd":340.19999980926514,"connectStart":340.19999980926514,"domainLookupEnd":340.19999980926514,"domainLookupStart":340.19999980926514,"fetchStart":340.19999980926514,"redirectEnd":0,"redirectStart":0,"requestStart":340.19999980926514,"responseEnd":2070.699999809265,"responseStart":2070.699999809265,"secureConnectionStart":340.19999980926514},{"duration":199,"initiatorType":"xmlhttprequest","name":"https://jira.mariadb.org/rest/webResources/1.0/resources","startTime":1233,"connectEnd":1233,"connectStart":1233,"domainLookupEnd":1233,"domainLookupStart":1233,"fetchStart":1233,"redirectEnd":0,"redirectStart":0,"requestStart":1233,"responseEnd":1432,"responseStart":1432,"secureConnectionStart":1233},{"duration":462.5,"initiatorType":"link","name":"https://jira.mariadb.org/s/d5715adaadd168a9002b108b2b039b50-CDN/lu2cib/820016/12ta74/be4b45e9cec53099498fa61c8b7acba4/_/download/contextbatch/css/jira.project.sidebar,-_super,-project.issue.navigator,-jira.general,-jira.browse.project,-jira.view.issue,-jira.global,-atl.general,-com.atlassian.jira.projects.sidebar.init/batch.css?agile_global_admin_condition=true&jag=true&jira.create.linked.issue=true&slack-enabled=true","startTime":1610.1999998092651,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":1610.1999998092651,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":2072.699999809265,"responseStart":0,"secureConnectionStart":0},{"duration":462.30000019073486,"initiatorType":"script","name":"https://jira.mariadb.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/lu2cib/820016/12ta74/e65b778d185daf5aee24936755b43da6/_/download/contextbatch/js/browser-metrics-plugin.contrib,-_super,-project.issue.navigator,-jira.view.issue,-atl.general/batch.js?agile_global_admin_condition=true&jag=true&jira.create.linked.issue=true&slack-enabled=true","startTime":1611.1999998092651,"connectEnd":1611.1999998092651,"connectStart":1611.1999998092651,"domainLookupEnd":1611.1999998092651,"domainLookupStart":1611.1999998092651,"fetchStart":1611.1999998092651,"redirectEnd":0,"redirectStart":0,"requestStart":1611.1999998092651,"responseEnd":2073.5,"responseStart":2073.5,"secureConnectionStart":1611.1999998092651},{"duration":481.5,"initiatorType":"script","name":"https://jira.mariadb.org/s/097ae97cb8fbec7d6ea4bbb1f26955b9-CDN/lu2cib/820016/12ta74/be4b45e9cec53099498fa61c8b7acba4/_/download/contextbatch/js/jira.project.sidebar,-_super,-project.issue.navigator,-jira.general,-jira.browse.project,-jira.view.issue,-jira.global,-atl.general,-com.atlassian.jira.projects.sidebar.init/batch.js?agile_global_admin_condition=true&jag=true&jira.create.linked.issue=true&locale=en&slack-enabled=true","startTime":1611.6999998092651,"connectEnd":1611.6999998092651,"connectStart":1611.6999998092651,"domainLookupEnd":1611.6999998092651,"domainLookupStart":1611.6999998092651,"fetchStart":1611.6999998092651,"redirectEnd":0,"redirectStart":0,"requestStart":1611.6999998092651,"responseEnd":2093.199999809265,"responseStart":2093.199999809265,"secureConnectionStart":1611.6999998092651},{"duration":570.4000000953674,"initiatorType":"script","name":"https://www.google-analytics.com/analytics.js","startTime":1665.1999998092651,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":1665.1999998092651,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":2235.5999999046326,"responseStart":0,"secureConnectionStart":0}],"fetchStart":0,"domainLookupStart":0,"domainLookupEnd":0,"connectStart":0,"connectEnd":0,"requestStart":10,"responseStart":298,"responseEnd":348,"domLoading":301,"domInteractive":2244,"domContentLoadedEventStart":2244,"domContentLoadedEventEnd":2433,"domComplete":2763,"loadEventStart":2763,"loadEventEnd":2764,"userAgent":"Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)","marks":[{"name":"bigPipe.sidebar-id.start","time":2073.9000000953674},{"name":"bigPipe.sidebar-id.end","time":2074.7999997138977},{"name":"bigPipe.activity-panel-pipe-id.start","time":2075},{"name":"bigPipe.activity-panel-pipe-id.end","time":2080.2999997138977},{"name":"activityTabFullyLoaded","time":2503.5999999046326}],"measures":[],"correlationId":"1e55ee4c5df741","effectiveType":"4g","downlink":9.6,"rtt":0,"serverDuration":222,"dbReadsTimeInMs":12,"dbConnsTimeInMs":20,"applicationHash":"9d11dbea5f4be3d4cc21f03a88dd11d8c8687422","experiments":[]}}
I added reporting server status and it is what we have now:
create table t1 (a int) engine=innodb;
set autocommit=0;
--- INNODB start transaction
start transaction;
affected rows: 0
status: 1
select * from t1;
a
affected rows: 0
status: 21
insert t1 values (1);
affected rows: 1
status: 1
select * from t1;
a
1
affected rows: 1
status: 21
drop table t1;
create table t1 (a int) engine=aria;
commit;
set autocommit=0;
--- ARIA start transaction
start transaction;
affected rows: 0
status: 1
select * from t1;
a
affected rows: 0
status: 1
insert t1 values (1);
affected rows: 1
status: 1
select * from t1;
a
1
affected rows: 1
status: 1
drop table t1;
create table t1 (a int) engine=innodb;
commit;
set autocommit=0;
--- INNODB autmatic transaction
select * from t1;
a
affected rows: 0
status: 21
insert t1 values (1);
affected rows: 1
status: 1
select * from t1;
a
1
affected rows: 1
status: 21
drop table t1;
create table t1 (a int) engine=aria;
commit;
set autocommit=0;
--- ARIA automatic transaction
select * from t1;
a
affected rows: 0
status: 0
insert t1 values (1);
affected rows: 1
status: 0
select * from t1;
a
1
affected rows: 1
status: 0
drop table t1;
test case:
--source include/have_innodb.inc
create table t1 (a int) engine=innodb;
set autocommit=0;
--echo --- INNODB start transaction
--enable_info
start transaction;
select * from t1;
insert t1 values (1);
select * from t1;
--disable_info
drop table t1;
create table t1 (a int) engine=aria;
commit;
set autocommit=0;
--echo --- ARIA start transaction
--enable_info
start transaction;
select * from t1;
insert t1 values (1);
select * from t1;
--disable_info
drop table t1;
create table t1 (a int) engine=innodb;
commit;
set autocommit=0;
--echo --- INNODB autmatic transaction
--enable_info
select * from t1;
insert t1 values (1);
select * from t1;
--disable_info
drop table t1;
create table t1 (a int) engine=aria;
commit;
set autocommit=0;
--echo --- ARIA automatic transaction
--enable_info
select * from t1;
insert t1 values (1);
select * from t1;
--disable_info
drop table t1;
diff:
diff --git a/client/mysqltest.cc b/client/mysqltest.cc
index 2a6d4265e59..20b7762b0cf 100644
--- a/client/mysqltest.cc
+++ b/client/mysqltest.cc
@@ -7729,11 +7729,13 @@ void append_metadata(DYNAMIC_STRING *ds,
*/
void append_info(DYNAMIC_STRING *ds, ulonglong affected_rows,
- const char *info)
+ const char *info, unsigned int status)
{
char buf[40], buff2[21];
sprintf(buf,"affected rows: %s\n", llstr(affected_rows, buff2));
dynstr_append(ds, buf);
+ sprintf(buf,"status: %x\n", status);
+ dynstr_append(ds, buf);
if (info)
{
dynstr_append(ds, "info: ");
@@ -7985,7 +7987,8 @@ void run_query_normal(struct st_connection *cn, struct st_command *command,
query to find the warnings.
*/
if (!disable_info)
- append_info(ds, mysql_affected_rows(mysql), mysql_info(mysql));
+ append_info(ds, mysql_affected_rows(mysql), mysql_info(mysql),
+ mysql->server_status);
if (display_session_track_info)
append_session_track_info(ds, mysql);
@@ -8409,7 +8412,8 @@ void run_query_stmt(struct st_connection *cn, struct st_command *command,
otherwise.
*/
if (!disable_info)
- append_info(ds, mysql_stmt_affected_rows(stmt), mysql_info(mysql));
+ append_info(ds, mysql_stmt_affected_rows(stmt), mysql_info(mysql),
+ mysql->server_status);
if (display_session_track_info)
append_session_track_info(ds, mysql);