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,
#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 */
......
......@@ -674,9 +674,9 @@ manager_term()
ident=$1
shift
if [ $USE_MANAGER = 0 ] ; then
$MYSQLADMIN --no-defaults -uroot --socket=$MYSQL_TMP_DIR/$ident.sock -O \
connect_timeout=5 -O shutdown_timeout=20 shutdown >/dev/null 2>&1
return
$MYSQLADMIN --no-defaults -uroot --socket=$MYSQL_TMP_DIR/$ident.sock -O \
connect_timeout=5 -O shutdown_timeout=20 shutdown >/dev/null 2>&1
return
fi
$MYSQL_MANAGER_CLIENT $MANAGER_QUIET_OPT --user=$MYSQL_MANAGER_USER \
--password=$MYSQL_MANAGER_PW --port=$MYSQL_MANAGER_PORT <<EOF
......@@ -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,10 +191,12 @@ void init_slave_list()
void end_slave_list()
{
pthread_mutex_lock(&LOCK_slave_list);
hash_free(&slave_list);
pthread_mutex_unlock(&LOCK_slave_list);
pthread_mutex_destroy(&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_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);
......
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