Commit f6f91b9d authored by unknown's avatar unknown
Browse files

Apply InnoDB snapshot ss923

Fixes:
- Bug #18077: InnoDB uses full explicit table locks in stored FUNCTION


storage/innobase/btr/btr0btr.c:
  Apply InnoDB snapshot ss923
  
  Revision r919:
  btr_page_get_father_for_rec(): Remove bogus comment about removed dict_tree_t.
storage/innobase/dict/dict0dict.c:
  Apply InnoDB snapshot ss923
  
  Revision r892:
  Merge changes from MySQL AB.
  
  dict_col_copy_type_noninline(): Remove the return statement.
  Some compilers do not allow return expressions of void type.
  
  innobase_start_or_create_for_mysql(): Do not cap srv_max_threads to 1000
  on Windows.
  
  Makefile.am (EXTRA_DIST): Add plug.in
  
  
  Revision r897:
  dict_index_get_if_in_cache(): Enclose in #ifdef UNIV_DEBUG.
  Replace the search loop with a call to dict_index_find_on_id_low().
storage/innobase/handler/ha_innodb.cc:
  Apply InnoDB snapshot ss923
  
  Revision r887:
  storage/innobase/handler: Merge changes from MySQL AB:
  
  ChangeSet
    2006/09/30 18:44:42-07:00 brian@zim.(none) 
    Merge zim.(none):/home/brian/mysql/merge-5.1
    into  zim.(none):/home/brian/mysql/arch-5.1
  
  ChangeSet
    2006/09/30 12:49:46-07:00 brian@zim.(none) 
    This patch adds handlerton passing to functions. NDB and Innodb still require a global hanlderton in the main code due to the nature of the sql_cache call back function (should be solveable... another patch).
    Partitioning now has a flag to allow disabling of engines from being compatible with partitioning. Cleaned up heap naming convention on panic call. 
  
  ChangeSet
    2006/09/29 17:19:02-07:00 brian@zim.(none) 
    This removes the passing of global hton to engine instance. 
  
  ChangeSet
    2006/09/28 13:22:56+02:00 gbichot@dl145h.mysql.com 
    Merge gbichot@bk-internal:/home/bk/mysql-5.1-arch
    into  dl145h.mysql.com:/users/gbichot/mysql-5.1-arch
  
  ChangeSet
    2006/09/28 13:19:43+02:00 gbichot@dl145h.mysql.com 
    In the handlerton, cursor creation function don't have an argument
    and so the engine calls current_thd to derive transaction information;
    instead we now pass THD to those functions, it looks more logical
    (it makes the implicit current_thd parameter more visible).
    Approved by Brian and Monty.
  
  ChangeSet
    2006/09/26 22:51:53-07:00 brian@zim.(none) 
    Merge zim.(none):/home/brian/mysql/merge-5.1
    into  zim.(none):/home/brian/mysql/arch-5.1
  
  
  Revision r895:
  Merge changes from MySQL AB, and remove two compilation warnings.
  
  ha_innodb.cc: innodb_mutex_show_status(): Add (ulong) casts to
  ulonglong expressions being passed to fprintf %lu.  The warnings
  were apparently introduced by MySQL AB developers.
  
  mysql_declare_plugin(innobase): Add PLUGIN_LICENSE_GPL.
  
  have_innodb.inc: Merge changes from MySQL AB.
  
  
  Revision r923:
  ha_innobase::store_lock(): When downgrading table locks, do not
  check thd->in_lock_tables but test if
  thd->lex->sql_command == SQLCOM_LOCK_TABLES
  instead.  Otherwise, stored functions will use table locks.  (Bug #18077)
  
  This patch is from Heikki.
storage/innobase/include/dict0dict.h:
  Apply InnoDB snapshot ss923
  
  Revision r897:
  dict_index_get_if_in_cache(): Enclose in #ifdef UNIV_DEBUG.
  Replace the search loop with a call to dict_index_find_on_id_low().
storage/innobase/include/mem0dbg.h:
  Apply InnoDB snapshot ss923
  
  Revision r901:
  Enclose some mem debug functions in #ifdef UNIV_DEBUG or #ifdef UNIV_MEM_DEBUG.
storage/innobase/include/mtr0mtr.h:
  Apply InnoDB snapshot ss923
  
  Revision r866:
  mtr_print(), mtr_memo_contains(): Disable unless #ifdef UNIV_DEBUG.
storage/innobase/include/mtr0mtr.ic:
  Apply InnoDB snapshot ss923
  
  Revision r866:
  mtr_print(), mtr_memo_contains(): Disable unless #ifdef UNIV_DEBUG.
storage/innobase/include/sync0rw.h:
  Apply InnoDB snapshot ss923
  
  Revision r907:
  Send all SHOW ENGINE INNODB STATUS information to the client also when
  UNIV_SYNC_DEBUG is defined.
  
  rw_lock_list_print_info(): Add parameter "file".
  
  mutex_list_print_info(): Add parameter "file".  Make the function static.
storage/innobase/include/sync0sync.h:
  Apply InnoDB snapshot ss923
  
  Revision r907:
  Send all SHOW ENGINE INNODB STATUS information to the client also when
  UNIV_SYNC_DEBUG is defined.
  
  rw_lock_list_print_info(): Add parameter "file".
  
  mutex_list_print_info(): Add parameter "file".  Make the function static.
storage/innobase/include/univ.i:
  Apply InnoDB snapshot ss923
  
  Revision r894:
  univ.i: Indent some of the directives, and remove conditions about Windows
  in the "#else" branch of "#if building on Windows".
storage/innobase/mem/mem0dbg.c:
  Apply InnoDB snapshot ss923
  
  Revision r901:
  Enclose some mem debug functions in #ifdef UNIV_DEBUG or #ifdef UNIV_MEM_DEBUG.
  
  
  Revision r902:
  mem0dbg.c: Enclose some more function definitions in #ifdef UNIV_MEM_DEBUG.
  The declarations were already enclosed in #ifdef UNIV_MEM_DEBUG.
storage/innobase/mem/mem0pool.c:
  Apply InnoDB snapshot ss923
  
  Revision r896:
  mem0pool.c: Remove obsolete comments about the dictionary cache being
  managed with an LRU algorithm.
storage/innobase/mtr/mtr0mtr.c:
  Apply InnoDB snapshot ss923
  
  Revision r866:
  mtr_print(), mtr_memo_contains(): Disable unless #ifdef UNIV_DEBUG.
storage/innobase/row/row0purge.c:
  Apply InnoDB snapshot ss923
  
  Revision r869:
  row_purge_parse_undo_rec(): Correct a faulty condition.  Luckily, this
  bug would only surface if the InnoDB SQL interpreter were used for
  updating fixed-length columns.  Currently (as the UPD_NODE_NO_SIZE_CHANGE
  flag is never set), cmpl_info can only be 0 or UPD_NODE_NO_ORD_CHANGE.
  Luckily, UPD_NODE_NO_ORD_CHANGE is 1, and the condition was simplified
  to !cmpl_info.
storage/innobase/sync/sync0rw.c:
  Apply InnoDB snapshot ss923
  
  Revision r907:
  Send all SHOW ENGINE INNODB STATUS information to the client also when
  UNIV_SYNC_DEBUG is defined.
  
  rw_lock_list_print_info(): Add parameter "file".
  
  mutex_list_print_info(): Add parameter "file".  Make the function static.
storage/innobase/sync/sync0sync.c:
  Apply InnoDB snapshot ss923
  
  Revision r907:
  Send all SHOW ENGINE INNODB STATUS information to the client also when
  UNIV_SYNC_DEBUG is defined.
  
  rw_lock_list_print_info(): Add parameter "file".
  
  mutex_list_print_info(): Add parameter "file".  Make the function static.
parent 6c4f74ed
Loading
Loading
Loading
Loading
+0 −3
Original line number Diff line number Diff line
@@ -571,9 +571,6 @@ btr_page_get_father_for_rec(
	tuple = dict_index_build_node_ptr(index, user_rec, 0, heap,
					  btr_page_get_level(page, mtr));

	/* In the following, we choose just any index from the tree as the
	first parameter for btr_cur_search_to_nth_level. */

	btr_cur_search_to_nth_level(index,
				    btr_page_get_level(page, mtr) + 1,
				    tuple, PAGE_CUR_LE,
+3 −19
Original line number Diff line number Diff line
@@ -3547,6 +3547,7 @@ dict_foreign_parse_drop_constraints(

/*==================== END OF FOREIGN KEY PROCESSING ====================*/

#ifdef UNIV_DEBUG
/**************************************************************************
Returns an index object if it is found in the dictionary cache. */

@@ -3556,7 +3557,6 @@ dict_index_get_if_in_cache(
				/* out: index, NULL if not found */
	dulint	index_id)	/* in: index id */
{
	dict_table_t*	table;
	dict_index_t*	index;

	if (dict_sys == NULL) {
@@ -3565,29 +3565,13 @@ dict_index_get_if_in_cache(

	mutex_enter(&(dict_sys->mutex));

	table = UT_LIST_GET_FIRST(dict_sys->table_LRU);

	while (table) {
		index = UT_LIST_GET_FIRST(table->indexes);

		while (index) {
			if (0 == ut_dulint_cmp(index->id, index_id)) {

				goto found;
			}

			index = UT_LIST_GET_NEXT(indexes, index);
		}

		table = UT_LIST_GET_NEXT(table_LRU, table);
	}
	index = dict_index_find_on_id_low(index_id);

	index = NULL;
found:
	mutex_exit(&(dict_sys->mutex));

	return(index);
}
#endif /* UNIV_DEBUG */

#ifdef UNIV_DEBUG
/**************************************************************************
+7 −6
Original line number Diff line number Diff line
@@ -6630,7 +6630,7 @@ innodb_mutex_show_status(
					mutex->count_spin_rounds,
					mutex->count_os_wait,
					mutex->count_os_yield,
					mutex->lspent_time/1000);
					(ulong) mutex->lspent_time/1000);

				if (stat_print(thd, innobase_hton_name,
						hton_name_len, buf1, buf1len,
@@ -6660,7 +6660,7 @@ innodb_mutex_show_status(
		rw_lock_count, rw_lock_count_spin_loop,
		rw_lock_count_spin_rounds,
		rw_lock_count_os_wait, rw_lock_count_os_yield,
		rw_lock_wait_time/1000);
		(ulong) rw_lock_wait_time/1000);

	if (stat_print(thd, innobase_hton_name, hton_name_len,
			STRING_WITH_LEN("rw_lock_mutexes"), buf2, buf2len)) {
@@ -6812,7 +6812,8 @@ ha_innobase::store_lock(
			&& lock_type != TL_IGNORE)) {

		/* The OR cases above are in this order:
		1) MySQL is doing LOCK TABLES ... READ LOCAL, or
		1) MySQL is doing LOCK TABLES ... READ LOCAL, or we
		are processing a stored procedure or function, or
		2) (we do not know when TL_READ_HIGH_PRIORITY is used), or
		3) this is a SELECT ... IN SHARE MODE, or
		4) we are doing a complex SQL statement like
@@ -6880,7 +6881,8 @@ ha_innobase::store_lock(
		single transaction stored procedure call deterministic
		(if it does not use a consistent read). */

		if (lock_type == TL_READ && thd->in_lock_tables) {
		if (lock_type == TL_READ
		    && thd->lex->sql_command == SQLCOM_LOCK_TABLES) {
			/* We come here if MySQL is processing LOCK TABLES
			... READ LOCAL. MyISAM under that table lock type
			reads the table as it was at the time the lock was
@@ -6939,8 +6941,7 @@ ha_innobase::store_lock(
		(MySQL does have thd->in_lock_tables TRUE there). */

		if (lock_type == TL_READ_NO_INSERT
			&& (!thd->in_lock_tables
				|| thd->lex->sql_command == SQLCOM_CALL)) {
		    && thd->lex->sql_command != SQLCOM_LOCK_TABLES) {

			lock_type = TL_READ;
		}
+1 −3
Original line number Diff line number Diff line
@@ -778,9 +778,8 @@ const dict_col_t*
dict_field_get_col(
/*===============*/
	const dict_field_t*	field);
/**************************************************************************
In an index tree, finds the index corresponding to a record in the tree. */

#ifdef UNIV_DEBUG
/**************************************************************************
Returns an index object if it is found in the dictionary cache. */

@@ -789,7 +788,6 @@ dict_index_get_if_in_cache(
/*=======================*/
				/* out: index, NULL if not found */
	dulint	index_id);	/* in: index id */
#ifdef UNIV_DEBUG
/**************************************************************************
Checks that a tuple has n_fields_cmp value in a sensible range, so that
no comparison can occur with the page number field in a node pointer. */
+4 −9
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ check fields at the both ends of the field. */
#define MEM_SPACE_NEEDED(N) ut_calc_align((N), UNIV_MEM_ALIGNMENT)
#endif

#if defined UNIV_MEM_DEBUG || defined UNIV_DEBUG
/*******************************************************************
Checks a memory heap for consistency and prints the contents if requested.
Outputs the sum of sizes of buffers given to the user (only in
@@ -59,15 +60,8 @@ mem_heap_validate_or_print(
	ulint*		n_blocks); /* out: number of blocks in the heap,
				if a NULL pointer is passed as this
				argument, it is ignored */
#ifdef UNIV_MEM_DEBUG
/******************************************************************
Prints the contents of a memory heap. */

void
mem_heap_print(
/*===========*/
	mem_heap_t*   heap);	/* in: memory heap */
#endif /* UNIV_MEM_DEBUG */
#endif /* UNIV_MEM_DEBUG || UNIV_DEBUG */
#ifdef UNIV_DEBUG
/******************************************************************
Checks that an object is a memory heap (or a block of it) */

@@ -76,6 +70,7 @@ mem_heap_check(
/*===========*/
				/* out: TRUE if ok */
	mem_heap_t*   heap);	/* in: memory heap */
#endif /* UNIV_DEBUG */
/******************************************************************
Validates the contents of a memory heap. */

Loading