Commit graph

177698 commits

Author SHA1 Message Date
Marko Mäkelä
ad2d722acd MDEV-13228: Add a comment that clarifies the constants 2017-07-03 13:13:54 +03:00
Marko Mäkelä
d438a448e6 MDEV-13228 Assertion `n < rec_offs_n_fields(offsets)' failed in rec_get_nth_field_offs upon crash recovery with compressed table
In my preparatory patch for MDEV-12288, there was an off-by-one
array initialization error that affected debug builds.
2017-07-03 12:17:10 +03:00
Marko Mäkelä
56ff6f1b0b InnoDB: Remove dead code for DATA_POINT and DATA_VAR_POINT
The POINT data type is being treated just like any other
geometry data type in InnoDB. The fixed-length data type
DATA_POINT had been introduced in WL#6942 based on a
misunderstanding and without appropriate review.
Because of fundamental design problems (such as a
DEFAULT POINT(0 0) value secretly introduced by InnoDB),
the code was disabled in Oracle Bug#20415831 fix.

This patch removes the dead code and definitions that were
left behind by the Oracle Bug#20415831 patch.
2017-07-03 12:17:10 +03:00
Marko Mäkelä
cf2789bf0b ha_innobase::write_row(): Test the cheaper condition first 2017-07-03 12:17:00 +03:00
Monty
92f1837a27 Fixed compilation warnings (while testing 32 bit builds) 2017-07-01 14:26:42 +03:00
Monty
cc8912f223 Fixed failing test on 32 bit systems 2017-07-01 14:26:42 +03:00
Monty
3833097463 Clean up BUILD script
- Removed some not old, not used build scipts
- Removed tokudb and rocksdb from 32 bit builds
  This enables one now to easily build 32 bit binaries
  on 64 bit systems
2017-07-01 14:26:42 +03:00
Monty
2e9b55f763 MDEV-13226 Server crashes when tmpdir runs out of space
There was a missing test in CTE handling if creating a temporary table
failed (in this case as a result of out of space). This caused a table
handler to be used even if it was not allocated.
2017-07-01 14:26:42 +03:00
Marko Mäkelä
c436338d9d Assert that DB_TRX_ID must be set on delete-marked records
This is preparation for MDEV-12288, which would set DB_TRX_ID=0
when purging history. Also with that change in place, delete-marked
records must always refer to an undo log record via a nonzero
DB_TRX_ID column. (The DB_TRX_ID is only present in clustered index
leaf page records.)

btr_cur_parse_del_mark_set_clust_rec(), rec_get_trx_id():
Statically allocate the offsets
(should never use the heap). Add some debug assertions.

Replace some use of rec_get_trx_id() with row_get_rec_trx_id().

trx_undo_report_row_operation(): Add some sanity checks that are
common for all operations that produce undo log.
2017-07-01 11:02:58 +03:00
Jacob Mathew
53235cbb1f Updated spider/bg and spider/handler mtr suites. 2017-06-30 14:58:05 -07:00
Monty
f99b83571a Added submodule updates to BUILD scripts 2017-06-30 22:33:28 +03:00
Monty
a2d5bd96bf Fixed wrong results in show_all_plugins.test
- Crude hack to get it to work. Hope Serg has a better solution at some point..
2017-06-30 22:33:28 +03:00
Monty
b356eae8a9 Don't create tags for .xz files 2017-06-30 22:31:37 +03:00
Monty
dd8474b1dc Added tmp_disk_table_size to limit size of Aria temp tables in tmpdir
- Added variable tmp_disk_table_size
- Added variable tmp_memory_table_size as an alias for tmp_table_size
- Changed internal variable tmp_table_size to tmp_memory_table_size
- create_info.data_file_length is now set with tmp_disk_table_size
- Fixed that Aria doesn't reset max_data_file_length for internal tables
- Added status flag if table is full so that we can detect this on next insert.
  This ensures that the table is always 'correct', but we get the error one
  row after the row that grow the table too big.
- Removed some mutex lock for internal temporary tables
2017-06-30 22:31:37 +03:00
Monty
9f484b63f1 Clean up replication check in open_temporary_table() 2017-06-30 22:31:37 +03:00
Marko Mäkelä
e16425ba97 Fix a compiler warning 2017-06-30 18:50:30 +03:00
Marko Mäkelä
ebe4c65e1d Enable more variants of some innodb_zip tests 2017-06-30 18:43:48 +03:00
Marko Mäkelä
f27e1a318c Remove duplicated tests 2017-06-30 18:40:36 +03:00
Vladislav Vaintroub
4877659006 MDEV-12097 : avoid too large memory allocation in innodb buffer pool
on Windows

Align innodb_pool_size up to the innodb_buf_pool_chunk_unit.
2017-06-30 15:35:43 +00:00
Marko Mäkelä
bf262bd957 MDEV-11649 Uninitialized field fts_token->position in innodb_fts.innodb_fts_plugin
The field fts_token->position is not initialized in
row_merge_fts_doc_tokenize(). We cannot have that field
without changing the fulltext parser plugin ABI
(adding st_mysql_ftparser_boolean_info::position,
as it was done in MySQL 5.7 in WL#6943).

The InnoDB fulltext parser plugins "ngram" and "Mecab" that were
introduced in MySQL 5.7 do depend on that field. But the simple_parser
does not. Apparently, simple_parser is leaving the field as 0.

So, in our fix we will assume that the missing position field is 0.
2017-06-30 15:03:53 +03:00
Marko Mäkelä
dd75087993 Fix a compilation warning 2017-06-30 15:03:01 +03:00
Marko Mäkelä
61847b9d80 Tablespace: Add iterator, const_iterator, begin(), end() 2017-06-30 09:31:19 +03:00
Marko Mäkelä
5ad4645779 Adjust a test for the changed innodb_log_file_size limits 2017-06-30 09:25:39 +03:00
Igor Babaev
9f0c1c0cf6 Fixed the bug mdev-13193.
When an equality that can be pushed into a materialized derived
table / view is extracted from multiple equalities and their
operands are cloned then if they have some pointers to Item_equal
objects those pointers must be set to NULL in the clones. Anyway
they are not valid in the pushed predicates.
2017-06-29 20:50:26 -07:00
Marko Mäkelä
84e4e4506f Reduce the granularity of innodb_log_file_size
In Mariabackup, we would want the backed-up redo log file size to be
a multiple of 512 bytes, or OS_FILE_LOG_BLOCK_SIZE. However, at startup,
InnoDB would be picky, requiring the file size to be a multiple of
innodb_page_size.

Furthermore, InnoDB would require the parameter to be a multiple of
one megabyte, while the minimum granularity is 512 bytes. Because
the data-file-oriented fil_io() API is being used for writing the
InnoDB redo log, writes will for now require innodb_log_file_size to
be a multiple of the maximum innodb_page_size (65536 bytes).

To complicate matters, InnoDB startup divided srv_log_file_size by
UNIV_PAGE_SIZE, so that initially, the unit was bytes, and later it
was innodb_page_size. We will simplify this and keep srv_log_file_size
in bytes at all times.

innobase_log_file_size: Remove. Remove some obsolete checks against
overflow on 32-bit systems. srv_log_file_size is always 64 bits, and
the maximum size 512GiB in multiples of innodb_page_size always fits
in ulint (which is 32 or 64 bits). 512GiB would be 8,388,608*64KiB or
134,217,728*4KiB.

log_init(): Remove the parameter file_size that was always passed as
srv_log_file_size.

log_set_capacity(): Add a parameter for passing the requested file size.

srv_log_file_size_requested: Declare static in srv0start.cc.

create_log_file(), create_log_files(),
innobase_start_or_create_for_mysql(): Invoke fil_node_create()
with srv_log_file_size expressed in multiples of innodb_page_size.

innobase_start_or_create_for_mysql(): Require the redo log file sizes
to be multiples of 512 bytes.
2017-06-29 23:15:05 +03:00
Marko Mäkelä
e903d458bb Clean up InnoDB shutdown
Tablespace::shutdown(): Clear m_path. This was moved from
Tablespace::~Tablespace().

LatchDebug::shutdown(): Remove a redundant condition.
2017-06-29 23:10:46 +03:00
Marko Mäkelä
591edccc93 Simplify access to the binlog offset in InnoDB
trx_sys_print_mysql_binlog_offset(): Use 64-bit arithmetics and ib::info().

TRX_SYS_MYSQL_LOG_OFFSET: Replaces TRX_SYS_MYSQL_LOG_OFFSET_HIGH,
TRX_SYS_MYSQL_LOG_OFFSET_LOW.

trx_sys_update_mysql_binlog_offset(): Remove the constant parameter
field=TRX_SYS_MYSQL_LOG_INFO. Use 64-bit arithmetics.
2017-06-29 23:03:39 +03:00
Marko Mäkelä
aea0e125d2 trx_sys_read_wsrep_checkpoint(): Return whether a checkpoint is present 2017-06-29 23:01:47 +03:00
Marko Mäkelä
cd623508df buf_read_ibuf_merge_pages(): Discard all entries for a missing tablespace
A similar change was contributed to Percona XtraBackup, but for some
reason, it is not present in Percona XtraDB. Since MDEV-9566
(MariaDB 10.1.23), that change is present in the MariaDB XtraDB.
2017-06-29 22:39:06 +03:00
Marko Mäkelä
68b5aeae4e Minor cleanup of InnoDB I/O routines
Change many function parameters from IORequest& to const IORequest&.

Remove an unused definition of ECANCELED.
2017-06-29 22:30:47 +03:00
Marko Mäkelä
859714e73d Simplify up InnoDB redo log system startup and shutdown
recv_sys_init(): Remove the parameter.

recv_sys_create(): Merge to recv_sys_init().

recv_sys_mem_free(): Merge to recv_sys_close().

log_mem_free(): Merge to log_shutdown().
2017-06-29 22:24:48 +03:00
Marko Mäkelä
8143ef1b7c trx_validate_state_before_free(): Add debug assertions 2017-06-29 22:20:34 +03:00
Marko Mäkelä
bb60a832ed Minor cleanup of InnoDB shutdown
os_thread_active(): Remove.

srv_shutdown_all_bg_threads(): Assert that high-level threads
have already exited. Do not sleep if os_thread_count=0.
2017-06-29 22:20:34 +03:00
Sachin Setiya
de3201df3f Fix MDEV-12758 2017-06-29 23:03:30 +05:30
Sachin Setiya
629c60973d MDEV-12758 wrep.pool_of_threads failed in buildbot with WSREP ...
Problem:- While running tests from wsrep suite , we include file have_wsrep.inc
or have_wsrep_enabled.inc , these file test wsrep plugin is ACTIVE or 'wsrep_on'
is ON. These select does not ensure that whether 'wsrep_ready' is ON , So that
we can process SQL queries. So sometimes we will get error like this
mysqltest: At line 81: query 'call mtr.check_testcase()' failed: 1047: WSREP has
not yet prepared node for application use  not ok

Solution:- In file have_wsrep.inc and have_wsrep_enabled.inc we will include
wait_until_ready.inc , which will wait untill 'wsrep_on' is on
2017-06-29 18:31:42 +05:30
Daniel Black
7c997f4b2e travis: force deb build not to use ccache
18a2b0a168 wasn't sufficient.
The path needed to be set so ccache wasn't picked up.
2017-06-29 10:59:40 +04:00
Igor Babaev
13221b1eb2 Fixed a failure of the test case for the bug mdev-13107 in --ps-protocol.
The fix was in the call the open_normal_and_derived_tables() from
the function mysql_test_select() and it was similar to those from
the patch for mdev-13107.

Added explicit PREPARE statements that failed in --ps-protocol.
2017-06-28 22:40:27 -07:00
Daniel Black
18a2b0a168 travis: disable ccache on deb build - ENOSPC 2017-06-29 08:57:52 +04:00
Daniel Black
9e0aa294aa travis: MDEV-13002 fixed - don't allow failures in MYSQL_TEST_SUITES=plugins
Revert "travis: allowed_failures MYSQL_TEST_SUITES=plugins (MDEV-13002)"

This reverts commit c4cbc7a880.
2017-06-29 08:57:52 +04:00
Daniel Black
9222d79b82 travis: packages for debian build - added fakeroot 2017-06-29 08:57:52 +04:00
Igor Babaev
e608023947 Fixed the bug mdev-13107 and some similar unreported bugs.
The problems were in the code of sql_show.cc. There the tables
could be opened in such a way that mysql_derived_init() never
worked for CTE tables. As a result they were not marked as
derived and mysql_handle_derived() were not called for derived
tables used in their specifications.
2017-06-28 11:39:33 -07:00
Vicențiu Ciorbaru
31ba0fa48d MDEV-12851: Case with window functions query crashes server
The "is null" function performs one operation which no other Item_func
does, which is to update used tables during fix_length_and_dec().

This however can not be performed before window functions have had a
chance to resolve their order by and partition by definitions, which
happens after the initial setup_fields call. Consequently, do not call
Item_func_isnull update_used_tables during fix_length_and_dec().

There was another issue detected once the crash was resolved.
Because window functions did not implement is_null() method, we would
end up returning bad results for "is null" and "is not null" functions.
Implemented is_null() method for Item_windowfunc.
2017-06-28 19:21:31 +03:00
Vicențiu Ciorbaru
23edc7c88f MDEV-13186: main.win failure post MDEV-12336
During statement preparation st_order::item gets set to a value in
ref_ptr_array. During statement execution we were overriding that value,
causing subsequent checks for window functions to return true.

Whenever we do any setting from ref_ptr_array, make sure to always
store the value in all_fields as well.

For function items containing window functions, as MDEV-12336 has
discovered, we don't need to create a separate Item_direct_ref or
Item_aggregate_ref as they will be computed directly from the top-level
item once the window function argument columns are computed.
2017-06-28 15:23:36 +03:00
Vicențiu Ciorbaru
9003869390 Simplify IO_CACHE by removing current_pos and end_pos as self-references
These self references were previously used to avoid having to check the
IO_CACHE's type. However, a benchmark shows that on x86 5930k stock,
the type comparison is marginally faster than the double pointer dereference.
For 40 billion my_b_tell calls, the difference is .1 seconds in favor of performing the
type check. (Basically there is no measurable difference)

To prevent bugs from copying the structure using the equals(=) operator,
and having to do the bookkeeping manually, remove these "convenience"
variables.
2017-06-28 15:23:36 +03:00
Marko Mäkelä
b3171607e3 Avoid InnoDB messages about recovery after creating redo logs
srv_log_files_created: A debug flag to ensure that InnoDB redo log
files can only be created once in the server lifetime, and that
after log files have been created, no crash recovery will take place.

recv_scan_log_recs(): Detect the special case where the log consists
of a sole MLOG_CHECKPOINT record, such as immediately after creating
the redo logs.

recv_recovery_from_checkpoint_start(): Skip the recovery message
if the redo log is logically empty.
2017-06-28 11:58:43 +03:00
Marko Mäkelä
3e1d0ff574 Fix a merge error in commit 8f643e2063
A merge error caused InnoDB bootstrap to fail when
innodb_undo_tablespaces was set to more than 2.
This was because of a bug that was introduced to
srv_undo_tablespaces_init() by the merge.

Furthermore, some adjustments for Oracle Bug#25551311 aka
Bug#23517560 changes were forgotten. We must minimize direct
references to srv_undo_tablespaces_open and use predicates
instead.

srv_undo_tablespaces_init(): Increment srv_undo_tablespaces_open
once, not twice, per loop iteration.

is_system_or_undo_tablespace(): Remove (unused function).

is_predefined_tablespace(): Invoke srv_is_undo_tablespace().
2017-06-27 21:23:12 +03:00
Marko Mäkelä
29624ea304 MDEV-13176 ALTER TABLE…CHANGE col col TIMESTAMP NOT NULL DEFAULT… fails
When it comes to DEFAULT values of columns, InnoDB is imposing both
unnecessary and insufficient conditions on whether ALGORITHM=INPLACE
should be allowed for ALTER TABLE.

When changing an existing column to NOT NULL, any NULL values in the
columns only get a special treatment if the column is changed to an
AUTO_INCREMENT column (which is not supported by ALGORITHM=INPLACE)
or the column type is TIMESTAMP. In all other cases, an error
must be reported for the failure to convert a NULL value to NOT NULL.

InnoDB was unnecessarily interested in whether the DEFAULT value
is not constant when altering other than TIMESTAMP columns. Also,
when changing a TIMESTAMP column to NOT NULL, InnoDB was performing
an insufficient check, and it was incorrectly allowing a constant
DEFAULT value while not being able to replace NULL values with that
constant value.

Furthermore, in ADD COLUMN, InnoDB is unnecessarily rejecting certain
nondeterministic DEFAULT expressions (depending on the session
parameters or the current time).
2017-06-27 07:39:42 +03:00
Igor Babaev
02655a91cf Fixed the bug mdev-13166.
This patch corrects the fix for mdev-12845.
2017-06-26 12:16:04 -07:00
Sergey Vojtovich
6d0aed42c5 MDEV-12070 - Introduce thd_query_safe() from MySQL 5.7
Merged relevant part of MySQL revision:
565d20b44f
2017-06-26 16:11:22 +04:00
Sergey Vojtovich
dd710e7552 MDEV-12882 - Assertion failed in MDL_context::upgrade_shared_lock
Relaxed assertion (in MySQL it was removed).
For "LOCK TABLES t1 WRITE CONCURRENT, t1 READ" upgrade lock to weakest
existing suitable lock, which is MDL_SHARED_NO_READ_WRITE.
2017-06-26 16:11:22 +04:00