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
d6b565ef
Commit
d6b565ef
authored
Jan 12, 2006
by
unknown
Browse files
Options
Browse Files
Download
Plain Diff
Merge baker@bk-internal.mysql.com:/home/bk/mysql-5.1-new
into zim.tangent.org:/home/brian/mysql/slap-5.1
parents
0f02e187
a16e5b70
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
91 additions
and
42 deletions
+91
-42
client/Makefile.am
client/Makefile.am
+1
-0
client/client_priv.h
client/client_priv.h
+1
-0
client/mysqlslap.c
client/mysqlslap.c
+89
-42
No files found.
client/Makefile.am
View file @
d6b565ef
...
@@ -48,6 +48,7 @@ mysqlbinlog_SOURCES = mysqlbinlog.cc $(top_srcdir)/mysys/mf_tempdir.c \
...
@@ -48,6 +48,7 @@ mysqlbinlog_SOURCES = mysqlbinlog.cc $(top_srcdir)/mysys/mf_tempdir.c \
$(top_srcdir)
/mysys/my_vle.c
\
$(top_srcdir)
/mysys/my_vle.c
\
$(top_srcdir)
/mysys/base64.c
$(top_srcdir)
/mysys/base64.c
mysqlbinlog_LDADD
=
$(LDADD)
$(CXXLDFLAGS)
mysqlbinlog_LDADD
=
$(LDADD)
$(CXXLDFLAGS)
mysqlslap_LDADD
=
$(LDADD)
$(CXXLDFLAGS)
-lpthread
mysqltestmanager_pwgen_SOURCES
=
mysqlmanager-pwgen.c
mysqltestmanager_pwgen_SOURCES
=
mysqlmanager-pwgen.c
mysqltestmanagerc_SOURCES
=
mysqlmanagerc.c
$(yassl_dummy_link_fix)
mysqltestmanagerc_SOURCES
=
mysqlmanagerc.c
$(yassl_dummy_link_fix)
mysqlcheck_SOURCES
=
mysqlcheck.c
$(yassl_dummy_link_fix)
mysqlcheck_SOURCES
=
mysqlcheck.c
$(yassl_dummy_link_fix)
...
...
client/client_priv.h
View file @
d6b565ef
...
@@ -53,6 +53,7 @@ enum options_client
...
@@ -53,6 +53,7 @@ enum options_client
OPT_MYSQL_ONLY_PRINT
,
OPT_MYSQL_ONLY_PRINT
,
OPT_MYSQL_LOCK_DIRECTORY
,
OPT_MYSQL_LOCK_DIRECTORY
,
OPT_MYSQL_SLAP_SLAVE
,
OPT_MYSQL_SLAP_SLAVE
,
OPT_USE_THREADS
,
OPT_MYSQL_NUMBER_OF_QUERY
,
OPT_MYSQL_NUMBER_OF_QUERY
,
OPT_MYSQL_PRESERVE_SCHEMA
,
OPT_MYSQL_PRESERVE_SCHEMA
,
OPT_IGNORE_TABLE
,
OPT_INSERT_IGNORE
,
OPT_SHOW_WARNINGS
,
OPT_DROP_DATABASE
,
OPT_IGNORE_TABLE
,
OPT_INSERT_IGNORE
,
OPT_SHOW_WARNINGS
,
OPT_DROP_DATABASE
,
...
...
client/mysqlslap.c
View file @
d6b565ef
...
@@ -87,6 +87,7 @@ TODO:
...
@@ -87,6 +87,7 @@ TODO:
#include <sys/types.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/wait.h>
#include <ctype.h>
#include <ctype.h>
#include <my_pthread.h>
#define MYSLAPLOCK "/myslaplock.lck"
#define MYSLAPLOCK "/myslaplock.lck"
#define MYSLAPLOCK_DIR "/tmp"
#define MYSLAPLOCK_DIR "/tmp"
...
@@ -132,6 +133,7 @@ static uint opt_protocol= 0;
...
@@ -132,6 +133,7 @@ static uint opt_protocol= 0;
static
int
get_options
(
int
*
argc
,
char
***
argv
);
static
int
get_options
(
int
*
argc
,
char
***
argv
);
static
uint
opt_mysql_port
=
0
;
static
uint
opt_mysql_port
=
0
;
static
uint
opt_use_threads
;
static
const
char
*
load_default_groups
[]
=
{
"mysqlslap"
,
"client"
,
0
};
static
const
char
*
load_default_groups
[]
=
{
"mysqlslap"
,
"client"
,
0
};
...
@@ -151,6 +153,13 @@ struct stats {
...
@@ -151,6 +153,13 @@ struct stats {
unsigned
long
long
rows
;
unsigned
long
long
rows
;
};
};
typedef
struct
thread_context
thread_context
;
struct
thread_context
{
statement
*
stmt
;
ulonglong
limit
;
};
typedef
struct
conclusions
conclusions
;
typedef
struct
conclusions
conclusions
;
struct
conclusions
{
struct
conclusions
{
...
@@ -184,7 +193,7 @@ static int create_schema(MYSQL *mysql, const char *db, statement *stmt,
...
@@ -184,7 +193,7 @@ static int create_schema(MYSQL *mysql, const char *db, statement *stmt,
statement
*
engine_stmt
);
statement
*
engine_stmt
);
static
int
run_scheduler
(
stats
*
sptr
,
statement
*
stmts
,
uint
concur
,
static
int
run_scheduler
(
stats
*
sptr
,
statement
*
stmts
,
uint
concur
,
ulonglong
limit
);
ulonglong
limit
);
int
run_task
(
statement
*
stmt
,
ulonglong
limit
);
int
run_task
(
thread_context
*
con
);
void
statement_cleanup
(
statement
*
stmt
);
void
statement_cleanup
(
statement
*
stmt
);
static
const
char
ALPHANUMERICS
[]
=
static
const
char
ALPHANUMERICS
[]
=
...
@@ -440,6 +449,10 @@ static struct my_option my_long_options[] =
...
@@ -440,6 +449,10 @@ static struct my_option my_long_options[] =
{
"socket"
,
'S'
,
"Socket file to use for connection."
,
{
"socket"
,
'S'
,
"Socket file to use for connection."
,
(
gptr
*
)
&
opt_mysql_unix_port
,
(
gptr
*
)
&
opt_mysql_unix_port
,
0
,
GET_STR
,
(
gptr
*
)
&
opt_mysql_unix_port
,
(
gptr
*
)
&
opt_mysql_unix_port
,
0
,
GET_STR
,
REQUIRED_ARG
,
0
,
0
,
0
,
0
,
0
,
0
},
REQUIRED_ARG
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"use-threads"
,
OPT_USE_THREADS
,
"Use pthread calls instead of fork() calls (default on Windows)"
,
(
gptr
*
)
&
opt_use_threads
,
(
gptr
*
)
&
opt_use_threads
,
0
,
GET_NO_ARG
,
NO_ARG
,
0
,
0
,
0
,
0
,
0
,
0
},
#include <sslopt-longopts.h>
#include <sslopt-longopts.h>
#ifndef DONT_ALLOW_USER_CHANGE
#ifndef DONT_ALLOW_USER_CHANGE
{
"user"
,
'u'
,
"User for login if not current user."
,
(
gptr
*
)
&
user
,
{
"user"
,
'u'
,
"User for login if not current user."
,
(
gptr
*
)
&
user
,
...
@@ -930,8 +943,11 @@ run_scheduler(stats *sptr, statement *stmts, uint concur, ulonglong limit)
...
@@ -930,8 +943,11 @@ run_scheduler(stats *sptr, statement *stmts, uint concur, ulonglong limit)
uint
x
;
uint
x
;
File
lock_file
;
File
lock_file
;
struct
timeval
start_time
,
end_time
;
struct
timeval
start_time
,
end_time
;
thread_context
con
;
DBUG_ENTER
(
"run_scheduler"
);
DBUG_ENTER
(
"run_scheduler"
);
con
.
stmt
=
stmts
;
con
.
limit
=
limit
;
lock_file
=
my_open
(
lock_file_str
,
O_CREAT
|
O_WRONLY
|
O_TRUNC
,
MYF
(
0
));
lock_file
=
my_open
(
lock_file_str
,
O_CREAT
|
O_WRONLY
|
O_TRUNC
,
MYF
(
0
));
...
@@ -943,42 +959,67 @@ run_scheduler(stats *sptr, statement *stmts, uint concur, ulonglong limit)
...
@@ -943,42 +959,67 @@ run_scheduler(stats *sptr, statement *stmts, uint concur, ulonglong limit)
exit
(
0
);
exit
(
0
);
}
}
for
(
x
=
0
;
x
<
concur
;
x
++
)
if
(
opt_use_threads
)
{
{
int
pid
;
pthread_t
mainthread
;
/* Thread descriptor */
DBUG_PRINT
(
"info"
,
(
"x %d concurrency %d"
,
x
,
concurrency
));
pthread_attr_t
attr
;
/* Thread attributes */
pid
=
fork
();
switch
(
pid
)
for
(
x
=
0
;
x
<
concur
;
x
++
)
{
{
case
0
:
pthread_attr_init
(
&
attr
);
/* child */
pthread_attr_setdetachstate
(
&
attr
,
DBUG_PRINT
(
"info"
,
(
"fork returned 0, calling task(
\"
%s
\"
), pid %d gid %d"
,
PTHREAD_CREATE_DETACHED
);
stmts
->
string
,
pid
,
getgid
()));
if
(
verbose
>=
2
)
/* now create the thread */
if
(
pthread_create
(
&
mainthread
,
&
attr
,
(
void
*
)
run_task
,
(
void
*
)
&
con
)
!=
0
)
{
fprintf
(
stderr
,
"%s: Could not create thread
\n
"
,
my_progname
);
exit
(
0
);
}
}
}
else
{
for
(
x
=
0
;
x
<
concur
;
x
++
)
{
int
pid
;
DBUG_PRINT
(
"info"
,
(
"x %d concurrency %d"
,
x
,
concurrency
));
pid
=
fork
();
switch
(
pid
)
{
case
0
:
/* child */
DBUG_PRINT
(
"info"
,
(
"fork returned 0, calling task(
\"
%s
\"
), pid %d gid %d"
,
stmts
->
string
,
pid
,
getgid
()));
if
(
verbose
>=
2
)
fprintf
(
stderr
,
"%s: fork returned 0, calling task pid %d gid %d
\n
"
,
my_progname
,
pid
,
getgid
());
run_task
(
&
con
);
exit
(
0
);
break
;
case
-
1
:
/* error */
DBUG_PRINT
(
"info"
,
(
"fork returned -1, failing pid %d gid %d"
,
pid
,
getgid
()));
fprintf
(
stderr
,
fprintf
(
stderr
,
"%s: fork returned 0, calling task pid %d gid %d
\n
"
,
"%s: Failed on fork: -1, max procs per parent exceeded.
\n
"
,
my_progname
,
pid
,
getgid
());
my_progname
);
run_task
(
stmts
,
limit
);
/*exit(1);*/
exit
(
0
);
goto
WAIT
;
break
;
default:
case
-
1
:
/* parent, forked */
/* error */
DBUG_PRINT
(
"info"
,
(
"default, break: pid %d gid %d"
,
pid
,
getgid
()));
DBUG_PRINT
(
"info"
,
if
(
verbose
>=
2
)
(
"fork returned -1, failing pid %d gid %d"
,
pid
,
getgid
()));
fprintf
(
stderr
,
"%s: fork returned %d, gid %d
\n
"
,
fprintf
(
stderr
,
my_progname
,
pid
,
getgid
());
"%s: Failed on fork: -1, max procs per parent exceeded.
\n
"
,
break
;
my_progname
);
}
/*exit(1);*/
goto
WAIT
;
default:
/* parent, forked */
DBUG_PRINT
(
"info"
,
(
"default, break: pid %d gid %d"
,
pid
,
getgid
()));
if
(
verbose
>=
2
)
fprintf
(
stderr
,
"%s: fork returned %d, gid %d
\n
"
,
my_progname
,
pid
,
getgid
());
break
;
}
}
}
}
/* Lets release use some clients! */
/* Lets release use some clients! */
if
(
!
opt_slave
)
if
(
!
opt_slave
)
my_lock
(
lock_file
,
F_UNLCK
,
0
,
F_TO_EOF
,
MYF
(
0
));
my_lock
(
lock_file
,
F_UNLCK
,
0
,
F_TO_EOF
,
MYF
(
0
));
...
@@ -987,12 +1028,18 @@ run_scheduler(stats *sptr, statement *stmts, uint concur, ulonglong limit)
...
@@ -987,12 +1028,18 @@ run_scheduler(stats *sptr, statement *stmts, uint concur, ulonglong limit)
my_close
(
lock_file
,
MYF
(
0
));
my_close
(
lock_file
,
MYF
(
0
));
WAIT:
if
(
opt_use_threads
)
while
(
x
--
)
{
}
else
{
{
int
status
,
pid
;
WAIT:
pid
=
wait
(
&
status
);
while
(
x
--
)
DBUG_PRINT
(
"info"
,
(
"Parent: child %d status %d"
,
pid
,
status
));
{
int
status
,
pid
;
pid
=
wait
(
&
status
);
DBUG_PRINT
(
"info"
,
(
"Parent: child %d status %d"
,
pid
,
status
));
}
}
}
gettimeofday
(
&
end_time
,
NULL
);
gettimeofday
(
&
end_time
,
NULL
);
...
@@ -1004,7 +1051,7 @@ WAIT:
...
@@ -1004,7 +1051,7 @@ WAIT:
}
}
int
int
run_task
(
statement
*
qstmt
,
ulonglong
limit
)
run_task
(
thread_context
*
con
)
{
{
ulonglong
counter
=
0
,
queries
;
ulonglong
counter
=
0
,
queries
;
File
lock_file
;
File
lock_file
;
...
@@ -1014,7 +1061,7 @@ run_task(statement *qstmt, ulonglong limit)
...
@@ -1014,7 +1061,7 @@ run_task(statement *qstmt, ulonglong limit)
statement
*
ptr
;
statement
*
ptr
;
DBUG_ENTER
(
"run_task"
);
DBUG_ENTER
(
"run_task"
);
DBUG_PRINT
(
"info"
,
(
"task script
\"
%s
\"
"
,
q
stmt
->
string
));
DBUG_PRINT
(
"info"
,
(
"task script
\"
%s
\"
"
,
con
->
stmt
->
string
));
mysql_init
(
&
mysql
);
mysql_init
(
&
mysql
);
...
@@ -1036,7 +1083,7 @@ run_task(statement *qstmt, ulonglong limit)
...
@@ -1036,7 +1083,7 @@ run_task(statement *qstmt, ulonglong limit)
queries
=
0
;
queries
=
0
;
limit_not_met:
limit_not_met:
for
(
ptr
=
q
stmt
;
ptr
&&
ptr
->
length
;
ptr
=
ptr
->
next
)
for
(
ptr
=
con
->
stmt
;
ptr
&&
ptr
->
length
;
ptr
=
ptr
->
next
)
{
{
if
(
opt_only_print
)
if
(
opt_only_print
)
{
{
...
@@ -1060,11 +1107,11 @@ limit_not_met:
...
@@ -1060,11 +1107,11 @@ limit_not_met:
}
}
queries
++
;
queries
++
;
if
(
limit
&&
queries
==
limit
)
if
(
con
->
limit
&&
queries
==
con
->
limit
)
DBUG_RETURN
(
0
);
DBUG_RETURN
(
0
);
}
}
if
(
limit
&&
queries
<
limit
)
if
(
con
->
limit
&&
queries
<
con
->
limit
)
goto
limit_not_met
;
goto
limit_not_met
;
my_lock
(
lock_file
,
F_UNLCK
,
0
,
F_TO_EOF
,
MYF
(
0
));
my_lock
(
lock_file
,
F_UNLCK
,
0
,
F_TO_EOF
,
MYF
(
0
));
...
...
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