Commit Graph

163 Commits

Author SHA1 Message Date
affba3cd65 Merge branch '1.2.1-binlog_router_trx' into release-1.4.2 2016-04-15 11:15:01 +03:00
2855389fe2 Non-critical errors in binlogrouter are now properly logged as warnings
The event distribution error messages were not truly errors but only rare
corner cases that usually don't happen. This doesn't mean that they should
be treated as errors and treating them as warnings is more helpful.
2016-04-15 10:37:21 +03:00
aabcc4fb12 Added clarifying comments to event distribution code
When a slave transitions from catchup mode to up-to-date mode, it is possible
that events are being distributed and the slave appears to be lagging behind.
The added comment explain why it happens and how it is handled to make the code
clearer.
2016-04-15 10:18:50 +03:00
25f4238231 Merge branch '1.2.1-binlog_router_trx' into release-1.4.2 2016-04-14 18:52:36 +03:00
edb1c18e83 Added missing check for error packets
A missing else branch caused the binlogrouter to crash when it
requests non-existent binlog file.
2016-04-14 17:51:42 +03:00
bb2d549a00 Slaves that are behind the master no longer cause an error to be logged
When a slave transitions from catchup mode to up-to-date mode, an error
message is logged because the slave is at an unexpected position. This
error message should not be logged because it is a possible and an expected
situation.
2016-04-14 12:01:02 +03:00
6988c0bfed Fixed rotate events never being distributed
The check for rotate event conditions was wrong which led to false error
message about unexpected binlog file and position combinations.

The position of the last event was reset every time a file was opened which
caused problems when the binlog file was rotated. The slave's current positions
were compared to the position where the last event started and because the
last_event_pos variable didn't point to the rotate event of the previous binlog,
the slave's never got the rotate event.
2016-04-14 11:02:03 +03:00
440bc049c0 Added more information to binlogrouter error messages
The name of the binlog file was added to the log message where a slave
is behind the master but the same file is used. This makes debugging the problem
a bit easier.
2016-04-14 11:02:03 +03:00
df9f8eba82 Improved binlogrouter event distribution error messages
Added master position and current safe event to log messages about unexpected
slave binlog file positions.
2016-04-14 11:02:03 +03:00
335b1e095f Added master pos to log message
Added master pos to log message
2016-04-14 11:02:03 +03:00
52ef8987cb Made sending of events more strict
The decision to send an event to a slave can now only be made in one place.
This will force all events to pass the same checks before they are sent to
the slaves.
2016-04-14 11:02:03 +03:00
aa7e3461c8 Fixed event position updating
The position of the next event to be written was used as the position
of the current event. This caused the checks for the position of the current
safe event to fail and the non-transaction safe version was used.

This only happened with events that are not done inside a transaction i.e.
DDL statements.
2016-04-14 11:02:03 +03:00
cf62ac0e6c Added more information to the incomplete transaction error message
The error message now logs the caller role, current safe event and the event
type.
2016-04-14 11:02:01 +03:00
fe84f9599b Removed messages about incomplete transaction events
The message is logged when a DDL statement is executed. It should not be
logged if trx_safe is on since the current_safe_event should always point
at the event we are sending. The current_safe_event is set to the wrong value
which causes this message to be logged.

Due to the false positives caused by this, the message is removed.
2016-04-07 12:51:38 +03:00
bb94ffb9ea Added more information to duplicate event error message
The message now states the location where it was called from and the amount
of events received from the master. In addition to this, new logging was
added when unsafe events are sent to slaves when transaction safety is enabled.
2016-04-06 17:30:25 +03:00
0ce48474eb Added logging for safe event and current event mismatch
If the position being currently processed is not the current safe event,
a log message is written.
2016-04-05 16:57:39 +03:00
ed9356562c Added DCB write queue to error message
The duplicate event error message now logs the length of the slave's
write queue. This will tell how much data is still buffered inside MaxScale
when duplicate events are detected.
2016-04-05 15:01:30 +03:00
0493196ecc Disconnect slave if duplicate event detected
If a duplicate event is detected the state of the slave is set
to BLRS_ERRORED and the connection is closed. That way the
duplicate event will not break the slave, and it will pick
up its state when it reconnects.
2016-03-31 10:57:23 +03:00
51e60000dd Add duplicate event detection & logging.
When an event is sent to a slave, we store information about the
event and who sent it, so that we can detect if the same event is
sent twice. If a duplicate event is detected, we log information
about it.
2016-03-31 10:50:47 +03:00
5070b81473 Reformat binlog router. 2016-03-15 12:56:41 +02:00
28bd7c2202 Merge branch '1.2.1-binlog_router_trx' into develop 2016-02-19 18:51:59 +02:00
59f5880898 Added missing OK byte to payload size calculation
The OK byte was not taken into notice when the total size of all the payloads
in all the packets was calculated.
2016-02-17 08:30:50 +02:00
63ce9fe6bc Fixed formatting and added more error checks
Added log messages when ftruncate fails and cleaned up formatting.
2016-02-16 13:06:25 +02:00
cd2af6ffef Cleaned up the code based on the code review
Added missing error condition checks and cleaned up code.
2016-02-16 13:06:25 +02:00
a55f017c75 Fixed packets with a length of one being ignored
The packets were not written into the binlogs which caused binlog corruption.
2016-02-16 13:06:25 +02:00
9306b9d68c Added detection of checksums split across two packets
The checksums should now be processed properly event if the event is in more than
one packet.
2016-02-16 13:06:25 +02:00
36896afcbd Fixed missing NULL check when reading records
If the binlog record was not found, a NULL pointer is returned. There was no
check for the return value and it assumed that it was always non-NULL.
2016-02-16 13:06:25 +02:00
74c8b5e296 Fixed events larger than 2^24 failing without transaction safety
If transaction safety was disabled and a large event sent in multiple SQL
packets was received, the distribution of that event to the slaves would fail.
2016-02-16 13:06:25 +02:00
2b7e2d3043 Added checksum calculations for events larger than 2^24 bytes
The checksums are now properly calculated for large events that span multiple
SQL packets.
2016-02-16 13:06:25 +02:00
3609f97ba0 Fixed events which are exactly 0x00fffffe bytes long failing to replicate
The empty packet sent after a large event which fits into exactly one packet
was written to disk and the writing of no bytes caused it to be treated as
an error.
2016-02-16 13:06:25 +02:00
476691eda1 Removed log message for event larger than 16MB
The log message used during tests is now removed
2016-02-16 13:06:25 +02:00
3e04a36ac3 Added support for distribution of packets larger than 2^24 bytes
Moved the the sending of the replication events to a different function
and added support for events that span multiple MySQL packets.
2016-02-16 13:06:25 +02:00
d2b4713d27 Added missing condition to else clause
This fixes all packets being considered as large packets.
2016-02-16 13:06:25 +02:00
ae33df3cbc Large events are now processed in chuncks
The router->last_written is used to store the position where the last event was
written. The replication header is also stored in a separate structure in
the router which is used later when the last packet of a multi-packet event
arrives.
2016-02-16 13:06:24 +02:00
d3e1d4dd2f First fix for 16MB handling in the master part
First fix for 16MB handling in the master part.

Distribute events to up to date slave is not included yet
2016-02-16 13:06:24 +02:00
d9b022db10 Protect updating of router when rotating.
When rotating, all state variables of router are now updated while
protected by the router->binlog_lock lock.
2016-01-28 15:23:22 +02:00
0deffbf2f2 Ensure that slave->cstate contains meaningful value.
In blr_slave_callback the bits of slave->cstate are reset and
set as one transaction. Earlier they were reset in one and
set in another, leading to a situation where slave->cstate did
not contain a sensible value for a short period of time.

Further, it is now explicitly checked in blr_distribute_binlog_record
that slave->cstate indeed contains a meaningful value.
2016-01-28 11:00:07 +02:00
2715d3f8e4 Removed the 16 chars limitation for binlog file name
Removed the 16 chars limitation for binlog file name
2016-01-07 15:30:57 +01:00
d99cece151 Removed the 16 chars limitation for binlog file name
Removed the 16 chars limitation for binlog file name
2016-01-07 15:29:11 +01:00
49cf4089fc Make state-change logging conditional. 2015-12-10 15:50:20 +02:00
f49bd06a7e Reduce logging of binlog server
Only the true state changes of a slave - up-to-date -> catch-up
or catch-up to up-to-date - are logged.
2015-12-10 15:50:20 +02:00
3f31f5548d Addition of slave transition to catchup mode in logging
Addition of slave transition to catchup mode in logging
2015-12-10 15:50:20 +02:00
231a620dc0 Remove >= 0 check from unsigned type. 2015-12-08 14:37:21 +02:00
2f54f33cfb Make state-change logging conditional. 2015-12-03 09:54:31 +02:00
af7a19b7b3 Reduce logging of binlog server
Only the true state changes of a slave - up-to-date -> catch-up
or catch-up to up-to-date - are logged.
2015-12-02 15:23:55 +02:00
a53213093a Addition of slave transition to catchup mode in logging
Addition of slave transition to catchup mode in logging
2015-12-01 16:16:14 +01:00
023d4bc588 Develop merge
Develop merge
2015-11-19 17:06:30 +01:00
afdeb6fa5b binlogrouter: All LOGIFs and skygw_log_writes replaced.
All LOGIFs and skygw_log_writes replaced with the equivalent
MXS_[ERROR|WARNING|NOTICE|INFO|DEBUG] macros.
2015-11-18 12:35:21 +02:00
f06eec13f6 Merge branch 'develop' into 1.2.1-binlog_router_trx 2015-11-17 09:50:25 +01:00
82dc3ff3c5 Update lastReply with heartbeat event
Update lastReply when heartbeat event is seen and a transaction is
still open
2015-11-17 09:47:21 +01:00