MDEV-38506: Failed GRANT on a procedure breaks replication#4519
Closed
MDEV-38506: Failed GRANT on a procedure breaks replication#4519
Conversation
Test case to showcase MDEV-38506: A failed GRANT on a procedure will be replicated when sql_mode does not have NO_AUTO_CREATE_USER. This is because the function mysql_routine_grant() does not check if an error occured while performing the GRANT on a procedure before binlogging, it simply always binlogs.
A failed GRANT on a procedure will be replicated when sql_mode does not have NO_AUTO_CREATE_USER. This is because the function mysql_routine_grant() does not check if an error occured while performing the GRANT on a procedure before binlogging, it simply always binlogs. This patch fixes this problem by checking if an error happened previously before binlogging, and if so, then skip binlogging. Note there is still a broader issue in this area leading to replication divergence. Reported in MDEV-29848, a partially-completed GRANT statment (where some earlier GRANTS succeed and a later fails) will not binlog. Note this affects all grant types, whereas the issue addressed in this patch is limited to GRANT EXECUTE ON PROCEDURE. This patch makes GRANT EXECUTE ON PROCEDURE binlogging behavior consistent with the other grant types. A separate follow-up patch will address the broader MDEV-29848 issue. Reviewed-by: TODO Signed-off-by: Brandon Nesterenko <brandon.nesterenko@mariadb.com>
rpl_do_grant.test took advantage of MDEV-38506 so a partially-failing REVOKE EXECUTE ON PROCEDURE would still replicate. This commit disables the problematic test case with a TODO note to re-enable it once MDEV-29848 is fixed.
a2bd45b to
70db41d
Compare
vuvova
approved these changes
Jan 12, 2026
| -- sync_slave_with_master | ||
| --echo # | ||
| --echo # TODO: Re-enable test-case after fixing MDEV-29848 | ||
| --echo # |
Member
There was a problem hiding this comment.
wrapping the test in if (0) { ... } would likely create a smaller diff
Contributor
Author
|
Manually pushed as 11f228c |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
A failed GRANT on a procedure will be replicated when sql_mode does not
have NO_AUTO_CREATE_USER. This is because the function
mysql_routine_grant() does not check if an error occured while
performing the GRANT on a procedure before binlogging, it simply always
binlogs.
This patch fixes this problem by checking if an error happened
previously before binlogging, and if so, then skip binlogging.
Note there is still a broader issue in this area leading to replication
divergence. Reported in MDEV-29848, a partially-completed GRANT
statment (where some earlier GRANTS succeed and a later fails) will not
binlog. Note this affects all grant types, whereas the issue addressed
in this patch is limited to GRANT EXECUTE ON PROCEDURE. This patch
makes GRANT EXECUTE ON PROCEDURE binlogging behavior consistent with
the other grant types. A separate follow-up patch will address the
broader MDEV-29848 issue.
The test
rpl.rpl_grantis extended with a test-case for this issue.This PR is organized as follows:
rpl.rpl_grantto showcase the issue