From: Tomek Mrugalski Date: Thu, 30 Aug 2012 08:41:02 +0000 (+0200) Subject: [2143]: MySQL DHCP benchmark now works with -Ofast X-Git-Tag: trac2351_base~47^2~13^2~4 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=88507052ccb7879ed422de7385e0cfe8aafc939d;p=thirdparty%2Fkea.git [2143]: MySQL DHCP benchmark now works with -Ofast --- diff --git a/tests/tools/dhcp-ubench/Makefile b/tests/tools/dhcp-ubench/Makefile index 4be8fe773b..dbcfadd072 100644 --- a/tests/tools/dhcp-ubench/Makefile +++ b/tests/tools/dhcp-ubench/Makefile @@ -1,5 +1,5 @@ # Linux switches -CFLAGS=-g -O0 -Wall -pedantic -Wextra +CFLAGS=-g -Ofast -Wall -pedantic -Wextra # Mac OS: We don't use pedantic as Mac OS version of MySQL (5.5.24) does use long long (not part of ISO C++) #CFLAGS=-g -O0 -Wall -Wextra -I/opt/local/include diff --git a/tests/tools/dhcp-ubench/mysql_ubench.cc b/tests/tools/dhcp-ubench/mysql_ubench.cc index a3076597c4..b2f58c2e72 100644 --- a/tests/tools/dhcp-ubench/mysql_ubench.cc +++ b/tests/tools/dhcp-ubench/mysql_ubench.cc @@ -34,6 +34,15 @@ MySQL_uBenchmark::MySQL_uBenchmark(const string& hostname, const string& user, } +void MySQL_uBenchmark::stmt_failure(MYSQL_STMT * stmt, const char* operation) { + stringstream tmp; + tmp << "Error " << mysql_stmt_errno(stmt) << " during " << operation + << ": " << mysql_stmt_error(stmt); + throw tmp.str(); +} + + + void MySQL_uBenchmark::failure(const char* operation) { stringstream tmp; tmp << "Error " << mysql_errno(conn_) << " during " << operation @@ -408,6 +417,7 @@ void MySQL_uBenchmark::searchLease4Test() { // 4th parameter: Client-id response[3].buffer_type = MYSQL_TYPE_STRING; response[3].buffer = &client_id; + response[3].buffer_length = sizeof(client_id); // 5th parameter: valid-lifetime response[4].buffer_type = MYSQL_TYPE_LONG; @@ -444,11 +454,24 @@ void MySQL_uBenchmark::searchLease4Test() { } int num_rows = 0; - if (!mysql_stmt_fetch(stmt)) { + int result = mysql_stmt_fetch(stmt); + switch (result) { + case 0: { if (lease_addr != addr) { failure("Returned data is bogus!"); } num_rows++; + break; + } + case MYSQL_NO_DATA: + { + // that's ok. We randomized non-existing address + break; + + } + default: { + stmt_failure(stmt, "RETRIEVE (mysql_stmt_fetch())"); + } } // we could call mysql_stmt_fetch again to check that there are no diff --git a/tests/tools/dhcp-ubench/mysql_ubench.h b/tests/tools/dhcp-ubench/mysql_ubench.h index c9fcc7c39a..be12fd6fd1 100644 --- a/tests/tools/dhcp-ubench/mysql_ubench.h +++ b/tests/tools/dhcp-ubench/mysql_ubench.h @@ -80,8 +80,25 @@ protected: /// Compared to its base version in uBenchmark class, this one logs additional /// MySQL specific information using mysql_errno() and mysql_error() functions. /// The outcome is the same: exception is thrown. + /// + /// @param operation brief description of the operation that caused error + /// + /// @sa stmt_failure() void failure(const char* operation); + /// @brief Used to report compiled statement failures. + /// + /// Compared to its base version in uBenchmark class, this one logs additional + /// MySQL specific information using mysql_stmt_errno() and mysql_stmt_error() + /// functions that are used for compiled statements error reporting. + /// + /// @param stmt MySQL compiled statement structure + /// @param operation brief description of the operation that caused error + /// + /// @sa failure() + void stmt_failure(MYSQL_STMT * stmt, const char* operation); + + /// Handle to MySQL database connection. MYSQL* conn_; };