Skip to content

Conversation

@dgzhongly
Copy link

f

Andrzej Religa and others added 30 commits February 7, 2022 15:16
Post-push fix: using constant label instead of cluster-id in the section key

RB: 27551
Change-Id: Ic504103ca4e7695ef1e3da9cc82b68c36f40007a
…th UTF32 character set

Post-push fix:
Rewrite mtr tests to avoid inserting illegal UTF32 characters.

Change-Id: I2bf8fccbbc8886178177c0b3670463f0da3dfdc9
… can deadlock

This patch fixes the main issue, by moving the srv_refresh_innodb_monitor_stats()
call from srv_error_monitor_thread() which shouldn't bother with it, to the
srv_monitor_thread() which really needs it. This "helping" use to have
some sense in the past when the srv_monitor_thread could be suspended,
while we still needed to keep refreshing the stats, but in todays trunk
the srv_monitor_thread never gets suspended.

Also, the patch simplifies the implementation based on observation that
current implementation in trunk doesn't really react to os_event_set
calls from various places in the way it was supposed to in the old
times. Originally, the intention was to wake up a suspended monitor
thread when we enable the monitoring. But, at least since 5.0 import
commit, we never really suspend the monitoring thread, and all this
os_event_set achieves is that it needlessly wakes up the monitoring
thread which will check the clock, notice that the time that passed is
smaller than 15 seconds, and will get back to sleep again.
So, we can remove all these os_event_set complication.
Also, there's only one thread which calls the os_event_reset.
Also, after the changes, we only ever call os_event_set on shutdown.
Combining these observations we can simplify the code further, by
changing the os_event_wait timeout to 15 seconds, and interpreting the
event as a signal to quit.

Renamed srv_last_monitor_time to srv_monitor_stats_refreshed_at.

When innodb needs to enable or disable the monitor, it should be done
independently to the user setting the sys var, and properly counting the
number of threads which wanted to enabled/disable it.
The neew srv_innodb_needs_monitoring atomic will keep track of it.
This change also fixes:
Bug #93878 innodb_status_output fails to restore to old value

Fixed a bug in shutdown, that we forgot to signal 4 threads:
- srv_threads.m_error_monitor
- srv_threads.m_monitor
- srv_threads.m_buf_dump
- srv_threads.m_buf_resize
This wasn't a big deal as some of them were noticing the shutdown
themselves, when waiting on event timed out, and others typically
wasn't even started at the moment the shutdown occurred.

Reviewed by: Marcin Babij <[email protected]>
Change-Id: Ie483e6993aae54a069d0806255afbcd70e33b7e3
Change-Id: I3e28240030f7a167e0ede2a55a4f2ec7d79ab55b
Change-Id: Ia1a9cba1953cf1f6fd58430676968f93f7775756
Change-Id: I3d4602f34ecddc39d1d4a7e88399124ba465c3d2
Change-Id: Iee0af945bbaf107178690577b6aa6bed3c177ff6
Change-Id: I1356decfe54b2987eaad7b64dbd5b1214e5f230c
Change-Id: I554266fd1ce9ea1e43162f406981e8d31d506664

Change-Id: Ib8838647a756f297f7f9808eff8ab85f46d1b3ca
… data nodes

Fix thr_LOCAL and thr_GLOBAL values.
thr_LOCAL and thr_GLOBAL were being assigned the wrong value when
there is no main/req threads causing multiple data node  crashed
depending on the thread configuration.
Now, when tehre is no main and req thread, the value of thr_LOCAL and
thr_GLOBAL is the thread number of the first recv thread as expected.

Change-Id: I605772a0a98f56a7adc85b98f9473026903cc0d8
Post-push fix for a test failure when running mtr with --hypergraph.

An assertion failure is seen with the hypergraph optimizer because a
TABLE_VALUE_CONSTRUCTOR access path has uninitialized init_cost. Fixed
by initializing the init_cost.

Also filter out some result differences between the old optimizer and
the hypergraph optimizer.

Change-Id: Ia62344abeba625ff2026554e5ef2ac57113dce0e
…b-page-size=4k

Fixing a pb2 failure by running test only for 16k innodb page size.

approved by Kuba Lopuszanski <[email protected]> over IM.
 Description:
 ------------
 SET PERSIST does not make sense for gtid_purged variable.
 Unfortunately, SET PERSIST is allowed. After a SET PERSIST statement
 has been executed, the variable stops working as expected, and takes
 only the value specified in the last SET PERSIST or SET PERSIST_ONLY
 statement. It does not represent the state derived from the binary
 log and mysql.gtid_executed table.

 This has many bad consequences:
 - The next time the server attempts to restart, the server will to
  fail to restart (unless the persisted value is a superset of the
  real value).
 - There are decisions made based on @@global.gtid_purged. Internal
  checks in the server are based on the correct values, not shadowed
  by the persisted value. But checks in e.g. MySQL Shell are based on
  values retrieved through the SQL interface, in which the correct
  value is shadowed by the persisted value. Therefore, Shell may
  report errant transactions when there are none, or fail to report
  existing errant transactions. It may report that a replica has been
  left behind (not received transactions which the source has already
  purged), even if it has not, or it may fail to report that a replica
  has been left behind even if it has.  If we take a freshly
  initialized data directory from a MySQL 5.7 instance and upgrade
  it to 8.0, the definition gtid_executed differs from the definition
  of the same tables, in a freshly initialized datadir of an 8.0
  instance.

 Analysis:
 ------------
 gtid_purged is a variable that tracks server state. Its value is
 always preserved through server restarts because its value is derived
 from binary log files and the mysql.gtid_executed table
 (and SET @@global.gtid_purged maintains this property because it
 updates mysql.gtid_executed).

 Fix:
 ----
 Made gtid_purged variable as non-persistant.

 Reviewed by: Sven Sandberg <[email protected]>,
               pedro Figueiredo <[email protected]>

Change-Id: I78b2d081a1bc7cfc35d2c855901b38e86024feaa
When an APPEND access path is walked with the ENTIRE_TREE walk
policy, the traversal stops and its children are never walked. The
children are walked only when the walk policy is ENTIRE_QUERY_BLOCK
or STOP_AT_MATERIALIZATION. This is incorrect because the expected
behaviour is that traversal should continue only if the policy is
ENTIRE_TREE.

This is fixed by modifying the access path walk to traverse children
of an APPEND only if the walk policy is ENTIRE_TREE.

Change-Id: Icd2d294589a58ec18f091cbf5088f4c38b587c9a
…ong type

This is a regression from bug#32915973. Before this bugfix, with
a dynamic parameter that was derived as VARCHAR, and a parameter value
with a temporal actual type was supplied, the query was reprepared so
that the parameter was given the actual data type. This logic was lost
in that bugfix.

The solution here is to reinstate that logic. We have also added C API
test cases to validate that correct data types are returned.

Change-Id: I2448e3f2f36925fe70d882ae5681a6234f0d5a98
…rigger

The problem is related to missing propagation of NULL values from
the class Arg_comparator to the class Item_func_equal.
The general class Item_bool_func2 has an is_nullable() property that
is used to signal whether NULL values generated by Arg_comparator
should be propagated to it.

The Item_func_equal class is a subclass of Item_bool_func2, and is never
nullable, however its logic is still depending on being able to read
NULL value information from Arg_comparator.

The Item_bool_func2 function set_cmp_func() tells Arg_comparator to
propagate NULL values only when the function is nullable.
This function also works for the class Item_func_equal when called by
the resolver, because the is_nullable property is finally set after
calling set_cmp_func(). But set_cmp_func() may also be called later,
by fold_condition(), when the is_nullable property has been cleared.
In this case, NULL value information is not propagated and we end up
with wrong results.

We go for a simple fix here, by making set_cmp_func() virtual and
overriding it for class Item_func_equal by telling Arg_comparator to
always propagate NULL values.

Change-Id: Icb3aa1c30a6d10a82fe287a9f27f8fdd46087f59
Small improvements to show_rpl_debug_info.inc

* Background

show_rpl_debug_info.inc is sometimes used by tests to output debug
info after a failure. It was written long ago and would benefit from
some maintenance now.

* Changes

- When the file was written, mtr's loop feature only supported loops
that iterate in decreasing order. Now it can iterate in increasing
order, meaning we can make the output appear in a more natural order.

- When the file was written, there was no easy way to show the error
log. Now there is performance_schema.error_log. So we print it.

- mtr echoes the last 30 lines of the test log to its stdout.
Sometimes the full log is deleted and the 30 lines is all information
we get.  So it would help to put some of the more critical information
there, in particular, any errors in the replication threads and the
last errors from the error logs.

- Use new terminology.

- Improve formatting.

Change-Id: I64629e5ab2eb89ee06b68518aabf22b9f86810cd
…ck.sql

Skip ndb dictionary check before and after mtr testcase run if ndbinfo
engine is not enabled since check uses ndbinfo table.

Change-Id: I8dadca13e051f05d780ff4262adfd971e1b6aba3
Symptom:

rpl_mts_spco_acl_commands_binlog and
rpl_mts_spco_acl_commands_nobinlog failed after WL#13469.

Analysis:

The tests replicates a CREATE USER statement, which is held before
committing due to replica-preserve-commit-order.  At that point, it
holds the metadata lock ACL CACHE in EXCLUSIVE mode.  While CREATE
USER is in this state, the test executes a number of checks, one of
which is a SHOW GLOBAL VARIABLES statement.

WL#13469 changed the execution of SHOW GLOBAL VARIABLES so that it
needs to take the metadata lock ACL CACHE (in SHARED mode).
Therefore, the execution of SHOW GLOBAL VARIABLES blocked the test.
Since the test could not proceed, it did not reach the point where it
unblocked the applier threads.  Eventually the applier threads timed
out, which made them stop with an error, and also abort the CREATE
USER statement.  Aborting CREATE USER also unblocked the SHOW GLOBAL
VARIABLES, which allowed the test to proceed.  But a little bit later,
the test failed since it did not expect an error in the replication
threads.

Fix:

Change the test to use SELECT @@global.variable instead of SHOW GLOBAL
VARIABLES LIKE 'variable'.

Change-Id: Id6772e2dabbcbd5627c846d5bb3c3cfe2a1279c8
Post push patch for fixing windows crash.

Change-Id: I1735e7440525c6d201fb40c90ed15b922e7fc135
This patch fixes the x plugin. Configured with:
-DWITH_MEB=0 -DWITHOUT_GROUP_REPLICATION=1

Change-Id: I857e7318f641fc8fb9bc92e8506d71975afde5eb
(cherry picked from commit 3ffb476afa35665f072e389ad01142e54a001b6f)
…with failed constraint

This patch fixes an inconsistency in the "Rows matched" info message
returned from multi-table UPDATE IGNORE statements when some of the
updates were rejected by a WITH CHECK OPTION clause in an updatable
view.

It was fixed for single-table UPDATE in the following bug:

Bug#30158954: INCONSISTENT ROWS MATCHED VALUE FOR UPDATE WITH FAILED CONSTRAINT

But the inconsistency could still be seen in multi-table UPDATE IGNORE
if the updatable view was the first table of the join, and otherwise
satisfied the requirements for immediate update.

This patch applies the fix from Bug#30158954 to the multi-table code
path as well.

Change-Id: I042f2ffaa54edad6e5061eadf25a9e30055064c0
The CompressedBackup and CompressedLCP configuration parameter were
ignored on Windows, they are now supported.

If user had turned any of those on, upgrade will start compress
corresponding files and there may be an increase in cpu usage for io
threads.

To get old behaviour back reconfigure with the compress parameters
turned off.

Change-Id: I4a3398c46e9ad67a8dbda08d345ffe1db077660d
In ndb_file_win32.cpp do not assume extend function is always called at
beginning of file.  That was true for raw files but not when using
ndbxfrm1 for redo, undo, table space files.

Change-Id: I658d5089eaabde18908b3d5b93977900f59db1c2
Fix signed/unsigned warning on Windows.

Change-Id: Ife46b3df43698342bf4d3132d0736d15404f7204
Functions should return failure instead.

Change-Id: I12bf23d84e83be6d8e3339b00a1f43e403879ce1
…e server to show the user

Description: Added more information to expired
             password error message on error log

RB: 27665
…995 IN A FILE OPERATION.

This specific error is not a hard error. It is an information and subject to retry the operation. It happens whenever a thread posts async IO and decided to close itself.
In such case we will:
- print only INFO, not ERROR,
- immediately repeat the operation (from within the AIO handler thread that learned about the error)
- `os_aio_windows_handler` retries the IO operation, but not using the SyncFileIO, which would be triggering an assertion (it can't be used for files opened for AIO), instead we just post another ReadFile/WriteFile to OS.
- in `os_aio_windows_handler` a loop is added to handle completions until one succeeds.

Change-Id: Id05c06e03d336c5c82ad830965e5dc655e38c989
Additional patch:
  run bison, to generate parser files
  run gen_lex_token to generate lex_token.h
  run gen_keyword_list to generate keyword_list.h

Change-Id: I5bda1edf8a62d3d0f747717f71776fd5891429e0
(cherry picked from commit fb16d96c52188755e28feed11e8b5c6bbda4cdae)
bkandasa and others added 27 commits March 7, 2022 08:54
…ss INSTANT DDL

 Post push fix for memcached test.

Reviewed by : Debarun Banerjee <[email protected]>
This problem requires a rather complex set of conditions to trigger:

- We have a CTE that is materialized and used in multiple query blocks.
- For the first query block that uses the CTE, there are multiple
  possible key definitions, which causes JOIN::finalize_derived_keys()
  to move the used key definition into position zero.
- The second query block that uses the CTE manipulates an index that
  uses the same position as the original position for the key chosen
  for the first query block.

Now, the function TABLE::copy_tmp_key() is supposed to move the first
key into a position that does not overlap with the subsequent keys.
And this is done for the KEY entry, however the associated entries
(KEY_PART_INFO, key names and rec per key information) are kept as is,
meaning that a subsequent key analysis for another query block may
overwrite the information in these data structures, possibly causing
invalid results to be returned.

The fix is to also move these extra data structures, so that subsequent
query block analyses use pristine data structures.

The function TABLE::copy_tmp_key() is renamed to TABLE::move_tmp_key(),
as this is really a move operation. In addition, old entries are
zeroed out so that a later invalid access will likely fail.

A synthetic test case is added, as the original case is too complex and
contains too much data to be included.

Change-Id: I908dca74560d20fecdd886e55cabfcaa348aba4d
Test script fix only, no change in production code.

Problem
=======

New test perfschema.processlist_reg_user fails on some platforms (Windows).

Root cause
==========

In tables:
- INFORMATION_SCHEMA.PROCESSLIST
- performance_schema.processlist
the column HOST is printed:
- sometime as a hostname
- sometime as a hostname and port number

This is due to the fact that mysql-test-run.pl
connects differently to the server:
- sometime using a UNIX socket
- sometime using a TCP/IP socket
depending of the platform.

Fix
===

Simplify test perfschema.processlist_reg_user
to not print the HOST column,
so the test results are platform independent.

Approved by: Chris Powers <[email protected]>
…ex & deadlock/hang

Assignment to the @@session_track_system_variables variable caused
a recursive locking of the LOCK_plugin mutex in corner cases.

The fix removes an ad-hoc processing of the
@@session_track_system_variables from the System_variable_tracker
class.

Change-Id: I38748f3a6f767ef7023ea40dbfd0c46322c864bf
(cherry picked from commit e5b2f18f360ef1ea99ef75a5033d1f4e72c7c088)
(cherry picked from commit 053b58cf5c7459aeb47019974ede11609fa54b48)
…ack_service in debug mode

List of changes:

* Order of LOCK_plugin and LOCK_system_variables_hash has been swapped.

* LOCK_system_variables_hash write lock has been downgraded to read
  lock at get_sysvar_source().

* Session_sysvars_tracker::vars_list::parse_var_list() has been
  refactored to acquire locks when necessary only and for the whole
  batch of variable names referenced in @@session_track_system_variables.

* @@session_track_system_variables now accepts input values consisting
  of space characters.
  This seems logical, since, by the implementation,
  @@session_track_system_variables always accepted space characters
  between tracked variable names in its input value (i.e. it silently
  ignored those space characters).

* THD::plugin_lock_recursion_depth has been removed as unnecessary

* THD::hash_lock_recursion_depth has been transformed into thread_local
  static System_variable_tracker::m_hash_lock_recursion_depth, since the
  latter is specific to threads instead of SQL sessions.

* lock_plugin_data(), unlock_plugin_data() calls
  have been inlined (replaced with
  mysql_mutex_lock/mysql_mutex_unlock(LOCK_plugin)) for easier grepping
  of LOCK_plugin occurrences.

Change-Id: I8d554f56794888171d59b391bbb2fb22182afafe
(cherry picked from commit 6c1fa1ca0d85c6cbbbad81447ccc35ffab7b613f)
(cherry picked from commit fc7d4d74e47604b2160903ff4fc0fe165d2ea4f1)
… on PB2 daily runs

The issue: after WL14592, if `ident` is a name of some plugin- or
component-registered variables, then `SET PERSIST ident` and `RESET
PERSIST ident` commands processed the name `ident` unmodified as it
was entered by user (i.e. without any normalization
e.g. transformation to lowercase or so).

Thus, `SET PERSIST IdEnT=...` saved the name "IdEnT" into
mysqld-auto.cnf, so `RESET PERSIST iDeNt` failed to recognize that
"IdEnT" and "iDeNt" are names of the same variable.

The fix forces a lowercase transformation of persisted variable names
before saving/removing them to/from mysqld-auto.cnf.

Change-Id: Id8182b1e27c27d99c68d5f4f3442508e79f5a441
(cherry picked from commit 7d7323f82a330520402a1770776ef6093faae615)
…ack_service in debug mode

Post-push fix: error: unused variable 'LOCK_plugin' [-Werror=unused-variable]

Change-Id: I89b1516acb953eb3ed28544569b00153334a8882
(cherry picked from commit e3c526539ee59450b163830e44c57da8656d612e)
…cial package

 On el6/el7, where -server-debug is not built, nothing obsoletes the
 community package in commercial upgrade. Add obsolete from -server to
 -server-debug to fix this.

Change-Id: Ic3646fc063c8cf400dfffa4d38859b96e0c44009
…router packages

Use of cluster macro was done be assignment

Change-Id: I0cf8a9243d2043e60282b971a56cefcfd6d94ad2
…tables_fix.sql fails

RB#27762

Fixed a typo in the upgrade script.
Added check that FSOPENCONF signal is only sent locally.

Approved by: Frazer Clement <[email protected]>
…be-uninitialized]

LTO phase falsely reported error due to Wmaybe-uninitialized in function
read_row in NdbInfoScanVirtual.cpp.

Change-Id: I7be0e5f6be3ad6015e89df0f5335f7cfc18ca887
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.