Skip to content

Commit 99a57e8

Browse files
committed
fix trx support
1 parent 28e7f24 commit 99a57e8

File tree

2 files changed

+46
-6
lines changed

2 files changed

+46
-6
lines changed

mysql_rpl_listener_2/mysql_rpl_listener_2.cc

+40-3
Original file line numberDiff line numberDiff line change
@@ -1410,7 +1410,9 @@ void mysql_rpl_listener_2::process_event ( void *ev_x, _repl_log_x_error *error
14101410
}
14111411
memset( query_str, 0, qle->q_len + 8 );
14121412
memcpy( query_str, qle->query, qle->q_len );
1413-
if ( strcmp( "BEGIN", query_str ) == 0 ) {
1413+
if (
1414+
( strcmp( "BEGIN", query_str ) == 0 ) ||
1415+
( strcmp( "XA START", query_str ) == 0 ) ) {
14141416

14151417
__sync_bool_compare_and_swap( &(this->state),
14161418
(uint32_t)(mysql_rpl_listener_2::__State::INPROCESS_1),
@@ -1424,7 +1426,9 @@ void mysql_rpl_listener_2::process_event ( void *ev_x, _repl_log_x_error *error
14241426
// а если мы встретим в дальнейшем таблицы, которые мы отслеживаем внутри этой транзакции,
14251427
// то мы вызовем this->on_transaction со временем первого ROW_EVENTа
14261428
}
1427-
if ( strcmp( "COMMIT", query_str ) == 0 ) {
1429+
if (
1430+
/* ( strcmp( "COMMIT", query_str ) == 0 ) || */
1431+
( strcmp( "COMMIT", query_str ) == 0 ) ) {
14281432

14291433
// TRANSACTION!!!!
14301434
// > 1 потому, что мы, изначально встретив query BEGIN ставим в 1,
@@ -1740,7 +1744,7 @@ void mysql_rpl_listener_2::process_event ( void *ev_x, _repl_log_x_error *error
17401744
}
17411745
case binary_log::XID_EVENT: {
17421746

1743-
// по сути может представлять как Xid_event так и XA_prepare_event ,
1747+
// по сути может представлять как Xid_event так и XA_prepare_event , ( хз - может это и не так!!! )
17441748
// но для нас не важно какого именно типа транзакция подтверждается.
17451749
;;
17461750
Xid_log_event *xidle = (Xid_log_event *)ev;
@@ -1772,6 +1776,39 @@ void mysql_rpl_listener_2::process_event ( void *ev_x, _repl_log_x_error *error
17721776

17731777
break;
17741778
}
1779+
case binary_log::XA_PREPARE_LOG_EVENT: {
1780+
1781+
// XA_prepare_log_event
1782+
;;
1783+
XA_prepare_log_event *xaple = (XA_prepare_log_event *)ev;
1784+
// -- xaple->xid;
1785+
1786+
// TRANSACTION!!!!
1787+
// > 1 потому, что мы, изначально встретив query BEGIN ставим в 1,
1788+
// а потом, если внутри транзакции встречаем одну из отслеживаемых таблиц,.
1789+
// то ставим в 2
1790+
if ( this->in_transaction > 1 ) {
1791+
1792+
if ( __sync_fetch_and_add( &( this->state ), (uint32_t)0 ) == mysql_rpl_listener_2::__State::INPROCESS ) {
1793+
1794+
if ( this->on_transaction != NULL ) {
1795+
1796+
_repl_log_x_transaction X_TR_EV;
1797+
X_TR_EV.when = xaple->common_header->when;
1798+
X_TR_EV.transaction_event_type = (uint8_t)( TRANSACTION_EV_TYPE_COMMIT );
1799+
1800+
this->on_transaction( &X_TR_EV, this->on_transaction_param_ptr );
1801+
}
1802+
}
1803+
}
1804+
this->in_transaction = 0;
1805+
1806+
__sync_bool_compare_and_swap( &(this->state),
1807+
(uint32_t)(mysql_rpl_listener_2::__State::INPROCESS_1),
1808+
(uint32_t)(mysql_rpl_listener_2::__State::INPROCESS ) );
1809+
1810+
break;
1811+
}
17751812
case binary_log::PREVIOUS_GTIDS_LOG_EVENT: {
17761813
;;
17771814
break;

rows_log_event_2/rows_log_event_2.cc

+6-3
Original file line numberDiff line numberDiff line change
@@ -767,7 +767,8 @@ switch (type) {
767767
memset( buf, 0, MAX_DATE_STRING_REP_LENGTH+1 );
768768
struct timeval tm;
769769
my_timestamp_from_binary(&tm, ptr, meta);
770-
int buflen = my_timeval_to_str(&tm, buf, meta);
770+
771+
my_timeval_to_str(&tm, buf, meta);
771772

772773
ROW_COL_PTR[0].val = (char*)malloc( strlen( buf ) + 1 );
773774
if ( ROW_COL_PTR[0].val == NULL ) {
@@ -823,7 +824,8 @@ switch (type) {
823824
MYSQL_TIME ltime;
824825
longlong packed = my_datetime_packed_from_binary(ptr, meta);
825826
TIME_from_longlong_datetime_packed(&ltime, packed);
826-
int buflen = my_datetime_to_str(ltime, buf, meta);
827+
828+
my_datetime_to_str(ltime, buf, meta);
827829

828830
ROW_COL_PTR[0].val = (char*)malloc( strlen( buf ) + 1 );
829831
if ( ROW_COL_PTR[0].val == NULL ) {
@@ -870,7 +872,8 @@ switch (type) {
870872
MYSQL_TIME ltime;
871873
longlong packed = my_time_packed_from_binary(ptr, meta);
872874
TIME_from_longlong_time_packed(&ltime, packed);
873-
int buflen = my_time_to_str( ltime, buf, meta );
875+
876+
my_time_to_str( ltime, buf, meta );
874877

875878
ROW_COL_PTR[0].val = (char*)malloc( strlen( buf ) + 1 );
876879
if ( ROW_COL_PTR[0].val == NULL ) {

0 commit comments

Comments
 (0)