Bug #33237 NDB_MGM 'eat' 99% cpu utilization

parent 3a891982
set autocommit=1;
reset master;
create table bug16206 (a int);
insert into bug16206 values(1);
start transaction;
insert into bug16206 values(2);
commit;
show binlog events;
Log_name Pos Event_type Server_id End_log_pos Info
f n Format_desc 1 n Server ver: VERSION, Binlog ver: 4
f n Query 1 n use `test`; create table bug16206 (a int)
f n Query 1 n use `test`; insert into bug16206 values(1)
f n Query 1 n use `test`; insert into bug16206 values(2)
drop table bug16206;
reset master;
create table bug16206 (a int) engine= bdb;
insert into bug16206 values(0);
insert into bug16206 values(1);
start transaction;
insert into bug16206 values(2);
commit;
insert into bug16206 values(3);
show binlog events;
Log_name Pos Event_type Server_id End_log_pos Info
f n Format_desc 1 n Server ver: VERSION, Binlog ver: 4
f n Query 1 n use `test`; create table bug16206 (a int) engine= bdb
f n Query 1 n use `test`; insert into bug16206 values(0)
f n Query 1 n use `test`; insert into bug16206 values(1)
f n Query 1 n use `test`; BEGIN
f n Query 1 n use `test`; insert into bug16206 values(2)
f n Query 1 n use `test`; COMMIT
f n Query 1 n use `test`; insert into bug16206 values(3)
drop table bug16206;
set autocommit=0;
End of 5.0 tests
-- source include/not_embedded.inc
-- source include/have_bdb.inc
#
# Bug #16206: Superfluous COMMIT event in binlog when updating BDB in autocommit mode
#
set autocommit=1;
let $VERSION=`select version()`;
reset master;
create table bug16206 (a int);
insert into bug16206 values(1);
start transaction;
insert into bug16206 values(2);
commit;
--replace_result $VERSION VERSION
--replace_column 1 f 2 n 5 n
show binlog events;
drop table bug16206;
reset master;
create table bug16206 (a int) engine= bdb;
insert into bug16206 values(0);
insert into bug16206 values(1);
start transaction;
insert into bug16206 values(2);
commit;
insert into bug16206 values(3);
--replace_result $VERSION VERSION
--replace_column 1 f 2 n 5 n
show binlog events;
drop table bug16206;
set autocommit=0;
--echo End of 5.0 tests
...@@ -921,10 +921,14 @@ event_thread_run(void* p) ...@@ -921,10 +921,14 @@ event_thread_run(void* p)
{ {
do_event_thread= 1; do_event_thread= 1;
do { do {
if (ndb_logevent_get_next(log_handle, &log_event, 2000) <= 0) int res= ndb_logevent_get_next(log_handle, &log_event, 2000);
continue; if (res > 0)
Guard g(printmutex); {
printLogEvent(&log_event); Guard g(printmutex);
printLogEvent(&log_event);
}
else if (res < 0)
break;
} while(do_event_thread); } while(do_event_thread);
ndb_mgm_destroy_logevent_handle(&log_handle); ndb_mgm_destroy_logevent_handle(&log_handle);
} }
...@@ -2722,8 +2726,9 @@ CommandInterpreter::executeStartBackup(char* parameters, bool interactive) ...@@ -2722,8 +2726,9 @@ CommandInterpreter::executeStartBackup(char* parameters, bool interactive)
{ {
int count = 0; int count = 0;
int retry = 0; int retry = 0;
int res;
do { do {
if (ndb_logevent_get_next(log_handle, &log_event, 60000) > 0) if ((res= ndb_logevent_get_next(log_handle, &log_event, 60000)) > 0)
{ {
int print = 0; int print = 0;
switch (log_event.type) { switch (log_event.type) {
...@@ -2753,7 +2758,7 @@ CommandInterpreter::executeStartBackup(char* parameters, bool interactive) ...@@ -2753,7 +2758,7 @@ CommandInterpreter::executeStartBackup(char* parameters, bool interactive)
{ {
retry++; retry++;
} }
} while(count < 2 && retry < 3); } while(res >= 0 && count < 2 && retry < 3);
if (retry >= 3) if (retry >= 3)
ndbout << "get backup event failed for " << retry << " times" << endl; ndbout << "get backup event failed for " << retry << " times" << endl;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment