Browse Source

This patch adds PostGres test alongside with minor fix (#1292 substitution)

stefanocasazza 10 years ago
parent
commit
ca8e5e2cfd

+ 53 - 7
frameworks/C++/ULib/benchmark_config

@@ -1,17 +1,18 @@
 {
   "framework": "ULib",
   "tests": [{
-    "sqlite": {
-      "setup_file": "setup",
+    "default": {
+      "setup_file": "setup_mysql",
       "json_url": "/json",
       "db_url": "/db",
       "query_url": "/query?queries=",
       "fortune_url": "/fortune",
+      "update_url": "/update?queries=",
       "plaintext_url": "/plaintext",
       "port": 8080,
       "approach": "Realistic",
       "classification": "Platform",
-      "database": "SQLite",
+      "database": "MySQL",
       "framework": "ULib",
       "language": "C++",
       "orm": "Micro",
@@ -19,18 +20,18 @@
       "webserver": "userver_tcp",
       "os": "Linux",
       "database_os": "Linux",
-      "display_name": "ULib",
+      "display_name": "ULib-mysql",
       "notes": "",
       "versus": ""
     },
     "mysql": {
-      "setup_file": "setup-mysql",
+      "setup_file": "setup_mysql",
       "json_url": "/json",
       "db_url": "/db",
       "query_url": "/query?queries=",
       "fortune_url": "/fortune",
-      "plaintext_url": "/plaintext",
       "update_url": "/update?queries=",
+      "plaintext_url": "/plaintext",
       "port": 8080,
       "approach": "Realistic",
       "classification": "Platform",
@@ -42,7 +43,52 @@
       "webserver": "userver_tcp",
       "os": "Linux",
       "database_os": "Linux",
-      "display_name": "ULib",
+      "display_name": "ULib-mysql",
+      "notes": "",
+      "versus": ""
+    },
+    "sqlite": {
+      "setup_file": "setup_sqlite",
+      "json_url": "/json",
+      "db_url": "/db",
+      "query_url": "/query?queries=",
+      "fortune_url": "/fortune",
+      "plaintext_url": "/plaintext",
+      "port": 8080,
+      "approach": "Realistic",
+      "classification": "Platform",
+      "database": "SQLite",
+      "framework": "ULib",
+      "language": "C++",
+      "orm": "Micro",
+      "platform": "ULib",
+      "webserver": "userver_tcp",
+      "os": "Linux",
+      "database_os": "Linux",
+      "display_name": "ULib-sqlite",
+      "notes": "",
+      "versus": ""
+    },
+    "postgres": {
+      "setup_file": "setup_postgres",
+      "json_url": "/json",
+      "db_url": "/db",
+      "query_url": "/query?queries=",
+      "fortune_url": "/fortune",
+      "update_url": "/update?queries=",
+      "plaintext_url": "/plaintext",
+      "port": 8080,
+      "approach": "Realistic",
+      "classification": "Platform",
+      "database": "Postgres",
+      "framework": "ULib",
+      "language": "C++",
+      "orm": "Micro",
+      "platform": "ULib",
+      "webserver": "userver_tcp",
+      "os": "Linux",
+      "database_os": "Linux",
+      "display_name": "ULib-postgres",
       "notes": "",
       "versus": ""
     }

+ 29 - 12
frameworks/C++/ULib/install.sh

@@ -21,10 +21,6 @@ ULIB_INSTALLED_FILE="${IROOT}/ULib-${ULIB_VERSION}.installed"
 RETCODE=$(fw_exists ${ULIB_INSTALLED_FILE})
 [ ! "$RETCODE" == 0 ] || { return 0; }
 
-# ULib is only built during installation as a dependency sanity check
-#sudo apt-get update
- sudo apt-get install libmysqlclient-dev libsqlite3-dev
-
 # Create a run directory for ULIB
 [ ! -e ${ULIB_INSTALLED_FILE} -a -d ${IROOT}/ULib ] && rm -rf ${IROOT}/ULib*
 
@@ -32,6 +28,9 @@ if [ ! -d "$ULIB_ROOT" ]; then
   mkdir -p $ULIB_ROOT
 fi
 
+# AVOID "fatal error: postgres_fe.h: No such file or directory"
+sudo apt-get install -y postgresql-server-dev-all
+
 # Add a simple configuration file to it
 cd $ULIB_ROOT
 if [ ! -f "benchmark.cfg" ]; then
@@ -41,6 +40,7 @@ userver {
  PREFORK_CHILD 8
  LISTEN_BACKLOG 8192
  MAX_KEEP_ALIVE 8192
+ ORM_DRIVER "mysql pgsql sqlite"
  DOCUMENT_ROOT $ULIB_DOCUMENT_ROOT
  PID_FILE ${ULIB_ROOT}/userver_tcp.pid
 }
@@ -56,18 +56,37 @@ fw_untar  ULib-${ULIB_VERSION}.tar.gz
 
 cd ULib-$ULIB_VERSION
 
+# Check for the compiler support (We want at least g++ 4.8)
+
+CC=gcc  # C   compiler command
+CXX=g++ # C++ compiler command
+
+gcc_version=`g++ -dumpversion`
+
+case "$gcc_version" in
+  3*|4.0*|4.1*|4.2*|4.3*|4.4*|4.5*|4.6*|4.7*)
+	  CC='gcc-4.8'
+	 CXX='g++-4.8'
+  ;;
+esac
+
+export CC CXX
+
 # AVOID "configure: error: newly created file is older than distributed files! Check your system clock"
 find . -exec touch {} \;
 
 ./configure --prefix=$ULIB_ROOT \
-            --disable-static \
-            --with-mysql --with-sqlite3 \
-            --without-ssl --without-pcre --without-expat \
-            --without-libz --without-libuuid --without-magic \
-            --enable-static-orm-driver='mysql sqlite' --enable-static-server-plugin=http
-#           --enable-debug \
+   --disable-static \
+   --with-mysql --with-pgsql --with-sqlite3 \
+   --without-ssl --without-pcre --without-expat \
+   --without-libz --without-libuuid --without-magic \
+   --enable-static-orm-driver='mysql pgsql sqlite' --enable-static-server-plugin=http
+#  --enable-debug \
+
 make install
 
+cp -r tests/examples/benchmark/FrameworkBenchmarks/ULib/db $ULIB_ROOT
+
 # 3. Compile usp pages for benchmark
 cd src/ulib/net/server/plugin/usp
 make db.la fortune.la json.la plaintext.la query.la update.la
@@ -80,7 +99,5 @@ fi
 mkdir -p $ULIB_DOCUMENT_ROOT
 cp .libs/db.so .libs/fortune.so .libs/json.so .libs/plaintext.so .libs/query.so .libs/update.so $ULIB_DOCUMENT_ROOT
 
-cd $IROOT
-cp -r ULib-1.4.2/tests/examples/benchmark/FrameworkBenchmarks/ULib/db $ULIB_ROOT
 
 touch ${ULIB_INSTALLED_FILE}

+ 3 - 3
frameworks/C++/ULib/setup-mysql.sh → frameworks/C++/ULib/setup_mysql.sh

@@ -1,11 +1,11 @@
 #!/bin/bash
 
-export UMEMPOOL="135,0,0,34,8465,129,-17,-22,41"
+export UMEMPOOL="545,0,0,37,8465,0,-17,-22,34"
 export ORM_DRIVER="mysql"
 export ORM_OPTION="host=${DBHOST} user=benchmarkdbuser password=benchmarkdbpass character-set=utf8 dbname=hello_world"
 
 # 1. Change ULib Server configuration
-sed -i 's|PREFORK_CHILD .*|PREFORK_CHILD '"${MAX_THREADS}"'|g' $ULIB_ROOT/benchmark.cfg
+sed -i "s|PREFORK_CHILD .*|PREFORK_CHILD ${MAX_THREADS}|g" $ULIB_ROOT/benchmark.cfg
 
 # 2. Start ULib Server (userver_tcp)
-$ULIB_ROOT/bin/userver_tcp -c $ULIB_ROOT/benchmark.cfg &
+$ULIB_ROOT/bin/userver_tcp -c $ULIB_ROOT/benchmark.cfg &

+ 11 - 0
frameworks/C++/ULib/setup_postgres.sh

@@ -0,0 +1,11 @@
+#!/bin/bash
+
+export UMEMPOOL="545,0,0,37,8465,0,-17,-22,34"
+export ORM_DRIVER="pgsql"
+export ORM_OPTION="host=${DBHOST} user=benchmarkdbuser password=benchmarkdbpass dbname=hello_world client_encoding=UTF8"
+
+# 1. Change ULib Server configuration
+sed -i "s|PREFORK_CHILD .*|PREFORK_CHILD ${MAX_THREADS}|g" $ULIB_ROOT/benchmark.cfg
+
+# 2. Start ULib Server (userver_tcp)
+$ULIB_ROOT/bin/userver_tcp -c $ULIB_ROOT/benchmark.cfg &

+ 3 - 6
frameworks/C++/ULib/setup.sh → frameworks/C++/ULib/setup_sqlite.sh

@@ -1,14 +1,11 @@
 #!/bin/bash
 
-export UMEMPOOL="135,0,0,34,8465,129,-17,-22,41"
-echo $UMEMPOOL
+export UMEMPOOL="545,0,0,37,8465,0,-17,-22,34"
 export ORM_DRIVER="sqlite"
-echo $ORM_DRIVER
 export ORM_OPTION="host=${DBHOST} user=benchmarkdbuser password=benchmarkdbpass character-set=utf8 dbname=${ULIB_ROOT}/db/%.*s"
-echo $ORM_OPTION
 
 # 1. Change ULib Server configuration
-sed -i 's|PREFORK_CHILD .*|PREFORK_CHILD '"${MAX_THREADS}"'|g' $ULIB_ROOT/benchmark.cfg
+sed -i "s|PREFORK_CHILD .*|PREFORK_CHILD ${MAX_THREADS}|g" $ULIB_ROOT/benchmark.cfg
 
 # 2. Start ULib Server (userver_tcp)
-$ULIB_ROOT/bin/userver_tcp -c $ULIB_ROOT/benchmark.cfg &
+$ULIB_ROOT/bin/userver_tcp -c $ULIB_ROOT/benchmark.cfg &

+ 2 - 2
frameworks/C++/ULib/src/db.usp

@@ -28,7 +28,7 @@ static void usp_fork_db()
    psql_db  = U_NEW(UOrmSession(U_CONSTANT_TO_PARAM("hello_world")));
    pstmt_db = U_NEW(UOrmStatement(*psql_db, U_CONSTANT_TO_PARAM("SELECT randomNumber FROM World WHERE id = ?")));
 
-   if (pstmt_db == 0) U_ERROR("usp_fork_db(): we cound't connect to db, exiting...");
+   if (pstmt_db == 0) U_ERROR("usp_fork_db(): we cound't connect to db");
 
    pstmt_db->use( pworld_db->id);
    pstmt_db->into(pworld_db->randomNumber);
@@ -55,7 +55,7 @@ pworld_db->id = u_get_num_random(10000);
 pstmt_db->execute();
 
 #ifdef AS_cpoll_cppsp_DO
-USP_PRINTF_ADD("{\"id\":%d,\"randomNumber\":%d}", pworld_db->id, pworld_db->randomNumber);
+USP_PRINTF_ADD("{\"id\":%u,\"randomNumber\":%u}", pworld_db->id, pworld_db->randomNumber);
 #else
 USP_JSON_stringify(*pvalue, World, *pworld_db);
 #endif

+ 12 - 9
frameworks/C++/ULib/src/fortune.h

@@ -15,19 +15,22 @@ public:
    U_MEMORY_ALLOCATOR
    U_MEMORY_DEALLOCATOR
 
-   int id;
+   uint32_t id;
    UString message;
 
-   // CONSTRUCTOR
-
    Fortune()
       {
       U_TRACE_REGISTER_OBJECT(5, Fortune, "")
+
+      // coverity[uninit_ctor]
+#  ifdef U_COVERITY_FALSE_POSITIVE
+      id = 0;
+#  endif
       }
 
-   Fortune(int _id, const UString& _message) : id(_id), message(_message)
+   Fortune(uint32_t _id, const UString& _message) : id(_id), message(_message)
       {
-      U_TRACE_REGISTER_OBJECT(5, Fortune, "%d,%.*S", _id, U_STRING_TO_TRACE(_message))
+      U_TRACE_REGISTER_OBJECT(5, Fortune, "%u,%.*S", _id, U_STRING_TO_TRACE(_message))
       }
 
    Fortune(const Fortune& f) : id(f.id), message((void*)U_STRING_TO_PARAM(f.message))
@@ -84,7 +87,7 @@ public:
       {
       U_TRACE(0, "UOrmTypeHandler<Fortune>::bindParam(%p)", stmt)
 
-      stmt->bindParam(U_ORM_TYPE_HANDLER(Fortune, id,      int));
+      stmt->bindParam(U_ORM_TYPE_HANDLER(Fortune, id,      unsigned int));
       stmt->bindParam(U_ORM_TYPE_HANDLER(Fortune, message, UString));
       }
 
@@ -92,7 +95,7 @@ public:
       {
       U_TRACE(0, "UOrmTypeHandler<Fortune>::bindResult(%p)", stmt)
 
-      stmt->bindResult(U_ORM_TYPE_HANDLER(Fortune, id,      int));
+      stmt->bindResult(U_ORM_TYPE_HANDLER(Fortune, id,      unsigned int));
       stmt->bindResult(U_ORM_TYPE_HANDLER(Fortune, message, UString));
       }
 };
@@ -107,7 +110,7 @@ public:
       {
       U_TRACE(0, "UJsonTypeHandler<Fortune>::toJSON(%p)", &json)
 
-      json.toJSON(U_JSON_TYPE_HANDLER(Fortune, id,      int));
+      json.toJSON(U_JSON_TYPE_HANDLER(Fortune, id,      unsigned int));
       json.toJSON(U_JSON_TYPE_HANDLER(Fortune, message, UString));
       }
 
@@ -115,7 +118,7 @@ public:
       {
       U_TRACE(0, "UJsonTypeHandler<Fortune>::fromJSON(%p)", &json)
 
-      json.fromJSON(U_JSON_TYPE_HANDLER(Fortune, id,      int));
+      json.fromJSON(U_JSON_TYPE_HANDLER(Fortune, id,      unsigned int));
       json.fromJSON(U_JSON_TYPE_HANDLER(Fortune, message, UString));
       }
 };

+ 4 - 6
frameworks/C++/ULib/src/fortune.usp

@@ -23,7 +23,7 @@ static void usp_fork_fortune()
    psql_fortune  = U_NEW(UOrmSession(U_CONSTANT_TO_PARAM("fortune")));
    pstmt_fortune = U_NEW(UOrmStatement(*psql_fortune, U_CONSTANT_TO_PARAM("SELECT id, message FROM Fortune")));
 
-   if (pstmt_fortune == 0) U_ERROR("usp_fork_fortune(): we cound't connect to db, exiting...");
+   if (pstmt_fortune == 0) U_ERROR("usp_fork_fortune(): we cound't connect to db");
 
    pstmt_fortune->into(*pfortune);
 }
@@ -54,14 +54,12 @@ for (uint32_t i = 0, n = pvfortune->size(); i < n; ++i)
    {
    elem = (*pvfortune)[i];
 
-   (void) u_xml_encode((const unsigned char*)U_STRING_TO_PARAM(elem->message), encoded);
-
    USP_PRINTF_ADD(
       "<tr>"
-      "<td>%d</td>"
-      "<td>%s</td>"
+      "<td>%u</td>"
+      "<td>%.*s</td>"
       "</tr>",
-      elem->id, encoded);
+      elem->id, u_xml_encode((const unsigned char*)U_STRING_TO_PARAM(elem->message), encoded), encoded);
    }
 
 pvfortune->clear();

+ 3 - 3
frameworks/C++/ULib/src/query.usp

@@ -30,7 +30,7 @@ static void usp_fork_query()
    psql_query  = U_NEW(UOrmSession(U_CONSTANT_TO_PARAM("hello_world")));
    pstmt_query = U_NEW(UOrmStatement(*psql_query, U_CONSTANT_TO_PARAM("SELECT randomNumber FROM World WHERE id = ?")));
 
-   if (pstmt_queries == 0) U_ERROR("usp_fork_query(): we cound't connect to db, exiting...");
+   if (pstmt_query == 0) U_ERROR("usp_fork_query(): we cound't connect to db");
 
    pstmt_query->use( pworld_query->id);
    pstmt_query->into(pworld_query->randomNumber);
@@ -72,12 +72,12 @@ while (true)
    pstmt_query->execute();
 
 #ifdef AS_cpoll_cppsp_DO
-   USP_PRINTF("{\"id\":%d,\"randomNumber\":%d}", pworld_query->id, pworld_query->randomNumber);
+   USP_PRINTF("{\"id\":%u,\"randomNumber\":%u}", pworld_query->id, pworld_query->randomNumber);
 #endif
 
    pvworld_query->push_back(U_NEW(World(*pworld_query)));
 
-   if (++i == num_query) break;
+   if (++i == num_queries) break;
 
 #ifdef AS_cpoll_cppsp_DO
    USP_PUTS_CHAR(',');

+ 3 - 3
frameworks/C++/ULib/src/update.usp

@@ -36,7 +36,7 @@ static void usp_fork_update()
    if (pstmt1 == 0 ||
        pstmt2 == 0)
       {
-      U_ERROR("usp_fork_update(): we cound't connect to db, exiting...");
+      U_ERROR("usp_fork_update(): we cound't connect to db");
       }
 
    pstmt1->use( pworld_update->id);
@@ -80,14 +80,14 @@ while (true)
 
    pstmt1->execute();
 
-   U_INTERNAL_DUMP("pworld_update->randomNumber = %d", pworld_update->randomNumber)
+   U_INTERNAL_DUMP("pworld_update->randomNumber = %u", pworld_update->randomNumber)
 
    pworld_update->randomNumber = u_get_num_random(10000);
 
    pstmt2->execute();
 
 #ifdef AS_cpoll_cppsp_DO
-   USP_PRINTF("{\"id\":%d,\"randomNumber\":%d}", pworld_update->id, pworld_update->randomNumber);
+   USP_PRINTF("{\"id\":%u,\"randomNumber\":%u}", pworld_update->id, pworld_update->randomNumber);
 #endif
 
    pvworld_update->push_back(U_NEW(World(*pworld_update)));

+ 14 - 11
frameworks/C++/ULib/src/world.h

@@ -15,13 +15,16 @@ public:
    U_MEMORY_ALLOCATOR
    U_MEMORY_DEALLOCATOR
 
-   int id, randomNumber;
-
-   // CONSTRUCTOR
+   uint32_t id, randomNumber;
 
    World()
       {
       U_TRACE_REGISTER_OBJECT(5, World, "")
+
+      // coverity[uninit_ctor]
+#  ifdef U_COVERITY_FALSE_POSITIVE
+      id = randomNumber = 0;
+#  endif
       }
 
    World(const World& w) : id(w.id), randomNumber(w.randomNumber)
@@ -67,16 +70,16 @@ public:
       {
       U_TRACE(0, "UOrmTypeHandler<World>::bindParam(%p)", stmt)
 
-      stmt->bindParam(U_ORM_TYPE_HANDLER(World, id,            int));
-      stmt->bindParam(U_ORM_TYPE_HANDLER(World, randomNumber,  int));
+      stmt->bindParam(U_ORM_TYPE_HANDLER(World, id,            unsigned int));
+      stmt->bindParam(U_ORM_TYPE_HANDLER(World, randomNumber,  unsigned int));
       }
 
    void bindResult(UOrmStatement* stmt)
       {
       U_TRACE(0, "UOrmTypeHandler<World>::bindResult(%p)", stmt)
 
-      stmt->bindResult(U_ORM_TYPE_HANDLER(World, id,           int));
-      stmt->bindResult(U_ORM_TYPE_HANDLER(World, randomNumber, int));
+      stmt->bindResult(U_ORM_TYPE_HANDLER(World, id,           unsigned int));
+      stmt->bindResult(U_ORM_TYPE_HANDLER(World, randomNumber, unsigned int));
       }
 };
 
@@ -90,16 +93,16 @@ public:
       {
       U_TRACE(0, "UJsonTypeHandler<World>::toJSON(%p)", &json)
 
-      json.toJSON(U_JSON_TYPE_HANDLER(World, id,            int));
-      json.toJSON(U_JSON_TYPE_HANDLER(World, randomNumber,  int));
+      json.toJSON(U_JSON_TYPE_HANDLER(World, id,            unsigned int));
+      json.toJSON(U_JSON_TYPE_HANDLER(World, randomNumber,  unsigned int));
       }
 
    void fromJSON(UValue& json)
       {
       U_TRACE(0, "UJsonTypeHandler<World>::fromJSON(%p)", &json)
 
-      json.fromJSON(U_JSON_TYPE_HANDLER(World, id,           int));
-      json.fromJSON(U_JSON_TYPE_HANDLER(World, randomNumber, int));
+      json.fromJSON(U_JSON_TYPE_HANDLER(World, id,           unsigned int));
+      json.fromJSON(U_JSON_TYPE_HANDLER(World, randomNumber, unsigned int));
       }
 };