Parcourir la source

[2143]: MySQL DHCP benchmark now works with -Ofast

Tomek Mrugalski il y a 12 ans
Parent
commit
88507052cc

+ 1 - 1
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

+ 24 - 1
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

+ 17 - 0
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_;
 };