1
0
mirror of https://github.com/MariaDB/server.git synced 2025-12-03 05:41:09 +03:00
Commit Graph

33332 Commits

Author SHA1 Message Date
Michael Widenius
f71dc02e67 Automatic merge 2014-03-20 01:07:01 +02:00
Michael Widenius
c4bb7cd6dc Fix for MDEV-5589: "Discrepancy in binlog on half-failed CREATE OR REPLACE"
Now if CREATE OR REPLACE fails but we have deleted a table already, we will generate a DROP TABLE in the binary log.
This fixes this issue.

In addition, for a failing CREATE OR REPLACE TABLE ... SELECT we don't generate a log of all the inserted rows, only the DROP TABLE.

I added code for not logging DROP TEMPORARY TABLE for tables where the CREATE TABLE was not logged. This code will be activated in 10.1
by removing the code protected by DONT_LOG_DROP_OF_TEMPORARY_TABLES.





mysql-test/suite/rpl/r/create_or_replace_mix.result:
  More test cases
mysql-test/suite/rpl/r/create_or_replace_row.result:
  More test cases
mysql-test/suite/rpl/r/create_or_replace_statement.result:
  More test cases
mysql-test/suite/rpl/t/create_or_replace.inc:
  More test cases
sql/log.cc:
  Added binlog_reset_cache() to clear the binary log.
sql/log.h:
  Added prototype
sql/sql_insert.cc:
  If CREATE OR REPLACE TABLE ... SELECT fails:
  - Don't log anything if nothing changed
  - If table was deleted, log a DROP TABLE.
  Remember if we table creation of temporary tables was logged.
sql/sql_table.cc:
  Added log_drop_table()
  Remember if we table creation of temporary tables was logged.
  If CREATE OR REPLACE TABLE ... SELECT fails and a table was deleted, log a DROP TABLE.
sql/sql_table.h:
  Added prototype
sql/sql_truncate.cc:
  Remember if we table creation of temporary tables was logged.
sql/table.h:
  Added table_creation_was_logged
2014-03-20 00:59:13 +02:00
Igor Babaev
d51ee6d412 Merge. 2014-03-19 14:58:29 -07:00
Sergey Petrunya
6b0fa54007 MDEV-5901: EITS: killing the server leaves statistical tables in "marked as crashed" state
- Part#2: call HA_EXTRA_FLUSH for the correct handler object, and call it after every change
  (ha_write_row, ha_update_row, ha_delete_row).
2014-03-19 20:05:54 +04:00
Michael Widenius
d1655ba6c4 Automatic merge 2014-03-19 15:18:29 +02:00
Michael Widenius
913d1f199c MDEV-5854 Interrupted CREATE OR REPLACE is written into binlog, and in a wrong format
mysql-test/r/create_or_replace2.result:
  Added test case
mysql-test/t/create_or_replace.test:
  Fixed comment
mysql-test/t/create_or_replace2.test:
  Added test case
sql/sql_base.cc:
  Safety fix:
  Don't let threads with query_id=0 free temporary tables as this may free temporary tables not in use.
  This is mostly the case for the slave io threads, as most other threads has thd->query_id != 0.
sql/sql_table.cc:
  Added comment.
  Ignore kill when opening temporary table for CREATE ... LIKE.
  This fixed the original isue
2014-03-19 15:15:57 +02:00
Sergey Petrunya
7ba9f0640e Merge 2014-03-19 16:37:17 +04:00
Sergey Petrunya
ebd4a82004 MDEV-5901: EITS: killing the server leaves statistical tables in "marked as crashed" state
- Do like sp.cc does with mysql.proc table: call HA_EXTRA_FLUSH after we've modified
  a statistical table.
2014-03-19 16:32:57 +04:00
unknown
e7704bfdd6 RBR triggers compiled-out with ifdefs in 10.0 2014-03-19 11:35:32 +02:00
unknown
af3180ab6f MDEV-9095: Executing triggers on slave in row-based replication 2014-03-19 11:00:56 +02:00
Igor Babaev
06ef0bdad2 Fixed bug mdev-5191.
Corrected cost estimates when a join buffer is used and the optimizer is requested
to use condition selectivities.
2014-03-18 11:30:50 -07:00
Sergey Petrunya
727896df27 Merge 2014-03-17 13:45:56 +04:00
Sergey Petrunya
07a52afd00 MDEV-4410: update does not want to use a covering index, but select uses it
- If an UPDATE 1) modifies the key it is using, and 2) has ORDER BY ... LIMIT
  which matches the key it is using,  Then we should use "Using buffer", not
  "Using filesort".
2014-03-16 14:33:37 +01:00
Sergey Petrunya
365ba070fe MDEV-5814: MySQL Bug#13948247 DIVISION BY 0 IN GET_BEST_DISJUNCT_QUICK WITH FORCE INDEX GROUP BY
- Adopt MySQL's fix: don't run index_merge optimizer if the table statistics 
  reports that the table has 0 rows.
2014-03-14 18:52:16 +01:00
Michael Widenius
e63c03db8d Merge with 10.0-base
Automatic merge, except for server_audit.cc that had to be modified slightly
Changes to xtradb and innobase where ignored was these made no sence for 10.0
2014-03-13 16:43:11 +02:00
unknown
70c08df4dc MDEV-5840: group_concat( column_json(dynamic_column )) return empty result
Fixed max_length of dynamic columns json/create/add functions.
2014-03-13 10:38:41 +02:00
Sergei Golubchik
4e29d31c58 typo fixed 2014-03-12 12:34:36 +01:00
Michael Widenius
f320b12ca5 MDEV-5619: CREATE OR REPLACE does not release MDL_EXCLUSIVE upon failure
mysql-test/r/create_or_replace.result:
  Added test of releasing of metadata locks
mysql-test/t/create_or_replace.test:
  Added test of releasing of metadata locks
sql/handler.h:
  Added marker if table was deleted as part of CREATE OR REPLACE
sql/sql_base.cc:
  Added Locked_tables_list::unlock_locked_table()
sql/sql_class.h:
  New prototypes
sql/sql_insert.cc:
  Unlock metadata locks for deleted table in case of error. Also do unlock tables if this was the only locked table.
sql/sql_table.cc:
  Unlock metadata locks for deleted table in case of error. Also do unlock tables if this was the only locked table.
2014-03-12 11:26:40 +02:00
unknown
2fc4a10339 Update the help text for --slave-parallel-threads, to clarify the
meaning of the count, and to remove the alpha warning.
2014-03-12 09:08:17 +01:00
unknown
8b9b7ec395 MDEV-5804: If same GTID is received on multiple master connections in multi-source replication, the event is double-executed causing corruption or replication failure
Some fixes, mainly to make it work in non-parallel replication mode also
(--slave-parallel-threads=0).

Patch should be fairly complete now.
2014-03-12 00:14:49 +01:00
Michael Widenius
1727849659 Merge with 5.5 2014-03-11 17:49:09 +02:00
Michael Widenius
800a278fd0 Fixed a compiler failure and removed some warnings in windows
extra/replace.c:
  Removed compiler warning
sql/unireg.cc:
  Removed compiler warning
storage/maria/ma_blockrec.c:
  Removed compiler warning
storage/maria/ma_dynrec.c:
  Fixed compiler failure
storage/maria/ma_unique.c:
  Removed compiler warning
storage/myisam/mi_check.c:
  Removed compiler warning
storage/myisam/mi_checksum.c:
  Removed compiler warning
2014-03-11 16:53:24 +02:00
unknown
2c2478b822 MDEV-5804: If same GTID is received on multiple master connections in multi-source replication, the event is double-executed causing corruption or replication failure
Before, the arrival of same GTID twice in multi-source replication
would cause double-apply or in gtid strict mode an error.

Keep the behaviour, but add an option --gtid-ignore-duplicates which
allows to correctly handle duplicates, ignoring all but the first.
This relies on the user ensuring correct configuration so that
sequence numbers are strictly increasing within each replication
domain; then duplicates can be detected simply by comparing the
sequence numbers against what is already applied.

Only one master connection (but possibly multiple parallel worker
threads within that connection) is allowed to apply events within
one replication domain at a time; any other connection that
receives a GTID in the same domain either discards it (if it is
already applied) or waits for the other connection to not have
any events to apply.

Intermediate patch, as proof-of-concept for testing. The main limitation
is that currently it is only implemented for parallel replication,
@@slave_parallel_threads > 0.
2014-03-09 10:27:38 +01:00
Sergei Golubchik
12f54d7de0 @@old_mode=zero_date_time_cast 2014-03-07 21:05:28 +01:00
unknown
fd25574645 MDEV-5789: race between rpl_parallel_change_thread_count and slave start upon server start without --skip-slave-start
Make sure to signal the condition variable for the thread pool after
the new threads have been added to the pool.

Thanks to user nanyi607rao, who reported this bug on maria-developers@.
2014-03-07 12:08:38 +01:00
unknown
2aa619ec68 MDEV-5788: Incorrect free of rgi->deferred_events in parallel replication
When an rpl_group_info object was returned from the free list, the
rgi->deferred_events_collecting and rgi->deferred_events was not correctly
re-inited. Additionally, the rgi->deferred_events was incorrectly freed in
free_rgi(), which causes unnecessary malloc/free (or crash when re-init is not
done).

Thanks to user nanyi607rao, who reported this bug on maria-developers@.
2014-03-07 12:02:09 +01:00
Alexander Barkov
fe3c68b38d Do not use SECONDS_IN_24H in nt_servc.cc.
This constant uses my_time.h, which inclusion is not desirable in nt_servc.cc
2014-03-07 10:34:07 +04:00
Alexander Barkov
89e1715355 MDEV-5372 Make "CAST(time_expr AS DATETIME)" compatible with MySQL-5.6 (and the SQL Standard) 2014-03-07 00:21:25 +04:00
Sergey Vojtovich
b95c8ce530 MDEV-5675 - Performance: my_hash_sort_bin is called too often
Reduced number of my_hash_sort_bin() calls from 4 to 1 per query.
Reduced number of memory accesses done by my_hash_sort_bin().

Details:
- let MDL subsystem use pre-calculated hash value for hash
  inserts and deletes
- let table cache use pre-calculated MDL hash value
- MDL namespace is excluded from hash value calculation, so that
  hash value can be used by table cache as is
- hash value for MDL is calculated as resulting hash value + MDL
  namespace
- extended hash implementation to accept user defined hash function
2014-03-06 16:19:12 +04:00
Sergei Golubchik
4c788b06d4 10.0-base merge 2014-03-05 23:20:10 +01:00
Sergey Petrunya
5bb978777e Merge 2014-03-05 01:57:57 +04:00
unknown
33a8afd8ef MDEV-5703: [PATCH] Slave disconnects and fails to reconnect on Error_code: 1159
Patch from Tomas Matejicek

Add missing error code to is_networ_error(), to allow slave to
automatically attempt reconnection also in this case.
2014-03-04 20:50:19 +01:00
Michael Widenius
a692645145 Fixed bug found by Pavel Ivanov in Gtid_log_event.
- Removed double call to trans_begin() for GTID BEGIN event
- Don't set OPTION_BEGIN before calling trans_begin() as this causes extra work in trans_begin()

sql/log_event.cc:
  Removed double call to trans_begin for GTID BEGIN event.
  Don't set OPTION_BEGIN before calling trans_begin() as this causes extra work in trans_begin().
  This was done by removing parsing of "BEGIN" and instead executing trans_begin() direct.
  This is much faster, but we lost the ability logging of possible slow "BEGIN" statements. As this should never happen it can be ignored.
2014-03-04 20:37:48 +02:00
unknown
cfc2eb9dd2 MDEV-5703: [PATCH] Slave disconnects and fails to reconnect on Error_code: 1159
Patch from Tomas Matejicek

Add missing error code to is_networ_error(), to allow slave to
automatically attempt reconnection also in this case.
2014-03-04 14:37:09 +01:00
unknown
5ec49e6452 Merge MDEV-5754, MDEV-5769, and MDEV-5764 into 10.0 2014-03-04 14:32:42 +01:00
unknown
bd2a0a2389 Merge MDEV-5754, MDEV-5769, and MDEV-5764 into 10.0-base 2014-03-04 14:21:00 +01:00
unknown
b5b8210849 MDEV-5754: MySQL 5.5 slaves cannot replicate from MariaDB 10.0
The problem was when a GTID event was part of a group commit, and so contained
a commit id. The code that replaces GTID with a BEGIN event for old slaves did
not correctly handle this case.

Fix the code so that the GTID with commit id can also be properly replaced
with a BEGIN query event. The extra two bytes are in the BEGIN event replaced
with a dummy, empty time zone string.
2014-03-04 13:10:14 +01:00
Sergey Petrunya
64649e3393 MDEV-5723: mysqldump -uroot unusable for multi-database operations, checks all databases
- Make do_fill_table() use join_tab->cache_select->cond if it is present.  When 
  join_tab->cache_select->cond is present, join_tab->select_cond doesn't have any 
  conditions that are usable for I_S optimizations.
2014-03-04 15:14:40 +04:00
unknown
ec374f1e53 MDEV-5769: Slave crashes on attempt to do parallel replication from an older master
Older master has no GTID events, so such events are not available for
deciding on scheduling of event groups and so on.

With this patch, we run such events from old masters single-threaded, in the
sql driver thread.

This seems better than trying to make the parallel code handle the data from
older masters; while possible, this would require a lot of testing (as well as
possibly some extra overhead in the scheduling of events), which hardly seems
worthwhile.
2014-03-04 08:48:32 +01:00
Sergei Golubchik
016bd4fc5f MDEV-5620 CMake option to compile against an external PCRE library 2014-03-04 01:22:53 +01:00
Sergey Petrunya
24d9bf8227 MDEV-5778: Valgrind failure in innodb_ext_keys.test
- Fix valgrind failure: make test_if_order_by_key() account for extended keys 
  feature.
2014-03-04 00:41:50 +04:00
unknown
641feed481 MDEV-5764: START SLAVE UNTIL does not work with parallel replication
With parallel replication, there can be any number of events queued on
in-memory lists in the worker threads.

For normal STOP SLAVE, we want to skip executing any remaining events on those
lists and stop as quickly as possible.

However, for START SLAVE UNTIL, when the UNTIL position is reached in the SQL
driver thread, we must _not_ stop until all already queued events for the
workers have been executed - otherwise we would stop too early, before the
actual UNTIL position had been completely reached.

The code did not handle UNTIL correctly, stopping too early due to not
executing the queued events to completion. Fix this, and also implement that
an explicit STOP SLAVE in the middle (when the SQL driver thread has reached
the UNTIL position but the workers have not) _will_ cause an immediate stop.
2014-03-03 12:13:55 +01:00
Sergei Golubchik
66883ee08d MDEV-5674 Valgrind warnings "Conditional jump or move depends on uninitialised value" in create_sort_index with small sort_buffer_size
*found_rows wasn't initialized when filesort() failed
(it didn't matter, but valgrind was unhappy)
2014-03-02 15:54:57 +01:00
Sergei Golubchik
eb9f422c43 MDEV-5667 online alter and changed field/index options
use the Alter_inplace_info::ALTER_COLUMN_OPTION flag if
field/column flags were altered.

change ha_example to use check_if_supported_inplace_alter() instead
of obsolete check_if_incompatible_data()
2014-03-02 15:02:13 +01:00
Sergei Golubchik
04de6ccc31 MDEV-5668 Assertion `granted_role->is_role()' fails on granting role with empty name
parser: error out on empty role names
2014-03-01 11:55:31 +01:00
Sergei Golubchik
d85fac98bb followup for MDEV-4309: DBT-3 Q1 benchmark: Benchmark + profile a patch
don't forget to initialize ORDER::fast_field_copier_setup
2014-02-28 20:24:22 +01:00
Sergei Golubchik
41c760b121 merge 2014-02-28 10:00:31 +01:00
Igor Babaev
1a536c8daf Fixed bug mdev-5635.
After constant row substitution some field items become constant items.
The range analyzer should take into account this fact when looking for
ranges.
2014-02-27 13:54:05 -08:00
Sergei Golubchik
8d0238a6d8 MDEV-4955 discover of table non-existance on CREATE
Fix ha_table_exists() to take discovery into account correctly.
It must be able to discover both table existence (when no frm is
found) and table non-existance (when frm was found).
2014-02-27 22:43:42 +01:00
Alexey Botchkov
3f3a84f46e MDEV-5436 mysqld crash signal 11 in mysql_audit_general.
That error 'Can't open the pid file' leads to mysqld crash signal 11 in mysql_audit_general() called
   with the 'thd' parameter set to NULL. That wasn't checked when the thd->db and thd->db_length
   were accessed. Fixed by checking for the NULL thd.
2014-02-28 00:23:20 +04:00