BIND 10 trac2042, updated. e9d858f634bc30565367ea29becdbaa6bf7d5132 [2042] MySQL benchmark is now nicely wrapped in classes.
BIND 10 source code commits
bind10-changes at lists.isc.org
Thu Jul 12 12:10:45 UTC 2012
The branch, trac2042 has been updated
via e9d858f634bc30565367ea29becdbaa6bf7d5132 (commit)
from c8795d7621af446a30a9cb6db6e90b0f04d485e4 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit e9d858f634bc30565367ea29becdbaa6bf7d5132
Author: Tomek Mrugalski <tomasz at isc.org>
Date: Thu Jul 12 14:10:30 2012 +0200
[2042] MySQL benchmark is now nicely wrapped in classes.
-----------------------------------------------------------------------
Summary of changes:
tests/tools/dhcp-ubench/mysql_ubench.cc | 265 ++++++++++++++++++++-----------
1 file changed, 173 insertions(+), 92 deletions(-)
-----------------------------------------------------------------------
diff --git a/tests/tools/dhcp-ubench/mysql_ubench.cc b/tests/tools/dhcp-ubench/mysql_ubench.cc
index c6f9c02..5283832 100644
--- a/tests/tools/dhcp-ubench/mysql_ubench.cc
+++ b/tests/tools/dhcp-ubench/mysql_ubench.cc
@@ -8,54 +8,176 @@
using namespace std;
-const char * hostname ="localhost";
-const char * user = "root";
-const char * passwd = "foobletch";
-const char * dbname = "kea";
+class uBenchmark {
+public:
+ uBenchmark(uint32_t numInterations);
-void failure(MYSQL* conn, const char* operation) {
+ virtual void printInfo() = 0;
+ virtual void connect() = 0;
+ virtual void disconnect() = 0;
+ virtual void createLease4Test() = 0;
+ virtual void searchLease4Test() = 0;
+ virtual void updateLease4Test() = 0;
+ virtual void deleteLease4Test() = 0;
+
+ virtual void failure(const char* operation);
+
+ void print_clock(const std::string& operation, uint32_t num,
+ const struct timespec& before,
+ const struct timespec& after);
+
+ int run();
+
+protected:
+ uint32_t Num_; // number of operations (e.g. insert lease num times)
+
+ // five timestamps (1 at the beginning and 4 after each step)
+ struct timespec ts[5];
+};
+
+uBenchmark::uBenchmark(uint32_t iterations)
+ :Num_(iterations) {
+
+}
+
+void uBenchmark::failure(const char* operation) {
+ cout << "Error during " << operation << endl;
+ throw string(operation);
+}
+
+void uBenchmark::print_clock(const std::string& operation, uint32_t num,
+ const struct timespec& before,
+ const struct timespec& after) {
+ long int tv_sec = after.tv_sec - before.tv_sec;
+
+ long int tv_nsec = after.tv_nsec - before.tv_nsec;
+
+ cout << "after.tv_nsec=" << after.tv_nsec
+ << " before.tv_nsec=" << before.tv_nsec << endl;
+
+ if (tv_nsec < 0) {
+ tv_sec++;
+ tv_nsec += 1000000000; // 10^9
+ }
+
+ double oneoper = (tv_nsec/1000 + tv_sec*1000000)/num;
+
+ cout << "Operation " << operation << " repeated " << num << " times took "
+ << tv_sec << " seconds, " << tv_nsec/1000 << " us, 1 operation took "
+ << oneoper << "us (or " << (1000000/oneoper) << " oper/sec)" << endl;
+
+}
+
+int uBenchmark::run() {
+
+ try {
+ connect();
+
+ clock_gettime(CLOCK_REALTIME, &ts[0]);
+
+ createLease4Test();
+ clock_gettime(CLOCK_REALTIME, &ts[1]);
+
+ searchLease4Test();
+ clock_gettime(CLOCK_REALTIME, &ts[2]);
+
+ updateLease4Test();
+ clock_gettime(CLOCK_REALTIME, &ts[3]);
+
+ deleteLease4Test();
+ clock_gettime(CLOCK_REALTIME, &ts[4]);
+
+ disconnect();
+
+ } catch (const std::string& e) {
+ cout << "Failed: " << e << endl;
+ return (-1);
+ }
+
+ print_clock("Create leases4 ", Num_, ts[0], ts[1]);
+ // print_clock("Search leases4 ", num, ts[1], ts[2]);
+ // print_clock("Update leases4 ", num, ts[2], ts[3]);
+ // print_clock("Delete leases4 ", num, ts[3], ts[4]);
+
+ return (0);
+}
+
+class MySQL_uBenchmark: public uBenchmark {
+public:
+ MySQL_uBenchmark(const string& hostname, const string& user,
+ const string& passwd, const string& db,
+ uint32_t num_iterations);
+
+ virtual void printInfo();
+ virtual void connect();
+ virtual void disconnect();
+ virtual void createLease4Test();
+ virtual void searchLease4Test();
+ virtual void updateLease4Test();
+ virtual void deleteLease4Test();
+
+protected:
+ void failure(const char* operation);
+
+ std::string Hostname_;
+ std::string User_;
+ std::string Pass_;
+ std::string DB_;
+ MYSQL * Conn_;
+};
+
+
+MySQL_uBenchmark::MySQL_uBenchmark(const string& hostname, const string& user,
+ const string& pass, const string& db,
+ uint32_t num_iterations)
+ :uBenchmark(num_iterations), Hostname_(hostname), User_(user),
+ Pass_(pass), DB_(db), Conn_(NULL) {
+
+}
+
+void MySQL_uBenchmark::failure(const char* operation) {
stringstream tmp;
- tmp << "Error " << mysql_errno(conn) << " during " << operation
- << ": " << mysql_error(conn);
+ tmp << "Error " << mysql_errno(Conn_) << " during " << operation
+ << ": " << mysql_error(Conn_);
throw tmp.str();
}
-MYSQL * connect() {
- MYSQL *conn = NULL;
+void MySQL_uBenchmark::connect() {
- conn = mysql_init(NULL);
- if (!conn) {
- failure(conn, "initializing MySQL library");
+ Conn_ = mysql_init(NULL);
+ if (!Conn_) {
+ failure("initializing MySQL library");
} else {
cout << "MySQL library init successful." << endl;
}
- if (!mysql_real_connect(conn, hostname, user, passwd, dbname, 0, NULL, 0)) {
- failure(conn, "connecting to MySQL server");
+ cout << "hostname=" << Hostname_ << ", user=" << User_
+ << "pass=" << Pass_ << " db=" << DB_ << endl;
+
+ if (!mysql_real_connect(Conn_, Hostname_.c_str(), User_.c_str(),
+ Pass_.c_str(), DB_.c_str(), 0, NULL, 0)) {
+ failure("connecting to MySQL server");
} else {
cout << "MySQL connection established." << endl;
}
- string q = "delete from lease4";
- if (mysql_real_query(conn, q.c_str(), strlen(q.c_str()))) {
- failure(conn, "dropping old lease4 entries.");
+ string q = "delete from lease4;";
+ if (mysql_real_query(Conn_, q.c_str(), strlen(q.c_str()))) {
+ failure("dropping old lease4 entries.");
}
-
- return (conn);
}
-bool disconnect(MYSQL * conn) {
- if (!conn) {
+void MySQL_uBenchmark::disconnect() {
+ if (!Conn_) {
throw "NULL MySQL connection pointer.";
}
- mysql_close(conn);
+ mysql_close(Conn_);
+ Conn_ = NULL;
}
-
-
-bool createLease4Test(MYSQL * conn, uint32_t num) {
- if (!conn) {
- throw "NULL MySQL connection pointer.";
+void MySQL_uBenchmark::createLease4Test() {
+ if (!Conn_) {
+ throw "Not connected to MySQL server.";
}
uint32_t addr = 0x01000000; // Let's start with 1.0.0.0 address
@@ -81,7 +203,7 @@ bool createLease4Test(MYSQL * conn, uint32_t num) {
client_id[i] = 33 + i;
}
- for (uint32_t i = 0; i < num; i++) {
+ for (uint32_t i = 0; i < Num_; i++) {
stringstream cltt;
cltt << "2012-07-11 15:43:" << (i % 60);
@@ -95,9 +217,9 @@ bool createLease4Test(MYSQL * conn, uint32_t num) {
"fqdn_fwd,fqdn_rev) VALUES(");
end = query + strlen(query);
end += sprintf(end, "%u,\'", addr);
- end += mysql_real_escape_string(conn, end, hwaddr, hwaddr_len);
+ end += mysql_real_escape_string(Conn_, end, hwaddr, hwaddr_len);
end += sprintf(end,"\',\'");
- end += mysql_real_escape_string(conn, end, client_id, client_id_len);
+ end += mysql_real_escape_string(Conn_, end, client_id, client_id_len);
end += sprintf(end, "\',%d,%d,'%s',%d,%s,\'%s\',%s,%s);",
valid_lft, recycle_time, cltt.str().c_str(),
pool_id, (fixed?"true":"false"), hostname.c_str(),
@@ -106,91 +228,50 @@ bool createLease4Test(MYSQL * conn, uint32_t num) {
// options and comments fields are not set
unsigned int len = end - query;
- if (mysql_real_query(conn, query, len)) {
+ if (mysql_real_query(Conn_, query, len)) {
// something failed.
- failure(conn, "INSERT query");
+ failure("INSERT query");
} else {
printf(".");
- fflush(stdout);
};
}
printf("\n");
- fflush(stdout);
}
-bool searchLease4Test(MYSQL * conn, uint32_t num) {
- if (!conn) {
- throw "NULL MySQL connection pointer.";
+void MySQL_uBenchmark::searchLease4Test() {
+ if (!Conn_) {
+ throw "Not connected to MySQL server.";
}
}
-bool updateLease4Test(MYSQL* conn, uint32_t num) {
- if (!conn) {
- throw "NULL MySQL connection pointer.";
+void MySQL_uBenchmark::updateLease4Test() {
+ if (!Conn_) {
+ throw "Not connected to MySQL server.";
}
}
-bool deleteLease4Test(MYSQL* conn, uint32_t num) {
- if (!conn) {
- throw "NULL MySQL connection pointer.";
+void MySQL_uBenchmark::deleteLease4Test() {
+ if (!Conn_) {
+ throw "Not connected to MySQL server.";
}
}
-void print_clock(const std::string& operation, uint32_t num,
- const struct timespec& before,
- const struct timespec& after) {
- long int tv_sec = after.tv_sec - before.tv_sec;
-
- long int tv_nsec = after.tv_nsec - before.tv_nsec;
-
- cout << "after.tv_nsec=" << after.tv_nsec
- << " before.tv_nsec=" << before.tv_nsec << endl;
-
- if (tv_nsec < 0) {
- tv_sec++;
- tv_nsec += 1000000000; // 10^9
- }
-
- double oneoper = (tv_nsec/1000 + tv_sec*1000000)/num;
-
- cout << "Operation " << operation << " repeated " << num << " times took "
- << tv_sec << " seconds, " << tv_nsec/1000 << " us, 1 operation took "
- << oneoper << "us" << endl;
-
+void MySQL_uBenchmark::printInfo() {
+ cout << "MySQL client version is " << mysql_get_client_info() << endl;
}
-int main(int argc, const char * argv[]) {
- cout << "MySQL client version is " << mysql_get_client_info() << endl;
+int main(int argc, const char * argv[]) {
+ const char * hostname ="localhost";
+ const char * user = "root";
+ const char * passwd = "foobletch";
+ const char * dbname = "kea";
uint32_t num = 100;
- struct timespec ts[5];
- try {
- MYSQL *conn = connect();
+ MySQL_uBenchmark bench(hostname, user, passwd, dbname, num);
- clock_gettime(CLOCK_REALTIME, &ts[0]);
+ int result = bench.run();
- createLease4Test(conn, num);
- clock_gettime(CLOCK_REALTIME, &ts[1]);
-
- searchLease4Test(conn, num);
- clock_gettime(CLOCK_REALTIME, &ts[2]);
-
- updateLease4Test(conn, num);
- clock_gettime(CLOCK_REALTIME, &ts[3]);
-
- deleteLease4Test(conn, num);
- clock_gettime(CLOCK_REALTIME, &ts[4]);
-
- disconnect(conn);
-
- } catch (const std::string& e) {
- cout << "Failed: " << e << endl;
- return (-1);
- }
-
- print_clock("Create leases4 ", num, ts[0], ts[1]);
-
- return (0);
+ return (result);
}
More information about the bind10-changes
mailing list