mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Fix insert delated + query cache.
Fix pthread_mutex_trylock on HPUX (needed for query cache). include/my_pthread.h: Fixed mutex problem with pthread_mutex_trylock on HPUX. mysql-test/mysql-test-run.sh: Wait for .pid file instead of .sock, because .pid is created later. mysql-test/r/query_cache.result: Test insert delated + query cache mysql-test/t/query_cache.test: Test insert delated + query cache mysys/my_pthread.c: Fixed mutex problem with pthread_mutex_trylock on HPUX. sql/repl_failsafe.cc: Safety sql/sql_insert.cc: Fix insert delated + query cache
This commit is contained in:
@ -448,8 +448,10 @@ struct hostent *my_gethostbyname_r(const char *name,
|
||||
|
||||
#if defined(HPUX) && !defined(DONT_REMAP_PTHREAD_FUNCTIONS)
|
||||
#define pthread_cond_timedwait(a,b,c) my_pthread_cond_timedwait((a),(b),(c))
|
||||
#define pthread_mutex_trylock(a) my_pthread_mutex_trylock((a))
|
||||
int my_pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex,
|
||||
struct timespec *abstime);
|
||||
int my_pthread_mutex_trylock(pthread_mutex_t *mutex);
|
||||
#endif
|
||||
|
||||
/* safe_mutex adds checking to mutex for easier debugging */
|
||||
|
@ -774,7 +774,7 @@ EOF
|
||||
else
|
||||
manager_launch master $MYSQLD $master_args
|
||||
fi
|
||||
sleep_until_file_exists $MASTER_MYSOCK $wait_for_master
|
||||
sleep_until_file_exists $MASTER_MYPID $wait_for_master
|
||||
wait_for_master=$SLEEP_TIME_FOR_SECOND_MASTER
|
||||
MASTER_RUNNING=1
|
||||
}
|
||||
@ -874,7 +874,7 @@ start_slave()
|
||||
manager_launch $slave_ident $SLAVE_MYSQLD $slave_args
|
||||
fi
|
||||
eval "SLAVE$1_RUNNING=1"
|
||||
sleep_until_file_exists $slave_sock $wait_for_slave
|
||||
sleep_until_file_exists $slave_pid $wait_for_slave
|
||||
wait_for_slave=$SLEEP_TIME_FOR_SECOND_SLAVE
|
||||
}
|
||||
|
||||
|
@ -376,3 +376,34 @@ show status like "Qcache_queries_in_cache";
|
||||
Variable_name Value
|
||||
Qcache_queries_in_cache 2
|
||||
drop table t1;
|
||||
flush query cache;
|
||||
reset query cache;
|
||||
create table t1 (a int not null);
|
||||
insert into t1 values (1),(2),(3);
|
||||
select * from t1;
|
||||
a
|
||||
1
|
||||
2
|
||||
3
|
||||
select * from t1;
|
||||
a
|
||||
1
|
||||
2
|
||||
3
|
||||
show status like "Qcache_queries_in_cache";
|
||||
Variable_name Value
|
||||
Qcache_queries_in_cache 1
|
||||
insert delayed into t1 values (4);
|
||||
select a from t1;
|
||||
a
|
||||
1
|
||||
2
|
||||
3
|
||||
4
|
||||
show status like "Qcache_queries_in_cache";
|
||||
Variable_name Value
|
||||
Qcache_queries_in_cache 1
|
||||
drop table t1;
|
||||
show status like "Qcache_queries_in_cache";
|
||||
Variable_name Value
|
||||
Qcache_queries_in_cache 0
|
||||
|
@ -247,6 +247,7 @@ select * from foo.t1;
|
||||
show status like "Qcache_queries_in_cache";
|
||||
drop database foo;
|
||||
show status like "Qcache_queries_in_cache";
|
||||
|
||||
#
|
||||
# Charset convertion (cp1251_koi8 always present)
|
||||
#
|
||||
@ -263,3 +264,22 @@ drop table t1;
|
||||
# machines :(
|
||||
#show variables like "query_cache_size";
|
||||
#show status like "Qcache_free_memory";
|
||||
|
||||
#
|
||||
# Test insert delayed
|
||||
#
|
||||
|
||||
flush query cache;
|
||||
reset query cache;
|
||||
|
||||
create table t1 (a int not null);
|
||||
insert into t1 values (1),(2),(3);
|
||||
select * from t1;
|
||||
select * from t1;
|
||||
show status like "Qcache_queries_in_cache";
|
||||
insert delayed into t1 values (4);
|
||||
--sleep 5 # Wait for insert delayed to be executed.
|
||||
select a from t1;
|
||||
show status like "Qcache_queries_in_cache";
|
||||
drop table t1;
|
||||
show status like "Qcache_queries_in_cache";
|
||||
|
@ -471,6 +471,8 @@ struct hostent *my_gethostbyname_r(const char *name,
|
||||
this has to be added here.
|
||||
*****************************************************************************/
|
||||
|
||||
#ifdef HPUX
|
||||
|
||||
int my_pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex,
|
||||
struct timespec *abstime)
|
||||
{
|
||||
@ -483,6 +485,18 @@ int my_pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex,
|
||||
}
|
||||
|
||||
|
||||
int my_pthread_mutex_trylock(pthread_mutex_t *mutex)
|
||||
{
|
||||
int error=pthread_mutex_trylock(mutex);
|
||||
if (error == 1) /* Safety if the lib is fixed */
|
||||
return 0; /* Mutex was locked */
|
||||
if (error == -1) /* Safety if the lib is fixed */
|
||||
error=errno;
|
||||
return error;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/* Some help functions */
|
||||
|
||||
int pthread_no_free(void *not_used __attribute__((unused)))
|
||||
|
@ -191,11 +191,13 @@ void init_slave_list()
|
||||
|
||||
void end_slave_list()
|
||||
{
|
||||
pthread_mutex_lock(&LOCK_slave_list);
|
||||
/* No protection by a mutex needed as we are only called at shutdown */
|
||||
if (hash_inited(&slave_list))
|
||||
{
|
||||
hash_free(&slave_list);
|
||||
pthread_mutex_unlock(&LOCK_slave_list);
|
||||
pthread_mutex_destroy(&LOCK_slave_list);
|
||||
}
|
||||
}
|
||||
|
||||
static int find_target_pos(LEX_MASTER_INFO* mi, IO_CACHE* log, char* errmsg)
|
||||
{
|
||||
|
@ -1227,6 +1227,7 @@ bool delayed_insert::handle_inserts(void)
|
||||
sql_print_error("%s",thd.net.last_error);
|
||||
goto err;
|
||||
}
|
||||
query_cache.invalidate(table);
|
||||
if (thr_reschedule_write_lock(*thd.lock->locks))
|
||||
{
|
||||
/* This should never happen */
|
||||
@ -1251,6 +1252,7 @@ bool delayed_insert::handle_inserts(void)
|
||||
sql_print_error("%s",thd.net.last_error);
|
||||
goto err;
|
||||
}
|
||||
query_cache.invalidate(table);
|
||||
pthread_mutex_lock(&mutex);
|
||||
DBUG_RETURN(0);
|
||||
|
||||
|
Reference in New Issue
Block a user