Browse Source

[master] Merge branch 'trac2216'

JINMEI Tatuya 12 years ago
parent
commit
ace90354f4
1 changed files with 65 additions and 49 deletions
  1. 65 49
      src/bin/auth/benchmarks/query_bench.cc

+ 65 - 49
src/bin/auth/benchmarks/query_bench.cc

@@ -14,13 +14,6 @@
 
 #include <config.h>
 
-#include <stdlib.h>
-
-#include <iostream>
-#include <vector>
-
-#include <boost/shared_ptr.hpp>
-
 #include <bench/benchmark.h>
 #include <bench/benchmark_util.h>
 
@@ -37,11 +30,19 @@
 
 #include <auth/auth_srv.h>
 #include <auth/auth_config.h>
+#include <auth/datasrc_configurator.h>
 #include <auth/query.h>
 
 #include <asiodns/asiodns.h>
 #include <asiolink/asiolink.h>
 
+#include <boost/shared_ptr.hpp>
+
+#include <stdlib.h>
+
+#include <iostream>
+#include <vector>
+
 using namespace std;
 using namespace isc;
 using namespace isc::data;
@@ -124,8 +125,13 @@ public:
                           OutputBuffer& buffer) :
         QueryBenchMark(queries, query_message, buffer)
     {
-        server_->updateConfig(Element::fromJSON("{\"database_file\": \"" +
-                                                string(datasrc_file) + "\"}"));
+        DataSourceConfigurator::testReconfigure(
+            server_.get(),
+            Element::fromJSON("{\"IN\":"
+                              "  [{\"type\": \"sqlite3\","
+                              "    \"params\": {"
+                              "      \"database_file\": \"" +
+                              string(datasrc_file) + "\"}}]}"));
     }
 };
 
@@ -138,14 +144,14 @@ public:
                           OutputBuffer& buffer) :
         QueryBenchMark(queries, query_message, buffer)
     {
-        configureAuthServer(*server_,
-                            Element::fromJSON(
-                                "{\"datasources\": "
-                                " [{\"type\": \"memory\","
-                                "   \"zones\": [{\"origin\": \"" +
-                                string(zone_origin) + "\","
-                                "    \"file\": \"" +
-                                string(zone_file) + "\"}]}]}"));
+        DataSourceConfigurator::testReconfigure(
+            server_.get(),
+            Element::fromJSON("{\"IN\":"
+                              "  [{\"type\": \"MasterFiles\","
+                              "    \"cache-enable\": true, "
+                              "    \"params\": {\"" +
+                              string(zone_origin) + "\": \"" +
+                              string(zone_file) + "\"}}]}"));
     }
 };
 
@@ -187,8 +193,9 @@ enum DataSrcType {
 void
 usage() {
     cerr <<
-        "Usage: query_bench [-n iterations] [-t datasrc_type] [-o origin] "
-        "datasrc_file query_datafile\n"
+        "Usage: query_bench [-d] [-n iterations] [-t datasrc_type] [-o origin]"
+        " datasrc_file query_datafile\n"
+        "  -d Enable debug logging to stdout\n"
         "  -n Number of iterations per test case (default: "
          << ITERATION_DEFAULT << ")\n"
         "  -t Type of data source: sqlite3|memory (default: sqlite3)\n"
@@ -208,7 +215,8 @@ main(int argc, char* argv[]) {
     int iteration = ITERATION_DEFAULT;
     const char* opt_datasrc_type = "sqlite3";
     const char* origin = NULL;
-    while ((ch = getopt(argc, argv, "n:t:o:")) != -1) {
+    bool debug_log = false;
+    while ((ch = getopt(argc, argv, "dn:t:o:")) != -1) {
         switch (ch) {
         case 'n':
             iteration = atoi(optarg);
@@ -219,6 +227,9 @@ main(int argc, char* argv[]) {
         case 'o':
             origin = optarg;
             break;
+        case 'd':
+            debug_log = true;
+            break;
         case '?':
         default:
             usage();
@@ -232,9 +243,9 @@ main(int argc, char* argv[]) {
     const char* const datasrc_file = argv[0];
     const char* const query_data_file = argv[1];
 
-    // We disable logging to avoid unwanted noise. (We may eventually want to
-    // make it more configurable)
-    initLogger("query-bench", isc::log::NONE);
+    // By default disable logging to avoid unwanted noise.
+    initLogger("query-bench", debug_log ? isc::log::DEBUG : isc::log::NONE,
+               isc::log::MAX_DEBUG_LEVEL, NULL);
 
     DataSrcType datasrc_type = SQLITE3;
     if (strcmp(opt_datasrc_type, "sqlite3") == 0) {
@@ -251,34 +262,39 @@ main(int argc, char* argv[]) {
         return (1);
     }
 
-    BenchQueries queries;
-    loadQueryData(query_data_file, queries, RRClass::IN());
-    OutputBuffer buffer(4096);
-    Message message(Message::PARSE);
+    try {
+        BenchQueries queries;
+        loadQueryData(query_data_file, queries, RRClass::IN());
+        OutputBuffer buffer(4096);
+        Message message(Message::PARSE);
 
-    cout << "Parameters:" << endl;
-    cout << "  Iterations: " << iteration << endl;
-    cout << "  Data Source: type=" << opt_datasrc_type << ", file=" <<
-        datasrc_file << endl;
-    if (origin != NULL) {
-        cout << "  Origin: " << origin << endl;
-    }
-    cout << "  Query data: file=" << query_data_file << " (" << queries.size()
-         << " queries)" << endl << endl;
+        cout << "Parameters:" << endl;
+        cout << "  Iterations: " << iteration << endl;
+        cout << "  Data Source: type=" << opt_datasrc_type << ", file=" <<
+            datasrc_file << endl;
+        if (origin != NULL) {
+            cout << "  Origin: " << origin << endl;
+        }
+        cout << "  Query data: file=" << query_data_file << " ("
+             << queries.size() << " queries)" << endl << endl;
 
-    switch (datasrc_type) {
-    case SQLITE3:
-        cout << "Benchmark with SQLite3" << endl;
-        BenchMark<Sqlite3QueryBenchMark>(
-            iteration, Sqlite3QueryBenchMark(datasrc_file, queries,
-                                             message, buffer));
-        break;
-    case MEMORY:
-        cout << "Benchmark with In Memory Data Source" << endl;
-        BenchMark<MemoryQueryBenchMark>(
-            iteration, MemoryQueryBenchMark(datasrc_file, origin, queries,
-                                            message, buffer));
-        break;
+        switch (datasrc_type) {
+        case SQLITE3:
+            cout << "Benchmark with SQLite3" << endl;
+            BenchMark<Sqlite3QueryBenchMark>(
+                iteration, Sqlite3QueryBenchMark(datasrc_file, queries,
+                                                 message, buffer));
+            break;
+        case MEMORY:
+            cout << "Benchmark with In Memory Data Source" << endl;
+            BenchMark<MemoryQueryBenchMark>(
+                iteration, MemoryQueryBenchMark(datasrc_file, origin, queries,
+                                                message, buffer));
+            break;
+        }
+    } catch (const std::exception& ex) {
+        cout << "Test unexpectedly failed: " << ex.what() << endl;
+        return (1);
     }
 
     return (0);