Loading client/Makefile.am +1 −0 Original line number Diff line number Diff line Loading @@ -48,6 +48,7 @@ mysqlbinlog_SOURCES = mysqlbinlog.cc $(top_srcdir)/mysys/mf_tempdir.c \ $(top_srcdir)/mysys/my_vle.c \ $(top_srcdir)/mysys/base64.c mysqlbinlog_LDADD = $(LDADD) $(CXXLDFLAGS) mysqlslap_LDADD = $(LDADD) $(CXXLDFLAGS) -lpthread mysqltestmanager_pwgen_SOURCES = mysqlmanager-pwgen.c mysqltestmanagerc_SOURCES= mysqlmanagerc.c $(yassl_dummy_link_fix) mysqlcheck_SOURCES= mysqlcheck.c $(yassl_dummy_link_fix) Loading client/client_priv.h +1 −0 Original line number Diff line number Diff line Loading @@ -53,6 +53,7 @@ enum options_client OPT_MYSQL_ONLY_PRINT, OPT_MYSQL_LOCK_DIRECTORY, OPT_MYSQL_SLAP_SLAVE, OPT_USE_THREADS, OPT_MYSQL_NUMBER_OF_QUERY, OPT_MYSQL_PRESERVE_SCHEMA, OPT_IGNORE_TABLE,OPT_INSERT_IGNORE,OPT_SHOW_WARNINGS,OPT_DROP_DATABASE, Loading client/mysqlslap.c +103 −44 Original line number Diff line number Diff line Loading @@ -87,6 +87,7 @@ #include <sys/types.h> #include <sys/wait.h> #include <ctype.h> #include <my_pthread.h> #define MYSLAPLOCK "/myslaplock.lck" #define MYSLAPLOCK_DIR "/tmp" Loading Loading @@ -132,6 +133,7 @@ static uint opt_protocol= 0; static int get_options(int *argc,char ***argv); static uint opt_mysql_port= 0; static uint opt_use_threads; static const char *load_default_groups[]= { "mysqlslap","client",0 }; Loading @@ -151,6 +153,13 @@ struct stats { unsigned long long rows; }; typedef struct thread_context thread_context; struct thread_context { statement *stmt; ulonglong limit; }; typedef struct conclusions conclusions; struct conclusions { Loading Loading @@ -184,7 +193,7 @@ static int create_schema(MYSQL *mysql, const char *db, statement *stmt, statement *engine_stmt); static int run_scheduler(stats *sptr, statement *stmts, uint concur, ulonglong limit); int run_task(statement *stmt, ulonglong limit); int run_task(thread_context *con); void statement_cleanup(statement *stmt); static const char ALPHANUMERICS[]= Loading Loading @@ -440,6 +449,10 @@ static struct my_option my_long_options[] = {"socket", 'S', "Socket file to use for connection.", (gptr*) &opt_mysql_unix_port, (gptr*) &opt_mysql_unix_port, 0, GET_STR, 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> #ifndef DONT_ALLOW_USER_CHANGE {"user", 'u', "User for login if not current user.", (gptr*) &user, Loading Loading @@ -930,8 +943,11 @@ run_scheduler(stats *sptr, statement *stmts, uint concur, ulonglong limit) uint x; File lock_file; struct timeval start_time, end_time; thread_context con; 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)); Loading @@ -943,6 +959,30 @@ run_scheduler(stats *sptr, statement *stmts, uint concur, ulonglong limit) exit(0); } if (opt_use_threads) { pthread_t mainthread; /* Thread descriptor */ pthread_attr_t attr; /* Thread attributes */ for (x= 0; x < concur; x++) { pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); /* 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 { fflush(NULL); for (x= 0; x < concur; x++) { int pid; Loading @@ -958,7 +998,7 @@ run_scheduler(stats *sptr, statement *stmts, uint concur, ulonglong limit) fprintf(stderr, "%s: fork returned 0, calling task pid %d gid %d\n", my_progname, pid, getgid()); run_task(stmts, limit); run_task(&con); exit(0); break; case -1: Loading @@ -979,14 +1019,30 @@ run_scheduler(stats *sptr, statement *stmts, uint concur, ulonglong limit) break; } } } /* Lets release use some clients! */ if (!opt_slave) my_lock(lock_file, F_UNLCK, 0, F_TO_EOF, MYF(0)); gettimeofday(&start_time, NULL); my_close(lock_file, MYF(0)); /* We look to grab a write lock at this point. Once we get it we know that all clients have completed their work. */ if (opt_use_threads) { if (my_lock(lock_file, F_WRLCK, 0, F_TO_EOF, MYF(0))) { fprintf(stderr,"%s: Could not get lockfile\n", my_progname); exit(0); } my_lock(lock_file, F_UNLCK, 0, F_TO_EOF, MYF(0)); } else { WAIT: while (x--) { Loading @@ -994,8 +1050,11 @@ run_scheduler(stats *sptr, statement *stmts, uint concur, ulonglong limit) pid= wait(&status); DBUG_PRINT("info", ("Parent: child %d status %d", pid, status)); } } gettimeofday(&end_time, NULL); my_close(lock_file, MYF(0)); sptr->timing= timedif(end_time, start_time); sptr->users= concur; sptr->rows= limit; Loading @@ -1004,7 +1063,7 @@ run_scheduler(stats *sptr, statement *stmts, uint concur, ulonglong limit) } int run_task(statement *qstmt, ulonglong limit) run_task(thread_context *con) { ulonglong counter= 0, queries; File lock_file; Loading @@ -1014,7 +1073,7 @@ run_task(statement *qstmt, ulonglong limit) statement *ptr; DBUG_ENTER("run_task"); DBUG_PRINT("info", ("task script \"%s\"", qstmt->string)); DBUG_PRINT("info", ("task script \"%s\"", con->stmt->string)); mysql_init(&mysql); Loading @@ -1036,7 +1095,7 @@ run_task(statement *qstmt, ulonglong limit) queries= 0; limit_not_met: for (ptr= qstmt; ptr && ptr->length; ptr= ptr->next) for (ptr= con->stmt; ptr && ptr->length; ptr= ptr->next) { if (opt_only_print) { Loading @@ -1060,11 +1119,11 @@ run_task(statement *qstmt, ulonglong limit) } queries++; if (limit && queries == limit) if (con->limit && queries == con->limit) DBUG_RETURN(0); } if (limit && queries < limit) if (con->limit && queries < con->limit) goto limit_not_met; my_lock(lock_file, F_UNLCK, 0, F_TO_EOF, MYF(0)); Loading mysql-test/r/mysqlslap.result +16 −1091 File changed.Preview size limit exceeded, changes collapsed. Show changes mysql-test/t/disabled.def +0 −1 Original line number Diff line number Diff line Loading @@ -19,6 +19,5 @@ innodb_concurrent : Results are not deterministic, Elliot will fix (BUG#3300) subselect : Bug#15706 type_time : Bug#15805 rpl_ddl : Bug#15963 SBR does not show "Definer" correctly mysqlslap : Bug#16167 events : Affects flush test case. A table lock not released somewhere rpl_sp : Bug #16456 Loading
client/Makefile.am +1 −0 Original line number Diff line number Diff line Loading @@ -48,6 +48,7 @@ mysqlbinlog_SOURCES = mysqlbinlog.cc $(top_srcdir)/mysys/mf_tempdir.c \ $(top_srcdir)/mysys/my_vle.c \ $(top_srcdir)/mysys/base64.c mysqlbinlog_LDADD = $(LDADD) $(CXXLDFLAGS) mysqlslap_LDADD = $(LDADD) $(CXXLDFLAGS) -lpthread mysqltestmanager_pwgen_SOURCES = mysqlmanager-pwgen.c mysqltestmanagerc_SOURCES= mysqlmanagerc.c $(yassl_dummy_link_fix) mysqlcheck_SOURCES= mysqlcheck.c $(yassl_dummy_link_fix) Loading
client/client_priv.h +1 −0 Original line number Diff line number Diff line Loading @@ -53,6 +53,7 @@ enum options_client OPT_MYSQL_ONLY_PRINT, OPT_MYSQL_LOCK_DIRECTORY, OPT_MYSQL_SLAP_SLAVE, OPT_USE_THREADS, OPT_MYSQL_NUMBER_OF_QUERY, OPT_MYSQL_PRESERVE_SCHEMA, OPT_IGNORE_TABLE,OPT_INSERT_IGNORE,OPT_SHOW_WARNINGS,OPT_DROP_DATABASE, Loading
client/mysqlslap.c +103 −44 Original line number Diff line number Diff line Loading @@ -87,6 +87,7 @@ #include <sys/types.h> #include <sys/wait.h> #include <ctype.h> #include <my_pthread.h> #define MYSLAPLOCK "/myslaplock.lck" #define MYSLAPLOCK_DIR "/tmp" Loading Loading @@ -132,6 +133,7 @@ static uint opt_protocol= 0; static int get_options(int *argc,char ***argv); static uint opt_mysql_port= 0; static uint opt_use_threads; static const char *load_default_groups[]= { "mysqlslap","client",0 }; Loading @@ -151,6 +153,13 @@ struct stats { unsigned long long rows; }; typedef struct thread_context thread_context; struct thread_context { statement *stmt; ulonglong limit; }; typedef struct conclusions conclusions; struct conclusions { Loading Loading @@ -184,7 +193,7 @@ static int create_schema(MYSQL *mysql, const char *db, statement *stmt, statement *engine_stmt); static int run_scheduler(stats *sptr, statement *stmts, uint concur, ulonglong limit); int run_task(statement *stmt, ulonglong limit); int run_task(thread_context *con); void statement_cleanup(statement *stmt); static const char ALPHANUMERICS[]= Loading Loading @@ -440,6 +449,10 @@ static struct my_option my_long_options[] = {"socket", 'S', "Socket file to use for connection.", (gptr*) &opt_mysql_unix_port, (gptr*) &opt_mysql_unix_port, 0, GET_STR, 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> #ifndef DONT_ALLOW_USER_CHANGE {"user", 'u', "User for login if not current user.", (gptr*) &user, Loading Loading @@ -930,8 +943,11 @@ run_scheduler(stats *sptr, statement *stmts, uint concur, ulonglong limit) uint x; File lock_file; struct timeval start_time, end_time; thread_context con; 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)); Loading @@ -943,6 +959,30 @@ run_scheduler(stats *sptr, statement *stmts, uint concur, ulonglong limit) exit(0); } if (opt_use_threads) { pthread_t mainthread; /* Thread descriptor */ pthread_attr_t attr; /* Thread attributes */ for (x= 0; x < concur; x++) { pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); /* 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 { fflush(NULL); for (x= 0; x < concur; x++) { int pid; Loading @@ -958,7 +998,7 @@ run_scheduler(stats *sptr, statement *stmts, uint concur, ulonglong limit) fprintf(stderr, "%s: fork returned 0, calling task pid %d gid %d\n", my_progname, pid, getgid()); run_task(stmts, limit); run_task(&con); exit(0); break; case -1: Loading @@ -979,14 +1019,30 @@ run_scheduler(stats *sptr, statement *stmts, uint concur, ulonglong limit) break; } } } /* Lets release use some clients! */ if (!opt_slave) my_lock(lock_file, F_UNLCK, 0, F_TO_EOF, MYF(0)); gettimeofday(&start_time, NULL); my_close(lock_file, MYF(0)); /* We look to grab a write lock at this point. Once we get it we know that all clients have completed their work. */ if (opt_use_threads) { if (my_lock(lock_file, F_WRLCK, 0, F_TO_EOF, MYF(0))) { fprintf(stderr,"%s: Could not get lockfile\n", my_progname); exit(0); } my_lock(lock_file, F_UNLCK, 0, F_TO_EOF, MYF(0)); } else { WAIT: while (x--) { Loading @@ -994,8 +1050,11 @@ run_scheduler(stats *sptr, statement *stmts, uint concur, ulonglong limit) pid= wait(&status); DBUG_PRINT("info", ("Parent: child %d status %d", pid, status)); } } gettimeofday(&end_time, NULL); my_close(lock_file, MYF(0)); sptr->timing= timedif(end_time, start_time); sptr->users= concur; sptr->rows= limit; Loading @@ -1004,7 +1063,7 @@ run_scheduler(stats *sptr, statement *stmts, uint concur, ulonglong limit) } int run_task(statement *qstmt, ulonglong limit) run_task(thread_context *con) { ulonglong counter= 0, queries; File lock_file; Loading @@ -1014,7 +1073,7 @@ run_task(statement *qstmt, ulonglong limit) statement *ptr; DBUG_ENTER("run_task"); DBUG_PRINT("info", ("task script \"%s\"", qstmt->string)); DBUG_PRINT("info", ("task script \"%s\"", con->stmt->string)); mysql_init(&mysql); Loading @@ -1036,7 +1095,7 @@ run_task(statement *qstmt, ulonglong limit) queries= 0; limit_not_met: for (ptr= qstmt; ptr && ptr->length; ptr= ptr->next) for (ptr= con->stmt; ptr && ptr->length; ptr= ptr->next) { if (opt_only_print) { Loading @@ -1060,11 +1119,11 @@ run_task(statement *qstmt, ulonglong limit) } queries++; if (limit && queries == limit) if (con->limit && queries == con->limit) DBUG_RETURN(0); } if (limit && queries < limit) if (con->limit && queries < con->limit) goto limit_not_met; my_lock(lock_file, F_UNLCK, 0, F_TO_EOF, MYF(0)); Loading
mysql-test/r/mysqlslap.result +16 −1091 File changed.Preview size limit exceeded, changes collapsed. Show changes
mysql-test/t/disabled.def +0 −1 Original line number Diff line number Diff line Loading @@ -19,6 +19,5 @@ innodb_concurrent : Results are not deterministic, Elliot will fix (BUG#3300) subselect : Bug#15706 type_time : Bug#15805 rpl_ddl : Bug#15963 SBR does not show "Definer" correctly mysqlslap : Bug#16167 events : Affects flush test case. A table lock not released somewhere rpl_sp : Bug #16456