Uploaded image for project: 'MariaDB Server'
  1. MariaDB Server
  2. MDEV-27962

Instant DDL downgrades the MDL when table is empty

    XMLWordPrintable

Details

    Description

      MDEV-23805 fails to avoid the downgrade of MDL during inplace alter operation.

      Condition was misplaced :

      diff --git a/sql/sql_table.cc b/sql/sql_table.cc
      index 03df92cd484..eb57242edbe 100644
      --- a/sql/sql_table.cc
      +++ b/sql/sql_table.cc
      @@ -7258,16 +7258,15 @@ static bool mysql_inplace_alter_table(THD *thd,
           lock for prepare phase under LOCK TABLES in the same way as when
           exclusive lock is required for duration of the whole statement.
         */
      -  if (!ha_alter_info->mdl_exclusive_after_prepare &&
      -      (inplace_supported == HA_ALTER_INPLACE_EXCLUSIVE_LOCK ||
      -       ((inplace_supported == HA_ALTER_INPLACE_COPY_NO_LOCK ||
      +  if (inplace_supported == HA_ALTER_INPLACE_EXCLUSIVE_LOCK ||
      +      ((inplace_supported == HA_ALTER_INPLACE_COPY_NO_LOCK ||
               inplace_supported == HA_ALTER_INPLACE_COPY_LOCK ||
               inplace_supported == HA_ALTER_INPLACE_NOCOPY_NO_LOCK ||
               inplace_supported == HA_ALTER_INPLACE_NOCOPY_LOCK ||
               inplace_supported == HA_ALTER_INPLACE_INSTANT) &&
              (thd->locked_tables_mode == LTM_LOCK_TABLES ||
               thd->locked_tables_mode == LTM_PRELOCKED_UNDER_LOCK_TABLES)) ||
      -      alter_info->requested_lock == Alter_info::ALTER_TABLE_LOCK_EXCLUSIVE))
      +      alter_info->requested_lock == Alter_info::ALTER_TABLE_LOCK_EXCLUSIVE)
         {
           if (wait_while_table_is_used(thd, table, HA_EXTRA_FORCE_REOPEN))
             goto cleanup;
      @@ -7379,7 +7378,8 @@ static bool mysql_inplace_alter_table(THD *thd,
           necessary only for prepare phase (unless we are not under LOCK TABLES) and
           user has not explicitly requested exclusive lock.
         */
      -  if ((inplace_supported == HA_ALTER_INPLACE_COPY_NO_LOCK ||
      +  if (!ha_alter_info->mdl_exclusive_after_prepare &&
      +      (inplace_supported == HA_ALTER_INPLACE_COPY_NO_LOCK ||
              inplace_supported == HA_ALTER_INPLACE_COPY_LOCK ||
              inplace_supported == HA_ALTER_INPLACE_NOCOPY_LOCK ||
              inplace_supported == HA_ALTER_INPLACE_NOCOPY_NO_LOCK) &&
      

      Attachments

        Issue Links

          Activity

            People

              thiru Thirunarayanan Balathandayuthapani
              thiru Thirunarayanan Balathandayuthapani
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Git Integration

                  Error rendering 'com.xiplink.jira.git.jira_git_plugin:git-issue-webpanel'. Please contact your Jira administrators.