Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mariadb
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
1dcca480
Commit
1dcca480
authored
Dec 30, 2002
by
vva@eagle.mysql.r18.ru
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
processing thread specific queries
parent
558ee89e
Changes
13
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
181 additions
and
15 deletions
+181
-15
BitKeeper/etc/logging_ok
BitKeeper/etc/logging_ok
+1
-0
mysql-test/r/rpl_temporary.result
mysql-test/r/rpl_temporary.result
+74
-0
mysql-test/t/rpl_temporary.test
mysql-test/t/rpl_temporary.test
+72
-0
sql/log_event.cc
sql/log_event.cc
+7
-3
sql/log_event.h
sql/log_event.h
+4
-2
sql/mysqld.cc
sql/mysqld.cc
+1
-0
sql/set_var.cc
sql/set_var.cc
+6
-0
sql/sql_base.cc
sql/sql_base.cc
+5
-4
sql/sql_class.cc
sql/sql_class.cc
+1
-1
sql/sql_class.h
sql/sql_class.h
+6
-5
sql/sql_lex.cc
sql/sql_lex.cc
+1
-0
sql/sql_lex.h
sql/sql_lex.h
+1
-0
sql/sql_table.cc
sql/sql_table.cc
+2
-0
No files found.
BitKeeper/etc/logging_ok
View file @
1dcca480
...
...
@@ -90,6 +90,7 @@ tonu@x153.internalnet
tonu@x3.internalnet
venu@myvenu.com
venu@work.mysql.com
vva@eagle.mysql.r18.ru
vva@genie.(none)
walrus@mysql.com
wax@mysql.com
...
...
mysql-test/r/rpl_temporary.result
0 → 100644
View file @
1dcca480
stop slave;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
reset master;
reset slave;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
start slave;
drop table if exists t1;
create table t1(f int);
drop table if exists t2;
create table t2(f int);
insert into t1 values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10);
create temporary table t3(f int);
insert into t3 select * from t1 where f<6;
create temporary table t3(f int);
insert into t2 select count(*) from t3;
insert into t3 select * from t1 where f>=4;
drop temporary table t3;
insert into t2 select count(*) from t3;
drop temporary table t3;
select * from t2;
f
5
7
show binlog events;
Log_name Pos Event_type Server_id Orig_log_pos Info
master-bin.000001 4 Start 1 4 Server ver: 4.1.0-alpha-debug-log, Binlog ver: 3
master-bin.000001 79 Query 1 79 use `test`; create table t1(f int)
master-bin.000001 136 Query 1 136 use `test`; create table t2(f int)
master-bin.000001 193 Query 1 193 use `test`; insert into t1 values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10)
master-bin.000001 290 Query 1 290 use `test`; create temporary table t3(f int)
master-bin.000001 357 Query 1 357 use `test`; insert into t3 select * from t1 where f<6
master-bin.000001 433 Query 1 433 use `test`; create temporary table t3(f int)
master-bin.000001 500 Query 1 500 use `test`; insert into t2 select count(*) from t3
master-bin.000001 573 Query 1 573 use `test`; drop temporary table t3
master-bin.000001 631 Query 1 631 use `test`; insert into t3 select * from t1 where f>=4
master-bin.000001 708 Query 1 708 use `test`; insert into t2 select count(*) from t3
master-bin.000001 781 Query 1 781 use `test`; drop temporary table t3
drop table if exists t1;
drop table if exists t2;
use test;
SET TIMESTAMP=1040323920;
create table t1(f int);
SET TIMESTAMP=1040323931;
create table t2(f int);
SET TIMESTAMP=1040323938;
insert into t1 values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10);
SET TIMESTAMP=1040323945;
SET @@session.pseudo_thread_id=1;
create temporary table t3(f int);
SET TIMESTAMP=1040323952;
SET @@session.pseudo_thread_id=1;
insert into t3 select * from t1 where f<6;
SET TIMESTAMP=1040324145;
SET @@session.pseudo_thread_id=2;
create temporary table t3(f int);
SET TIMESTAMP=1040324186;
SET @@session.pseudo_thread_id=1;
insert into t2 select count(*) from t3;
SET TIMESTAMP=1040324200;
SET @@session.pseudo_thread_id=2;
insert into t3 select * from t1 where f>=4;
SET TIMESTAMP=1040324211;
SET @@session.pseudo_thread_id=1;
drop temporary table t3;
SET TIMESTAMP=1040324219;
SET @@session.pseudo_thread_id=2;
insert into t2 select count(*) from t3;
SET TIMESTAMP=1040324224;
SET @@session.pseudo_thread_id=2;
drop temporary table t3;
select * from t2;
f
5
7
mysql-test/t/rpl_temporary.test
0 → 100644
View file @
1dcca480
source
include
/
master
-
slave
.
inc
;
connect
(
con1
,
localhost
,
root
,,);
connect
(
con2
,
localhost
,
root
,,);
drop
table
if
exists
t1
;
create
table
t1
(
f
int
);
drop
table
if
exists
t2
;
create
table
t2
(
f
int
);
insert
into
t1
values
(
1
),(
2
),(
3
),(
4
),(
5
),(
6
),(
7
),(
8
),(
9
),(
10
);
connection
con1
;
create
temporary
table
t3
(
f
int
);
insert
into
t3
select
*
from
t1
where
f
<
6
;
connection
con2
;
create
temporary
table
t3
(
f
int
);
connection
con1
;
insert
into
t2
select
count
(
*
)
from
t3
;
connection
con2
;
insert
into
t3
select
*
from
t1
where
f
>=
4
;
connection
con1
;
drop
temporary
table
t3
;
connection
con2
;
insert
into
t2
select
count
(
*
)
from
t3
;
drop
temporary
table
t3
;
select
*
from
t2
;
show
binlog
events
;
drop
table
if
exists
t1
;
drop
table
if
exists
t2
;
use
test
;
SET
TIMESTAMP
=
1040323920
;
create
table
t1
(
f
int
);
SET
TIMESTAMP
=
1040323931
;
create
table
t2
(
f
int
);
SET
TIMESTAMP
=
1040323938
;
insert
into
t1
values
(
1
),(
2
),(
3
),(
4
),(
5
),(
6
),(
7
),(
8
),(
9
),(
10
);
SET
TIMESTAMP
=
1040323945
;
SET
@@
session
.
pseudo_thread_id
=
1
;
create
temporary
table
t3
(
f
int
);
SET
TIMESTAMP
=
1040323952
;
SET
@@
session
.
pseudo_thread_id
=
1
;
insert
into
t3
select
*
from
t1
where
f
<
6
;
SET
TIMESTAMP
=
1040324145
;
SET
@@
session
.
pseudo_thread_id
=
2
;
create
temporary
table
t3
(
f
int
);
SET
TIMESTAMP
=
1040324186
;
SET
@@
session
.
pseudo_thread_id
=
1
;
insert
into
t2
select
count
(
*
)
from
t3
;
SET
TIMESTAMP
=
1040324200
;
SET
@@
session
.
pseudo_thread_id
=
2
;
insert
into
t3
select
*
from
t1
where
f
>=
4
;
SET
TIMESTAMP
=
1040324211
;
SET
@@
session
.
pseudo_thread_id
=
1
;
drop
temporary
table
t3
;
SET
TIMESTAMP
=
1040324219
;
SET
@@
session
.
pseudo_thread_id
=
2
;
insert
into
t2
select
count
(
*
)
from
t3
;
SET
TIMESTAMP
=
1040324224
;
SET
@@
session
.
pseudo_thread_id
=
2
;
drop
temporary
table
t3
;
select
*
from
t2
;
\ No newline at end of file
sql/log_event.cc
View file @
1dcca480
...
...
@@ -728,7 +728,9 @@ int Query_log_event::write_data(IO_CACHE* file)
#ifndef MYSQL_CLIENT
Query_log_event
::
Query_log_event
(
THD
*
thd_arg
,
const
char
*
query_arg
,
ulong
query_length
,
bool
using_trans
)
:
Log_event
(
thd_arg
,
0
,
using_trans
),
data_buf
(
0
),
query
(
query_arg
),
:
Log_event
(
thd_arg
,
!
thd_arg
->
lex
.
tmp_table_used
?
0
:
LOG_EVENT_THREAD_SPECIFIC_F
,
using_trans
),
data_buf
(
0
),
query
(
query_arg
),
db
(
thd_arg
->
db
),
q_len
((
uint32
)
query_length
),
error_code
(
thd_arg
->
killed
?
ER_SERVER_SHUTDOWN
:
thd_arg
->
net
.
last_errno
),
thread_id
(
thd_arg
->
thread_id
)
...
...
@@ -810,6 +812,8 @@ void Query_log_event::print(FILE* file, bool short_form, char* last_db)
*
end
++=
';'
;
*
end
++=
'\n'
;
my_fwrite
(
file
,
(
byte
*
)
buff
,
(
uint
)
(
end
-
buff
),
MYF
(
MY_NABP
|
MY_WME
));
if
(
flags
&
LOG_EVENT_THREAD_SPECIFIC_F
)
fprintf
(
file
,
"SET @@session.pseudo_thread_id=%lu;
\n
"
,(
ulong
)
thread_id
);
my_fwrite
(
file
,
(
byte
*
)
query
,
q_len
,
MYF
(
MY_NABP
|
MY_WME
));
fprintf
(
file
,
";
\n
"
);
}
...
...
@@ -845,7 +849,7 @@ int Query_log_event::exec_event(struct st_relay_log_info* rli)
thd
->
query_error
=
0
;
// clear error
thd
->
clear_error
();
thd
->
slave_proxy_id
=
thread_id
;
// for temp tables
thd
->
variables
.
pseudo_thread_id
=
thread_id
;
// for temp tables
/*
Sanity check to make sure the master did not get a really bad
...
...
@@ -1468,7 +1472,7 @@ int Load_log_event::exec_event(NET* net, struct st_relay_log_info* rli)
ex
.
skip_lines
=
skip_lines
;
List
<
Item
>
field_list
;
set_fields
(
field_list
);
thd
->
slave_proxy_id
=
thd
->
thread_id
;
thd
->
variables
.
pseudo_thread_id
=
thd
->
thread_id
;
if
(
net
)
{
// mysql_load will use thd->net to read the file
...
...
sql/log_event.h
View file @
1dcca480
...
...
@@ -212,8 +212,10 @@ struct sql_ex_info
#define BINLOG_MAGIC "\xfe\x62\x69\x6e"
#define LOG_EVENT_TIME_F 0x1
#define LOG_EVENT_FORCED_ROTATE_F 0x2
#define LOG_EVENT_TIME_F 0x1
#define LOG_EVENT_FORCED_ROTATE_F 0x2
#define LOG_EVENT_THREAD_SPECIFIC_F 0x4
/* query depends on thread
(for example: TEMPORARY TABLE) */
enum
Log_event_type
{
...
...
sql/mysqld.cc
View file @
1dcca480
...
...
@@ -1894,6 +1894,7 @@ int main(int argc, char **argv)
set_options
();
get_options
(
argc
,
argv
);
max_system_variables
.
pseudo_thread_id
=
(
ulong
)
~
0
;
if
(
opt_log
||
opt_update_log
||
opt_slow_log
||
opt_bin_log
)
strcat
(
server_version
,
"-log"
);
DBUG_PRINT
(
"info"
,(
"%s Ver %s for %s on %s
\n
"
,
my_progname
,
...
...
sql/set_var.cc
View file @
1dcca480
...
...
@@ -21,6 +21,8 @@
- If the variable is thread specific, add it to 'system_variables' struct.
If not, add it to mysqld.cc and an declaration in 'mysql_priv.h'
- Don't forget to initialize new fields in global_system_variables and
max_system_variables!
- Use one of the 'sys_var... classes from set_var.h or write a specific
one for the variable type.
- Define it in the 'variable definition list' in this file.
...
...
@@ -154,6 +156,8 @@ sys_var_thd_ulong sys_max_error_count("max_error_count",
&
SV
::
max_error_count
);
sys_var_thd_ulong
sys_max_heap_table_size
(
"max_heap_table_size"
,
&
SV
::
max_heap_table_size
);
sys_var_thd_ulong
sys_pseudo_thread_id
(
"pseudo_thread_id"
,
&
SV
::
pseudo_thread_id
);
sys_var_thd_ulonglong
sys_max_join_size
(
"max_join_size"
,
&
SV
::
max_join_size
,
fix_max_join_size
);
...
...
@@ -364,6 +368,7 @@ sys_var *sys_variables[]=
&
sys_net_retry_count
,
&
sys_net_wait_timeout
,
&
sys_net_write_timeout
,
&
sys_pseudo_thread_id
,
&
sys_query_cache_size
,
#ifdef HAVE_QUERY_CACHE
&
sys_query_cache_limit
,
...
...
@@ -512,6 +517,7 @@ struct show_var_st init_vars[]= {
{
"pid_file"
,
(
char
*
)
pidfile_name
,
SHOW_CHAR
},
{
"port"
,
(
char
*
)
&
mysql_port
,
SHOW_INT
},
{
"protocol_version"
,
(
char
*
)
&
protocol_version
,
SHOW_INT
},
{
sys_pseudo_thread_id
.
name
,
(
char
*
)
&
sys_pseudo_thread_id
,
SHOW_SYS
},
{
sys_read_buff_size
.
name
,
(
char
*
)
&
sys_read_buff_size
,
SHOW_SYS
},
{
sys_read_rnd_buff_size
.
name
,(
char
*
)
&
sys_read_rnd_buff_size
,
SHOW_SYS
},
{
sys_rpl_recovery_rank
.
name
,(
char
*
)
&
sys_rpl_recovery_rank
,
SHOW_SYS
},
...
...
sql/sql_base.cc
View file @
1dcca480
...
...
@@ -798,7 +798,7 @@ TABLE **find_temporary_table(THD *thd, const char *db, const char *table_name)
uint
key_length
=
(
uint
)
(
strmov
(
strmov
(
key
,
db
)
+
1
,
table_name
)
-
key
)
+
1
;
TABLE
*
table
,
**
prev
;
int4store
(
key
+
key_length
,
thd
->
slave_proxy
_id
);
int4store
(
key
+
key_length
,
thd
->
variables
.
pseudo_thread
_id
);
key_length
+=
4
;
prev
=
&
thd
->
temporary_tables
;
...
...
@@ -838,7 +838,7 @@ bool rename_temporary_table(THD* thd, TABLE *table, const char *db,
(
strmov
((
table
->
real_name
=
strmov
(
table
->
table_cache_key
=
key
,
db
)
+
1
),
table_name
)
-
table
->
table_cache_key
)
+
1
;
int4store
(
key
+
table
->
key_length
,
thd
->
slave_proxy
_id
);
int4store
(
key
+
table
->
key_length
,
thd
->
variables
.
pseudo_thread
_id
);
table
->
key_length
+=
4
;
return
0
;
}
...
...
@@ -992,7 +992,7 @@ TABLE *open_table(THD *thd,const char *db,const char *table_name,
if
(
thd
->
killed
)
DBUG_RETURN
(
0
);
key_length
=
(
uint
)
(
strmov
(
strmov
(
key
,
db
)
+
1
,
table_name
)
-
key
)
+
1
;
int4store
(
key
+
key_length
,
thd
->
slave_proxy
_id
);
int4store
(
key
+
key_length
,
thd
->
variables
.
pseudo_thread
_id
);
for
(
table
=
thd
->
temporary_tables
;
table
;
table
=
table
->
next
)
{
...
...
@@ -1006,6 +1006,7 @@ TABLE *open_table(THD *thd,const char *db,const char *table_name,
DBUG_RETURN
(
0
);
}
table
->
query_id
=
thd
->
query_id
;
thd
->
lex
.
tmp_table_used
=
1
;
goto
reset
;
}
}
...
...
@@ -1806,7 +1807,7 @@ TABLE *open_temporary_table(THD *thd, const char *path, const char *db,
+
1
),
table_name
)
-
tmp_table
->
table_cache_key
)
+
1
;
int4store
(
tmp_table
->
table_cache_key
+
tmp_table
->
key_length
,
thd
->
slave_proxy
_id
);
thd
->
variables
.
pseudo_thread
_id
);
tmp_table
->
key_length
+=
4
;
if
(
link_in_list
)
...
...
sql/sql_class.cc
View file @
1dcca480
...
...
@@ -100,7 +100,7 @@ THD::THD():user_time(0), fatal_error(0),
start_time
=
(
time_t
)
0
;
current_linfo
=
0
;
slave_thread
=
0
;
slave_proxy_id
=
0
;
variables
.
pseudo_thread_id
=
0
;
file_id
=
0
;
cond_count
=
0
;
warn_id
=
0
;
...
...
sql/sql_class.h
View file @
1dcca480
...
...
@@ -370,6 +370,12 @@ struct system_variables
ulong
tmp_table_size
;
ulong
tx_isolation
;
/*
In slave thread we need to know in behalf of which
thread the query is being run to replicate temp tables properly
*/
ulong
pseudo_thread_id
;
my_bool
log_warnings
;
my_bool
low_priority_updates
;
...
...
@@ -522,11 +528,6 @@ public:
each thread that is using LOG_INFO needs to adjust the pointer to it
*/
LOG_INFO
*
current_linfo
;
/*
In slave thread we need to know in behalf of which
thread the query is being run to replicate temp tables properly
*/
ulong
slave_proxy_id
;
NET
*
slave_net
;
// network connection from slave -> m.
my_off_t
log_pos
;
/* Used by the sys_var class to store temporary values */
...
...
sql/sql_lex.cc
View file @
1dcca480
...
...
@@ -170,6 +170,7 @@ LEX *lex_start(THD *thd, uchar *buf,uint length)
lex
->
slave_thd_opt
=
0
;
lex
->
sql_command
=
SQLCOM_END
;
lex
->
safe_to_cache_query
=
1
;
lex
->
tmp_table_used
=
0
;
bzero
(
&
lex
->
mi
,
sizeof
(
lex
->
mi
));
return
lex
;
}
...
...
sql/sql_lex.h
View file @
1dcca480
...
...
@@ -459,6 +459,7 @@ typedef struct st_lex
uint
slave_thd_opt
;
CHARSET_INFO
*
charset
;
char
*
help_arg
;
bool
tmp_table_used
;
}
LEX
;
...
...
sql/sql_table.cc
View file @
1dcca480
...
...
@@ -190,6 +190,7 @@ int mysql_rm_table_part2(THD *thd, TABLE_LIST *tables, bool if_exists,
wrong_tables
.
append
(
String
(
table
->
real_name
,
default_charset_info
));
}
}
thd
->
lex
.
tmp_table_used
=
tmp_table_deleted
;
if
(
some_tables_deleted
||
tmp_table_deleted
)
{
query_cache_invalidate3
(
thd
,
tables
,
0
);
...
...
@@ -814,6 +815,7 @@ int mysql_create_table(THD *thd,const char *db, const char *table_name,
(
void
)
rm_temporary_table
(
create_info
->
db_type
,
path
);
goto
end
;
}
thd
->
lex
.
tmp_table_used
=
1
;
}
if
(
!
tmp_table
&&
!
no_log
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment