summaryrefslogtreecommitdiff
path: root/storage/innobase/include
diff options
context:
space:
mode:
authorSergei Golubchik <sergii@pisem.net>2014-02-26 19:36:33 +0100
committerSergei Golubchik <sergii@pisem.net>2014-02-26 19:36:33 +0100
commit15ee97214da759f5b30232081fb71331d9369102 (patch)
tree62a5742e75e71e934ffe8a2f16861735e8d82d8b /storage/innobase/include
parentf92058a23e5c33815ce123ff314308839407f149 (diff)
parenteeb7091e14d7feda093c7fa04bb2b0373a05e87f (diff)
downloadmariadb-git-15ee97214da759f5b30232081fb71331d9369102.tar.gz
InnoDB 5.6.15 merge.
update test results
Diffstat (limited to 'storage/innobase/include')
-rw-r--r--storage/innobase/include/api0api.h16
-rw-r--r--storage/innobase/include/btr0cur.h14
-rw-r--r--storage/innobase/include/btr0pcur.h44
-rw-r--r--storage/innobase/include/btr0pcur.ic4
-rw-r--r--storage/innobase/include/btr0sea.h2
-rw-r--r--storage/innobase/include/db0err.h1
-rw-r--r--storage/innobase/include/dict0stats.ic2
-rw-r--r--storage/innobase/include/dict0types.h5
-rw-r--r--storage/innobase/include/fts0fts.h10
-rw-r--r--storage/innobase/include/fts0types.h1
-rw-r--r--storage/innobase/include/ibuf0ibuf.h5
-rw-r--r--storage/innobase/include/log0log.h2
-rw-r--r--storage/innobase/include/mtr0mtr.h2
-rw-r--r--storage/innobase/include/mtr0mtr.ic39
-rw-r--r--storage/innobase/include/row0ftsort.h6
-rw-r--r--storage/innobase/include/srv0conc.h2
-rw-r--r--storage/innobase/include/srv0mon.h6
-rw-r--r--storage/innobase/include/srv0mon.ic2
-rw-r--r--storage/innobase/include/sync0arr.h23
-rw-r--r--storage/innobase/include/sync0arr.ic40
-rw-r--r--storage/innobase/include/sync0sync.h2
-rw-r--r--storage/innobase/include/trx0trx.h4
-rw-r--r--storage/innobase/include/ut0bh.h2
-rw-r--r--storage/innobase/include/ut0bh.ic2
24 files changed, 166 insertions, 70 deletions
diff --git a/storage/innobase/include/api0api.h b/storage/innobase/include/api0api.h
index 1d6aaab60bc..c294e3f34d5 100644
--- a/storage/innobase/include/api0api.h
+++ b/storage/innobase/include/api0api.h
@@ -1,6 +1,6 @@
/*****************************************************************************
-Copyright (c) 2012, Oracle and/or its affiliates. All Rights Reserved.
+Copyright (c) 2011, 2013, Oracle and/or its affiliates. All Rights Reserved.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
@@ -460,6 +460,10 @@ ib_trx_start(
/*=========*/
ib_trx_t ib_trx, /*!< in: transaction to restart */
ib_trx_level_t ib_trx_level, /*!< in: trx isolation level */
+ ib_bool_t read_write, /*!< in: true if read write
+ transaction */
+ ib_bool_t auto_commit, /*!< in: auto commit after each
+ single DML */
void* thd); /*!< in: THD */
/*****************************************************************//**
@@ -470,7 +474,11 @@ put the transaction in the active state.
ib_trx_t
ib_trx_begin(
/*=========*/
- ib_trx_level_t ib_trx_level); /*!< in: trx isolation level */
+ ib_trx_level_t ib_trx_level, /*!< in: trx isolation level */
+ ib_bool_t read_write, /*!< in: true if read write
+ transaction */
+ ib_bool_t auto_commit); /*!< in: auto commit after each
+ single DML */
/*****************************************************************//**
Query the transaction's state. This function can be used to check for
@@ -669,7 +677,9 @@ ib_err_t
ib_cursor_read_row(
/*===============*/
ib_crsr_t ib_crsr, /*!< in: InnoDB cursor instance */
- ib_tpl_t ib_tpl); /*!< out: read cols into this tuple */
+ ib_tpl_t ib_tpl, /*!< out: read cols into this tuple */
+ void** row_buf, /*!< in/out: row buffer */
+ ib_ulint_t* row_len); /*!< in/out: row buffer len */
/*****************************************************************//**
Move cursor to the first record in the table.
diff --git a/storage/innobase/include/btr0cur.h b/storage/innobase/include/btr0cur.h
index e2bc599d598..833166e783c 100644
--- a/storage/innobase/include/btr0cur.h
+++ b/storage/innobase/include/btr0cur.h
@@ -326,6 +326,20 @@ btr_cur_update_in_place(
mtr_commit(mtr) before latching any
further pages */
__attribute__((warn_unused_result, nonnull));
+/***********************************************************//**
+Writes a redo log record of updating a record in-place. */
+UNIV_INTERN
+void
+btr_cur_update_in_place_log(
+/*========================*/
+ ulint flags, /*!< in: flags */
+ const rec_t* rec, /*!< in: record */
+ dict_index_t* index, /*!< in: index of the record */
+ const upd_t* update, /*!< in: update vector */
+ trx_id_t trx_id, /*!< in: transaction id */
+ roll_ptr_t roll_ptr, /*!< in: roll ptr */
+ mtr_t* mtr) /*!< in: mtr */
+ __attribute__((nonnull));
/*************************************************************//**
Tries to update a record on a page in an index tree. It is assumed that mtr
holds an x-latch on the page. The operation does not succeed if there is too
diff --git a/storage/innobase/include/btr0pcur.h b/storage/innobase/include/btr0pcur.h
index 973fae382ab..fc008cdd185 100644
--- a/storage/innobase/include/btr0pcur.h
+++ b/storage/innobase/include/btr0pcur.h
@@ -1,6 +1,6 @@
/*****************************************************************************
-Copyright (c) 1996, 2012, Oracle and/or its affiliates. All Rights Reserved.
+Copyright (c) 1996, 2013, Oracle and/or its affiliates. All Rights Reserved.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
@@ -460,6 +460,27 @@ btr_pcur_move_to_prev_on_page(
/*==========================*/
btr_pcur_t* cursor);/*!< in/out: persistent cursor */
+/** Position state of persistent B-tree cursor. */
+enum pcur_pos_t {
+ /** The persistent cursor is not positioned. */
+ BTR_PCUR_NOT_POSITIONED = 0,
+ /** The persistent cursor was previously positioned.
+ TODO: currently, the state can be BTR_PCUR_IS_POSITIONED,
+ though it really should be BTR_PCUR_WAS_POSITIONED,
+ because we have no obligation to commit the cursor with
+ mtr; similarly latch_mode may be out of date. This can
+ lead to problems if btr_pcur is not used the right way;
+ all current code should be ok. */
+ BTR_PCUR_WAS_POSITIONED,
+ /** The persistent cursor is positioned by optimistic get to the same
+ record as it was positioned at. Not used for rel_pos == BTR_PCUR_ON.
+ It may need adjustment depending on previous/current search direction
+ and rel_pos. */
+ BTR_PCUR_IS_POSITIONED_OPTIMISTIC,
+ /** The persistent cursor is positioned by index search.
+ Or optimistic get for rel_pos == BTR_PCUR_ON. */
+ BTR_PCUR_IS_POSITIONED
+};
/* The persistent B-tree cursor structure. This is used mainly for SQL
selects, updates, and deletes. */
@@ -493,10 +514,8 @@ struct btr_pcur_t{
ib_uint64_t modify_clock; /*!< the modify clock value of the
buffer block when the cursor position
was stored */
- ulint pos_state; /*!< see TODO note below!
- BTR_PCUR_IS_POSITIONED,
- BTR_PCUR_WAS_POSITIONED,
- BTR_PCUR_NOT_POSITIONED */
+ enum pcur_pos_t pos_state; /*!< btr_pcur_store_position() and
+ btr_pcur_restore_position() state. */
ulint search_mode; /*!< PAGE_CUR_G, ... */
trx_t* trx_if_known; /*!< the transaction, if we know it;
otherwise this field is not defined;
@@ -512,21 +531,6 @@ struct btr_pcur_t{
is not NULL */
};
-#define BTR_PCUR_IS_POSITIONED 1997660512 /* TODO: currently, the state
- can be BTR_PCUR_IS_POSITIONED,
- though it really should be
- BTR_PCUR_WAS_POSITIONED,
- because we have no obligation
- to commit the cursor with
- mtr; similarly latch_mode may
- be out of date. This can
- lead to problems if btr_pcur
- is not used the right way;
- all current code should be
- ok. */
-#define BTR_PCUR_WAS_POSITIONED 1187549791
-#define BTR_PCUR_NOT_POSITIONED 1328997689
-
#define BTR_PCUR_OLD_STORED 908467085
#define BTR_PCUR_OLD_NOT_STORED 122766467
diff --git a/storage/innobase/include/btr0pcur.ic b/storage/innobase/include/btr0pcur.ic
index 79afd7c322e..29f2fc722a2 100644
--- a/storage/innobase/include/btr0pcur.ic
+++ b/storage/innobase/include/btr0pcur.ic
@@ -1,6 +1,6 @@
/*****************************************************************************
-Copyright (c) 1996, 2012, Oracle and/or its affiliates. All Rights Reserved.
+Copyright (c) 1996, 2013, Oracle and/or its affiliates. All Rights Reserved.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
@@ -379,7 +379,7 @@ btr_pcur_commit_specify_mtr(
btr_pcur_t* pcur, /*!< in: persistent cursor */
mtr_t* mtr) /*!< in: mtr to commit */
{
- ut_a(pcur->pos_state == BTR_PCUR_IS_POSITIONED);
+ ut_ad(pcur->pos_state == BTR_PCUR_IS_POSITIONED);
pcur->latch_mode = BTR_NO_LATCHES;
diff --git a/storage/innobase/include/btr0sea.h b/storage/innobase/include/btr0sea.h
index fea117d0aaf..848bde451a0 100644
--- a/storage/innobase/include/btr0sea.h
+++ b/storage/innobase/include/btr0sea.h
@@ -189,8 +189,6 @@ UNIV_INTERN
ibool
btr_search_validate(void);
/*======================*/
-#else
-# define btr_search_validate() TRUE
#endif /* defined UNIV_AHI_DEBUG || defined UNIV_DEBUG */
/** The search info struct in an index */
diff --git a/storage/innobase/include/db0err.h b/storage/innobase/include/db0err.h
index 1f5ab0d7923..982bf1943cf 100644
--- a/storage/innobase/include/db0err.h
+++ b/storage/innobase/include/db0err.h
@@ -127,6 +127,7 @@ enum dberr_t {
DB_IDENTIFIER_TOO_LONG, /*!< Identifier name too long */
DB_FTS_EXCEED_RESULT_CACHE_LIMIT, /*!< FTS query memory
exceeds result cache limit */
+ DB_TEMP_FILE_WRITE_FAILURE, /*!< Temp file write failure */
/* The following are partial failure codes */
DB_FAIL = 1000,
diff --git a/storage/innobase/include/dict0stats.ic b/storage/innobase/include/dict0stats.ic
index 8fb31678af9..ec9a9065470 100644
--- a/storage/innobase/include/dict0stats.ic
+++ b/storage/innobase/include/dict0stats.ic
@@ -1,6 +1,6 @@
/*****************************************************************************
-Copyright (c) 2012, Oracle and/or its affiliates. All Rights Reserved.
+Copyright (c) 2012, 2013, Oracle and/or its affiliates. All Rights Reserved.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
diff --git a/storage/innobase/include/dict0types.h b/storage/innobase/include/dict0types.h
index 6acb6a2dcbe..1299445a8ee 100644
--- a/storage/innobase/include/dict0types.h
+++ b/storage/innobase/include/dict0types.h
@@ -82,4 +82,9 @@ enum ib_quiesce_t {
#define TEMP_TABLE_PREFIX "#sql"
#define TEMP_TABLE_PATH_PREFIX "/" TEMP_TABLE_PREFIX
+#if defined UNIV_DEBUG || defined UNIV_IBUF_DEBUG
+/** Flag to control insert buffer debugging. */
+extern uint ibuf_debug;
+#endif /* UNIV_DEBUG || UNIV_IBUF_DEBUG */
+
#endif
diff --git a/storage/innobase/include/fts0fts.h b/storage/innobase/include/fts0fts.h
index f94112ef4d4..5bea5bc0e97 100644
--- a/storage/innobase/include/fts0fts.h
+++ b/storage/innobase/include/fts0fts.h
@@ -773,16 +773,12 @@ fts_cache_destroy(
fts_cache_t* cache); /*!< in: cache*/
/*********************************************************************//**
-Clear cache. If the shutdown flag is TRUE then the cache can contain
-data that needs to be freed. For regular clear as part of normal
-working we assume the caller has freed all resources. */
+Clear cache. */
UNIV_INTERN
void
fts_cache_clear(
/*============*/
- fts_cache_t* cache, /*!< in: cache */
- ibool free_words); /*!< in: TRUE if free
- in memory word cache. */
+ fts_cache_t* cache); /*!< in: cache */
/*********************************************************************//**
Initialize things in cache. */
@@ -833,7 +829,7 @@ fts_drop_index_split_tables(
Run SYNC on the table, i.e., write out data from the cache to the
FTS auxiliary INDEX table and clear the cache at the end. */
UNIV_INTERN
-void
+dberr_t
fts_sync_table(
/*===========*/
dict_table_t* table) /*!< in: table */
diff --git a/storage/innobase/include/fts0types.h b/storage/innobase/include/fts0types.h
index b714d326487..64677428331 100644
--- a/storage/innobase/include/fts0types.h
+++ b/storage/innobase/include/fts0types.h
@@ -237,6 +237,7 @@ struct fts_fetch_t {
fts_sql_callback
read_record; /*!< Callback for reading index
record */
+ ulint total_memory; /*!< Total memory used */
};
/** For horizontally splitting an FTS auxiliary index */
diff --git a/storage/innobase/include/ibuf0ibuf.h b/storage/innobase/include/ibuf0ibuf.h
index 0c5a336a1f0..9c3b686c998 100644
--- a/storage/innobase/include/ibuf0ibuf.h
+++ b/storage/innobase/include/ibuf0ibuf.h
@@ -67,11 +67,6 @@ typedef enum {
/** Operations that can currently be buffered. */
extern ibuf_use_t ibuf_use;
-#if defined UNIV_DEBUG || defined UNIV_IBUF_DEBUG
-/** Flag to control insert buffer debugging. */
-extern uint ibuf_debug;
-#endif /* UNIV_DEBUG || UNIV_IBUF_DEBUG */
-
/** The insert buffer control structure */
extern ibuf_t* ibuf;
diff --git a/storage/innobase/include/log0log.h b/storage/innobase/include/log0log.h
index 1e61ea54e7b..61318e34561 100644
--- a/storage/innobase/include/log0log.h
+++ b/storage/innobase/include/log0log.h
@@ -824,6 +824,8 @@ struct log_t{
later; this is advanced when a flush
operation is completed to all the log
groups */
+ volatile bool is_extending; /*!< this is set to true during extend
+ the log buffer size */
lsn_t written_to_some_lsn;
/*!< first log sequence number not yet
written to any log group; for this to
diff --git a/storage/innobase/include/mtr0mtr.h b/storage/innobase/include/mtr0mtr.h
index 3257402d8aa..ed7fd76d425 100644
--- a/storage/innobase/include/mtr0mtr.h
+++ b/storage/innobase/include/mtr0mtr.h
@@ -315,7 +315,7 @@ mtr_memo_release(
Checks if memo contains the given item.
@return TRUE if contains */
UNIV_INLINE
-ibool
+bool
mtr_memo_contains(
/*==============*/
mtr_t* mtr, /*!< in: mtr */
diff --git a/storage/innobase/include/mtr0mtr.ic b/storage/innobase/include/mtr0mtr.ic
index bb24734c9bb..a9f02430220 100644
--- a/storage/innobase/include/mtr0mtr.ic
+++ b/storage/innobase/include/mtr0mtr.ic
@@ -1,6 +1,6 @@
/*****************************************************************************
-Copyright (c) 1995, 2012, Oracle and/or its affiliates. All Rights Reserved.
+Copyright (c) 1995, 2013, Oracle and/or its affiliates. All Rights Reserved.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
@@ -158,37 +158,38 @@ mtr_release_s_latch_at_savepoint(
Checks if memo contains the given item.
@return TRUE if contains */
UNIV_INLINE
-ibool
+bool
mtr_memo_contains(
/*==============*/
mtr_t* mtr, /*!< in: mtr */
const void* object, /*!< in: object to search */
ulint type) /*!< in: type of object */
{
- mtr_memo_slot_t* slot;
- dyn_array_t* memo;
- ulint offset;
-
ut_ad(mtr);
ut_ad(mtr->magic_n == MTR_MAGIC_N);
ut_ad(mtr->state == MTR_ACTIVE || mtr->state == MTR_COMMITTING);
- memo = &(mtr->memo);
-
- offset = dyn_array_get_data_size(memo);
-
- while (offset > 0) {
- offset -= sizeof(mtr_memo_slot_t);
-
- slot = (mtr_memo_slot_t*) dyn_array_get_element(memo, offset);
-
- if ((object == slot->object) && (type == slot->type)) {
-
- return(TRUE);
+ for (const dyn_block_t* block = dyn_array_get_last_block(&mtr->memo);
+ block;
+ block = dyn_array_get_prev_block(&mtr->memo, block)) {
+ const mtr_memo_slot_t* start
+ = reinterpret_cast<mtr_memo_slot_t*>(
+ dyn_block_get_data(block));
+ mtr_memo_slot_t* slot
+ = reinterpret_cast<mtr_memo_slot_t*>(
+ dyn_block_get_data(block)
+ + dyn_block_get_used(block));
+
+ ut_ad(!(dyn_block_get_used(block) % sizeof(mtr_memo_slot_t)));
+
+ while (slot-- != start) {
+ if (object == slot->object && type == slot->type) {
+ return(true);
+ }
}
}
- return(FALSE);
+ return(false);
}
# endif /* UNIV_DEBUG */
#endif /* !UNIV_HOTBACKUP */
diff --git a/storage/innobase/include/row0ftsort.h b/storage/innobase/include/row0ftsort.h
index 4a486450efc..4e04a099140 100644
--- a/storage/innobase/include/row0ftsort.h
+++ b/storage/innobase/include/row0ftsort.h
@@ -84,10 +84,13 @@ struct fts_psort_t {
row_merge_block_t* block_alloc[FTS_NUM_AUX_INDEX];
/*!< buffer to allocated */
ulint child_status; /*!< child thread status */
- ulint state; /*!< child thread state */
+ ulint state; /*!< parent thread state */
fts_doc_list_t fts_doc_list; /*!< doc list to process */
fts_psort_common_t* psort_common; /*!< ptr to all psort info */
os_thread_t thread_hdl; /*!< thread handler */
+ dberr_t error; /*!< db error during psort */
+ ulint memory_used; /*!< memory used by fts_doc_list */
+ ib_mutex_t mutex; /*!< mutex for fts_doc_list */
};
/** Structure stores information from string tokenization operation */
@@ -124,6 +127,7 @@ typedef struct fts_psort_insert fts_psort_insert_t;
/** status bit used for communication between parent and child thread */
#define FTS_PARENT_COMPLETE 1
+#define FTS_PARENT_EXITING 2
#define FTS_CHILD_COMPLETE 1
#define FTS_CHILD_EXITING 2
diff --git a/storage/innobase/include/srv0conc.h b/storage/innobase/include/srv0conc.h
index 9aee1b17bf0..cf61ef5528d 100644
--- a/storage/innobase/include/srv0conc.h
+++ b/storage/innobase/include/srv0conc.h
@@ -1,6 +1,6 @@
/*****************************************************************************
-Copyright (c) 2011, Oracle and/or its affiliates. All Rights Reserved.
+Copyright (c) 2011, 2012, Oracle and/or its affiliates. All Rights Reserved.
Portions of this file contain modifications contributed and copyrighted by
Google, Inc. Those modifications are gratefully acknowledged and are described
diff --git a/storage/innobase/include/srv0mon.h b/storage/innobase/include/srv0mon.h
index 209894833a0..e2ab81bf53a 100644
--- a/storage/innobase/include/srv0mon.h
+++ b/storage/innobase/include/srv0mon.h
@@ -308,7 +308,11 @@ enum monitor_id_t {
/* Index related counters */
MONITOR_MODULE_INDEX,
MONITOR_INDEX_SPLIT,
- MONITOR_INDEX_MERGE,
+ MONITOR_INDEX_MERGE_ATTEMPTS,
+ MONITOR_INDEX_MERGE_SUCCESSFUL,
+ MONITOR_INDEX_REORG_ATTEMPTS,
+ MONITOR_INDEX_REORG_SUCCESSFUL,
+ MONITOR_INDEX_DISCARD,
/* Adaptive Hash Index related counters */
MONITOR_MODULE_ADAPTIVE_HASH,
diff --git a/storage/innobase/include/srv0mon.ic b/storage/innobase/include/srv0mon.ic
index 17411d77a8b..225390c6b6f 100644
--- a/storage/innobase/include/srv0mon.ic
+++ b/storage/innobase/include/srv0mon.ic
@@ -1,6 +1,6 @@
/*****************************************************************************
-Copyright (c) 2010, Oracle and/or its affiliates. All Rights Reserved.
+Copyright (c) 2010, 2012, Oracle and/or its affiliates. All Rights Reserved.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
diff --git a/storage/innobase/include/sync0arr.h b/storage/innobase/include/sync0arr.h
index bb4d1037a62..15dbdcb540d 100644
--- a/storage/innobase/include/sync0arr.h
+++ b/storage/innobase/include/sync0arr.h
@@ -1,6 +1,6 @@
/*****************************************************************************
-Copyright (c) 1995, 2009, Oracle and/or its affiliates. All Rights Reserved.
+Copyright (c) 1995, 2013, Oracle and/or its affiliates. All Rights Reserved.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
@@ -37,10 +37,27 @@ struct sync_cell_t;
struct sync_array_t;
/******************************************************************//**
+Get an instance of the sync wait array and reserve a wait array cell
+in the instance for waiting for an object. The event of the cell is
+reset to nonsignalled state.
+If reserving cell of the instance fails, try to get another new
+instance until we can reserve an empty cell of it.
+@return the instance found, never NULL. */
+UNIV_INLINE
+sync_array_t*
+sync_array_get_and_reserve_cell(
+/*============================*/
+ void* object, /*!< in: pointer to the object to wait for */
+ ulint type, /*!< in: lock request type */
+ const char* file, /*!< in: file where requested */
+ ulint line, /*!< in: line where requested */
+ ulint* index); /*!< out: index of the reserved cell */
+/******************************************************************//**
Reserves a wait array cell for waiting for an object.
-The event of the cell is reset to nonsignalled state. */
+The event of the cell is reset to nonsignalled state.
+@return true if free cell is found, otherwise false */
UNIV_INTERN
-void
+bool
sync_array_reserve_cell(
/*====================*/
sync_array_t* arr, /*!< in: wait array */
diff --git a/storage/innobase/include/sync0arr.ic b/storage/innobase/include/sync0arr.ic
index 0114a1ff5a2..18a46dd0a41 100644
--- a/storage/innobase/include/sync0arr.ic
+++ b/storage/innobase/include/sync0arr.ic
@@ -1,6 +1,6 @@
/*****************************************************************************
-Copyright (c) 1995, 2009, Oracle and/or its affiliates. All Rights Reserved.
+Copyright (c) 1995, 2013, Oracle and/or its affiliates. All Rights Reserved.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
@@ -24,3 +24,41 @@ Inline code
Created 9/5/1995 Heikki Tuuri
*******************************************************/
+
+/** User configured sync array size */
+extern ulong srv_sync_array_size;
+
+/******************************************************************//**
+Get an instance of the sync wait array and reserve a wait array cell
+in the instance for waiting for an object. The event of the cell is
+reset to nonsignalled state.
+If reserving cell of the instance fails, try to get another new
+instance until we can reserve an empty cell of it.
+@return the instance found, never NULL. */
+UNIV_INLINE
+sync_array_t*
+sync_array_get_and_reserve_cell(
+/*============================*/
+ void* object, /*!< in: pointer to the object to wait for */
+ ulint type, /*!< in: lock request type */
+ const char* file, /*!< in: file where requested */
+ ulint line, /*!< in: line where requested */
+ ulint* index) /*!< out: index of the reserved cell */
+{
+ sync_array_t* sync_arr;
+ bool reserved = false;
+
+ for (ulint i = 0; i < srv_sync_array_size && !reserved; ++i) {
+ sync_arr = sync_array_get();
+ reserved = sync_array_reserve_cell(sync_arr, object, type,
+ file, line, index);
+ }
+
+ /* This won't be true every time, for the loop above may execute
+ more than srv_sync_array_size times to reserve a cell.
+ But an assertion here makes the code more solid. */
+ ut_a(reserved);
+
+ return sync_arr;
+}
+
diff --git a/storage/innobase/include/sync0sync.h b/storage/innobase/include/sync0sync.h
index 9950a6fbf6b..7b00e16476b 100644
--- a/storage/innobase/include/sync0sync.h
+++ b/storage/innobase/include/sync0sync.h
@@ -80,6 +80,7 @@ extern mysql_pfs_key_t fts_bg_threads_mutex_key;
extern mysql_pfs_key_t fts_delete_mutex_key;
extern mysql_pfs_key_t fts_optimize_mutex_key;
extern mysql_pfs_key_t fts_doc_id_mutex_key;
+extern mysql_pfs_key_t fts_pll_tokenize_mutex_key;
extern mysql_pfs_key_t hash_table_mutex_key;
extern mysql_pfs_key_t ibuf_bitmap_mutex_key;
extern mysql_pfs_key_t ibuf_mutex_key;
@@ -710,6 +711,7 @@ or row lock! */
#define SYNC_LOG 170
#define SYNC_LOG_FLUSH_ORDER 147
#define SYNC_RECV 168
+#define SYNC_FTS_TOKENIZE 167
#define SYNC_FTS_CACHE_INIT 166 /* Used for FTS cache initialization */
#define SYNC_FTS_BG_THREADS 165
#define SYNC_FTS_OPTIMIZE 164 // FIXME: is this correct number, test
diff --git a/storage/innobase/include/trx0trx.h b/storage/innobase/include/trx0trx.h
index a75d925d4eb..f580901237f 100644
--- a/storage/innobase/include/trx0trx.h
+++ b/storage/innobase/include/trx0trx.h
@@ -997,6 +997,10 @@ struct trx_t{
ulint start_line; /*!< Track where it was started from */
const char* start_file; /*!< Filename where it was started */
#endif /* UNIV_DEBUG */
+ /*------------------------------*/
+ bool api_trx; /*!< trx started by InnoDB API */
+ bool api_auto_commit;/*!< automatic commit */
+ bool read_write; /*!< if read and write operation */
/*------------------------------*/
char detailed_error[256]; /*!< detailed error message for last
diff --git a/storage/innobase/include/ut0bh.h b/storage/innobase/include/ut0bh.h
index 84ea6dd915a..1085736c7ab 100644
--- a/storage/innobase/include/ut0bh.h
+++ b/storage/innobase/include/ut0bh.h
@@ -1,6 +1,6 @@
/***************************************************************************//**
-Copyright (c) 2011, Oracle Corpn. All Rights Reserved.
+Copyright (c) 2011, 2013, Oracle Corpn. All Rights Reserved.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
diff --git a/storage/innobase/include/ut0bh.ic b/storage/innobase/include/ut0bh.ic
index a604237665d..b11de5b8b3e 100644
--- a/storage/innobase/include/ut0bh.ic
+++ b/storage/innobase/include/ut0bh.ic
@@ -1,6 +1,6 @@
/***************************************************************************//**
-Copyright (c) 2011, Oracle and/or its affiliates. All Rights Reserved.
+Copyright (c) 2011, 2013, Oracle and/or its affiliates. All Rights Reserved.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software