Browse Source

ULib: code update (#2951)

* ULib: code update

* ULib: code update

* ULib: code update

* ULib: code update

* ULib: code update

* ULib: code update
stefano casazza 7 years ago
parent
commit
ba4470ad8e

+ 23 - 2
frameworks/C++/ulib/benchmark_config.json

@@ -79,7 +79,7 @@
       "query_url": "/query?queries=",
       "fortune_url": "/fortune",
       "update_url": "/update?queries=",
-		"cached_query_url": "/cached_worlds?queries=",
+      "cached_query_url": "/cached_worlds?queries=",
       "port": 8080,
       "approach": "Realistic",
       "classification": "Platform",
@@ -101,7 +101,7 @@
       "query_url": "/query?queries=",
       "fortune_url": "/fortune",
       "update_url": "/update?queries=",
-		"cached_query_url": "/cached_worlds?queries=",
+      "cached_query_url": "/cached_worlds?queries=",
       "port": 8080,
       "approach": "Realistic",
       "classification": "Platform",
@@ -117,6 +117,27 @@
       "notes": "",
       "versus": ""
     },
+    "postgres_fit": {
+      "setup_file": "setup_postgres_fit",
+      "db_url": "/db",
+      "query_url": "/query?queries=",
+      "fortune_url": "/fortune",
+      "update_url": "/update?queries=",
+      "port": 8080,
+      "approach": "Realistic",
+      "classification": "Platform",
+      "database": "Postgres",
+      "framework": "ULib",
+      "language": "C++",
+      "orm": "Micro",
+      "platform": "None",
+      "webserver": "ULib",
+      "os": "Linux",
+      "database_os": "Linux",
+      "display_name": "ULib-fit",
+      "notes": "",
+      "versus": ""
+    },
     "mongodb": {
       "setup_file": "setup_mongodb",
       "db_url": "/mdb",

+ 30 - 0
frameworks/C++/ulib/setup_postgres_fit.sh

@@ -0,0 +1,30 @@
+#!/bin/bash
+
+fw_depends postgresql ulib
+
+# Travis is broken
+if [ "$TRAVIS" != "true" ]; then
+MAX_THREADS=$CPU_COUNT
+else
+MAX_THREADS=$(( 2 * $CPU_COUNT ))
+fi
+
+# 1. Change ULib Server (userver_tcp) configuration
+sed -i "s|TCP_LINGER_SET .*|TCP_LINGER_SET -2|g"								  $IROOT/ULib/benchmark.cfg
+sed -i "s|LISTEN_BACKLOG .*|LISTEN_BACKLOG 256|g"								  $IROOT/ULib/benchmark.cfg
+sed -i "s|PREFORK_CHILD .*|PREFORK_CHILD ${MAX_THREADS}|g"					  $IROOT/ULib/benchmark.cfg
+sed -i "s|CLIENT_FOR_PARALLELIZATION .*|CLIENT_FOR_PARALLELIZATION 100|g" $IROOT/ULib/benchmark.cfg
+
+# 2. Start ULib Server (userver_tcp)
+export ORM_DRIVER="pgsql"
+export UMEMPOOL="581,0,0,59,16409,-7,-20,-23,31"
+export ORM_OPTION="host=${DBHOST} user=benchmarkdbuser password=benchmarkdbpass dbname=hello_world client_encoding=UTF8"
+
+# Never use setcap inside of TRAVIS 
+[ "$TRAVIS" != "true" ] || { \
+if [ `ulimit -r` -eq 99 ]; then
+	sudo setcap cap_sys_nice,cap_sys_resource,cap_net_bind_service,cap_net_raw+eip $IROOT/ULib/bin/userver_tcp
+fi
+}
+
+$IROOT/ULib/bin/userver_tcp -c $IROOT/ULib/benchmark.cfg &

+ 20 - 4
frameworks/C++/ulib/src/db.usp

@@ -19,6 +19,9 @@ static void usp_fork_db()
       {
       U_WARNING("usp_fork_db(): we cound't connect to db");
 
+      delete psql_db;
+             psql_db = U_NULLPTR;
+
       return;
       }
 
@@ -37,11 +40,10 @@ static void usp_end_db()
 
    if (pstmt_db)
       {
-      delete  pstmt_db;
+      delete pstmt_db;
       delete pworld_db;
+      delete psql_db;
       }
-
-   delete psql_db;
 }
 #endif
 -->
@@ -54,7 +56,21 @@ pworld_db->id = u_get_num_random(10000-1);
 pstmt_db->execute();
 
 #ifdef AS_cpoll_cppsp_DO
-USP_PRINTF_ADD("{\"id\":%u,\"randomNumber\":%u}", pworld_db->id, pworld_db->randomNumber);
+char* ptr = UClientImage_Base::wbuffer->pend();
+
+u_put_unalignedp32(ptr,   U_MULTICHAR_CONSTANT32('{','"','i','d'));
+u_put_unalignedp16(ptr+4, U_MULTICHAR_CONSTANT16('"',':'));
+
+ptr = u_num2str32(pworld_db->id, ptr+6);
+
+u_put_unalignedp64(ptr,   U_MULTICHAR_CONSTANT64(',','"','r','a','n','d','o','m'));
+u_put_unalignedp64(ptr+8, U_MULTICHAR_CONSTANT64('N','u','m','b','e','r','"',':'));
+
+ptr = u_num2str32(pworld_db->randomNumber, ptr+16);
+
+*ptr++ = '}';
+
+UClientImage_Base::wbuffer->size_adjust(ptr);
 #else
 USP_OBJ_JSON_stringify(*pworld_db);
 #endif

+ 5 - 2
frameworks/C++/ulib/src/edb.usp

@@ -20,10 +20,13 @@ static void usp_fork_edb()
       {
       U_WARNING("usp_fork_edb(): connection disabled or failed");
 
+      delete es;
+             es = U_NULLPTR;
+
       return;
       }
 
-   U_MEMCPY(buffer,  "{\"query\":{\"match\":{\"_id\":\"", QLEN);
+   U_MEMCPY(buffer, "{\"query\":{\"match\":{\"_id\":\"", QLEN);
 }
 
 #ifdef DEBUG
@@ -31,7 +34,7 @@ static void usp_end_edb()
 {
    U_TRACE(5, "::usp_end_edb()")
 
-   delete es;
+   if (es) delete es;
 }
 #endif
 -->

+ 10 - 4
frameworks/C++/ulib/src/equery.usp

@@ -24,6 +24,9 @@ static void usp_fork_equery()
       {
       U_WARNING("usp_fork_equery(): connection disabled or failed");
 
+      delete es;
+             es = U_NULLPTR;
+
       return;
       }
 
@@ -39,11 +42,14 @@ static void usp_end_equery()
 {
    U_TRACE(5, "::usp_end_equery()")
 
-   delete es;
+   if (es)
+      {
+      delete es;
 
-#ifndef AS_cpoll_cppsp_DO
-   if (pvworld_query) delete pvworld_query;
-#endif
+#  ifndef AS_cpoll_cppsp_DO
+      delete pvworld_query;
+#  endif
+      }
 }
 #endif
 -->

+ 10 - 4
frameworks/C++/ulib/src/eupdate.usp

@@ -28,6 +28,9 @@ static void usp_fork_eupdate()
       {
       U_WARNING("usp_fork_eupdate(): connection disabled or failed");
 
+      delete es;
+             es = U_NULLPTR;
+
       return;
       }
 
@@ -49,11 +52,14 @@ static void usp_end_eupdate()
 {
    U_TRACE(5, "::usp_end_eupdate()")
 
-   delete es;
+   if (es)
+      {
+      delete es;
 
-#ifndef AS_cpoll_cppsp_DO
-   if (pvworld_update) delete pvworld_update;
-#endif
+#  ifndef AS_cpoll_cppsp_DO
+      delete pvworld_update;
+#  endif
+      }
 }
 #endif
 -->

+ 4 - 2
frameworks/C++/ulib/src/fortune.usp

@@ -22,6 +22,9 @@ static void usp_fork_fortune()
       {
       U_WARNING("usp_fork_fortune(): we cound't connect to db");
 
+      delete psql_fortune;
+             psql_fortune = U_NULLPTR;
+
       return;
       }
 
@@ -50,9 +53,8 @@ static void usp_end_fortune()
       delete pencoded;
       delete pvfortune;
       delete pfortune2add;
+      delete psql_fortune;
       }
-
-   delete psql_fortune;
 }
 #endif
 -->

+ 11 - 2
frameworks/C++/ulib/src/mdb.usp

@@ -18,6 +18,9 @@ static void usp_fork_mdb()
       {
       U_WARNING("usp_fork_mdb(): connection failed");
 
+      delete mc;
+             mc = U_NULLPTR;
+
       return;
       }
 
@@ -25,6 +28,9 @@ static void usp_fork_mdb()
       {
       U_WARNING("usp_fork_mdb(): selectCollection() failed");
 
+      delete mc;
+             mc = U_NULLPTR;
+
       return;
       }
 
@@ -36,9 +42,12 @@ static void usp_end_mdb()
 {
    U_TRACE(5, "::usp_end_mdb()")
 
-   delete mc;
+   if (query)
+      {
+      delete mc;
 
-   if (query) U_SYSCALL_VOID(bson_destroy, "%p", query);
+      U_SYSCALL_VOID(bson_destroy, "%p", query);
+      }
 }
 #endif
 -->

+ 7 - 2
frameworks/C++/ulib/src/mfortune.usp

@@ -20,6 +20,9 @@ static void usp_fork_mfortune()
       {
       U_WARNING("usp_fork_mfortune(): connection failed");
 
+      delete mc;
+             mc = U_NULLPTR;
+
       return;
       }
 
@@ -27,6 +30,9 @@ static void usp_fork_mfortune()
       {
       U_WARNING("usp_fork_mfortune(): selectCollection() failed");
 
+      delete mc;
+             mc = U_NULLPTR;
+
       return;
       }
 
@@ -40,10 +46,9 @@ static void usp_end_mfortune()
 {
    U_TRACE(5, "::usp_end_mfortune()")
 
-   delete mc;
-
    if (pencoded)
       {
+      delete mc;
       delete pencoded;
       delete pvfortune;
       delete pfortune2add;

+ 14 - 5
frameworks/C++/ulib/src/mquery.usp

@@ -22,6 +22,9 @@ static void usp_fork_mquery()
       {
       U_WARNING("usp_fork_mquery(): connection disabled or failed");
 
+      delete mc;
+             mc = U_NULLPTR;
+
       return;
       }
 
@@ -29,6 +32,9 @@ static void usp_fork_mquery()
       {
       U_WARNING("usp_fork_mquery(): selectCollection() failed");
 
+      delete mc;
+             mc = U_NULLPTR;
+
       return;
       }
 
@@ -44,13 +50,16 @@ static void usp_end_mquery()
 {
    U_TRACE(5, "::usp_end_mquery()")
 
-   delete mc;
+   if (query)
+      {
+      delete mc;
 
-   if (query) U_SYSCALL_VOID(bson_destroy, "%p", query);
+      U_SYSCALL_VOID(bson_destroy, "%p", query);
 
-#ifndef AS_cpoll_cppsp_DO
-   if (pvworld_query) delete pvworld_query;
-#endif
+#  ifndef AS_cpoll_cppsp_DO
+      delete pvworld_query;
+#  endif
+      }
 }
 #endif
 -->

+ 14 - 5
frameworks/C++/ulib/src/mupdate.usp

@@ -22,6 +22,9 @@ static void usp_fork_mupdate()
       {
       U_WARNING("usp_fork_mupdate(): connection disabled or failed");
 
+      delete mc;
+             mc = U_NULLPTR;
+
       return;
       }
 
@@ -29,6 +32,9 @@ static void usp_fork_mupdate()
       {
       U_WARNING("usp_fork_mupdate(): selectCollection() failed");
 
+      delete mc;
+             mc = U_NULLPTR;
+
       return;
       }
 
@@ -44,13 +50,16 @@ static void usp_end_mupdate()
 {
    U_TRACE(5, "::usp_end_mupdate()")
 
-   delete mc;
+   if (query)
+      {
+      delete mc;
 
-   if (query) U_SYSCALL_VOID(bson_destroy, "%p", query);
+      U_SYSCALL_VOID(bson_destroy, "%p", query);
 
-#ifndef AS_cpoll_cppsp_DO
-   if (pvworld_update) delete pvworld_update;
-#endif
+#  ifndef AS_cpoll_cppsp_DO
+      delete pvworld_update;
+#  endif
+      }
 }
 #endif
 -->

+ 22 - 6
frameworks/C++/ulib/src/query.usp

@@ -23,6 +23,9 @@ static void usp_fork_query()
       {
       U_WARNING("usp_fork_query(): we cound't connect to db");
 
+      delete psql_query;
+             psql_query = U_NULLPTR;
+
       return;
       }
 
@@ -49,13 +52,12 @@ static void usp_end_query()
       {
       delete pstmt_query;
       delete pworld_query;
+      delete psql_query;
 
 #  ifndef AS_cpoll_cppsp_DO
       delete pvworld_query;
 #  endif
       }
-
-   delete psql_query;
 }
 #endif
 -->
@@ -68,7 +70,9 @@ int i = 0, num_queries = UHTTP::getFormFirstNumericValue(1, 500);
 (void) UClientImage_Base::wbuffer->reserve(36U * num_queries);
 
 #ifdef AS_cpoll_cppsp_DO
-USP_PUTS_CHAR('[');
+char* ptr = UClientImage_Base::wbuffer->pend();
+
+*ptr++ = '[';
 #endif
 
 while (true)
@@ -78,7 +82,17 @@ while (true)
    pstmt_query->execute();
 
 #ifdef AS_cpoll_cppsp_DO
-   USP_PRINTF("{\"id\":%u,\"randomNumber\":%u}", pworld_query->id, pworld_query->randomNumber);
+   u_put_unalignedp32(ptr,   U_MULTICHAR_CONSTANT32('{','"','i','d'));
+   u_put_unalignedp16(ptr+4, U_MULTICHAR_CONSTANT16('"',':'));
+
+   ptr = u_num2str32(pworld_query->id, ptr+6);
+
+   u_put_unalignedp64(ptr,   U_MULTICHAR_CONSTANT64(',','"','r','a','n','d','o','m'));
+   u_put_unalignedp64(ptr+8, U_MULTICHAR_CONSTANT64('N','u','m','b','e','r','"',':'));
+
+   ptr = u_num2str32(pworld_query->randomNumber, ptr+16);
+
+   *ptr++ = '}';
 #else
    World* pworld;
 
@@ -90,12 +104,14 @@ while (true)
    if (++i == num_queries) break;
 
 #ifdef AS_cpoll_cppsp_DO
-   USP_PUTS_CHAR(',');
+   *ptr++ = ',';
 #endif
    }
 
 #ifdef AS_cpoll_cppsp_DO
-USP_PUTS_CHAR(']');
+*ptr++ = ']';
+
+UClientImage_Base::wbuffer->size_adjust(ptr);
 #else
 USP_OBJ_JSON_stringify(*pvworld_query);
 pvworld_query->clear();

+ 4 - 1
frameworks/C++/ulib/src/rdb.usp

@@ -19,6 +19,9 @@ static void usp_fork_rdb()
       {
       U_WARNING("usp_fork_rdb(): %V", rc->UClient_Base::getResponse().rep);
 
+      delete rc;
+             rc = U_NULLPTR;
+
       return;
       }
 
@@ -30,7 +33,7 @@ static void usp_end_rdb()
 {
    U_TRACE(5, "::usp_end_rdb()")
 
-   delete rc;
+   if (rc) delete rc;
 }
 #endif
 -->

+ 4 - 2
frameworks/C++/ulib/src/rfortune.usp

@@ -20,6 +20,9 @@ static void usp_fork_rfortune()
       {
       U_WARNING("usp_fork_rfortune(): %V", rc->UClient_Base::getResponse().rep);
 
+      delete rc;
+             rc = U_NULLPTR;
+
       return;
       }
 
@@ -33,10 +36,9 @@ static void usp_end_rfortune()
 {
    U_TRACE(5, "::usp_end_rfortune()")
 
-   delete rc;
-
    if (pencoded)
       {
+      delete rc;
       delete pencoded;
       delete pvfortune;
       delete pfortune2add;

+ 8 - 3
frameworks/C++/ulib/src/rquery.usp

@@ -19,6 +19,9 @@ static void usp_fork_rquery()
       {
       U_WARNING("usp_fork_rquery(): %V", rc->UClient_Base::getResponse().rep);
 
+      delete rc;
+             rc = U_NULLPTR;
+
       return;
       }
 
@@ -30,9 +33,11 @@ static void usp_end_rquery()
 {
    U_TRACE(5, "::usp_end_rquery()")
 
-   delete rc;
-
-   if (pvworld_query) delete pvworld_query;
+   if (pvworld_query)
+      {
+      delete rc;
+      delete pvworld_query;
+      }
 }
 #endif
 -->

+ 8 - 3
frameworks/C++/ulib/src/rupdate.usp

@@ -19,6 +19,9 @@ static void usp_fork_rupdate()
       {
       U_WARNING("usp_fork_rupdate(): %V", rc->UClient_Base::getResponse().rep);
 
+      delete rc;
+             rc = U_NULLPTR;
+
       return;
       }
 
@@ -30,9 +33,11 @@ static void usp_end_rupdate()
 {
    U_TRACE(5, "::usp_end_rupdate()")
 
-   delete rc;
-
-   if (pvworld) delete pvworld;
+   if (pvworld)
+      {
+      delete rc;
+      delete pvworld;
+      }
 }
 #endif
 -->

+ 5 - 2
frameworks/C++/ulib/src/update.usp

@@ -22,6 +22,9 @@ static void usp_fork_update()
       {
       U_WARNING("usp_fork_update(): we cound't connect to db");
 
+      delete psql_update;
+             psql_update = U_NULLPTR;
+
       return;
       }
 
@@ -54,9 +57,9 @@ static void usp_end_update()
       delete pvworld_update;
 
       if (bpgsql == false) delete pstmt1;
-      }
 
-   delete psql_update;
+      delete psql_update;
+      }
 }
 #endif
 -->

+ 2 - 1
toolset/setup/linux/frameworks/ulib.sh

@@ -14,9 +14,10 @@ ULIB_DOCUMENT_ROOT=$ULIB_ROOT/ULIB_DOCUMENT_ROOT
 mkdir -p $ULIB_ROOT
 mkdir -p $ULIB_DOCUMENT_ROOT
 
+#if [ "$TRAVIS" = "true" ]; then
 # AVOID "fatal error: postgres_fe.h: No such file or directory"
-# TODO: This should already be installed and unnecessary.
 sudo apt-get install -y postgresql-server-dev-all
+#fi
 
 # make use of FIFO scheduling policy possible (we must avoid use of test because bash signal trapping)
 #type setcap >/dev/null 2>/dev/null