mirror of
https://github.com/MariaDB/server.git
synced 2025-01-27 01:04:19 +01:00
Merge branches/innodb+ from SVN.
This commit is contained in:
commit
69d2cff5b3
13 changed files with 491 additions and 383 deletions
|
@ -232,7 +232,7 @@ SET(INNOBASE_SOURCES btr/btr0btr.c btr/btr0cur.c btr/btr0pcur.c btr/btr0sea.c
|
||||||
rem/rem0cmp.c rem/rem0rec.c
|
rem/rem0cmp.c rem/rem0rec.c
|
||||||
row/row0ext.c row/row0ins.c row/row0merge.c row/row0mysql.c row/row0purge.c row/row0row.c
|
row/row0ext.c row/row0ins.c row/row0merge.c row/row0mysql.c row/row0purge.c row/row0row.c
|
||||||
row/row0sel.c row/row0uins.c row/row0umod.c row/row0undo.c row/row0upd.c row/row0vers.c
|
row/row0sel.c row/row0uins.c row/row0umod.c row/row0undo.c row/row0upd.c row/row0vers.c
|
||||||
srv/srv0que.c srv/srv0srv.c srv/srv0start.c
|
srv/srv0srv.c srv/srv0start.c
|
||||||
sync/sync0arr.c sync/sync0rw.c sync/sync0sync.c
|
sync/sync0arr.c sync/sync0rw.c sync/sync0sync.c
|
||||||
thr/thr0loc.c
|
thr/thr0loc.c
|
||||||
trx/trx0i_s.c trx/trx0purge.c trx/trx0rec.c trx/trx0roll.c trx/trx0rseg.c
|
trx/trx0i_s.c trx/trx0purge.c trx/trx0rec.c trx/trx0roll.c trx/trx0rseg.c
|
||||||
|
|
|
@ -174,7 +174,6 @@ noinst_HEADERS= \
|
||||||
include/row0upd.ic \
|
include/row0upd.ic \
|
||||||
include/row0vers.h \
|
include/row0vers.h \
|
||||||
include/row0vers.ic \
|
include/row0vers.ic \
|
||||||
include/srv0que.h \
|
|
||||||
include/srv0srv.h \
|
include/srv0srv.h \
|
||||||
include/srv0srv.ic \
|
include/srv0srv.ic \
|
||||||
include/srv0start.h \
|
include/srv0start.h \
|
||||||
|
@ -299,7 +298,6 @@ libinnobase_a_SOURCES= \
|
||||||
row/row0undo.c \
|
row/row0undo.c \
|
||||||
row/row0upd.c \
|
row/row0upd.c \
|
||||||
row/row0vers.c \
|
row/row0vers.c \
|
||||||
srv/srv0que.c \
|
|
||||||
srv/srv0srv.c \
|
srv/srv0srv.c \
|
||||||
srv/srv0start.c \
|
srv/srv0start.c \
|
||||||
sync/sync0arr.c \
|
sync/sync0arr.c \
|
||||||
|
|
|
@ -381,6 +381,9 @@ struct que_thr_struct{
|
||||||
thus far */
|
thus far */
|
||||||
ulint lock_state; /*!< lock state of thread (table or
|
ulint lock_state; /*!< lock state of thread (table or
|
||||||
row) */
|
row) */
|
||||||
|
struct srv_slot_struct*
|
||||||
|
slot; /* The thread slot in the wait
|
||||||
|
array in srv_sys_t */
|
||||||
};
|
};
|
||||||
|
|
||||||
#define QUE_THR_MAGIC_N 8476583
|
#define QUE_THR_MAGIC_N 8476583
|
||||||
|
|
|
@ -1,42 +0,0 @@
|
||||||
/*****************************************************************************
|
|
||||||
|
|
||||||
Copyright (c) 1996, 2009, Innobase Oy. 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
|
|
||||||
Foundation; version 2 of the License.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
||||||
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along with
|
|
||||||
this program; if not, write to the Free Software Foundation, Inc., 59 Temple
|
|
||||||
Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
|
|
||||||
*****************************************************************************/
|
|
||||||
|
|
||||||
/**************************************************//**
|
|
||||||
@file include/srv0que.h
|
|
||||||
Server query execution
|
|
||||||
|
|
||||||
Created 6/5/1996 Heikki Tuuri
|
|
||||||
*******************************************************/
|
|
||||||
|
|
||||||
#ifndef srv0que_h
|
|
||||||
#define srv0que_h
|
|
||||||
|
|
||||||
#include "univ.i"
|
|
||||||
#include "que0types.h"
|
|
||||||
|
|
||||||
/**********************************************************************//**
|
|
||||||
Enqueues a task to server task queue and releases a worker thread, if there
|
|
||||||
is a suspended one. */
|
|
||||||
UNIV_INTERN
|
|
||||||
void
|
|
||||||
srv_que_task_enqueue_low(
|
|
||||||
/*=====================*/
|
|
||||||
que_thr_t* thr); /*!< in: query thread */
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
|
@ -239,7 +239,6 @@ extern ibool srv_print_latch_waits;
|
||||||
# define srv_print_latch_waits FALSE
|
# define srv_print_latch_waits FALSE
|
||||||
#endif /* UNIV_DEBUG */
|
#endif /* UNIV_DEBUG */
|
||||||
|
|
||||||
extern ulint srv_activity_count;
|
|
||||||
extern ulint srv_fatal_semaphore_wait_threshold;
|
extern ulint srv_fatal_semaphore_wait_threshold;
|
||||||
extern ulint srv_dml_needed_delay;
|
extern ulint srv_dml_needed_delay;
|
||||||
|
|
||||||
|
@ -314,12 +313,6 @@ typedef struct export_var_struct export_struc;
|
||||||
/** Status variables to be passed to MySQL */
|
/** Status variables to be passed to MySQL */
|
||||||
extern export_struc export_vars;
|
extern export_struc export_vars;
|
||||||
|
|
||||||
/** The server system */
|
|
||||||
typedef struct srv_sys_struct srv_sys_t;
|
|
||||||
|
|
||||||
/** The server system */
|
|
||||||
extern srv_sys_t* srv_sys;
|
|
||||||
|
|
||||||
# ifdef UNIV_PFS_THREAD
|
# ifdef UNIV_PFS_THREAD
|
||||||
/* Keys to register InnoDB threads with performance schema */
|
/* Keys to register InnoDB threads with performance schema */
|
||||||
extern mysql_pfs_key_t trx_rollback_clean_thread_key;
|
extern mysql_pfs_key_t trx_rollback_clean_thread_key;
|
||||||
|
@ -420,6 +413,8 @@ enum srv_thread_type {
|
||||||
be biggest) */
|
be biggest) */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct srv_slot_struct;
|
||||||
|
|
||||||
/*********************************************************************//**
|
/*********************************************************************//**
|
||||||
Boots Innobase server.
|
Boots Innobase server.
|
||||||
@return DB_SUCCESS or error code */
|
@return DB_SUCCESS or error code */
|
||||||
|
@ -470,17 +465,6 @@ srv_set_io_thread_op_info(
|
||||||
const char* str); /*!< in: constant char string describing the
|
const char* str); /*!< in: constant char string describing the
|
||||||
state */
|
state */
|
||||||
/*********************************************************************//**
|
/*********************************************************************//**
|
||||||
Releases threads of the type given from suspension in the thread table.
|
|
||||||
NOTE! The server mutex has to be reserved by the caller!
|
|
||||||
@return number of threads released: this may be less than n if not
|
|
||||||
enough threads were suspended at the moment */
|
|
||||||
UNIV_INTERN
|
|
||||||
ulint
|
|
||||||
srv_release_threads(
|
|
||||||
/*================*/
|
|
||||||
enum srv_thread_type type, /*!< in: thread type */
|
|
||||||
ulint n); /*!< in: number of threads to release */
|
|
||||||
/*********************************************************************//**
|
|
||||||
The master thread controlling the server.
|
The master thread controlling the server.
|
||||||
@return a dummy parameter */
|
@return a dummy parameter */
|
||||||
UNIV_INTERN
|
UNIV_INTERN
|
||||||
|
@ -627,6 +611,13 @@ void
|
||||||
srv_export_innodb_status(void);
|
srv_export_innodb_status(void);
|
||||||
/*==========================*/
|
/*==========================*/
|
||||||
|
|
||||||
|
/******************************************************************//**
|
||||||
|
Increment the server activity counter. */
|
||||||
|
UNIV_INTERN
|
||||||
|
void
|
||||||
|
srv_inc_activity_count(void);
|
||||||
|
/*=========================*/
|
||||||
|
|
||||||
/*********************************************************************//**
|
/*********************************************************************//**
|
||||||
Asynchronous purge thread.
|
Asynchronous purge thread.
|
||||||
@return a dummy parameter */
|
@return a dummy parameter */
|
||||||
|
@ -636,11 +627,23 @@ srv_purge_thread(
|
||||||
/*=============*/
|
/*=============*/
|
||||||
void* arg __attribute__((unused))); /*!< in: a dummy parameter
|
void* arg __attribute__((unused))); /*!< in: a dummy parameter
|
||||||
required by os_thread_create */
|
required by os_thread_create */
|
||||||
/** Thread slot in the thread table */
|
|
||||||
typedef struct srv_slot_struct srv_slot_t;
|
|
||||||
|
|
||||||
/** Thread table is an array of slots */
|
/**********************************************************************//**
|
||||||
typedef srv_slot_t srv_table_t;
|
Enqueues a task to server task queue and releases a worker thread, if there
|
||||||
|
is a suspended one. */
|
||||||
|
UNIV_INTERN
|
||||||
|
void
|
||||||
|
srv_que_task_enqueue_low(
|
||||||
|
/*=====================*/
|
||||||
|
que_thr_t* thr); /*!< in: query thread */
|
||||||
|
|
||||||
|
/**********************************************************************//**
|
||||||
|
Check whether the master thread is active.
|
||||||
|
@return FALSE is it is not active. */
|
||||||
|
UNIV_INTERN
|
||||||
|
ibool
|
||||||
|
srv_is_master_thread_active(void);
|
||||||
|
/*==============================*/
|
||||||
|
|
||||||
/** Status variables to be passed to MySQL */
|
/** Status variables to be passed to MySQL */
|
||||||
struct export_var_struct{
|
struct export_var_struct{
|
||||||
|
@ -696,14 +699,6 @@ struct export_var_struct{
|
||||||
ulint innodb_rows_deleted; /*!< srv_n_rows_deleted */
|
ulint innodb_rows_deleted; /*!< srv_n_rows_deleted */
|
||||||
};
|
};
|
||||||
|
|
||||||
/** The server system struct */
|
|
||||||
struct srv_sys_struct{
|
|
||||||
srv_table_t* threads; /*!< server thread table */
|
|
||||||
UT_LIST_BASE_NODE_T(que_thr_t)
|
|
||||||
tasks; /*!< task queue */
|
|
||||||
};
|
|
||||||
|
|
||||||
extern ulint srv_n_threads_active[];
|
|
||||||
#else /* !UNIV_HOTBACKUP */
|
#else /* !UNIV_HOTBACKUP */
|
||||||
# define srv_use_adaptive_hash_indexes FALSE
|
# define srv_use_adaptive_hash_indexes FALSE
|
||||||
# define srv_use_checksums TRUE
|
# define srv_use_checksums TRUE
|
||||||
|
|
|
@ -105,6 +105,7 @@ extern mysql_pfs_key_t rw_lock_mutex_key;
|
||||||
extern mysql_pfs_key_t srv_dict_tmpfile_mutex_key;
|
extern mysql_pfs_key_t srv_dict_tmpfile_mutex_key;
|
||||||
extern mysql_pfs_key_t srv_innodb_monitor_mutex_key;
|
extern mysql_pfs_key_t srv_innodb_monitor_mutex_key;
|
||||||
extern mysql_pfs_key_t srv_misc_tmpfile_mutex_key;
|
extern mysql_pfs_key_t srv_misc_tmpfile_mutex_key;
|
||||||
|
extern mysql_pfs_key_t srv_threads_mutex_key;
|
||||||
extern mysql_pfs_key_t srv_monitor_file_mutex_key;
|
extern mysql_pfs_key_t srv_monitor_file_mutex_key;
|
||||||
extern mysql_pfs_key_t syn_arr_mutex_key;
|
extern mysql_pfs_key_t syn_arr_mutex_key;
|
||||||
# ifdef UNIV_SYNC_DEBUG
|
# ifdef UNIV_SYNC_DEBUG
|
||||||
|
@ -587,6 +588,9 @@ Kernel mutex If a kernel operation needs a file
|
||||||
| fsp x-latch before acquiring the kernel
|
| fsp x-latch before acquiring the kernel
|
||||||
| mutex.
|
| mutex.
|
||||||
V
|
V
|
||||||
|
Threads mutex Thread scheduling mutex
|
||||||
|
|
|
||||||
|
V
|
||||||
Search system mutex
|
Search system mutex
|
||||||
|
|
|
|
||||||
V
|
V
|
||||||
|
@ -657,8 +661,9 @@ or row lock! */
|
||||||
/*------------------------------------- MySQL binlog mutex */
|
/*------------------------------------- MySQL binlog mutex */
|
||||||
/*-------------------------------*/
|
/*-------------------------------*/
|
||||||
#define SYNC_KERNEL 300
|
#define SYNC_KERNEL 300
|
||||||
#define SYNC_REC_LOCK 299
|
#define SYNC_THREADS 299
|
||||||
#define SYNC_TRX_LOCK_HEAP 298
|
#define SYNC_REC_LOCK 298
|
||||||
|
#define SYNC_TRX_LOCK_HEAP 297
|
||||||
#define SYNC_TRX_SYS_HEADER 290
|
#define SYNC_TRX_SYS_HEADER 290
|
||||||
#define SYNC_LOG 170
|
#define SYNC_LOG 170
|
||||||
#define SYNC_LOG_FLUSH_ORDER 147
|
#define SYNC_LOG_FLUSH_ORDER 147
|
||||||
|
|
|
@ -3131,17 +3131,14 @@ loop:
|
||||||
return; /* We SKIP ALL THE REST !! */
|
return; /* We SKIP ALL THE REST !! */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mutex_exit(&kernel_mutex);
|
||||||
|
|
||||||
/* Check that the master thread is suspended */
|
/* Check that the master thread is suspended */
|
||||||
|
|
||||||
if (srv_n_threads_active[SRV_MASTER] != 0) {
|
if (srv_is_master_thread_active()) {
|
||||||
|
|
||||||
mutex_exit(&kernel_mutex);
|
|
||||||
|
|
||||||
goto loop;
|
goto loop;
|
||||||
}
|
}
|
||||||
|
|
||||||
mutex_exit(&kernel_mutex);
|
|
||||||
|
|
||||||
mutex_enter(&(log_sys->mutex));
|
mutex_enter(&(log_sys->mutex));
|
||||||
|
|
||||||
if (log_sys->n_pending_checkpoint_writes
|
if (log_sys->n_pending_checkpoint_writes
|
||||||
|
@ -3199,18 +3196,14 @@ loop:
|
||||||
|
|
||||||
mutex_exit(&(log_sys->mutex));
|
mutex_exit(&(log_sys->mutex));
|
||||||
|
|
||||||
mutex_enter(&kernel_mutex);
|
|
||||||
/* Check that the master thread has stayed suspended */
|
/* Check that the master thread has stayed suspended */
|
||||||
if (srv_n_threads_active[SRV_MASTER] != 0) {
|
if (srv_is_master_thread_active()) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"InnoDB: Warning: the master thread woke up"
|
"InnoDB: Warning: the master thread woke up"
|
||||||
" during shutdown\n");
|
" during shutdown\n");
|
||||||
|
|
||||||
mutex_exit(&kernel_mutex);
|
|
||||||
|
|
||||||
goto loop;
|
goto loop;
|
||||||
}
|
}
|
||||||
mutex_exit(&kernel_mutex);
|
|
||||||
|
|
||||||
fil_flush_file_spaces(FIL_TABLESPACE);
|
fil_flush_file_spaces(FIL_TABLESPACE);
|
||||||
fil_flush_file_spaces(FIL_LOG);
|
fil_flush_file_spaces(FIL_LOG);
|
||||||
|
@ -3228,7 +3221,8 @@ loop:
|
||||||
srv_shutdown_state = SRV_SHUTDOWN_LAST_PHASE;
|
srv_shutdown_state = SRV_SHUTDOWN_LAST_PHASE;
|
||||||
|
|
||||||
/* Make some checks that the server really is quiet */
|
/* Make some checks that the server really is quiet */
|
||||||
ut_a(srv_n_threads_active[SRV_MASTER] == 0);
|
ut_a(!srv_is_master_thread_active());
|
||||||
|
|
||||||
ut_a(buf_all_freed());
|
ut_a(buf_all_freed());
|
||||||
ut_a(lsn == log_sys->lsn);
|
ut_a(lsn == log_sys->lsn);
|
||||||
|
|
||||||
|
@ -3249,7 +3243,8 @@ loop:
|
||||||
fil_close_all_files();
|
fil_close_all_files();
|
||||||
|
|
||||||
/* Make some checks that the server really is quiet */
|
/* Make some checks that the server really is quiet */
|
||||||
ut_a(srv_n_threads_active[SRV_MASTER] == 0);
|
ut_a(!srv_is_master_thread_active());
|
||||||
|
|
||||||
ut_a(buf_all_freed());
|
ut_a(buf_all_freed());
|
||||||
ut_a(lsn == log_sys->lsn);
|
ut_a(lsn == log_sys->lsn);
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,7 +29,6 @@ Created 5/27/1996 Heikki Tuuri
|
||||||
#include "que0que.ic"
|
#include "que0que.ic"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "srv0que.h"
|
|
||||||
#include "usr0sess.h"
|
#include "usr0sess.h"
|
||||||
#include "trx0trx.h"
|
#include "trx0trx.h"
|
||||||
#include "trx0roll.h"
|
#include "trx0roll.h"
|
||||||
|
@ -311,7 +310,9 @@ que_thr_end_wait_no_next_thr(
|
||||||
/* In MySQL we let the OS thread (not just the query thread) to wait
|
/* In MySQL we let the OS thread (not just the query thread) to wait
|
||||||
for the lock to be released: */
|
for the lock to be released: */
|
||||||
|
|
||||||
srv_release_mysql_thread_if_suspended(thr);
|
if (thr != NULL) {
|
||||||
|
srv_release_mysql_thread_if_suspended(thr);
|
||||||
|
}
|
||||||
|
|
||||||
/* srv_que_task_enqueue_low(thr); */
|
/* srv_que_task_enqueue_low(thr); */
|
||||||
}
|
}
|
||||||
|
|
|
@ -341,7 +341,7 @@ row_undo_step(
|
||||||
|
|
||||||
ut_ad(thr);
|
ut_ad(thr);
|
||||||
|
|
||||||
srv_activity_count++;
|
srv_inc_activity_count();
|
||||||
|
|
||||||
trx = thr_get_trx(thr);
|
trx = thr_get_trx(thr);
|
||||||
|
|
||||||
|
|
|
@ -1,49 +0,0 @@
|
||||||
/*****************************************************************************
|
|
||||||
|
|
||||||
Copyright (c) 1996, 2009, Innobase Oy. 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
|
|
||||||
Foundation; version 2 of the License.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
||||||
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along with
|
|
||||||
this program; if not, write to the Free Software Foundation, Inc., 59 Temple
|
|
||||||
Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
|
|
||||||
*****************************************************************************/
|
|
||||||
|
|
||||||
/**************************************************//**
|
|
||||||
@file srv/srv0que.c
|
|
||||||
Server query execution
|
|
||||||
|
|
||||||
Created 6/5/1996 Heikki Tuuri
|
|
||||||
*******************************************************/
|
|
||||||
|
|
||||||
#include "srv0que.h"
|
|
||||||
|
|
||||||
#include "srv0srv.h"
|
|
||||||
#include "sync0sync.h"
|
|
||||||
#include "os0thread.h"
|
|
||||||
#include "usr0sess.h"
|
|
||||||
#include "que0que.h"
|
|
||||||
|
|
||||||
/**********************************************************************//**
|
|
||||||
Enqueues a task to server task queue and releases a worker thread, if there
|
|
||||||
is a suspended one. */
|
|
||||||
UNIV_INTERN
|
|
||||||
void
|
|
||||||
srv_que_task_enqueue_low(
|
|
||||||
/*=====================*/
|
|
||||||
que_thr_t* thr) /*!< in: query thread */
|
|
||||||
{
|
|
||||||
ut_ad(thr);
|
|
||||||
ut_ad(mutex_own(&kernel_mutex));
|
|
||||||
|
|
||||||
UT_LIST_ADD_LAST(queue, srv_sys->tasks, thr);
|
|
||||||
|
|
||||||
srv_release_threads(SRV_WORKER, 1);
|
|
||||||
}
|
|
File diff suppressed because it is too large
Load diff
|
@ -1167,6 +1167,7 @@ sync_thread_add_level(
|
||||||
case SYNC_SEARCH_SYS_CONF:
|
case SYNC_SEARCH_SYS_CONF:
|
||||||
case SYNC_TRX_LOCK_HEAP:
|
case SYNC_TRX_LOCK_HEAP:
|
||||||
case SYNC_KERNEL:
|
case SYNC_KERNEL:
|
||||||
|
case SYNC_THREADS:
|
||||||
case SYNC_IBUF_BITMAP_MUTEX:
|
case SYNC_IBUF_BITMAP_MUTEX:
|
||||||
case SYNC_RSEG:
|
case SYNC_RSEG:
|
||||||
case SYNC_TRX_UNDO:
|
case SYNC_TRX_UNDO:
|
||||||
|
|
|
@ -37,7 +37,6 @@ Created 3/26/1996 Heikki Tuuri
|
||||||
#include "trx0rec.h"
|
#include "trx0rec.h"
|
||||||
#include "que0que.h"
|
#include "que0que.h"
|
||||||
#include "usr0sess.h"
|
#include "usr0sess.h"
|
||||||
#include "srv0que.h"
|
|
||||||
#include "srv0start.h"
|
#include "srv0start.h"
|
||||||
#include "row0undo.h"
|
#include "row0undo.h"
|
||||||
#include "row0mysql.h"
|
#include "row0mysql.h"
|
||||||
|
|
Loading…
Add table
Reference in a new issue