From 1edd224372d9399a43a21c5c387aff84512f55e5 Mon Sep 17 00:00:00 2001 From: Roman Nozdrin Date: Sat, 14 Nov 2020 14:13:33 +0000 Subject: [PATCH 01/22] This patch puts MCS debian packaging files and part of debian/control into the engine directory --- debian/autobake-deb.sh | 7 + debian/control | 19 --- debian/mariadb-plugin-columnstore.install | 160 --------------------- debian/mariadb-plugin-columnstore.postinst | 8 -- debian/mariadb-plugin-columnstore.postrm | 24 ---- debian/mariadb-plugin-columnstore.prerm | 8 -- debian/mariadb-plugin-columnstore.triggers | 1 - storage/columnstore/columnstore | 2 +- 8 files changed, 8 insertions(+), 221 deletions(-) delete mode 100644 debian/mariadb-plugin-columnstore.install delete mode 100644 debian/mariadb-plugin-columnstore.postinst delete mode 100644 debian/mariadb-plugin-columnstore.postrm delete mode 100644 debian/mariadb-plugin-columnstore.prerm delete mode 100644 debian/mariadb-plugin-columnstore.triggers diff --git a/debian/autobake-deb.sh b/debian/autobake-deb.sh index 2e03d1cfa19..d96e92a2177 100755 --- a/debian/autobake-deb.sh +++ b/debian/autobake-deb.sh @@ -17,6 +17,13 @@ set -e # building the deb packages here. export DEB_BUILD_OPTIONS="nocheck $DEB_BUILD_OPTIONS" +# Take the files and part of control from MCS directory +if [[ -d storage/columnstore/columnstore/debian ]]; then + cp -v storage/columnstore/columnstore/debian/mariadb-plugin-columnstore.* debian/ + echo >> debian/control + cat storage/columnstore/columnstore/debian/control >> debian/control +fi + # General CI optimizations to keep build output smaller if [[ $TRAVIS ]] || [[ $GITLAB_CI ]] then diff --git a/debian/control b/debian/control index 1f2a8a2878e..8d758ef1d90 100644 --- a/debian/control +++ b/debian/control @@ -591,25 +591,6 @@ Description: RocksDB storage engine for MariaDB at maximising storage efficiency while maintaining InnoDB-like performance. This package contains the RocksDB plugin for MariaDB. -Package: mariadb-plugin-columnstore -Architecture: amd64 i386 -Depends: binutils, - libjemalloc1 | libjemalloc2, - libsnappy1 | libsnappy1v5, - mariadb-server-10.5 (= ${binary:Version}), - net-tools, - python3, - ${misc:Depends}, - ${shlibs:Depends} -Breaks: mariadb-columnstore-libs, - mariadb-columnstore-platform -Replaces: mariadb-columnstore-libs, - mariadb-columnstore-platform -Description: MariaDB ColumnStore storage engine - The MariaDB ColumnStore storage engine is a high-performance columnar - analytical engine, aimed at rapid processing of analytical queries on very - large amounts of data. - Package: mariadb-plugin-oqgraph Architecture: any Depends: libjudydebian1, diff --git a/debian/mariadb-plugin-columnstore.install b/debian/mariadb-plugin-columnstore.install deleted file mode 100644 index f519fa2a37e..00000000000 --- a/debian/mariadb-plugin-columnstore.install +++ /dev/null @@ -1,160 +0,0 @@ -etc/columnstore/AlarmConfig.xml -etc/columnstore/Columnstore.xml -etc/columnstore/ConsoleCmds.xml -etc/columnstore/ErrorMessage.txt -etc/columnstore/MessageFile.txt -etc/columnstore/ProcessConfig.xml -etc/columnstore/storagemanager.cnf -etc/mysql/mariadb.conf.d/columnstore.cnf -usr/bin/DDLProc -usr/bin/DMLProc -usr/bin/ExeMgr -usr/bin/MCSInstanceCmds.sh -usr/bin/MCSVolumeCmds.sh -usr/bin/MCSgetCredentials.sh -usr/bin/PrimProc -usr/bin/ProcMgr -usr/bin/ProcMon -usr/bin/ServerMonitor -usr/bin/StorageManager -usr/bin/WriteEngineServer -usr/bin/autoConfigure -usr/bin/bulklogReport.sh -usr/bin/clearShm -usr/bin/cleartablelock -usr/bin/columnstore -usr/bin/columnstore-post-install -usr/bin/columnstore-pre-uninstall -usr/bin/columnstoreClusterTester.sh -usr/bin/columnstoreDBWrite -usr/bin/columnstoreSupport -usr/bin/columnstoreSyslogSetup.sh -usr/bin/columnstore_installer -usr/bin/columnstore_module_installer.sh -usr/bin/columnstore_os_check.sh -usr/bin/columnstore_run.sh -usr/bin/colxml -usr/bin/configReport.sh -usr/bin/configxml.sh -usr/bin/controllernode -usr/bin/cpimport -usr/bin/cpimport.bin -usr/bin/cplogger -usr/bin/dbbuilder -usr/bin/dbmsReport.sh -usr/bin/dbrmctl -usr/bin/ddlcleanup -usr/bin/disable-rep-columnstore.sh -usr/bin/editem -usr/bin/getMySQLpw -usr/bin/hardwareReport.sh -usr/bin/idbmeminfo -usr/bin/load_brm -usr/bin/logReport.sh -usr/bin/mariadb-columnstore-start.sh -usr/bin/mariadb-columnstore-stop.sh -usr/bin/mariadb-command-line.sh -usr/bin/master-rep-columnstore.sh -usr/bin/mcs-savebrm.py -usr/bin/mcs-loadbrm.py -usr/bin/mcs-stop-controllernode.sh -usr/bin/mcsGetConfig -usr/bin/mcsSetConfig -usr/bin/mcs_module_installer.sh -usr/bin/mycnfUpgrade -usr/bin/os_detect.sh -usr/bin/post-mysql-install -usr/bin/post-mysqld-install -usr/bin/postConfigure -usr/bin/quick_installer_multi_server.sh -usr/bin/quick_installer_single_server.sh -usr/bin/remote_command.sh -usr/bin/remote_command_verify.sh -usr/bin/remote_scp_get.sh -usr/bin/remote_scp_put.sh -usr/bin/remotessh.exp -usr/bin/reset_locks -usr/bin/resourceReport.sh -usr/bin/rollback -usr/bin/rsync.sh -usr/bin/save_brm -usr/bin/slave-rep-columnstore.sh -usr/bin/smcat -usr/bin/smls -usr/bin/smput -usr/bin/smrm -usr/bin/startupTests.sh -usr/bin/viewtablelock -usr/bin/workernode -usr/lib/*/libalarmmanager.so -usr/lib/*/libbatchloader.so -usr/lib/*/libbrm.so -usr/lib/*/libcacheutils.so -usr/lib/*/libcloudio.so -usr/lib/*/libcommon.so -usr/lib/*/libcompress.so -usr/lib/*/libconfigcpp.so -usr/lib/*/libdataconvert.so -usr/lib/*/libddlcleanuputil.so -usr/lib/*/libddlpackage.so -usr/lib/*/libddlpackageproc.so -usr/lib/*/libdmlpackage.so -usr/lib/*/libdmlpackageproc.so -usr/lib/*/libexecplan.so -usr/lib/*/libfuncexp.so -usr/lib/*/libidbdatafile.so -usr/lib/*/libjoblist.so -usr/lib/*/libjoiner.so -usr/lib/*/liblibmysql_client.so -usr/lib/*/libloggingcpp.so -usr/lib/*/libmarias3.so -usr/lib/*/libmessageqcpp.so -usr/lib/*/liboamcpp.so -usr/lib/*/libquerystats.so -usr/lib/*/libquerytele.so -usr/lib/*/libregr.so -usr/lib/*/librowgroup.so -usr/lib/*/librwlock.so -usr/lib/*/libstoragemanager.so -usr/lib/*/libthreadpool.so -usr/lib/*/libthrift.so -usr/lib/*/libudfsdk.so -usr/lib/*/libwindowfunction.so -usr/lib/*/libwriteengine.so -usr/lib/*/libwriteengineclient.so -usr/lib/*/libwriteengineredistribute.so -usr/lib/mysql/plugin/ha_columnstore.so -usr/lib/mysql/plugin/libregr_mysql.so -usr/lib/mysql/plugin/libudf_mysql.so -usr/sbin/install_mcs_mysql.sh -usr/share/columnstore/calremoveuserpriority.sql -usr/share/columnstore/calsetuserpriority.sql -usr/share/columnstore/calshowprocesslist.sql -usr/share/columnstore/columnstoreAlias -usr/share/columnstore/columnstoreLogRotate -usr/share/columnstore/columnstoreSyslog -usr/share/columnstore/columnstoreSyslog-ng -usr/share/columnstore/columnstoreSyslog7 -usr/share/columnstore/columnstore_functions -usr/share/columnstore/columnstore_info.sql -usr/share/columnstore/dumpcat_mysql.sql -usr/share/columnstore/gitversionEngine -usr/share/columnstore/mariadb-columnstore.service -usr/share/columnstore/mcs-controllernode.service -usr/share/columnstore/mcs-ddlproc.service -usr/share/columnstore/mcs-dmlproc.service -usr/share/columnstore/mcs-exemgr.service -usr/share/columnstore/mcs-loadbrm.service -usr/share/columnstore/mcs-primproc.service -usr/share/columnstore/mcs-storagemanager.service -usr/share/columnstore/mcs-workernode.service -usr/share/columnstore/mcs-writeengineserver.service -usr/share/columnstore/mcstest-001.sh -usr/share/columnstore/mcstest-002.sh -usr/share/columnstore/mcstest-003.sh -usr/share/columnstore/mcstest-004.sh -usr/share/columnstore/myCnf-exclude-args.text -usr/share/columnstore/myCnf-include-args.text -usr/share/columnstore/releasenum -usr/share/columnstore/syscatalog_mysql.sql -var/lib/columnstore/local/module diff --git a/debian/mariadb-plugin-columnstore.postinst b/debian/mariadb-plugin-columnstore.postinst deleted file mode 100644 index 97a1bba22c8..00000000000 --- a/debian/mariadb-plugin-columnstore.postinst +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash - -set -e - -# Install ColumnStore -columnstore-post-install install - -#DEBHELPER# diff --git a/debian/mariadb-plugin-columnstore.postrm b/debian/mariadb-plugin-columnstore.postrm deleted file mode 100644 index b2e19774ec1..00000000000 --- a/debian/mariadb-plugin-columnstore.postrm +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/bash - -set -e - -if [ "$1" = "purge" ]; then - rm -rf /var/lib/columnstore - rm -rf /etc/columnstore - rm -f /etc/mysql/mariadb.conf.d/columnstore.cnf.rpmsave -fi - -# Automatically restart MariaDB after ColumnStore plugin has been removed -case "$1" in - purge|remove|disappear) - if [ -d /run/systemd/system ]; then - # If systemd - deb-systemd-invoke restart mariadb.service >/dev/null - elif [ -x "/etc/init.d/mariadb" ]; then - # Fall-back to SysV init - invoke-rc.d mariadb restart || exit $? - fi - ;; -esac - -#DEBHELPER# diff --git a/debian/mariadb-plugin-columnstore.prerm b/debian/mariadb-plugin-columnstore.prerm deleted file mode 100644 index f6a27f14499..00000000000 --- a/debian/mariadb-plugin-columnstore.prerm +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash - -set -e - -columnstore-pre-uninstall - - -#DEBHELPER# diff --git a/debian/mariadb-plugin-columnstore.triggers b/debian/mariadb-plugin-columnstore.triggers deleted file mode 100644 index dd866036784..00000000000 --- a/debian/mariadb-plugin-columnstore.triggers +++ /dev/null @@ -1 +0,0 @@ -activate-noawait ldconfig diff --git a/storage/columnstore/columnstore b/storage/columnstore/columnstore index 86347532abf..a91c4d00d93 160000 --- a/storage/columnstore/columnstore +++ b/storage/columnstore/columnstore @@ -1 +1 @@ -Subproject commit 86347532abf1f7dae8896a96d5b7251233fca229 +Subproject commit a91c4d00d931b2e7dacc4f3ad6070906ddefff14 From 6da68049b5d28246c5773fc2caee7bef6c6fc68f Mon Sep 17 00:00:00 2001 From: Sujatha Date: Mon, 16 Nov 2020 14:31:44 +0530 Subject: [PATCH 02/22] MDEV-23610: Slave user can't run "SHOW SLAVE STATUS" anymore after upgrade to 10.5, mysql_upgrade should take of that Add a new privilege "SLAVE MONITOR" which will grant user the permission to execute "SHOW SLAVE STATUS" and "SHOW RELAYLOG EVENTS" commands. SHOW SLAVE STATUS requires either SLAVE MONITOR/SUPER SHOW RELAYLOG EVENTS requires SLAVE MONITOR privilege. --- mysql-test/main/grant.result | 6 +- mysql-test/main/grant.test | 1 + mysql-test/main/grant_slave_admin.result | 28 ----- mysql-test/main/grant_slave_admin.test | 45 -------- mysql-test/main/grant_slave_monitor.result | 55 ++++++++++ mysql-test/main/grant_slave_monitor.test | 101 ++++++++++++++++++ .../main/mysql_upgrade_to_100502.result | 65 ++++++++++- mysql-test/main/mysql_upgrade_to_100502.test | 65 +++++++++++ mysql-test/main/mysqldump-system.result | 2 +- .../main/system_mysql_db_error_log.result | 2 +- .../suite/funcs_1/r/innodb_trig_03.result | 10 +- .../suite/funcs_1/r/innodb_trig_03e.result | 4 +- .../suite/funcs_1/r/memory_trig_03.result | 10 +- .../suite/funcs_1/r/memory_trig_03e.result | 4 +- .../suite/funcs_1/r/myisam_trig_03.result | 10 +- .../suite/funcs_1/r/myisam_trig_03e.result | 4 +- sql/privilege.h | 29 +++-- sql/sql_acl.cc | 19 +++- sql/sql_show.cc | 3 +- sql/sql_yacc.yy | 1 + 20 files changed, 350 insertions(+), 114 deletions(-) create mode 100644 mysql-test/main/grant_slave_monitor.result create mode 100644 mysql-test/main/grant_slave_monitor.test diff --git a/mysql-test/main/grant.result b/mysql-test/main/grant.result index 01daf027186..671b6dc4247 100644 --- a/mysql-test/main/grant.result +++ b/mysql-test/main/grant.result @@ -624,7 +624,8 @@ Reload Server Admin To reload or refresh tables, logs and privileges Binlog admin Server To purge binary logs Binlog monitor Server To use SHOW BINLOG STATUS and SHOW BINARY LOG Replication master admin Server To monitor connected slaves -Replication slave admin Server To start/monitor/stop slave and apply binlog events +Replication slave admin Server To start/stop slave and apply binlog events +Slave monitor Server To use SHOW SLAVE STATUS and SHOW RELAYLOG EVENTS Replication slave Server Admin To read binary log events from the master Select Tables To retrieve rows from table Show databases Server Admin To see all databases with SHOW DATABASES @@ -1966,10 +1967,11 @@ GRANT REPLICATION SLAVE ON *.* TO mysqltest_u1@localhost; GRANT SHOW DATABASES ON *.* TO mysqltest_u1@localhost; GRANT SHUTDOWN ON *.* TO mysqltest_u1@localhost; GRANT USAGE ON *.* TO mysqltest_u1@localhost; +GRANT SLAVE MONITOR ON *.* TO mysqltest_u1@localhost; SHOW GRANTS FOR mysqltest_u1@localhost; Grants for mysqltest_u1@localhost -GRANT RELOAD, SHUTDOWN, PROCESS, FILE, SHOW DATABASES, REPLICATION SLAVE, BINLOG MONITOR, CREATE USER ON *.* TO `mysqltest_u1`@`localhost` +GRANT RELOAD, SHUTDOWN, PROCESS, FILE, SHOW DATABASES, REPLICATION SLAVE, BINLOG MONITOR, CREATE USER, SLAVE MONITOR ON *.* TO `mysqltest_u1`@`localhost` GRANT CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE ROUTINE, ALTER ROUTINE, EVENT ON `mysqltest_db1`.* TO `mysqltest_u1`@`localhost` connect con1,localhost,mysqltest_u1,,mysqltest_db1; connection con1; diff --git a/mysql-test/main/grant.test b/mysql-test/main/grant.test index 38baf673825..a81e77567b5 100644 --- a/mysql-test/main/grant.test +++ b/mysql-test/main/grant.test @@ -1833,6 +1833,7 @@ GRANT REPLICATION SLAVE ON *.* TO mysqltest_u1@localhost; GRANT SHOW DATABASES ON *.* TO mysqltest_u1@localhost; GRANT SHUTDOWN ON *.* TO mysqltest_u1@localhost; GRANT USAGE ON *.* TO mysqltest_u1@localhost; +GRANT SLAVE MONITOR ON *.* TO mysqltest_u1@localhost; --echo SHOW GRANTS FOR mysqltest_u1@localhost; diff --git a/mysql-test/main/grant_slave_admin.result b/mysql-test/main/grant_slave_admin.result index 12f0694e9eb..0f1f2c9985f 100644 --- a/mysql-test/main/grant_slave_admin.result +++ b/mysql-test/main/grant_slave_admin.result @@ -18,8 +18,6 @@ CHANGE MASTER TO MASTER_HOST='127.0.0.1'; ERROR 42000: Access denied; you need (at least one of) the SUPER, REPLICATION SLAVE ADMIN privilege(s) for this operation STOP SLAVE; ERROR 42000: Access denied; you need (at least one of) the SUPER, REPLICATION SLAVE ADMIN privilege(s) for this operation -SHOW SLAVE STATUS; -ERROR 42000: Access denied; you need (at least one of) the SUPER, REPLICATION SLAVE ADMIN privilege(s) for this operation disconnect con1; connection default; DROP USER user1@localhost; @@ -39,7 +37,6 @@ CHANGE MASTER TO MASTER_USER='root'; STOP SLAVE; Warnings: Note 1255 Slave already has been stopped -SHOW SLAVE STATUS; disconnect con1; connection default; DROP USER user1@localhost; @@ -59,31 +56,6 @@ CHANGE MASTER TO MASTER_USER='root'; STOP SLAVE; Warnings: Note 1255 Slave already has been stopped -SHOW SLAVE STATUS; -disconnect con1; -connection default; -DROP USER user1@localhost; -# -# Test that SHOW RELAYLOG EVENTS is not allowed without REPLICATION SLAVE ADMIN -# -CREATE USER user1@localhost IDENTIFIED BY ''; -GRANT ALL PRIVILEGES ON *.* TO user1@localhost; -REVOKE REPLICATION SLAVE ADMIN ON *.* FROM user1@localhost; -connect con1,localhost,user1,,; -connection con1; -SHOW RELAYLOG EVENTS; -ERROR 42000: Access denied; you need (at least one of) the REPLICATION SLAVE ADMIN privilege(s) for this operation -disconnect con1; -connection default; -DROP USER user1@localhost; -# -# Test that SHOW RELAYLOG EVENTS is allowed with REPLICATION SLAVE ADMIN -# -CREATE USER user1@localhost IDENTIFIED BY ''; -GRANT REPLICATION SLAVE ADMIN ON *.* TO user1@localhost; -connect con1,localhost,user1,,; -connection con1; -SHOW RELAYLOG EVENTS; disconnect con1; connection default; DROP USER user1@localhost; diff --git a/mysql-test/main/grant_slave_admin.test b/mysql-test/main/grant_slave_admin.test index f17f8689b9f..d73c31e0cf2 100644 --- a/mysql-test/main/grant_slave_admin.test +++ b/mysql-test/main/grant_slave_admin.test @@ -24,8 +24,6 @@ START SLAVE; CHANGE MASTER TO MASTER_HOST='127.0.0.1'; --error ER_SPECIFIC_ACCESS_DENIED_ERROR STOP SLAVE; ---error ER_SPECIFIC_ACCESS_DENIED_ERROR -SHOW SLAVE STATUS; disconnect con1; connection default; @@ -46,9 +44,6 @@ connection con1; START SLAVE; CHANGE MASTER TO MASTER_USER='root'; STOP SLAVE; ---disable_result_log -SHOW SLAVE STATUS; ---enable_result_log disconnect con1; connection default; @@ -69,51 +64,11 @@ connection con1; START SLAVE; CHANGE MASTER TO MASTER_USER='root'; STOP SLAVE; ---disable_result_log -SHOW SLAVE STATUS; ---enable_result_log disconnect con1; connection default; DROP USER user1@localhost; - - ---echo # ---echo # Test that SHOW RELAYLOG EVENTS is not allowed without REPLICATION SLAVE ADMIN ---echo # - -CREATE USER user1@localhost IDENTIFIED BY ''; -GRANT ALL PRIVILEGES ON *.* TO user1@localhost; -REVOKE REPLICATION SLAVE ADMIN ON *.* FROM user1@localhost; -connect (con1,localhost,user1,,); -connection con1; ---disable_ps_protocol ---error ER_SPECIFIC_ACCESS_DENIED_ERROR -SHOW RELAYLOG EVENTS; ---enable_ps_protocol -disconnect con1; -connection default; -DROP USER user1@localhost; - ---echo # ---echo # Test that SHOW RELAYLOG EVENTS is allowed with REPLICATION SLAVE ADMIN ---echo # - -CREATE USER user1@localhost IDENTIFIED BY ''; -GRANT REPLICATION SLAVE ADMIN ON *.* TO user1@localhost; -connect (con1,localhost,user1,,); -connection con1; ---disable_ps_protocol ---disable_result_log -SHOW RELAYLOG EVENTS; ---enable_result_log ---enable_ps_protocol -disconnect con1; -connection default; -DROP USER user1@localhost; - - --echo # --echo # End of 10.5 tests --echo # diff --git a/mysql-test/main/grant_slave_monitor.result b/mysql-test/main/grant_slave_monitor.result new file mode 100644 index 00000000000..e53d8c0e678 --- /dev/null +++ b/mysql-test/main/grant_slave_monitor.result @@ -0,0 +1,55 @@ +CREATE USER user1@localhost IDENTIFIED BY ''; +GRANT ALL PRIVILEGES ON *.* TO user1@localhost; +REVOKE SLAVE MONITOR, SUPER ON *.* FROM user1@localhost; +FLUSH PRIVILEGES; +connect con1,localhost,user1,,; +connection con1; +SHOW GRANTS; +Grants for user1@localhost +GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN, BINLOG REPLAY ON *.* TO `user1`@`localhost` +# +# Verify that having REPLICATION SLAVE ADMIN doesn't allow SHOW SLAVE STATUS +# Expected error: Access denied; you need (at least one of) the SUPER, SLAVE +# MONITOR privilege(s) for this operation +# +SHOW SLAVE STATUS; +ERROR 42000: Access denied; you need (at least one of) the SUPER, SLAVE MONITOR privilege(s) for this operation +# +# Verify that having REPLICATION SLAVE ADMIN doesn't allow SHOW RELAYLOG EVENTS +# Expected error: Access denied; you need (at least one of) the REPLICA MONITOR +# privilege(s) for this operation +# +SHOW RELAYLOG EVENTS; +ERROR 42000: Access denied; you need (at least one of) the SLAVE MONITOR privilege(s) for this operation +disconnect con1; +# +# SHOW SLAVE STATUS and SHOW RELAYLOG EVENTS are allowed with SLAVE MONITOR privilege +# +connection default; +GRANT SLAVE MONITOR ON *.* TO user1@localhost; +FLUSH PRIVILEGES; +connect con1,localhost,user1,,; +connection con1; +SHOW GRANTS; +Grants for user1@localhost +GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN, BINLOG REPLAY, SLAVE MONITOR ON *.* TO `user1`@`localhost` +SHOW SLAVE STATUS; +SHOW RELAYLOG EVENTS; +disconnect con1; +connection default; +DROP USER user1@localhost; +# +# SHOW SLAVE STATUS command is allowed with SUPER privilege +# +CREATE USER user1@localhost IDENTIFIED BY ''; +GRANT SUPER ON *.* TO user1@localhost; +connect con1,localhost,user1,,; +SHOW SLAVE STATUS; +# +# SHOW RELAYLOG EVENTS is not allowed with SUPER privilege, it requires SLAVE MONITOR +# +SHOW RELAYLOG EVENTS; +ERROR 42000: Access denied; you need (at least one of) the SLAVE MONITOR privilege(s) for this operation +disconnect con1; +connection default; +DROP USER user1@localhost; diff --git a/mysql-test/main/grant_slave_monitor.test b/mysql-test/main/grant_slave_monitor.test new file mode 100644 index 00000000000..7dacaa36aee --- /dev/null +++ b/mysql-test/main/grant_slave_monitor.test @@ -0,0 +1,101 @@ +# ==== Purpose ==== +# +# SLAVE MONITOR privilege is required to execute following commands. +# SHOW SLAVE STATUS +# SHOW RELAYLOG EVENTS +# +# ==== Implementation ==== +# +# Step1: GRANT ALL privileges for a new user 'user1' and then REVOKE +# SLAVE MONITOR and SUPER privileges. +# Step2: Execute SHOW SLAVE STAUTS/SHOW RELAYLOG EVENTS commands and expect +# ER_SPECIFIC_ACCESS_DENIED_ERROR. This also verifies that REPLICATION +# SLAVE ADMIN privilege is not required for these two commands. +# Step3: GRANT SLAVE MONITOR privilege and observe that both commands are +# allowd to execute. +# Step4: GRANT SUPER privilege and observe that only SHOW SLAVE STATUS command +# is allowed. +# +# ==== References ==== +# +# MDEV-23610: Slave user can't run "SHOW SLAVE STATUS" anymore after upgrade +# to 10.5, mysql_upgrade should take of that +# MDEV-23918: admin privlege required to view contents of relay logs in 10.5 +# + +--source include/not_embedded.inc + +CREATE USER user1@localhost IDENTIFIED BY ''; +GRANT ALL PRIVILEGES ON *.* TO user1@localhost; +REVOKE SLAVE MONITOR, SUPER ON *.* FROM user1@localhost; +FLUSH PRIVILEGES; + +--connect(con1,localhost,user1,,) +--connection con1 +SHOW GRANTS; + +--echo # +--echo # Verify that having REPLICATION SLAVE ADMIN doesn't allow SHOW SLAVE STATUS +--echo # Expected error: Access denied; you need (at least one of) the SUPER, SLAVE +--echo # MONITOR privilege(s) for this operation +--echo # +--error ER_SPECIFIC_ACCESS_DENIED_ERROR +SHOW SLAVE STATUS; + +--echo # +--echo # Verify that having REPLICATION SLAVE ADMIN doesn't allow SHOW RELAYLOG EVENTS +--echo # Expected error: Access denied; you need (at least one of) the REPLICA MONITOR +--echo # privilege(s) for this operation +--echo # +--disable_ps_protocol +--error ER_SPECIFIC_ACCESS_DENIED_ERROR +SHOW RELAYLOG EVENTS; +--enable_ps_protocol +--disconnect con1 + +--echo # +--echo # SHOW SLAVE STATUS and SHOW RELAYLOG EVENTS are allowed with SLAVE MONITOR privilege +--echo # + +--connection default +GRANT SLAVE MONITOR ON *.* TO user1@localhost; +FLUSH PRIVILEGES; + +--connect(con1,localhost,user1,,) +--connection con1 +SHOW GRANTS; + +--disable_result_log +SHOW SLAVE STATUS; +--disable_ps_protocol +SHOW RELAYLOG EVENTS; +--enable_ps_protocol +--enable_result_log +--disconnect con1 + +--connection default +DROP USER user1@localhost; + +--echo # +--echo # SHOW SLAVE STATUS command is allowed with SUPER privilege +--echo # +CREATE USER user1@localhost IDENTIFIED BY ''; +GRANT SUPER ON *.* TO user1@localhost; + +--connect(con1,localhost,user1,,) +--disable_result_log +SHOW SLAVE STATUS; +--enable_result_log + +--echo # +--echo # SHOW RELAYLOG EVENTS is not allowed with SUPER privilege, it requires SLAVE MONITOR +--echo # + +--disable_ps_protocol +--error ER_SPECIFIC_ACCESS_DENIED_ERROR +SHOW RELAYLOG EVENTS; +--enable_ps_protocol +--disconnect con1 + +--connection default +DROP USER user1@localhost; diff --git a/mysql-test/main/mysql_upgrade_to_100502.result b/mysql-test/main/mysql_upgrade_to_100502.result index 85fae5afc22..15095809092 100644 --- a/mysql-test/main/mysql_upgrade_to_100502.result +++ b/mysql-test/main/mysql_upgrade_to_100502.result @@ -18,7 +18,37 @@ CREATE USER user_super_replslave@localhost; GRANT SUPER, REPLICATION SLAVE ON *.* TO user_super_replslave@localhost; SHOW GRANTS FOR user_super_replslave@localhost; Grants for user_super_replslave@localhost -GRANT SUPER, REPLICATION SLAVE, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN, BINLOG REPLAY ON *.* TO `user_super_replslave`@`localhost` +GRANT SUPER, REPLICATION SLAVE, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN, BINLOG REPLAY, SLAVE MONITOR ON *.* TO `user_super_replslave`@`localhost` +# +# MDEV-23610: Slave user can't run "SHOW SLAVE STATUS" anymore after upgrade to 10.5, mysql_upgrade should take of that +# +# +# Users with privilege SUPER prior to 10.5 should successfully execute +# SHOW SLAVE STATUS command +# +CREATE USER user_replsuper@localhost; +GRANT SUPER ON *.* TO user_replsuper@localhost; +SHOW GRANTS FOR user_replsuper@localhost; +Grants for user_replsuper@localhost +GRANT SUPER, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, BINLOG ADMIN, BINLOG REPLAY ON *.* TO `user_replsuper`@`localhost` +# +# Users with privilege REPLICATION CLIENT prior to 10.5 should successfully execute +# SHOW SLAVE STATUS command +# +CREATE USER user_replclient@localhost; +GRANT REPLICATION CLIENT ON *.* TO user_replclient@localhost; +SHOW GRANTS FOR user_replclient@localhost; +Grants for user_replclient@localhost +GRANT BINLOG MONITOR ON *.* TO `user_replclient`@`localhost` +# +# Users with privilege REPLICATION SLAVE prior to 10.5 should successfully execute +# SHOW RELAYLOG EVENTS command +# +CREATE USER user_replslave@localhost; +GRANT REPLICATION SLAVE ON *.* TO user_replslave@localhost; +SHOW GRANTS FOR user_replslave@localhost; +Grants for user_replslave@localhost +GRANT REPLICATION SLAVE, REPLICATION MASTER ADMIN, SLAVE MONITOR ON *.* TO `user_replslave`@`localhost` # mysql_upgrade --force --silent 2>&1 FLUSH PRIVILEGES; # @@ -38,7 +68,35 @@ GRANT SUPER, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLI # SHOW GRANTS FOR user_super_replslave@localhost; Grants for user_super_replslave@localhost -GRANT SUPER, REPLICATION SLAVE, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN, BINLOG REPLAY ON *.* TO `user_super_replslave`@`localhost` +GRANT SUPER, REPLICATION SLAVE, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN, BINLOG REPLAY, SLAVE MONITOR ON *.* TO `user_super_replslave`@`localhost` +# +# MDEV-23610: Slave user can't run "SHOW SLAVE STATUS" anymore after upgrade to 10.5, mysql_upgrade should take of that +# +# +# Should automatically get BINLOG MONITOR and REPLICA MONITOR +# +SHOW GRANTS FOR user_replclient@localhost; +Grants for user_replclient@localhost +GRANT BINLOG MONITOR, SLAVE MONITOR ON *.* TO `user_replclient`@`localhost` +# +# Should automatically get REPLICA MONITOR +# +SHOW GRANTS FOR user_replslave@localhost; +Grants for user_replslave@localhost +GRANT REPLICATION SLAVE, SLAVE MONITOR ON *.* TO `user_replslave`@`localhost` +connect con1,localhost,user_super_replslave,,test; +connection con1; +SHOW SLAVE STATUS; +disconnect con1; +connect con1,localhost,user_replclient,,test; +connection con1; +SHOW SLAVE STATUS; +disconnect con1; +connect con1,localhost,user_replslave,,test; +connection con1; +SHOW RELAYLOG EVENTS; +disconnect con1; +connection default; SELECT json_value(Priv, '$.version_id'), json_value(Priv, '$.access'), @@ -51,6 +109,9 @@ AND user LIKE 'user_%'; json_value(Priv, '$.version_id') json_value(Priv, '$.access') user NULL 1073741823 user_all +NULL 1048576 user_replclient +NULL 524288 user_replslave +NULL 32768 user_replsuper NULL 32768 user_super NULL 557056 user_super_replslave DROP TABLE mysql.global_priv; diff --git a/mysql-test/main/mysql_upgrade_to_100502.test b/mysql-test/main/mysql_upgrade_to_100502.test index b03fb14fe08..b5a44080f17 100644 --- a/mysql-test/main/mysql_upgrade_to_100502.test +++ b/mysql-test/main/mysql_upgrade_to_100502.test @@ -25,6 +25,33 @@ CREATE USER user_super_replslave@localhost; GRANT SUPER, REPLICATION SLAVE ON *.* TO user_super_replslave@localhost; SHOW GRANTS FOR user_super_replslave@localhost; +--echo # +--echo # MDEV-23610: Slave user can't run "SHOW SLAVE STATUS" anymore after upgrade to 10.5, mysql_upgrade should take of that +--echo # + +--echo # +--echo # Users with privilege SUPER prior to 10.5 should successfully execute +--echo # SHOW SLAVE STATUS command +--echo # +CREATE USER user_replsuper@localhost; +GRANT SUPER ON *.* TO user_replsuper@localhost; +SHOW GRANTS FOR user_replsuper@localhost; + +--echo # +--echo # Users with privilege REPLICATION CLIENT prior to 10.5 should successfully execute +--echo # SHOW SLAVE STATUS command +--echo # +CREATE USER user_replclient@localhost; +GRANT REPLICATION CLIENT ON *.* TO user_replclient@localhost; +SHOW GRANTS FOR user_replclient@localhost; + +--echo # +--echo # Users with privilege REPLICATION SLAVE prior to 10.5 should successfully execute +--echo # SHOW RELAYLOG EVENTS command +--echo # +CREATE USER user_replslave@localhost; +GRANT REPLICATION SLAVE ON *.* TO user_replslave@localhost; +SHOW GRANTS FOR user_replslave@localhost; --echo # mysql_upgrade --force --silent 2>&1 --exec $MYSQL_UPGRADE --force --silent 2>&1 @@ -46,6 +73,44 @@ SHOW GRANTS FOR user_super@localhost; --echo # SHOW GRANTS FOR user_super_replslave@localhost; +--echo # +--echo # MDEV-23610: Slave user can't run "SHOW SLAVE STATUS" anymore after upgrade to 10.5, mysql_upgrade should take of that +--echo # + +--echo # +--echo # Should automatically get BINLOG MONITOR and REPLICA MONITOR +--echo # +SHOW GRANTS FOR user_replclient@localhost; + +--echo # +--echo # Should automatically get REPLICA MONITOR +--echo # +SHOW GRANTS FOR user_replslave@localhost; + +--connect (con1,localhost,user_super_replslave,,test) +--connection con1 +--disable_result_log +SHOW SLAVE STATUS; +--enable_result_log +--disconnect con1 + +--connect (con1,localhost,user_replclient,,test) +--connection con1 +--disable_result_log +SHOW SLAVE STATUS; +--enable_result_log +--disconnect con1 + +--connect (con1,localhost,user_replslave,,test) +--connection con1 +--disable_ps_protocol +--disable_result_log +SHOW RELAYLOG EVENTS; +--enable_result_log +--enable_ps_protocol +--disconnect con1 + +--connection default SELECT json_value(Priv, '$.version_id'), json_value(Priv, '$.access'), diff --git a/mysql-test/main/mysqldump-system.result b/mysql-test/main/mysqldump-system.result index 356396a5169..562a61b91cd 100644 --- a/mysql-test/main/mysqldump-system.result +++ b/mysql-test/main/mysqldump-system.result @@ -469,7 +469,7 @@ Host User Priv localhost mariadb.sys {"access":0,"version_id":VERSION,"plugin":"mysql_native_password","authentication_string":"","password_last_changed":NOW,"password_lifetime":-1,"default_role":""} role_1 {"access":16384,"version_id":VERSION,"is_role":true} role_2 {"access":0,"version_id":VERSION,"is_role":true} -localhost root {"access":274877906943,"version_id":VERSION,"plugin":"mysql_native_password","authentication_string":"","password_last_changed":NOW,"default_role":""} +localhost root {"access":549755813887,"version_id":VERSION,"plugin":"mysql_native_password","authentication_string":"","password_last_changed":NOW,"default_role":""} CHECKSUM TABLE mysql.roles_mapping, mysql.time_zone_transition, mysql.plugin, mysql.servers, mysql.func, mysql.innodb_table_stats, mysql.table_stats; Table Checksum diff --git a/mysql-test/main/system_mysql_db_error_log.result b/mysql-test/main/system_mysql_db_error_log.result index da4297b55b3..5af3eda0700 100644 --- a/mysql-test/main/system_mysql_db_error_log.result +++ b/mysql-test/main/system_mysql_db_error_log.result @@ -15,7 +15,7 @@ SET @all_known_privileges_current=(SELECT CAST(json_value(Priv, '$.access') AS U DROP USER user1@localhost; SELECT HEX(@all_known_privileges_current); HEX(@all_known_privileges_current) -3FFFFFFFFF +7FFFFFFFFF CREATE USER bad_access1@localhost; UPDATE mysql.global_priv diff --git a/mysql-test/suite/funcs_1/r/innodb_trig_03.result b/mysql-test/suite/funcs_1/r/innodb_trig_03.result index 2149d21131f..31fc4407dce 100644 --- a/mysql-test/suite/funcs_1/r/innodb_trig_03.result +++ b/mysql-test/suite/funcs_1/r/innodb_trig_03.result @@ -78,7 +78,7 @@ grant ALL on *.* to test_noprivs@localhost; revoke TRIGGER on *.* from test_noprivs@localhost; show grants for test_noprivs@localhost; Grants for test_noprivs@localhost -GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN, BINLOG REPLAY ON *.* TO `test_noprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576' +GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN, BINLOG REPLAY, SLAVE MONITOR ON *.* TO `test_noprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576' revoke ALL PRIVILEGES, GRANT OPTION FROM test_yesprivs@localhost; grant TRIGGER on *.* to test_yesprivs@localhost; grant SELECT on priv_db.t1 to test_yesprivs@localhost; @@ -168,7 +168,7 @@ grant ALL on *.* to test_noprivs@localhost; revoke UPDATE on *.* from test_noprivs@localhost; show grants for test_noprivs@localhost; Grants for test_noprivs@localhost -GRANT SELECT, INSERT, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN, BINLOG REPLAY ON *.* TO `test_noprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576' +GRANT SELECT, INSERT, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN, BINLOG REPLAY, SLAVE MONITOR ON *.* TO `test_noprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576' revoke ALL PRIVILEGES, GRANT OPTION FROM test_yesprivs@localhost; grant TRIGGER, UPDATE on *.* to test_yesprivs@localhost; show grants for test_yesprivs@localhost; @@ -183,7 +183,7 @@ test_noprivs@localhost use priv_db; show grants; Grants for test_noprivs@localhost -GRANT SELECT, INSERT, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN, BINLOG REPLAY ON *.* TO `test_noprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576' +GRANT SELECT, INSERT, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN, BINLOG REPLAY, SLAVE MONITOR ON *.* TO `test_noprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576' select f1 from t1 order by f1; f1 insert 3.5.3.2-no @@ -441,7 +441,7 @@ grant ALL on *.* to test_noprivs@localhost; revoke SELECT on *.* from test_noprivs@localhost; show grants for test_noprivs@localhost; Grants for test_noprivs@localhost -GRANT INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN, BINLOG REPLAY ON *.* TO `test_noprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576' +GRANT INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN, BINLOG REPLAY, SLAVE MONITOR ON *.* TO `test_noprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576' revoke ALL PRIVILEGES, GRANT OPTION FROM test_yesprivs@localhost; grant TRIGGER, SELECT on *.* to test_yesprivs@localhost; show grants for test_yesprivs@localhost; @@ -457,7 +457,7 @@ test_noprivs@localhost use priv_db; show grants; Grants for test_noprivs@localhost -GRANT INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN, BINLOG REPLAY ON *.* TO `test_noprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576' +GRANT INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN, BINLOG REPLAY, SLAVE MONITOR ON *.* TO `test_noprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576' create trigger trg5a_1 before INSERT on t1 for each row set @test_var = new.f1; connection default; diff --git a/mysql-test/suite/funcs_1/r/innodb_trig_03e.result b/mysql-test/suite/funcs_1/r/innodb_trig_03e.result index 8c9e31d30f2..875aa18e81f 100644 --- a/mysql-test/suite/funcs_1/r/innodb_trig_03e.result +++ b/mysql-test/suite/funcs_1/r/innodb_trig_03e.result @@ -603,7 +603,7 @@ trig 1_1-yes revoke TRIGGER on *.* from test_yesprivs@localhost; show grants for test_yesprivs@localhost; Grants for test_yesprivs@localhost -GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN, BINLOG REPLAY ON *.* TO `test_yesprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576' +GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN, BINLOG REPLAY, SLAVE MONITOR ON *.* TO `test_yesprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576' disconnect yes_privs; connect yes_privs,localhost,test_yesprivs,PWD,test,$MASTER_MYPORT,$MASTER_MYSOCK; select current_user; @@ -656,7 +656,7 @@ root@localhost grant TRIGGER on priv_db.* to test_yesprivs@localhost; show grants for test_yesprivs@localhost; Grants for test_yesprivs@localhost -GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN, BINLOG REPLAY ON *.* TO `test_yesprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576' +GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN, BINLOG REPLAY, SLAVE MONITOR ON *.* TO `test_yesprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576' GRANT TRIGGER ON `priv_db`.* TO `test_yesprivs`@`localhost` trigger privilege on db level for create: diff --git a/mysql-test/suite/funcs_1/r/memory_trig_03.result b/mysql-test/suite/funcs_1/r/memory_trig_03.result index 7e7886d830f..87f26acff46 100644 --- a/mysql-test/suite/funcs_1/r/memory_trig_03.result +++ b/mysql-test/suite/funcs_1/r/memory_trig_03.result @@ -78,7 +78,7 @@ grant ALL on *.* to test_noprivs@localhost; revoke TRIGGER on *.* from test_noprivs@localhost; show grants for test_noprivs@localhost; Grants for test_noprivs@localhost -GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN, BINLOG REPLAY ON *.* TO `test_noprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576' +GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN, BINLOG REPLAY, SLAVE MONITOR ON *.* TO `test_noprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576' revoke ALL PRIVILEGES, GRANT OPTION FROM test_yesprivs@localhost; grant TRIGGER on *.* to test_yesprivs@localhost; grant SELECT on priv_db.t1 to test_yesprivs@localhost; @@ -168,7 +168,7 @@ grant ALL on *.* to test_noprivs@localhost; revoke UPDATE on *.* from test_noprivs@localhost; show grants for test_noprivs@localhost; Grants for test_noprivs@localhost -GRANT SELECT, INSERT, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN, BINLOG REPLAY ON *.* TO `test_noprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576' +GRANT SELECT, INSERT, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN, BINLOG REPLAY, SLAVE MONITOR ON *.* TO `test_noprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576' revoke ALL PRIVILEGES, GRANT OPTION FROM test_yesprivs@localhost; grant TRIGGER, UPDATE on *.* to test_yesprivs@localhost; show grants for test_yesprivs@localhost; @@ -183,7 +183,7 @@ test_noprivs@localhost use priv_db; show grants; Grants for test_noprivs@localhost -GRANT SELECT, INSERT, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN, BINLOG REPLAY ON *.* TO `test_noprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576' +GRANT SELECT, INSERT, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN, BINLOG REPLAY, SLAVE MONITOR ON *.* TO `test_noprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576' select f1 from t1 order by f1; f1 insert 3.5.3.2-no @@ -441,7 +441,7 @@ grant ALL on *.* to test_noprivs@localhost; revoke SELECT on *.* from test_noprivs@localhost; show grants for test_noprivs@localhost; Grants for test_noprivs@localhost -GRANT INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN, BINLOG REPLAY ON *.* TO `test_noprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576' +GRANT INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN, BINLOG REPLAY, SLAVE MONITOR ON *.* TO `test_noprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576' revoke ALL PRIVILEGES, GRANT OPTION FROM test_yesprivs@localhost; grant TRIGGER, SELECT on *.* to test_yesprivs@localhost; show grants for test_yesprivs@localhost; @@ -457,7 +457,7 @@ test_noprivs@localhost use priv_db; show grants; Grants for test_noprivs@localhost -GRANT INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN, BINLOG REPLAY ON *.* TO `test_noprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576' +GRANT INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN, BINLOG REPLAY, SLAVE MONITOR ON *.* TO `test_noprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576' create trigger trg5a_1 before INSERT on t1 for each row set @test_var = new.f1; connection default; diff --git a/mysql-test/suite/funcs_1/r/memory_trig_03e.result b/mysql-test/suite/funcs_1/r/memory_trig_03e.result index 0ad0be7f781..d100bdfc824 100644 --- a/mysql-test/suite/funcs_1/r/memory_trig_03e.result +++ b/mysql-test/suite/funcs_1/r/memory_trig_03e.result @@ -604,7 +604,7 @@ trig 1_1-yes revoke TRIGGER on *.* from test_yesprivs@localhost; show grants for test_yesprivs@localhost; Grants for test_yesprivs@localhost -GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN, BINLOG REPLAY ON *.* TO `test_yesprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576' +GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN, BINLOG REPLAY, SLAVE MONITOR ON *.* TO `test_yesprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576' disconnect yes_privs; connect yes_privs,localhost,test_yesprivs,PWD,test,$MASTER_MYPORT,$MASTER_MYSOCK; select current_user; @@ -657,7 +657,7 @@ root@localhost grant TRIGGER on priv_db.* to test_yesprivs@localhost; show grants for test_yesprivs@localhost; Grants for test_yesprivs@localhost -GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN, BINLOG REPLAY ON *.* TO `test_yesprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576' +GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN, BINLOG REPLAY, SLAVE MONITOR ON *.* TO `test_yesprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576' GRANT TRIGGER ON `priv_db`.* TO `test_yesprivs`@`localhost` trigger privilege on db level for create: diff --git a/mysql-test/suite/funcs_1/r/myisam_trig_03.result b/mysql-test/suite/funcs_1/r/myisam_trig_03.result index 7e7886d830f..87f26acff46 100644 --- a/mysql-test/suite/funcs_1/r/myisam_trig_03.result +++ b/mysql-test/suite/funcs_1/r/myisam_trig_03.result @@ -78,7 +78,7 @@ grant ALL on *.* to test_noprivs@localhost; revoke TRIGGER on *.* from test_noprivs@localhost; show grants for test_noprivs@localhost; Grants for test_noprivs@localhost -GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN, BINLOG REPLAY ON *.* TO `test_noprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576' +GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN, BINLOG REPLAY, SLAVE MONITOR ON *.* TO `test_noprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576' revoke ALL PRIVILEGES, GRANT OPTION FROM test_yesprivs@localhost; grant TRIGGER on *.* to test_yesprivs@localhost; grant SELECT on priv_db.t1 to test_yesprivs@localhost; @@ -168,7 +168,7 @@ grant ALL on *.* to test_noprivs@localhost; revoke UPDATE on *.* from test_noprivs@localhost; show grants for test_noprivs@localhost; Grants for test_noprivs@localhost -GRANT SELECT, INSERT, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN, BINLOG REPLAY ON *.* TO `test_noprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576' +GRANT SELECT, INSERT, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN, BINLOG REPLAY, SLAVE MONITOR ON *.* TO `test_noprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576' revoke ALL PRIVILEGES, GRANT OPTION FROM test_yesprivs@localhost; grant TRIGGER, UPDATE on *.* to test_yesprivs@localhost; show grants for test_yesprivs@localhost; @@ -183,7 +183,7 @@ test_noprivs@localhost use priv_db; show grants; Grants for test_noprivs@localhost -GRANT SELECT, INSERT, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN, BINLOG REPLAY ON *.* TO `test_noprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576' +GRANT SELECT, INSERT, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN, BINLOG REPLAY, SLAVE MONITOR ON *.* TO `test_noprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576' select f1 from t1 order by f1; f1 insert 3.5.3.2-no @@ -441,7 +441,7 @@ grant ALL on *.* to test_noprivs@localhost; revoke SELECT on *.* from test_noprivs@localhost; show grants for test_noprivs@localhost; Grants for test_noprivs@localhost -GRANT INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN, BINLOG REPLAY ON *.* TO `test_noprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576' +GRANT INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN, BINLOG REPLAY, SLAVE MONITOR ON *.* TO `test_noprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576' revoke ALL PRIVILEGES, GRANT OPTION FROM test_yesprivs@localhost; grant TRIGGER, SELECT on *.* to test_yesprivs@localhost; show grants for test_yesprivs@localhost; @@ -457,7 +457,7 @@ test_noprivs@localhost use priv_db; show grants; Grants for test_noprivs@localhost -GRANT INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN, BINLOG REPLAY ON *.* TO `test_noprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576' +GRANT INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN, BINLOG REPLAY, SLAVE MONITOR ON *.* TO `test_noprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576' create trigger trg5a_1 before INSERT on t1 for each row set @test_var = new.f1; connection default; diff --git a/mysql-test/suite/funcs_1/r/myisam_trig_03e.result b/mysql-test/suite/funcs_1/r/myisam_trig_03e.result index 73eb0336eef..22db7ad337e 100644 --- a/mysql-test/suite/funcs_1/r/myisam_trig_03e.result +++ b/mysql-test/suite/funcs_1/r/myisam_trig_03e.result @@ -604,7 +604,7 @@ trig 1_1-yes revoke TRIGGER on *.* from test_yesprivs@localhost; show grants for test_yesprivs@localhost; Grants for test_yesprivs@localhost -GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN, BINLOG REPLAY ON *.* TO `test_yesprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576' +GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN, BINLOG REPLAY, SLAVE MONITOR ON *.* TO `test_yesprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576' disconnect yes_privs; connect yes_privs,localhost,test_yesprivs,PWD,test,$MASTER_MYPORT,$MASTER_MYSOCK; select current_user; @@ -657,7 +657,7 @@ root@localhost grant TRIGGER on priv_db.* to test_yesprivs@localhost; show grants for test_yesprivs@localhost; Grants for test_yesprivs@localhost -GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN, BINLOG REPLAY ON *.* TO `test_yesprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576' +GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, BINLOG MONITOR, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, CREATE TABLESPACE, DELETE HISTORY, SET USER, FEDERATED ADMIN, CONNECTION ADMIN, READ_ONLY ADMIN, REPLICATION SLAVE ADMIN, REPLICATION MASTER ADMIN, BINLOG ADMIN, BINLOG REPLAY, SLAVE MONITOR ON *.* TO `test_yesprivs`@`localhost` IDENTIFIED BY PASSWORD '*C49735D016A099C0CF104EF9183F374A54CA2576' GRANT TRIGGER ON `priv_db`.* TO `test_yesprivs`@`localhost` trigger privilege on db level for create: diff --git a/sql/privilege.h b/sql/privilege.h index 37cdf4da01a..8d4f5bc5b57 100644 --- a/sql/privilege.h +++ b/sql/privilege.h @@ -66,7 +66,8 @@ enum privilege_t: unsigned long long REPL_SLAVE_ADMIN_ACL = (1ULL << 34), // Added in 10.5.2 REPL_MASTER_ADMIN_ACL = (1ULL << 35), // Added in 10.5.2 BINLOG_ADMIN_ACL = (1ULL << 36), // Added in 10.5.2 - BINLOG_REPLAY_ACL = (1ULL << 37) // Added in 10.5.2 + BINLOG_REPLAY_ACL = (1ULL << 37), // Added in 10.5.2 + SLAVE_MONITOR_ACL = (1ULL << 38) // Added in 10.5.9 /* When adding new privilege bits, don't forget to update: In this file: @@ -93,13 +94,18 @@ enum privilege_t: unsigned long long */ }; +constexpr static inline privilege_t ALL_KNOWN_BITS(privilege_t x) +{ + return (privilege_t)(x | (x-1)); +} // Version markers constexpr privilege_t LAST_100304_ACL= DELETE_HISTORY_ACL; constexpr privilege_t LAST_100502_ACL= BINLOG_REPLAY_ACL; +constexpr privilege_t LAST_100509_ACL= SLAVE_MONITOR_ACL; // Current version markers -constexpr privilege_t LAST_CURRENT_ACL= LAST_100502_ACL; +constexpr privilege_t LAST_CURRENT_ACL= LAST_100509_ACL; constexpr uint PRIVILEGE_T_MAX_BIT= my_bit_log2_uint64((ulonglong) LAST_CURRENT_ACL); @@ -108,15 +114,16 @@ static_assert((privilege_t)(1ULL << PRIVILEGE_T_MAX_BIT) == LAST_CURRENT_ACL, "LAST_CURRENT_ACL and PRIVILEGE_T_MAX_BIT do not match"); // A combination of all bits defined in 10.3.4 (and earlier) -constexpr privilege_t ALL_KNOWN_ACL_100304 = - (privilege_t) ((LAST_100304_ACL << 1) - 1); +constexpr privilege_t ALL_KNOWN_ACL_100304 = ALL_KNOWN_BITS(LAST_100304_ACL); // A combination of all bits defined in 10.5.2 -constexpr privilege_t ALL_KNOWN_ACL_100502= - (privilege_t) ((LAST_100502_ACL << 1) - 1); +constexpr privilege_t ALL_KNOWN_ACL_100502= ALL_KNOWN_BITS(LAST_100502_ACL); + +// A combination of all bits defined in 10.5.9 +constexpr privilege_t ALL_KNOWN_ACL_100509= ALL_KNOWN_BITS(LAST_100509_ACL); // A combination of all bits defined as of the current version -constexpr privilege_t ALL_KNOWN_ACL= ALL_KNOWN_ACL_100502; +constexpr privilege_t ALL_KNOWN_ACL= ALL_KNOWN_BITS(LAST_CURRENT_ACL); // Unary operators @@ -269,7 +276,7 @@ constexpr privilege_t GLOBAL_ACLS= SUPER_ACL | RELOAD_ACL | SHUTDOWN_ACL | PROCESS_ACL | FILE_ACL | REPL_SLAVE_ACL | BINLOG_MONITOR_ACL | GLOBAL_SUPER_ADDED_SINCE_USER_TABLE_ACLS | - REPL_MASTER_ADMIN_ACL; + REPL_MASTER_ADMIN_ACL | SLAVE_MONITOR_ACL; constexpr privilege_t DEFAULT_CREATE_PROC_ACLS= ALTER_PROC_ACL | EXECUTE_ACL; @@ -505,9 +512,11 @@ constexpr privilege_t PRIV_STMT_STOP_SLAVE= REPL_SLAVE_ADMIN_ACL | SUPER_ACL; // Was SUPER_ACL prior to 10.5.2 constexpr privilege_t PRIV_STMT_CHANGE_MASTER= REPL_SLAVE_ADMIN_ACL | SUPER_ACL; // Was (SUPER_ACL | REPL_CLIENT_ACL) prior to 10.5.2 -constexpr privilege_t PRIV_STMT_SHOW_SLAVE_STATUS= REPL_SLAVE_ADMIN_ACL | SUPER_ACL; +// Was (SUPER_ACL | REPL_SLAVE_ADMIN_ACL) from 10.5.2 to 10.5.8 +constexpr privilege_t PRIV_STMT_SHOW_SLAVE_STATUS= SLAVE_MONITOR_ACL | SUPER_ACL; // Was REPL_SLAVE_ACL prior to 10.5.2 -constexpr privilege_t PRIV_STMT_SHOW_RELAYLOG_EVENTS= REPL_SLAVE_ADMIN_ACL; +// Was REPL_SLAVE_ADMIN_ACL from 10.5.2 to 10.5.8 +constexpr privilege_t PRIV_STMT_SHOW_RELAYLOG_EVENTS= SLAVE_MONITOR_ACL; /* Privileges related to binlog replying. diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc index 483be6e39d6..4e3a79b25f3 100644 --- a/sql/sql_acl.cc +++ b/sql/sql_acl.cc @@ -1057,6 +1057,9 @@ class User_table_tabular: public User_table if (access & REPL_SLAVE_ACL) access|= REPL_MASTER_ADMIN_ACL; + if (access & REPL_SLAVE_ACL) + access|= SLAVE_MONITOR_ACL; + return access & GLOBAL_ACLS; } @@ -1528,7 +1531,11 @@ class User_table_json: public User_table { privilege_t mask= ALL_KNOWN_ACL_100304; ulonglong orig_access= access; - if (version_id >= 100502) + if (version_id >= 100509) + { + mask= ALL_KNOWN_ACL_100509; + } + else if (version_id >= 100502 && version_id < 100509) { mask= ALL_KNOWN_ACL_100502; } @@ -1554,6 +1561,12 @@ class User_table_json: public User_table } access|= GLOBAL_SUPER_ADDED_SINCE_USER_TABLE_ACLS; } + /* + REPLICATION_CLIENT(BINLOG_MONITOR_ACL) should allow SHOW SLAVE STATUS + REPLICATION SLAVE should allow SHOW RELAYLOG EVENTS + */ + if (access & BINLOG_MONITOR_ACL || access & REPL_SLAVE_ACL) + access|= SLAVE_MONITOR_ACL; } if (orig_access & ~mask) @@ -8974,7 +8987,7 @@ static const char *command_array[]= "CREATE USER", "EVENT", "TRIGGER", "CREATE TABLESPACE", "DELETE HISTORY", "SET USER", "FEDERATED ADMIN", "CONNECTION ADMIN", "READ_ONLY ADMIN", "REPLICATION SLAVE ADMIN", "REPLICATION MASTER ADMIN", "BINLOG ADMIN", - "BINLOG REPLAY" + "BINLOG REPLAY", "SLAVE MONITOR" }; static uint command_lengths[]= @@ -8987,7 +9000,7 @@ static uint command_lengths[]= 11, 5, 7, 17, 14, 8, 15, 16, 15, 23, 24, 12, - 13 + 13, 13 }; diff --git a/sql/sql_show.cc b/sql/sql_show.cc index c00476871e4..0f6200ff237 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -484,7 +484,8 @@ static struct show_privileges_st sys_privileges[]= {"Binlog admin", "Server", "To purge binary logs"}, {"Binlog monitor", "Server", "To use SHOW BINLOG STATUS and SHOW BINARY LOG"}, {"Replication master admin", "Server", "To monitor connected slaves"}, - {"Replication slave admin", "Server", "To start/monitor/stop slave and apply binlog events"}, + {"Replication slave admin", "Server", "To start/stop slave and apply binlog events"}, + {"Slave monitor", "Server", "To use SHOW SLAVE STATUS and SHOW RELAYLOG EVENTS"}, {"Replication slave","Server Admin","To read binary log events from the master"}, {"Select", "Tables", "To retrieve rows from table"}, {"Show databases","Server Admin","To see all databases with SHOW DATABASES"}, diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 607a68caf43..c5864887677 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -17035,6 +17035,7 @@ object_privilege: | BINLOG_SYM REPLAY_SYM { $$= BINLOG_REPLAY_ACL; } | REPLICATION MASTER_SYM ADMIN_SYM { $$= REPL_MASTER_ADMIN_ACL; } | REPLICATION SLAVE ADMIN_SYM { $$= REPL_SLAVE_ADMIN_ACL; } + | SLAVE MONITOR_SYM { $$= SLAVE_MONITOR_ACL; } ; opt_and: From 2b347e9fc5934905bf686f2f4833b35b3a9ccf56 Mon Sep 17 00:00:00 2001 From: Sujatha Date: Mon, 16 Nov 2020 14:49:46 +0530 Subject: [PATCH 03/22] MDEV-23610: Slave user can't run "SHOW SLAVE STATUS" anymore after upgrade to 10.5, mysql_upgrade should take of that Fixing a post push test issue. --- mysql-test/main/grant_slave_monitor.result | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mysql-test/main/grant_slave_monitor.result b/mysql-test/main/grant_slave_monitor.result index e53d8c0e678..ea0b7d8094c 100644 --- a/mysql-test/main/grant_slave_monitor.result +++ b/mysql-test/main/grant_slave_monitor.result @@ -22,7 +22,7 @@ ERROR 42000: Access denied; you need (at least one of) the SUPER, SLAVE MONITOR SHOW RELAYLOG EVENTS; ERROR 42000: Access denied; you need (at least one of) the SLAVE MONITOR privilege(s) for this operation disconnect con1; -# +# # SHOW SLAVE STATUS and SHOW RELAYLOG EVENTS are allowed with SLAVE MONITOR privilege # connection default; From 1ae7809a7c87d914d92ad7e069000358c1fe5bfd Mon Sep 17 00:00:00 2001 From: Daniele Sciascia Date: Fri, 13 Nov 2020 11:38:17 +0100 Subject: [PATCH 04/22] Restore autoincrement offset in MTR test MDEV-24063 --- mysql-test/suite/galera/r/MDEV-24063.result | 2 ++ mysql-test/suite/galera/t/MDEV-24063.test | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/mysql-test/suite/galera/r/MDEV-24063.result b/mysql-test/suite/galera/r/MDEV-24063.result index 757cc07a642..d7eda917cdf 100644 --- a/mysql-test/suite/galera/r/MDEV-24063.result +++ b/mysql-test/suite/galera/r/MDEV-24063.result @@ -1,5 +1,7 @@ connection node_2; connection node_1; +connection node_1; +connection node_2; connect node_2a, 127.0.0.1, root, , test, $NODE_MYPORT_2; connection node_2a; CREATE TABLE t1 (f1 INTEGER PRIMARY KEY); diff --git a/mysql-test/suite/galera/t/MDEV-24063.test b/mysql-test/suite/galera/t/MDEV-24063.test index 24c5071cb15..9646db5d6d5 100644 --- a/mysql-test/suite/galera/t/MDEV-24063.test +++ b/mysql-test/suite/galera/t/MDEV-24063.test @@ -8,6 +8,10 @@ --source include/galera_cluster.inc +--let $node_1=node_1 +--let $node_2=node_2 +--source include/auto_increment_offset_save.inc + --connect node_2a, 127.0.0.1, root, , test, $NODE_MYPORT_2 --connection node_2a CREATE TABLE t1 (f1 INTEGER PRIMARY KEY); @@ -18,3 +22,5 @@ SET GLOBAL wsrep_on=OFF; --source include/start_mysqld.inc DROP TABLE t1; + +--source include/auto_increment_offset_restore.inc From eae9311fa2b15eb8a0698444a27af5b70acfb4b2 Mon Sep 17 00:00:00 2001 From: Monty Date: Mon, 16 Nov 2020 13:23:39 +0200 Subject: [PATCH 05/22] Do not run maria.repair with --embedded as memory usage is different --- mysql-test/suite/maria/repair.test | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/mysql-test/suite/maria/repair.test b/mysql-test/suite/maria/repair.test index 9603a949f9b..13165269b76 100644 --- a/mysql-test/suite/maria/repair.test +++ b/mysql-test/suite/maria/repair.test @@ -1,3 +1,9 @@ +# We should not run this test with embedded as we are using +# max_session_mem_used, which causes things to fail/not fail randomly +# as memory usage is different compared to normal server. + +--source include/not_embedded.inc + # # MDEV-11539 test_if_reopen: Assertion `strcmp(share->unique_file_name,filename) || share->last_version' failed upon select from I_S # From 0fc0eb1e5b9015e51daef9709937be69e9e7c4f7 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Mon, 16 Nov 2020 08:48:32 +1100 Subject: [PATCH 06/22] MDEV-24124: main.drop test - mulitarch/os error messages Account for variety of mips, hppa, solaris and other messages. Copied from rpl.rpl_drop_db test. --- mysql-test/main/drop.test | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mysql-test/main/drop.test b/mysql-test/main/drop.test index 17065a32347..45ff7f364f4 100644 --- a/mysql-test/main/drop.test +++ b/mysql-test/main/drop.test @@ -187,7 +187,7 @@ write_file $MYSQLD_DATADIR/mysql_test/do_not_delete; do_not_delete EOF -replace_result $MYSQLD_DATADIR ./ \\ / 41 39; +replace_result $MYSQLD_DATADIR ./ \\ / 66 39 93 39 17 39 247 39 41 39 "File exists" "Directory not empty"; error ER_DB_DROP_RMDIR; drop database mysql_test; select database(); From 8cc5d2845c0b679ca90cf6145d02c761cbce897d Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Mon, 16 Nov 2020 09:05:10 +1100 Subject: [PATCH 07/22] MDEV-24125: linux large pages - Revert "Fixed centos 6 build failure" This reverts commit 6cf8f05fd9deb900a78898576b85753e09feddaa. Original patch assumed that MAP_HUGETLB as consistent across achitectures which isn't the case. Defining it unconditionally broke large pages on every achitecutre where the value differed from x86_64. With the EOL for Centos/RHEL6 announced in 10.5.7, <3.8 linux kernels are no longer supported. --- include/my_sys.h | 6 ------ 1 file changed, 6 deletions(-) diff --git a/include/my_sys.h b/include/my_sys.h index 59d88f193c6..cc1f041a2f0 100644 --- a/include/my_sys.h +++ b/include/my_sys.h @@ -965,12 +965,6 @@ extern ulonglong my_getcputime(void); #define MAP_NORESERVE 0 /* For irix and AIX */ #endif -/* Compatibility with pre linux 3.8 distributions */ -#ifdef __linux__ -#define MAP_HUGE_SHIFT 26 -#define MAP_HUGETLB 0x40000 -#endif - #ifdef HAVE_MMAP64 #define my_mmap(a,b,c,d,e,f) mmap64(a,b,c,d,e,f) #else From 7f30a5c423249c7fcfc9f9ac1578d06263aa37ac Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Mon, 16 Nov 2020 09:23:51 +1100 Subject: [PATCH 08/22] MDEV-24125: allow compile on Linux headers < 3.8 This allows MariaDB to compile on old (limits to >2.6.32) linux kernel versions. This warns that attempts to use large pages will rely on implict kernel determination. --- mysys/my_largepage.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/mysys/my_largepage.c b/mysys/my_largepage.c index e107c62b987..9efd0797860 100644 --- a/mysys/my_largepage.c +++ b/mysys/my_largepage.c @@ -325,9 +325,13 @@ uchar *my_large_malloc(size_t *size, myf my_flags) /* this might be 0, in which case we do a standard mmap */ if (large_page_size) { -#ifdef __linux__ - mapflag|= MAP_HUGETLB | - my_bit_log2_size_t(large_page_size) << MAP_HUGE_SHIFT; +#if defined(MAP_HUGETLB) /* linux 2.6.32 */ + mapflag|= MAP_HUGETLB; +#if defined(MAP_HUGE_SHIFT) /* Linux-3.8+ */ + mapflag|= my_bit_log2_size_t(large_page_size) << MAP_HUGE_SHIFT; +#else +# warning "No explicit large page (HUGETLB pages) support in Linux < 3.8" +#endif #elif defined(MAP_ALIGNED) mapflag|= MAP_ALIGNED_SUPER | MAP_ALIGNED(my_bit_log2_size_t(large_page_size)); From c815ffb975171c14de607840a33c1dd427a1ebe5 Mon Sep 17 00:00:00 2001 From: Sujatha Date: Mon, 16 Nov 2020 23:10:53 +0530 Subject: [PATCH 09/22] MDEV-23610: Slave user can't run "SHOW SLAVE STATUS" anymore after upgrade to 10.5, mysql_upgrade should take of that Post push fix. Update version to 10.5.8. --- sql/privilege.h | 14 +++++++------- sql/sql_acl.cc | 6 +++--- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/sql/privilege.h b/sql/privilege.h index 8d4f5bc5b57..a2e75003c11 100644 --- a/sql/privilege.h +++ b/sql/privilege.h @@ -67,7 +67,7 @@ enum privilege_t: unsigned long long REPL_MASTER_ADMIN_ACL = (1ULL << 35), // Added in 10.5.2 BINLOG_ADMIN_ACL = (1ULL << 36), // Added in 10.5.2 BINLOG_REPLAY_ACL = (1ULL << 37), // Added in 10.5.2 - SLAVE_MONITOR_ACL = (1ULL << 38) // Added in 10.5.9 + SLAVE_MONITOR_ACL = (1ULL << 38) // Added in 10.5.8 /* When adding new privilege bits, don't forget to update: In this file: @@ -102,10 +102,10 @@ constexpr static inline privilege_t ALL_KNOWN_BITS(privilege_t x) // Version markers constexpr privilege_t LAST_100304_ACL= DELETE_HISTORY_ACL; constexpr privilege_t LAST_100502_ACL= BINLOG_REPLAY_ACL; -constexpr privilege_t LAST_100509_ACL= SLAVE_MONITOR_ACL; +constexpr privilege_t LAST_100508_ACL= SLAVE_MONITOR_ACL; // Current version markers -constexpr privilege_t LAST_CURRENT_ACL= LAST_100509_ACL; +constexpr privilege_t LAST_CURRENT_ACL= LAST_100508_ACL; constexpr uint PRIVILEGE_T_MAX_BIT= my_bit_log2_uint64((ulonglong) LAST_CURRENT_ACL); @@ -119,8 +119,8 @@ constexpr privilege_t ALL_KNOWN_ACL_100304 = ALL_KNOWN_BITS(LAST_100304_ACL); // A combination of all bits defined in 10.5.2 constexpr privilege_t ALL_KNOWN_ACL_100502= ALL_KNOWN_BITS(LAST_100502_ACL); -// A combination of all bits defined in 10.5.9 -constexpr privilege_t ALL_KNOWN_ACL_100509= ALL_KNOWN_BITS(LAST_100509_ACL); +// A combination of all bits defined in 10.5.8 +constexpr privilege_t ALL_KNOWN_ACL_100508= ALL_KNOWN_BITS(LAST_100508_ACL); // A combination of all bits defined as of the current version constexpr privilege_t ALL_KNOWN_ACL= ALL_KNOWN_BITS(LAST_CURRENT_ACL); @@ -512,10 +512,10 @@ constexpr privilege_t PRIV_STMT_STOP_SLAVE= REPL_SLAVE_ADMIN_ACL | SUPER_ACL; // Was SUPER_ACL prior to 10.5.2 constexpr privilege_t PRIV_STMT_CHANGE_MASTER= REPL_SLAVE_ADMIN_ACL | SUPER_ACL; // Was (SUPER_ACL | REPL_CLIENT_ACL) prior to 10.5.2 -// Was (SUPER_ACL | REPL_SLAVE_ADMIN_ACL) from 10.5.2 to 10.5.8 +// Was (SUPER_ACL | REPL_SLAVE_ADMIN_ACL) from 10.5.2 to 10.5.7 constexpr privilege_t PRIV_STMT_SHOW_SLAVE_STATUS= SLAVE_MONITOR_ACL | SUPER_ACL; // Was REPL_SLAVE_ACL prior to 10.5.2 -// Was REPL_SLAVE_ADMIN_ACL from 10.5.2 to 10.5.8 +// Was REPL_SLAVE_ADMIN_ACL from 10.5.2 to 10.5.7 constexpr privilege_t PRIV_STMT_SHOW_RELAYLOG_EVENTS= SLAVE_MONITOR_ACL; /* diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc index 4e3a79b25f3..bad39cfc1d1 100644 --- a/sql/sql_acl.cc +++ b/sql/sql_acl.cc @@ -1531,11 +1531,11 @@ class User_table_json: public User_table { privilege_t mask= ALL_KNOWN_ACL_100304; ulonglong orig_access= access; - if (version_id >= 100509) + if (version_id >= 100508) { - mask= ALL_KNOWN_ACL_100509; + mask= ALL_KNOWN_ACL_100508; } - else if (version_id >= 100502 && version_id < 100509) + else if (version_id >= 100502 && version_id < 100508) { mask= ALL_KNOWN_ACL_100502; } From 694926a4f749f54f8a3d537e9ff77ad9e89f4dc3 Mon Sep 17 00:00:00 2001 From: Daniele Sciascia Date: Tue, 17 Nov 2020 11:16:50 +0100 Subject: [PATCH 10/22] Fix suppression in MTR test galera_3nodes.inconsistency_shutdown --- mysql-test/suite/galera_3nodes/r/inconsistency_shutdown.result | 2 +- mysql-test/suite/galera_3nodes/t/inconsistency_shutdown.test | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mysql-test/suite/galera_3nodes/r/inconsistency_shutdown.result b/mysql-test/suite/galera_3nodes/r/inconsistency_shutdown.result index 7c181af9d46..83c5b015a50 100644 --- a/mysql-test/suite/galera_3nodes/r/inconsistency_shutdown.result +++ b/mysql-test/suite/galera_3nodes/r/inconsistency_shutdown.result @@ -135,7 +135,7 @@ SET SESSION wsrep_sync_wait = 15; SET GLOBAL wsrep_on=OFF; # restart DROP TABLE t1; -CALL mtr.add_suppression('mysqld: Can\'t find record in \'t1\''); +CALL mtr.add_suppression('Can\'t find record in \'t1\''); CALL mtr.add_suppression('Update_rows_v1 apply failed'); CALL mtr.add_suppression('Inconsistency detected: Inconsistent by consensus on'); CALL mtr.add_suppression('last left .* greater than drain seqno'); diff --git a/mysql-test/suite/galera_3nodes/t/inconsistency_shutdown.test b/mysql-test/suite/galera_3nodes/t/inconsistency_shutdown.test index aa9ef08c107..6ad19e01849 100644 --- a/mysql-test/suite/galera_3nodes/t/inconsistency_shutdown.test +++ b/mysql-test/suite/galera_3nodes/t/inconsistency_shutdown.test @@ -173,7 +173,7 @@ SET GLOBAL wsrep_on=OFF; DROP TABLE t1; -CALL mtr.add_suppression('mysqld: Can\'t find record in \'t1\''); +CALL mtr.add_suppression('Can\'t find record in \'t1\''); CALL mtr.add_suppression('Update_rows_v1 apply failed'); CALL mtr.add_suppression('Inconsistency detected: Inconsistent by consensus on'); CALL mtr.add_suppression('last left .* greater than drain seqno'); From 796f708f85d3b8b68d1aa338dfa60cfea8f3cdac Mon Sep 17 00:00:00 2001 From: Dmitry Shulga Date: Tue, 17 Nov 2020 19:23:33 +0700 Subject: [PATCH 11/22] MDEV-24115 Fix -Wconversion in Timeval::Timeval() on Mac OS X The data member tv_usec of the struct timeval is declared as suseconds_t on MacOS. Size of suseconds_t is 4 bytes. On the other hand, size of ulong is 8 bytes on 64-bit MacOS, so attempt to assign a value of wider type (usec) to a value (tv_usec) of narrower type leads to error. --- sql/structs.h | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/sql/structs.h b/sql/structs.h index c47e4802452..28c0cb6e1a2 100644 --- a/sql/structs.h +++ b/sql/structs.h @@ -871,7 +871,13 @@ public: Timeval(my_time_t sec, ulong usec) { tv_sec= sec; - tv_usec= usec; + /* + Since tv_usec is not always of type ulong, cast usec parameter + explicitly to uint to avoid compiler warnings about losing + integer precision. + */ + DBUG_ASSERT(usec < 1000000); + tv_usec= (uint)usec; } explicit Timeval(const timeval &tv) :timeval(tv) From 83a55670a68a772c52aeb7b6b9ecfc6b417255e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20M=C3=A4kel=C3=A4?= Date: Tue, 17 Nov 2020 09:39:36 +0200 Subject: [PATCH 12/22] MDEV-24188 fixup: Simplify the wait loop Starting with commit 7cffb5f6e8a231a041152447be8980ce35d2c9b8 (MDEV-23399) the function buf_flush_page() will first acquire block->lock and only after that invoke set_io_fix(). Before that, it was possible to reach a livelock between buf_page_create() and buf_flush_page(). buf_page_create(): Directly try acquiring the exclusive page latch without checking whether the page is io-fixed or buffer-fixed. (As a matter of fact, the have_x_latch() check is not strictly necessary, because we still support recursive X-latches.) In case of a latch conflict, wait while allowing buf_page_write_complete() to acquire buf_pool.mutex and release the block->lock. An attempt to wait for exclusive block->lock while holding buf_pool.mutex would lead to a hang in the tests parts.part_supported_sql_func_innodb and stress.ddl_innodb, due to a deadlock between buf_page_write_complete() and buf_page_create(). Similarly, in case of an I/O fixed compressed-only ROW_FORMAT=COMPRESSED page, we will sleep before retrying. In both cases, we will sleep for 1ms or until a flush batch is completed. --- storage/innobase/buf/buf0buf.cc | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/storage/innobase/buf/buf0buf.cc b/storage/innobase/buf/buf0buf.cc index acd221b8b52..eb8cc8f71d3 100644 --- a/storage/innobase/buf/buf0buf.cc +++ b/storage/innobase/buf/buf0buf.cc @@ -3755,9 +3755,9 @@ buf_page_create(fil_space_t *space, uint32_t offset, free_block->initialise(page_id, zip_size, 1); const ulint fold= page_id.fold(); -loop: mysql_mutex_lock(&buf_pool.mutex); +loop: buf_block_t *block= reinterpret_cast (buf_pool.page_hash_get_low(page_id, fold)); @@ -3775,17 +3775,15 @@ loop: if (!mtr->have_x_latch(*block)) { buf_block_buf_fix_inc(block, __FILE__, __LINE__); + while (!rw_lock_x_lock_nowait(&block->lock)) { - while (block->page.io_fix() != BUF_IO_NONE || - block->page.buf_fix_count() != 1) - { - timespec abstime; - set_timespec_nsec(abstime, 1000000); - mysql_cond_timedwait(&buf_pool.done_flush_list, &buf_pool.mutex, - &abstime); - } + /* Wait for buf_page_write_complete() to release block->lock. + We must not hold buf_pool.mutex while waiting. */ + timespec abstime; + set_timespec_nsec(abstime, 1000000); + mysql_cond_timedwait(&buf_pool.done_flush_list, &buf_pool.mutex, + &abstime); } - rw_lock_x_lock(&block->lock); mtr_memo_push(mtr, block, MTR_MEMO_PAGE_X_FIX); } else @@ -3805,7 +3803,11 @@ loop: if (block->page.io_fix() != BUF_IO_NONE) { hash_lock->write_unlock(); - mysql_mutex_unlock(&buf_pool.mutex); + /* Wait for buf_page_write_complete() to release the I/O fix. */ + timespec abstime; + set_timespec_nsec(abstime, 1000000); + mysql_cond_timedwait(&buf_pool.done_flush_list, &buf_pool.mutex, + &abstime); goto loop; } From bbf0b55c177a4c4eafe1bd1948df651eaee56827 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20M=C3=A4kel=C3=A4?= Date: Tue, 17 Nov 2020 18:13:47 +0200 Subject: [PATCH 13/22] Work around MDEV-24232: Skip perfschema.nesting if WITH_WSREP=OFF --- mysql-test/suite/perfschema/t/nesting.test | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mysql-test/suite/perfschema/t/nesting.test b/mysql-test/suite/perfschema/t/nesting.test index d0547d8a932..6144d0ff6d3 100644 --- a/mysql-test/suite/perfschema/t/nesting.test +++ b/mysql-test/suite/perfschema/t/nesting.test @@ -6,6 +6,8 @@ # event, which changes the test output. --source include/not_windows.inc --source include/no_protocol.inc +# Work around MDEV-24232: WSREP causes extra operations on LOCK_thd_data etc. +--source include/have_wsrep.inc --source ../include/wait_for_pfs_thread_count.inc --disable_query_log From 33d41167c54fed9116cd8f0dfa01b43733988e6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20M=C3=A4kel=C3=A4?= Date: Wed, 18 Nov 2020 10:27:18 +0200 Subject: [PATCH 14/22] MDEV-24224 Gap lock on delete in 10.5 using READ COMMITTED When MDEV-19544 (commit 1a6f470464171bd1144e4dd6f169bb4018f2e81a) simplified the initialization of the local variable set_also_gap_locks, an inadvertent change was included. Essentially, all code branches that are executed when set_also_gap_locks hold must also ensure that trx->isolation_level > TRX_ISO_READ_COMMITTED holds. This was being violated in a few code paths. It turns out that there is an even simpler fix: Remove the test of thd_is_select() completely. In that way, the first part of UPDATE or DELETE should work exactly like SELECT...FOR UPDATE. thd_is_select(): Remove. --- mysql-test/suite/innodb/r/gap_locks.result | 35 ++++++++++++++++++++++ mysql-test/suite/innodb/t/gap_locks.test | 29 ++++++++++++++++++ storage/innobase/handler/ha_innodb.cc | 13 +------- storage/innobase/include/ha_prototypes.h | 8 ----- storage/innobase/row/row0sel.cc | 20 ++++++++----- 5 files changed, 78 insertions(+), 27 deletions(-) create mode 100644 mysql-test/suite/innodb/r/gap_locks.result create mode 100644 mysql-test/suite/innodb/t/gap_locks.test diff --git a/mysql-test/suite/innodb/r/gap_locks.result b/mysql-test/suite/innodb/r/gap_locks.result new file mode 100644 index 00000000000..cd60b1fab22 --- /dev/null +++ b/mysql-test/suite/innodb/r/gap_locks.result @@ -0,0 +1,35 @@ +CREATE TABLE t1(a INT PRIMARY KEY, b VARCHAR(40), c INT, INDEX(b,c)) +ENGINE=InnoDB; +INSERT INTO t1 VALUES (1,'1',1),(2,'2',1); +SET @save_locks= @@GLOBAL.innodb_status_output_locks; +SET GLOBAL INNODB_STATUS_OUTPUT_LOCKS = 'ON'; +SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; +BEGIN; +DELETE FROM t1 WHERE b='2' AND c=2; +SHOW ENGINE INNODB STATUS; +Type Name Status +InnoDB 2 lock struct(s), 1 row lock(s) +ROLLBACK; +SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; +BEGIN; +DELETE FROM t1 WHERE b='2' AND c=2; +SHOW ENGINE INNODB STATUS; +Type Name Status +InnoDB 2 lock struct(s), 1 row lock(s) +ROLLBACK; +SET TRANSACTION ISOLATION LEVEL READ COMMITTED; +BEGIN; +DELETE FROM t1 WHERE b='2' AND c=2; +SHOW ENGINE INNODB STATUS; +Type Name Status +InnoDB 1 lock struct(s), 0 row lock(s) +ROLLBACK; +SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; +BEGIN; +DELETE FROM t1 WHERE b='2' AND c=2; +SHOW ENGINE INNODB STATUS; +Type Name Status +InnoDB 1 lock struct(s), 0 row lock(s) +ROLLBACK; +SET GLOBAL INNODB_STATUS_OUTPUT_LOCKS = @save_locks; +DROP TABLE t1; diff --git a/mysql-test/suite/innodb/t/gap_locks.test b/mysql-test/suite/innodb/t/gap_locks.test new file mode 100644 index 00000000000..77ce2c842b1 --- /dev/null +++ b/mysql-test/suite/innodb/t/gap_locks.test @@ -0,0 +1,29 @@ +--source include/have_innodb.inc + +CREATE TABLE t1(a INT PRIMARY KEY, b VARCHAR(40), c INT, INDEX(b,c)) +ENGINE=InnoDB; +INSERT INTO t1 VALUES (1,'1',1),(2,'2',1); + +SET @save_locks= @@GLOBAL.innodb_status_output_locks; +SET GLOBAL INNODB_STATUS_OUTPUT_LOCKS = 'ON'; + +let $isolation= 4; +while ($isolation) { +let $tx_isolation= `SELECT CASE $isolation +WHEN 1 THEN 'READ UNCOMMITTED' +WHEN 2 THEN 'READ COMMITTED' +WHEN 3 THEN 'REPEATABLE READ' +ELSE 'SERIALIZABLE' END`; + +eval SET TRANSACTION ISOLATION LEVEL $tx_isolation; +BEGIN; +DELETE FROM t1 WHERE b='2' AND c=2; +--replace_regex /.*(\d+ lock struct...), heap size \d+(, \d+ row lock...).*/\1\2/ +SHOW ENGINE INNODB STATUS; +ROLLBACK; + +dec $isolation; +} + +SET GLOBAL INNODB_STATUS_OUTPUT_LOCKS = @save_locks; +DROP TABLE t1; diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index 6fd1e99023a..a35b90e91f0 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -1495,7 +1495,7 @@ thd_trx_is_auto_commit( && !thd_test_options( thd, OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN) - && thd_is_select(thd)); + && thd_sql_command(thd) == SQLCOM_SELECT); } /******************************************************************//** @@ -1531,17 +1531,6 @@ thd_query_start_micro( return thd_start_utime(thd); } -/******************************************************************//** -Returns true if the thread is executing a SELECT statement. -@return true if thd is executing SELECT */ -ibool -thd_is_select( -/*==========*/ - const THD* thd) /*!< in: thread handle */ -{ - return(thd_sql_command(thd) == SQLCOM_SELECT); -} - /******************************************************************//** Returns the lock wait timeout for the current connection. @return the lock wait timeout, in seconds */ diff --git a/storage/innobase/include/ha_prototypes.h b/storage/innobase/include/ha_prototypes.h index 35250f99df9..41068e7c56c 100644 --- a/storage/innobase/include/ha_prototypes.h +++ b/storage/innobase/include/ha_prototypes.h @@ -190,14 +190,6 @@ const char* innobase_basename( const char* path_name); -/******************************************************************//** -Returns true if the thread is executing a SELECT statement. -@return true if thd is executing SELECT */ -ibool -thd_is_select( -/*==========*/ - const THD* thd); /*!< in: thread handle */ - /******************************************************************//** Converts an identifier to a table name. */ void diff --git a/storage/innobase/row/row0sel.cc b/storage/innobase/row/row0sel.cc index d7a0490db3d..7a859ab8b09 100644 --- a/storage/innobase/row/row0sel.cc +++ b/storage/innobase/row/row0sel.cc @@ -4542,12 +4542,11 @@ aborted: || prebuilt->table->no_rollback() || srv_read_only_mode); - /* Do not lock gaps for plain SELECT - at READ UNCOMMITTED or READ COMMITTED isolation level */ + /* Do not lock gaps at READ UNCOMMITTED or READ COMMITTED + isolation level */ const bool set_also_gap_locks = prebuilt->select_lock_type != LOCK_NONE - && (trx->isolation_level > TRX_ISO_READ_COMMITTED - || !thd_is_select(trx->mysql_thd)) + && trx->isolation_level > TRX_ISO_READ_COMMITTED #ifdef WITH_WSREP && !wsrep_thd_skip_locking(trx->mysql_thd) #endif /* WITH_WSREP */ @@ -4755,7 +4754,6 @@ rec_loop: if (page_rec_is_supremum(rec)) { if (set_also_gap_locks - && trx->isolation_level > TRX_ISO_READ_COMMITTED && !dict_index_is_spatial(index)) { /* Try to place a lock on the index record */ @@ -5020,8 +5018,16 @@ wrong_offs: goto no_gap_lock; } - if (!set_also_gap_locks - || (unique_search && !rec_get_deleted_flag(rec, comp)) +#ifdef WITH_WSREP + if (UNIV_UNLIKELY(!set_also_gap_locks)) { + ut_ad(wsrep_thd_skip_locking(trx->mysql_thd)); + goto no_gap_lock; + } +#else /* WITH_WSREP */ + ut_ad(set_also_gap_locks); +#endif /* WITH_WSREP */ + + if ((unique_search && !rec_get_deleted_flag(rec, comp)) || dict_index_is_spatial(index)) { goto no_gap_lock; From 3b486c28f710940631b5cb7a9781965827fbfa4b Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Thu, 19 Nov 2020 07:46:27 +1100 Subject: [PATCH 15/22] MDEV-24125: linux large pages, linux/mman.h needed Centos/RHEL7 have the MAP_HUGE_SHIFT constant defined in linux/mman.h which needed to get included. --- cmake/os/WindowsCache.cmake | 1 + config.h.cmake | 1 + configure.cmake | 1 + mysys/my_largepage.c | 3 +++ 4 files changed, 6 insertions(+) diff --git a/cmake/os/WindowsCache.cmake b/cmake/os/WindowsCache.cmake index 4d3b2af575e..91e01708dce 100644 --- a/cmake/os/WindowsCache.cmake +++ b/cmake/os/WindowsCache.cmake @@ -83,6 +83,7 @@ SET(HAVE_IPV6_V6ONLY 1 CACHE INTERNAL "") SET(HAVE_LANGINFO_H CACHE INTERNAL "") SET(HAVE_LDIV 1 CACHE INTERNAL "") SET(HAVE_LIMITS_H 1 CACHE INTERNAL "") +SET(HAVE_LINUX_MMAN_H CACHE INTERNAL "") SET(HAVE_LOCALE_H 1 CACHE INTERNAL "") SET(HAVE_LOCALTIME_R 1 CACHE INTERNAL "") SET(HAVE_LRAND48 CACHE INTERNAL "") diff --git a/config.h.cmake b/config.h.cmake index 5a48df0a135..55c51efda68 100644 --- a/config.h.cmake +++ b/config.h.cmake @@ -42,6 +42,7 @@ #cmakedefine HAVE_LIMITS_H 1 #cmakedefine HAVE_LINK_H 1 #cmakedefine HAVE_LINUX_UNISTD_H 1 +#cmakedefine HAVE_LINUX_MMAN_H 1 #cmakedefine HAVE_LOCALE_H 1 #cmakedefine HAVE_MALLOC_H 1 #cmakedefine HAVE_MEMORY_H 1 diff --git a/configure.cmake b/configure.cmake index 64be91606ae..4fc324a9567 100644 --- a/configure.cmake +++ b/configure.cmake @@ -223,6 +223,7 @@ CHECK_INCLUDE_FILES (sys/fpu.h HAVE_SYS_FPU_H) CHECK_INCLUDE_FILES (sys/ioctl.h HAVE_SYS_IOCTL_H) CHECK_INCLUDE_FILES ("sys/types.h;sys/malloc.h" HAVE_SYS_MALLOC_H) CHECK_INCLUDE_FILES (sys/mman.h HAVE_SYS_MMAN_H) +CHECK_INCLUDE_FILES (linux/mman.h HAVE_LINUX_MMAN_H) CHECK_INCLUDE_FILES (sys/prctl.h HAVE_SYS_PRCTL_H) CHECK_INCLUDE_FILES (sys/resource.h HAVE_SYS_RESOURCE_H) CHECK_INCLUDE_FILES (sys/select.h HAVE_SYS_SELECT_H) diff --git a/mysys/my_largepage.c b/mysys/my_largepage.c index 9efd0797860..c3fc97ffe0a 100644 --- a/mysys/my_largepage.c +++ b/mysys/my_largepage.c @@ -23,6 +23,9 @@ #if defined(__linux__) || defined(MAP_ALIGNED) #include "my_bit.h" #endif +#ifdef HAVE_LINUX_MMAN_H +#include +#endif #ifdef HAVE_SOLARIS_LARGE_PAGES #if defined(__sun__) && defined(__GNUC__) && defined(__cplusplus) \ From a16e3c326d25a6e30b9fc35ccf7ea8b4a4c61f64 Mon Sep 17 00:00:00 2001 From: Roman Nozdrin Date: Tue, 10 Nov 2020 07:54:22 +0000 Subject: [PATCH 16/22] Update MCS to resolve libmarias3 compulation for centos74-amd64-debug pipeline in community BB Fix for rebuild from source step Disable MCS on i386|i686 platforms This patch puts MCS debian packaging files and part of debian/control into the engine directory --- debian/rules | 4 ++-- storage/columnstore/CMakeLists.txt | 4 +--- storage/columnstore/columnstore | 2 +- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/debian/rules b/debian/rules index 9b9540be012..e4c9963efb3 100755 --- a/debian/rules +++ b/debian/rules @@ -49,8 +49,8 @@ ifeq (32,$(DEB_HOST_ARCH_BITS)) endif # ColumnStore only attempts to build on a few platforms as dictated by CMake checks -# Also note in debian/control the CS-only build deps marked '[i386 amd64]' -ifeq ($(DEB_HOST_ARCH),$(filter $(DEB_HOST_ARCH),amd64 i386)) +# Also note in debian/control the CS-only build deps marked '[amd64]' +ifeq ($(DEB_HOST_ARCH),$(filter $(DEB_HOST_ARCH),amd64)) CMAKEFLAGS += -DPLUGIN_COLUMNSTORE=YES endif diff --git a/storage/columnstore/CMakeLists.txt b/storage/columnstore/CMakeLists.txt index 63d9d3b7a6a..77ba817c837 100644 --- a/storage/columnstore/CMakeLists.txt +++ b/storage/columnstore/CMakeLists.txt @@ -12,9 +12,7 @@ macro(APPEND_FOR_CPACK V) endmacro() IF(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" OR -CMAKE_SYSTEM_PROCESSOR STREQUAL "amd64" OR -CMAKE_SYSTEM_PROCESSOR STREQUAL "i386" OR -CMAKE_SYSTEM_PROCESSOR STREQUAL "i686") +CMAKE_SYSTEM_PROCESSOR STREQUAL "amd64") add_subdirectory(columnstore) IF(TARGET columnstore) diff --git a/storage/columnstore/columnstore b/storage/columnstore/columnstore index a91c4d00d93..8d1fb3ed2f1 160000 --- a/storage/columnstore/columnstore +++ b/storage/columnstore/columnstore @@ -1 +1 @@ -Subproject commit a91c4d00d931b2e7dacc4f3ad6070906ddefff14 +Subproject commit 8d1fb3ed2f1a62805cfbf09ff110e66d6619e8e3 From 9c455945f5cad0563e6d564943b8fa3237acab2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20M=C3=A4kel=C3=A4?= Date: Thu, 19 Nov 2020 20:22:36 +0200 Subject: [PATCH 17/22] MDEV-21534 fixup: Use a compile-time constant --- storage/innobase/log/log0sync.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage/innobase/log/log0sync.cc b/storage/innobase/log/log0sync.cc index 7799e605576..2a6e1b8b853 100644 --- a/storage/innobase/log/log0sync.cc +++ b/storage/innobase/log/log0sync.cc @@ -100,7 +100,7 @@ public: private: #if defined(__linux__) || defined (_WIN32) std::atomic m_signalled; - const std::memory_order mem_order = std::memory_order::memory_order_acq_rel; + static constexpr std::memory_order mem_order= std::memory_order_acq_rel; public: binary_semaphore() :m_signalled(0) {} #else From 8ac19be8a249f5592deac1f05cd099ddde603589 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20M=C3=A4kel=C3=A4?= Date: Thu, 19 Nov 2020 20:25:57 +0200 Subject: [PATCH 18/22] Cleanup: Fix build problems with the Intel compiler fil_space_t::flush_low(): Define and declare without inline. ut_is_2pow(): Remove UNIV_LIKELY. This is almost exclusively used in debug assertions. UNIV_LIKELY is not compatible with static_assert in some compilers. --- storage/innobase/fil/fil0fil.cc | 2 +- storage/innobase/include/ut0ut.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/storage/innobase/fil/fil0fil.cc b/storage/innobase/fil/fil0fil.cc index c515cd82c48..b3d7aa2568b 100644 --- a/storage/innobase/fil/fil0fil.cc +++ b/storage/innobase/fil/fil0fil.cc @@ -492,7 +492,7 @@ void fil_node_t::prepare_to_close_or_detach() } /** Flush any writes cached by the file system. */ -inline void fil_space_t::flush_low() +void fil_space_t::flush_low() { ut_ad(!mutex_own(&fil_system.mutex)); diff --git a/storage/innobase/include/ut0ut.h b/storage/innobase/include/ut0ut.h index 6b79a445789..dc9a9597b0f 100644 --- a/storage/innobase/include/ut0ut.h +++ b/storage/innobase/include/ut0ut.h @@ -156,7 +156,7 @@ store the given number of bits. /** Determines if a number is zero or a power of two. @param[in] n number @return nonzero if n is zero or a power of two; zero otherwise */ -#define ut_is_2pow(n) UNIV_LIKELY(!((n) & ((n) - 1))) +#define ut_is_2pow(n) (!((n) & ((n) - 1))) /** Functor that compares two C strings. Can be used as a comparator for e.g. std::map that uses char* as keys. */ From 3c8ecb5bbd642a7a53fd2ad5e68f2be7d27ed8b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20M=C3=A4kel=C3=A4?= Date: Fri, 20 Nov 2020 08:06:24 +0200 Subject: [PATCH 19/22] Run innodb_wl6326_big only in debug builds The test seems to deterministically fail on RelWithDebInfo builds due to a timeout in wait_condition.inc. According to Matthias Leich (the original author of the test), the failure rate would reduce if we disabled the purge of transaction history by setting innodb_force_recovery=2. For now, let us run this stress test on debug builds only. --- mysql-test/suite/innodb/t/innodb_wl6326_big.test | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/mysql-test/suite/innodb/t/innodb_wl6326_big.test b/mysql-test/suite/innodb/t/innodb_wl6326_big.test index 43de46b4125..27d02591b84 100644 --- a/mysql-test/suite/innodb/t/innodb_wl6326_big.test +++ b/mysql-test/suite/innodb/t/innodb_wl6326_big.test @@ -29,6 +29,10 @@ # vardir on tmpfs : ~ 375 # vardir on disk : ~ 546 --source include/big_test.inc +# Possibly related to MDEV-16678, the test seems to deterministically fail on +# non-debug builds. innodb_force_recovery=2 (disabling the purge of history) +# would seem to help a little. +--source include/have_debug.inc # We go with "--send" and "--reap" and that fails with the embedded server. --source include/not_embedded.inc # Its intentional to not take the risk that a run with valgrind times out. From 156cb94b4b54ca4cccbe7d6821beb84aa376c187 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20M=C3=A4kel=C3=A4?= Date: Fri, 20 Nov 2020 08:49:46 +0200 Subject: [PATCH 20/22] MDEV-22871 fixup: Relax a debug assertion In commit bf3c862faa8efed4a662725ec27586cd69e9228e we introduced an assertion that may dereference a null pointer. This regression was caught by running the following: ./mtr --parallel=auto --suite=innodb \ --mysqld=--loose-innodb-adaptive-hash-index The adaptive hash index is disabled by default since commit 88cdfc5c7d4764e5267c87eadeb8c3f95faa73d0 (MDEV-20487) and hence the problem was not caught earlier. --- storage/innobase/include/btr0sea.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/storage/innobase/include/btr0sea.h b/storage/innobase/include/btr0sea.h index f8f2050d3d3..1e6b667c324 100644 --- a/storage/innobase/include/btr0sea.h +++ b/storage/innobase/include/btr0sea.h @@ -303,7 +303,8 @@ struct btr_search_sys_t /** Get an adaptive hash index partition */ partition *get_part(const dict_index_t &index) const { - ut_ad(index.table->space->id == index.table->space_id); + ut_ad(!index.table->space || + index.table->space->id == index.table->space_id); return get_part(ulint(index.id), index.table->space_id); } From 1e5d989d2ad9035f82853c874229e1380519daac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20M=C3=A4kel=C3=A4?= Date: Fri, 20 Nov 2020 08:55:41 +0200 Subject: [PATCH 21/22] MDEV-24167: Remove PFS instrumentation of buf_block_t We always defined PFS_SKIP_BUFFER_MUTEX_RWLOCK, that is, the latches of the buffer pool blocks were never instrumented in PERFORMANCE_SCHEMA. For some reason, the debug_latch (which enforce proper usage of buffer-fixing in debug builds) was instrumented. --- .../suite/perfschema/r/sxlock_func.result | 6 +- .../suite/perfschema/t/sxlock_func.test | 7 +- storage/innobase/buf/buf0buf.cc | 82 ------------------- storage/innobase/handler/ha_innodb.cc | 6 -- storage/innobase/include/sync0sync.h | 12 --- storage/innobase/sync/sync0debug.cc | 4 +- storage/innobase/sync/sync0sync.cc | 4 - 7 files changed, 4 insertions(+), 117 deletions(-) diff --git a/mysql-test/suite/perfschema/r/sxlock_func.result b/mysql-test/suite/perfschema/r/sxlock_func.result index b51234feda6..e7f4ba345c5 100644 --- a/mysql-test/suite/perfschema/r/sxlock_func.result +++ b/mysql-test/suite/perfschema/r/sxlock_func.result @@ -5,11 +5,7 @@ TRUNCATE TABLE performance_schema.events_waits_history_long; TRUNCATE TABLE performance_schema.events_waits_history; TRUNCATE TABLE performance_schema.events_waits_current; select name from performance_schema.setup_instruments -where name like "wait/synch/sxlock/%" - and name not in -("wait/synch/sxlock/innodb/buf_block_lock", -"wait/synch/sxlock/innodb/buf_block_debug_latch") -order by name; +where name like "wait/synch/sxlock/%" order by name; name wait/synch/sxlock/innodb/btr_search_latch wait/synch/sxlock/innodb/dict_operation_lock diff --git a/mysql-test/suite/perfschema/t/sxlock_func.test b/mysql-test/suite/perfschema/t/sxlock_func.test index 7c7e8fc6189..f5f38f51c78 100644 --- a/mysql-test/suite/perfschema/t/sxlock_func.test +++ b/mysql-test/suite/perfschema/t/sxlock_func.test @@ -16,13 +16,8 @@ TRUNCATE TABLE performance_schema.events_waits_history; TRUNCATE TABLE performance_schema.events_waits_current; # Check some SX-locks classes are instrumented -# (exclude instruments that depend on compiling options) select name from performance_schema.setup_instruments - where name like "wait/synch/sxlock/%" - and name not in - ("wait/synch/sxlock/innodb/buf_block_lock", - "wait/synch/sxlock/innodb/buf_block_debug_latch") - order by name; +where name like "wait/synch/sxlock/%" order by name; # Check some SX-locks instances are instrumented select name from performance_schema.rwlock_instances diff --git a/storage/innobase/buf/buf0buf.cc b/storage/innobase/buf/buf0buf.cc index eb8cc8f71d3..9e24698d07c 100644 --- a/storage/innobase/buf/buf0buf.cc +++ b/storage/innobase/buf/buf0buf.cc @@ -343,22 +343,6 @@ in the debug version */ static ulint buf_dbg_counter; #endif /* UNIV_DEBUG */ -#if defined UNIV_PFS_MUTEX || defined UNIV_PFS_RWLOCK -# ifndef PFS_SKIP_BUFFER_MUTEX_RWLOCK - -/* If defined, register buf_block_t::lock -in one group after their initialization. */ -# define PFS_GROUP_BUFFER_SYNC - -/* This define caps the number of mutexes/rwlocks can -be registered with performance schema. Developers can -modify this define if necessary. Please note, this would -be effective only if PFS_GROUP_BUFFER_SYNC is defined. */ -# define PFS_MAX_BUFFER_MUTEX_LOCK_REGISTER ULINT_MAX - -# endif /* !PFS_SKIP_BUFFER_MUTEX_RWLOCK */ -#endif /* UNIV_PFS_MUTEX || UNIV_PFS_RWLOCK */ - /** Macro to determine whether the read of write counter is used depending on the io_type */ #define MONITOR_RW_COUNTER(io_type, counter) \ @@ -1217,52 +1201,6 @@ void buf_page_print(const byte* read_buf, ulint zip_size) } } -# ifdef PFS_GROUP_BUFFER_SYNC -/********************************************************************//** -This function registers mutexes and rwlocks in buffer blocks with -performance schema. If PFS_MAX_BUFFER_MUTEX_LOCK_REGISTER is -defined to be a value less than chunk->size, then only mutexes -and rwlocks in the first PFS_MAX_BUFFER_MUTEX_LOCK_REGISTER -blocks are registered. */ -static -void -pfs_register_buffer_block( -/*======================*/ - buf_pool_t::chunk_t* chunk) /*!< in/out: chunk of buffers */ -{ - buf_block_t* block; - ulint num_to_register; - - block = chunk->blocks; - - num_to_register = ut_min( - chunk->size, PFS_MAX_BUFFER_MUTEX_LOCK_REGISTER); - - for (ulint i = 0; i < num_to_register; i++) { - rw_lock_t* rwlock; - -# ifdef UNIV_PFS_RWLOCK - rwlock = &block->lock; - ut_a(!rwlock->pfs_psi); - rwlock->pfs_psi = (PSI_server) - ? PSI_server->init_rwlock(buf_block_lock_key, rwlock) - : NULL; - -# ifdef UNIV_DEBUG - rwlock = block->debug_latch; - ut_a(!rwlock->pfs_psi); - rwlock->pfs_psi = (PSI_server) - ? PSI_server->init_rwlock(buf_block_debug_latch_key, - rwlock) - : NULL; -# endif /* UNIV_DEBUG */ - -# endif /* UNIV_PFS_RWLOCK */ - block++; - } -} -# endif /* PFS_GROUP_BUFFER_SYNC */ - /** Initialize a buffer page descriptor. @param[in,out] block buffer page descriptor @param[in] frame buffer page frame */ @@ -1288,28 +1226,11 @@ buf_block_init(buf_block_t* block, byte* frame) ut_d(block->debug_latch = (rw_lock_t *) ut_malloc_nokey(sizeof(rw_lock_t))); -#if defined PFS_SKIP_BUFFER_MUTEX_RWLOCK || defined PFS_GROUP_BUFFER_SYNC - /* If PFS_SKIP_BUFFER_MUTEX_RWLOCK is defined, skip registration - of buffer block rwlock with performance schema. - - If PFS_GROUP_BUFFER_SYNC is defined, skip the registration - since buffer block rwlock will be registered later in - pfs_register_buffer_block(). */ - rw_lock_create(PFS_NOT_INSTRUMENTED, &block->lock, SYNC_LEVEL_VARYING); ut_d(rw_lock_create(PFS_NOT_INSTRUMENTED, block->debug_latch, SYNC_LEVEL_VARYING)); -#else /* PFS_SKIP_BUFFER_MUTEX_RWLOCK || PFS_GROUP_BUFFER_SYNC */ - - rw_lock_create(buf_block_lock_key, &block->lock, SYNC_LEVEL_VARYING); - - ut_d(rw_lock_create(buf_block_debug_latch_key, - block->debug_latch, SYNC_LEVEL_VARYING)); - -#endif /* PFS_SKIP_BUFFER_MUTEX_RWLOCK || PFS_GROUP_BUFFER_SYNC */ - block->lock.is_block_lock = 1; ut_ad(rw_lock_validate(&(block->lock))); @@ -1396,9 +1317,6 @@ inline bool buf_pool_t::chunk_t::create(size_t bytes) reg(); -#ifdef PFS_GROUP_BUFFER_SYNC - pfs_register_buffer_block(this); -#endif /* PFS_GROUP_BUFFER_SYNC */ return true; } diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index a35b90e91f0..b12d6cfd695 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -575,12 +575,6 @@ performance schema instrumented if "UNIV_PFS_RWLOCK" is defined */ static PSI_rwlock_info all_innodb_rwlocks[] = { PSI_RWLOCK_KEY(btr_search_latch), -# ifndef PFS_SKIP_BUFFER_MUTEX_RWLOCK - PSI_RWLOCK_KEY(buf_block_lock), -# endif /* !PFS_SKIP_BUFFER_MUTEX_RWLOCK */ -# ifdef UNIV_DEBUG - PSI_RWLOCK_KEY(buf_block_debug_latch), -# endif /* UNIV_DEBUG */ PSI_RWLOCK_KEY(dict_operation_lock), PSI_RWLOCK_KEY(fil_space_latch), PSI_RWLOCK_KEY(fts_cache_rw_lock), diff --git a/storage/innobase/include/sync0sync.h b/storage/innobase/include/sync0sync.h index ce19178a5ad..b7f3cff2925 100644 --- a/storage/innobase/include/sync0sync.h +++ b/storage/innobase/include/sync0sync.h @@ -37,14 +37,6 @@ Created 9/5/1995 Heikki Tuuri #include "univ.i" -#if defined UNIV_PFS_MUTEX || defined UNIV_PFS_RWLOCK - -/* By default, buffer mutexes and rwlocks will be excluded from -instrumentation due to their large number of instances. */ -# define PFS_SKIP_BUFFER_MUTEX_RWLOCK - -#endif /* UNIV_PFS_MUTEX || UNIV_PFS_RWLOCK */ - #ifdef UNIV_PFS_MUTEX /* Key defines to register InnoDB mutexes with performance schema */ extern mysql_pfs_key_t buf_pool_mutex_key; @@ -96,10 +88,6 @@ extern mysql_pfs_key_t read_view_mutex_key; /* Following are rwlock keys used to register with MySQL performance schema */ extern mysql_pfs_key_t btr_search_latch_key; -extern mysql_pfs_key_t buf_block_lock_key; -# ifdef UNIV_DEBUG -extern mysql_pfs_key_t buf_block_debug_latch_key; -# endif /* UNIV_DEBUG */ extern mysql_pfs_key_t dict_operation_lock_key; extern mysql_pfs_key_t fil_space_latch_key; extern mysql_pfs_key_t fts_cache_rw_lock_key; diff --git a/storage/innobase/sync/sync0debug.cc b/storage/innobase/sync/sync0debug.cc index 87646867319..f2f7c13d34c 100644 --- a/storage/innobase/sync/sync0debug.cc +++ b/storage/innobase/sync/sync0debug.cc @@ -1307,11 +1307,11 @@ sync_latch_meta_init() LATCH_ADD_RWLOCK(BTR_SEARCH, SYNC_SEARCH_SYS, btr_search_latch_key); LATCH_ADD_RWLOCK(BUF_BLOCK_LOCK, SYNC_LEVEL_VARYING, - buf_block_lock_key); + PFS_NOT_INSTRUMENTED); #ifdef UNIV_DEBUG LATCH_ADD_RWLOCK(BUF_BLOCK_DEBUG, SYNC_LEVEL_VARYING, - buf_block_debug_latch_key); + PFS_NOT_INSTRUMENTED); #endif /* UNIV_DEBUG */ LATCH_ADD_RWLOCK(DICT_OPERATION, SYNC_DICT_OPERATION, diff --git a/storage/innobase/sync/sync0sync.cc b/storage/innobase/sync/sync0sync.cc index c2957a3fdcb..0a6f8bfbebd 100644 --- a/storage/innobase/sync/sync0sync.cc +++ b/storage/innobase/sync/sync0sync.cc @@ -82,10 +82,6 @@ mysql_pfs_key_t read_view_mutex_key; #endif /* UNIV_PFS_MUTEX */ #ifdef UNIV_PFS_RWLOCK mysql_pfs_key_t btr_search_latch_key; -mysql_pfs_key_t buf_block_lock_key; -# ifdef UNIV_DEBUG -mysql_pfs_key_t buf_block_debug_latch_key; -# endif /* UNIV_DEBUG */ mysql_pfs_key_t dict_operation_lock_key; mysql_pfs_key_t index_tree_rw_lock_key; mysql_pfs_key_t index_online_log_key; From dcdc8c3506f4da6d09e98937c299f9bf3f88a814 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20M=C3=A4kel=C3=A4?= Date: Fri, 20 Nov 2020 13:40:35 +0200 Subject: [PATCH 22/22] MDEV-21534 fixup: Remove HAVE_IB_LINUX_FUTEX Since commit 30ea63b7d2077883713e63cbf4e661ba0345bf68 we actually depend on futex on Linux. Also, we depend on std::atomic for even longer. --- storage/innobase/include/ib0mutex.h | 4 +-- storage/innobase/include/ut0mutex.h | 11 ++------ storage/innobase/innodb.cmake | 44 +---------------------------- 3 files changed, 6 insertions(+), 53 deletions(-) diff --git a/storage/innobase/include/ib0mutex.h b/storage/innobase/include/ib0mutex.h index 91bc69ac228..81ab756665d 100644 --- a/storage/innobase/include/ib0mutex.h +++ b/storage/innobase/include/ib0mutex.h @@ -145,7 +145,7 @@ private: }; -#ifdef HAVE_IB_LINUX_FUTEX +#ifdef __linux__ #include #include @@ -261,7 +261,7 @@ private: std::atomic m_lock_word; }; -#endif /* HAVE_IB_LINUX_FUTEX */ +#endif /* __linux__ */ template