- 14 Feb, 2022 17 commits
-
-
Marko Mäkelä authored
log_t::rename_resized(): Replaces create_log_file_rename() delete_log_files(): Moved to a separate function. Also invoked on a normal startup when the log is not being resized, to remove any garbage log files. create_log_file(): Remove the std::string& parameter. os_file_delete_if_exists_func() [_WIN32]: Do not retry DeleteFile() on ERROR_ACCESS_DENIED.
-
Marko Mäkelä authored
-
Vladislav Vaintroub authored
The write_lock is released after the first time already. This leaves the hole in the log_write_and_flush logic, some flush_lock/write_lock waiters could be hanging, until the background redo log flush comes. The possibility of that is relatively tiny though.
-
Vladislav Vaintroub authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
- 13 Feb, 2022 2 commits
-
-
Marko Mäkelä authored
Before commit 86dc7b4d (MDEV-24626) all tablespace ID that needed recovery were known already in recv_init_crash_recovery_spaces(). recv_sys_t::recover_deferred(): Invoke fil_names_dirty(space) on the newly initialized tablespace. In this way, if the next log checkpoint occurs at some LSN that is after the initialization of the tablespace and before the last recovered LSN, a FILE_MODIFY record will be written, so that a subsequent recovery will succeed. The recovery was broken when commit 0261eac5 merged the 10.5 commit f443cd11 (MDEV-27022).
-
Marko Mäkelä authored
-
- 12 Feb, 2022 7 commits
-
-
Daniel Bartholomew authored
-
Daniel Bartholomew authored
-
Daniel Bartholomew authored
-
Daniel Bartholomew authored
-
Daniel Bartholomew authored
-
Daniel Bartholomew authored
-
Daniel Bartholomew authored
-
- 11 Feb, 2022 6 commits
-
-
Vladislav Vaintroub authored
Fixed inlining flags. Remove /Ob1 added by CMake for RelWithDebInfo. (the actual compiler default is /Ob2 if optimizations are enabled) Allow to define custom /Ob flag with new variable MSVC_INLINE, if desired
-
Marko Mäkelä authored
-
Krunal Bauskar authored
- regression got revealed while running tpcc workload. - as part of MDEV-25919 changes logic for statistics computation was revamped. - if the table has changed to certain threshold then table is added to statistics recomputation queue (dict_stats_recalc_pool_add) - after the table is added to queue the background statistics thread is notified - during revamp the condition to notify background statistics threads was wrongly updated to check if the queue/vector is empty when it should check if there is queue/vector has entries to process. - vec.begin() == vec.end() : only when vector is empty - also accessing these iterator outside the parallely changing vector is not safe - fix now tend to notify background statistics thread if the logic adds an entry to the queue/vector.
-
Marko Mäkelä authored
srw_lock in log_sys.append_prepare() turned out to yield best throughput. We might try a NUMA aware spin lock implementation later.
-
Vlad Lesin authored
MDEV-27746 Wrong comparision of BLOB's empty preffix with non-preffixed BLOB causes rows count mismatch for clustered and secondary indexes during non-locking read row_sel_sec_rec_is_for_clust_rec() treats empty BLOB prefix field in secondary index as a field equal to any external BLOB field in clustered index. Row_sel_get_clust_rec_for_mysql::operator() doesn't zerro out clustered record pointer in row_search_mvcc(), and row_search_mvcc() thinks that delete-marked secondary index record has visible for "CHECK TABLE"'s read view old-versioned clustered index record, and row_scan_index_for_mysql() counts it as a row. The fix is to execute row_sel_sec_rec_is_for_blob() in row_sel_sec_rec_is_for_clust_rec() if clustered field contains BLOB's reference.
-
Samuel Thibault authored
While building on GNU/Hurd and kfreebsd. On the C++ standard uintptr_t can be defined in <cstdint> ref: https://www.cplusplus.com/reference/cstdint/ Fixes: 0d44792a
-
- 10 Feb, 2022 8 commits
-
-
Sergei Golubchik authored
-
Sergei Golubchik authored
-
Sergei Golubchik authored
-
Sergei Golubchik authored
-
Sergei Golubchik authored
-
Sergei Golubchik authored
-
Sergei Petrunia authored
The asserion failure was caused by this query select /*id=1*/ from t1 where col= ( select /*id=2*/ from ... where corr_cond1 union select /*id=4*/ from ... where corr_cond2) Here, - select with id=2 was correlated due to corr_cond1. - select with id=4 was initially correlated due to corr_cond2, but then the optimizer optimized away the correlation, making the select with id=4 uncorrelated. However, since select with id=2 remained correlated, the execution had to re-compute the whole UNION. When it tried to execute select with id=4, it hit an assertion (join buffer already free'd). This is because select with id=4 has freed its execution structures after it has been executed once. The select is uncorrelated, so it did not expect it would need to be executed for the second time. Fixed this by adding this logic in st_select_lex::optimize_unflattened_subqueries(): If a member of a UNION is correlated, mark all its members as correlated, so that they are prepared to be executed multiple times.
-
Vladislav Vaintroub authored
Fixed tpool::pread() and tpool::pwrite() to return SSIZE_T on Windows, so that huge numbers are not converted to negatives. Also, make sure to never attempt reading/writing more bytes than DWORD can accomodate (4G)
-