Commit 5a8e734b authored by monty@hundin.mysql.fi's avatar monty@hundin.mysql.fi

Upgrade TL_WRITE_CONCURRENT_INSERT to TL_WRITE_LOW_PRIORITY if

--low-priority-updates is used and the file has holes.
parent 0fb2e24a
...@@ -24702,7 +24702,7 @@ The meanings of the configuration parameters are the following: ...@@ -24702,7 +24702,7 @@ The meanings of the configuration parameters are the following:
@multitable @columnfractions .30 .70 @multitable @columnfractions .30 .70
@item @code{innodb_data_home_dir} @tab @item @code{innodb_data_home_dir} @tab
The common part of the directory path for all innobase data files. The common part of the directory path for all InnoDB data files.
@item @code{innodb_data_file_path} @tab @item @code{innodb_data_file_path} @tab
Paths to individual data files and their sizes. The full directory path Paths to individual data files and their sizes. The full directory path
to each data file is acquired by concatenating innodb_data_home_dir to to each data file is acquired by concatenating innodb_data_home_dir to
...@@ -45728,6 +45728,8 @@ not yet 100% confident in this code. ...@@ -45728,6 +45728,8 @@ not yet 100% confident in this code.
@appendixsubsec Changes in release 3.23.40 @appendixsubsec Changes in release 3.23.40
@itemize @bullet @itemize @bullet
@item @item
Fixed problem with @code{--low-priority-updates} and @code{INSERT}'s.
@item
Added @code{slave_wait_timeout} for replication. Added @code{slave_wait_timeout} for replication.
@item @item
Fixed problem with @code{UPDATE} and BDB tables. Fixed problem with @code{UPDATE} and BDB tables.
...@@ -65,6 +65,7 @@ enum thr_lock_type { TL_IGNORE=-1, ...@@ -65,6 +65,7 @@ enum thr_lock_type { TL_IGNORE=-1,
extern ulong max_write_lock_count; extern ulong max_write_lock_count;
extern my_bool thr_lock_inited; extern my_bool thr_lock_inited;
extern enum thr_lock_type thr_upgraded_concurrent_insert_lock;
typedef struct st_thr_lock_data { typedef struct st_thr_lock_data {
pthread_t thread; pthread_t thread;
......
...@@ -85,6 +85,7 @@ multiple read locks. ...@@ -85,6 +85,7 @@ multiple read locks.
my_bool thr_lock_inited=0; my_bool thr_lock_inited=0;
ulong locks_immediate = 0L, locks_waited = 0L; ulong locks_immediate = 0L, locks_waited = 0L;
enum thr_lock_type thr_upgraded_concurrent_insert_lock = TL_WRITE;
/* The following constants are only for debug output */ /* The following constants are only for debug output */
#define MAX_THREADS 100 #define MAX_THREADS 100
...@@ -514,7 +515,7 @@ int thr_lock(THR_LOCK_DATA *data,enum thr_lock_type lock_type) ...@@ -514,7 +515,7 @@ int thr_lock(THR_LOCK_DATA *data,enum thr_lock_type lock_type)
} }
} }
else if (lock_type == TL_WRITE_CONCURRENT_INSERT && ! lock->check_status) else if (lock_type == TL_WRITE_CONCURRENT_INSERT && ! lock->check_status)
data->type=lock_type= TL_WRITE; /* not supported */ data->type=lock_type= thr_upgraded_concurrent_insert_lock;
if (lock->write.data) /* If there is a write lock */ if (lock->write.data) /* If there is a write lock */
{ {
...@@ -556,7 +557,7 @@ int thr_lock(THR_LOCK_DATA *data,enum thr_lock_type lock_type) ...@@ -556,7 +557,7 @@ int thr_lock(THR_LOCK_DATA *data,enum thr_lock_type lock_type)
{ /* no scheduled write locks */ { /* no scheduled write locks */
if (lock_type == TL_WRITE_CONCURRENT_INSERT && if (lock_type == TL_WRITE_CONCURRENT_INSERT &&
(*lock->check_status)(data->status_param)) (*lock->check_status)(data->status_param))
data->type=lock_type=TL_WRITE; /* Upgrade lock */ data->type=lock_type= thr_upgraded_concurrent_insert_lock;
if (!lock->read.data || if (!lock->read.data ||
(lock_type <= TL_WRITE_DELAYED && (lock_type <= TL_WRITE_DELAYED &&
...@@ -943,10 +944,10 @@ my_bool thr_upgrade_write_delay_lock(THR_LOCK_DATA *data) ...@@ -943,10 +944,10 @@ my_bool thr_upgrade_write_delay_lock(THR_LOCK_DATA *data)
DBUG_ENTER("thr_upgrade_write_delay_lock"); DBUG_ENTER("thr_upgrade_write_delay_lock");
pthread_mutex_lock(&lock->mutex); pthread_mutex_lock(&lock->mutex);
if (data->type == TL_UNLOCK || data->type == TL_WRITE) /* Aborted */ if (data->type == TL_UNLOCK || data->type >= TL_WRITE_LOW_PRIORITY)
{ {
pthread_mutex_unlock(&lock->mutex); pthread_mutex_unlock(&lock->mutex);
DBUG_RETURN(data->type == TL_UNLOCK); DBUG_RETURN(data->type == TL_UNLOCK); /* Test if Aborted */
} }
check_locks(lock,"before upgrading lock",0); check_locks(lock,"before upgrading lock",0);
/* TODO: Upgrade to TL_WRITE_CONCURRENT_INSERT in some cases */ /* TODO: Upgrade to TL_WRITE_CONCURRENT_INSERT in some cases */
......
...@@ -3563,6 +3563,7 @@ static void get_options(int argc,char **argv) ...@@ -3563,6 +3563,7 @@ static void get_options(int argc,char **argv)
break; break;
case OPT_LOW_PRIORITY_UPDATES: case OPT_LOW_PRIORITY_UPDATES:
thd_startup_options|=OPTION_LOW_PRIORITY_UPDATES; thd_startup_options|=OPTION_LOW_PRIORITY_UPDATES;
thr_upgraded_concurrent_insert_lock= TL_WRITE_LOW_PRIORITY;
low_priority_updates=1; low_priority_updates=1;
break; break;
case OPT_BOOTSTRAP: case OPT_BOOTSTRAP:
......
...@@ -871,6 +871,7 @@ static pthread_handler_decl(handle_delayed_insert,arg) ...@@ -871,6 +871,7 @@ static pthread_handler_decl(handle_delayed_insert,arg)
/* Add thread to THD list so that's it's visible in 'show processlist' */ /* Add thread to THD list so that's it's visible in 'show processlist' */
pthread_mutex_lock(&LOCK_thread_count); pthread_mutex_lock(&LOCK_thread_count);
thd->thread_id=thread_id++; thd->thread_id=thread_id++;
thd->end_time();
threads.append(thd); threads.append(thd);
pthread_mutex_unlock(&LOCK_thread_count); pthread_mutex_unlock(&LOCK_thread_count);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment