Commit c23e5a83 authored by unknown's avatar unknown

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
parent 7a8ce131
...@@ -448,8 +448,10 @@ struct hostent *my_gethostbyname_r(const char *name, ...@@ -448,8 +448,10 @@ struct hostent *my_gethostbyname_r(const char *name,
#if defined(HPUX) && !defined(DONT_REMAP_PTHREAD_FUNCTIONS) #if defined(HPUX) && !defined(DONT_REMAP_PTHREAD_FUNCTIONS)
#define pthread_cond_timedwait(a,b,c) my_pthread_cond_timedwait((a),(b),(c)) #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, int my_pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex,
struct timespec *abstime); struct timespec *abstime);
int my_pthread_mutex_trylock(pthread_mutex_t *mutex);
#endif #endif
/* safe_mutex adds checking to mutex for easier debugging */ /* safe_mutex adds checking to mutex for easier debugging */
......
...@@ -774,7 +774,7 @@ EOF ...@@ -774,7 +774,7 @@ EOF
else else
manager_launch master $MYSQLD $master_args manager_launch master $MYSQLD $master_args
fi 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 wait_for_master=$SLEEP_TIME_FOR_SECOND_MASTER
MASTER_RUNNING=1 MASTER_RUNNING=1
} }
...@@ -874,7 +874,7 @@ start_slave() ...@@ -874,7 +874,7 @@ start_slave()
manager_launch $slave_ident $SLAVE_MYSQLD $slave_args manager_launch $slave_ident $SLAVE_MYSQLD $slave_args
fi fi
eval "SLAVE$1_RUNNING=1" 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 wait_for_slave=$SLEEP_TIME_FOR_SECOND_SLAVE
} }
......
...@@ -376,3 +376,34 @@ show status like "Qcache_queries_in_cache"; ...@@ -376,3 +376,34 @@ show status like "Qcache_queries_in_cache";
Variable_name Value Variable_name Value
Qcache_queries_in_cache 2 Qcache_queries_in_cache 2
drop table t1; 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; ...@@ -247,6 +247,7 @@ select * from foo.t1;
show status like "Qcache_queries_in_cache"; show status like "Qcache_queries_in_cache";
drop database foo; drop database foo;
show status like "Qcache_queries_in_cache"; show status like "Qcache_queries_in_cache";
# #
# Charset convertion (cp1251_koi8 always present) # Charset convertion (cp1251_koi8 always present)
# #
...@@ -263,3 +264,22 @@ drop table t1; ...@@ -263,3 +264,22 @@ drop table t1;
# machines :( # machines :(
#show variables like "query_cache_size"; #show variables like "query_cache_size";
#show status like "Qcache_free_memory"; #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, ...@@ -471,6 +471,8 @@ struct hostent *my_gethostbyname_r(const char *name,
this has to be added here. this has to be added here.
*****************************************************************************/ *****************************************************************************/
#ifdef HPUX
int my_pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex, int my_pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex,
struct timespec *abstime) struct timespec *abstime)
{ {
...@@ -483,6 +485,18 @@ int my_pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex, ...@@ -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 */ /* Some help functions */
int pthread_no_free(void *not_used __attribute__((unused))) int pthread_no_free(void *not_used __attribute__((unused)))
......
...@@ -191,10 +191,12 @@ void init_slave_list() ...@@ -191,10 +191,12 @@ void init_slave_list()
void end_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); hash_free(&slave_list);
pthread_mutex_unlock(&LOCK_slave_list);
pthread_mutex_destroy(&LOCK_slave_list); pthread_mutex_destroy(&LOCK_slave_list);
}
} }
static int find_target_pos(LEX_MASTER_INFO* mi, IO_CACHE* log, char* errmsg) static int find_target_pos(LEX_MASTER_INFO* mi, IO_CACHE* log, char* errmsg)
......
...@@ -1227,6 +1227,7 @@ bool delayed_insert::handle_inserts(void) ...@@ -1227,6 +1227,7 @@ bool delayed_insert::handle_inserts(void)
sql_print_error("%s",thd.net.last_error); sql_print_error("%s",thd.net.last_error);
goto err; goto err;
} }
query_cache.invalidate(table);
if (thr_reschedule_write_lock(*thd.lock->locks)) if (thr_reschedule_write_lock(*thd.lock->locks))
{ {
/* This should never happen */ /* This should never happen */
...@@ -1251,6 +1252,7 @@ bool delayed_insert::handle_inserts(void) ...@@ -1251,6 +1252,7 @@ bool delayed_insert::handle_inserts(void)
sql_print_error("%s",thd.net.last_error); sql_print_error("%s",thd.net.last_error);
goto err; goto err;
} }
query_cache.invalidate(table);
pthread_mutex_lock(&mutex); pthread_mutex_lock(&mutex);
DBUG_RETURN(0); DBUG_RETURN(0);
......
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