An error occurred fetching the project authors.
  1. 09 Apr, 2013 2 commits
  2. 16 Aug, 2010 1 commit
    • Mattias Jonsson's avatar
      Bug#49907: ALTER TABLE ... TRUNCATE PARTITION does not wait for · 4b20ccaf
      Mattias Jonsson authored
                 locks on the table
      
      Fixing the partitioning specifics after TRUNCATE TABLE in
      bug-42643 was fixed.
      
      Reorganize of code to decrease the size of the giant switch
      in mysql_execute_command, and to prepare for future parser
      reengineering. Moved code into Sql_statement objects.
      
      Updated patch according to davi's review comments.
      
      libmysqld/CMakeLists.txt:
        Added new files.
      libmysqld/Makefile.am:
        Added new files.
      mysql-test/r/not_partition.result:
        now returning error on partitioning commands
        if partitioning is not enabled.
      mysql-test/r/partition_disabled.result:
        There is no partition handlerton, so it cannot
        find the specified engine in the .frm file.
      mysql-test/r/partition_truncate.result:
        Updated test results.
      mysql-test/suite/parts/inc/partition_mgm.inc:
        Added check that TRUNCATE PARTITION does not delete on failure.
      mysql-test/suite/parts/r/partition_debug_sync_innodb.result:
        updated results.
      mysql-test/suite/parts/r/partition_mgm_lc0_archive.result:
        updated results.
      mysql-test/suite/parts/r/partition_mgm_lc1_archive.result:
        updated results.
      mysql-test/suite/parts/r/partition_mgm_lc2_archive.result:
        updated results.
      mysql-test/suite/parts/t/partition_debug_sync_innodb.test:
        Test case for this bug.
      mysql-test/t/not_partition.test:
        Added check for TRUNCATE PARTITION without partitioning.
      mysql-test/t/partition_truncate.test:
        Added test of TRUNCATE PARTITION on non partitioned table.
      sql/CMakeLists.txt:
        Added new files.
      sql/Makefile.am:
        Added new files.
      sql/datadict.cc:
        Moved out the storage engine check into an own
        function, including assert for lock.
      sql/datadict.h:
        added dd_frm_storage_engine.
      sql/sql_alter_table.cc:
        moved the code for SQLCOM_ALTER_TABLE in mysql_execute_command
        into its own file, and using the Sql_statement object to
        prepare for future parser reengineering.
      sql/sql_alter_table.h:
        Created Sql_statement object for ALTER TABLE.
      sql/sql_lex.cc:
        resetting m_stmt.
      sql/sql_lex.h:
        Temporary hack for forward declaration of enum_alter_table_change_level.
      sql/sql_parse.cc:
        Moved out ALTER/ANALYZE/CHECK/OPTIMIZE/REPAIR TABLE
        from the giant switch into their own Sql_statement
        objects.
      sql/sql_parse.h:
        Exporting check_merge_table_access.
      sql/sql_partition_admin.cc:
        created Sql_statement for
        ALTER TABLE t ANALYZE/CHECK/OPTIMIZE/REPAIR/TRUNCATE
        PARTITION. To be able to reuse the TABLE equivalents.
      sql/sql_partition_admin.h:
        Added Sql_statement of partition admin statements.
      sql/sql_table.cc:
        Moved table maintenance code into sql_table_maintenance.cc
      sql/sql_table.h:
        Moved table maintenance code into sql_table_maintenance.h
        exporting functions used by sql_table_maintenance.
      sql/sql_table_maintenance.cc:
        Moved table maintenance code from sql_table.cc
      sql/sql_table_maintenance.h:
        Sql_statement objects for ANALYZE/CHECK/OPTIMIZE/REPAIR TABLE.
        Also declaring the keycache functions.
      sql/sql_truncate.cc:
        Moved code from SQLCOM_TRUNCATE in mysql_execute_command into
        Truncate_statement::execute.
        Added check for partitioned table on TRUNCATE PARTITION.
        Moved locking fix for partitioned table into
        Alter_table_truncate_partition::execute.
      sql/sql_truncate.h:
        Truncate_statement declaration (sub class of Sql_statement).
      sql/sql_yacc.yy:
        Using the new Sql_statment objects.
      4b20ccaf
  3. 09 Aug, 2010 1 commit
    • Konstantin Osipov's avatar
      A fix for Bug#41158 "DROP TABLE holds LOCK_open during unlink()". · 52306698
      Konstantin Osipov authored
      Remove acquisition of LOCK_open around file system operations,
      since such operations are now protected by metadata locks.
      Rework table discovery algorithm to not require LOCK_open.
      
      No new tests added since all MDL locking operations are covered
      in lock.test and mdl_sync.test, and as long as these tests
      pass despite the increased concurrency, consistency must be
      unaffected.
      
      mysql-test/t/disabled.def:
        Disable NDB tests due to Bug#55799.
      sql/datadict.cc:
        No longer necessary to protect ha_create_table() with
        LOCK_open. Serial execution is now ensured by metadata
        locks.
      sql/ha_ndbcluster.cc:
        Do not manipulate with LOCK_open in cluster code.
      sql/ha_ndbcluster_binlog.cc:
        Do not manipulate with LOCK_open in cluster code.
      sql/ha_ndbcluster_binlog.h:
        Update function signature.
      sql/handler.cc:
        Implement ha_check_if_table_exists().
        @todo: some engines provide ha_table_exists_in_engine()
        handlerton call, for those we perhaps shouldn't
        call ha_discover(), to be more efficient.
        Since currently it's only NDB, postpone till
        integration with NDB.
      sql/handler.h:
        Declare ha_check_if_table_exists() function.
      sql/mdl.cc:
        Remove an obsolete comment.
      sql/sql_base.cc:
        Update to a new signature of close_cached_tables():
        from now on we always call it without LOCK_open.
        Update comments.
        Remove get_table_share_with_create(), we should
        not attempt to create a table under LOCK_open.
        Introduce get_table_share_with_discover() instead,
        which would request a back off action if the table
        exists in engine.
        Remove acquisition of LOCK_open for 
        data dictionary operations, such as check_if_table_exists().
        Do not use get_table_share_with_create/discover for views,
        where it's not needed.
        Make tdc_remove_table() optionally acquire LOCK_open
        to simplify usage of this function.
        Use the right mutex in the partitioning code when
        manipulating with thd->open_tables.
      sql/sql_base.h:
        Update signatures of changes functions.
      sql/sql_insert.cc:
        Do not wrap quick_rm_table() with LOCK_open acquisition, 
        this is unnecessary.
      sql/sql_parse.cc:
        Update to the new calling convention of tdc_remove_table().
        Update to the new signature of close_cached_tables().
        Update comments.
      sql/sql_rename.cc:
        Update to the new calling convention of tdc_remove_table().
        Remove acquisition of LOCK_open around filesystem
        operations.
      sql/sql_show.cc:
        Remove get_trigger_table_impl().
        Do not acquire LOCK_open for a dirty read of the trigger
        file.
      sql/sql_table.cc:
        Do not acquire LOCK_open for filesystem operations.
      sql/sql_trigger.cc:
        Do not require LOCK_open for trigger file I/O.
      sql/sql_truncate.cc:
        Update to the new signature of tdc_remove_table().
      sql/sql_view.cc:
        Do not require LOCK_open for view I/O.
        Use tdc_remove_table() to expel view share.
        Update comments.
      sql/sys_vars.cc:
        Update to the new signature of close_cached_tables().
      52306698
  4. 25 May, 2010 1 commit
    • Davi Arnaut's avatar
      Bug#42643: InnoDB does not support replication of TRUNCATE TABLE · 4f18083b
      Davi Arnaut authored
      The problem was that TRUNCATE TABLE didn't take a exclusive
      lock on a table if it resorted to truncating via delete of
      all rows in the table. Specifically for InnoDB tables, this
      could break proper isolation as InnoDB ends up aborting some
      granted locks when truncating a table.
      
      The solution is to take a exclusive metadata lock before
      TRUNCATE TABLE can proceed. This guarantees that no other
      transaction is using the table.
      
      Incompatible change: Truncate via delete no longer fails
      if sql_safe_updates is activated (this was a undocumented
      side effect).
      
      libmysqld/CMakeLists.txt:
        Add new files to the build list.
      libmysqld/Makefile.am:
        Add new files to the build list.
      mysql-test/extra/binlog_tests/binlog_truncate.test:
        Add test case for Bug#42643
      mysql-test/include/mix1.inc:
        Update test case as TRUNCATE TABLE now grabs a exclusive lock.
        Ensure that TRUNCATE waits for granted locks on the table.
      mysql-test/suite/binlog/t/binlog_truncate_innodb.test:
        As with other data modifying statements, TRUNCATE is still not
        possible in a transaction with isolation level READ COMMITTED
        or READ UNCOMMITED. It would be possible to implement so, but
        it is not worth the effort.
      mysql-test/suite/binlog/t/binlog_truncate_myisam.test:
        Test under different binlog formats.
      mysql-test/suite/binlog/t/disabled.def:
        Re-enable test case.
      mysql-test/t/innodb_bug38231.test:
        Truncate no longer works with row-level locks.
      mysql-test/t/mdl_sync.test:
        Ensure that a acquired lock is not given up due to a conflict.
      mysql-test/t/partition_innodb_semi_consistent.test:
        End transaction as to release metadata locks.
      mysql-test/t/truncate.test:
        A metadata lock is now taken before the object is verified.
      sql/CMakeLists.txt:
        Add new files to the build list.
      sql/Makefile.am:
        Add new files to the build list.
      sql/datadict.cc:
        Introduce a new file specific for data dictionary operations.
      sql/datadict.h:
        Add header file.
      sql/sql_base.cc:
        Rename data dictionary function.
      sql/sql_bitmap.h:
        Include dependency.
      sql/sql_delete.cc:
        Move away from relying on mysql_delete() to delete all rows of
        a table. Thus, move any bits related to truncate to sql_truncate.cc
      sql/sql_delete.h:
        Remove parameter.
      sql/sql_parse.cc:
        Add protection against the global read lock -- a intention
        exclusive lock can be acquired in the truncate path.
      sql/sql_show.cc:
        Add sync point for testing scenarios where a pending flush
        is ignored.
      sql/sql_truncate.cc:
        Acquire a shared metadata lock before accessing table metadata.
        Upgrade the lock to a exclusive one if the table can be re-created.
        Rework binlog rules to better reflect the requirements.
      sql/sql_yacc.yy:
        Set appropriate lock types for table to be truncated.
      sql/table.h:
        Move to data dictionary header.
      4f18083b