Browse Source

Cutelyst: Split setup files for each DB (#2474)

* Cutelyst: Split setup files for each db and avoid connecting to a db that will not be used

* Update Cutelyst 1.2.0

* cutelyst: Use new Sql utils API

* fix the version
Daniel Nicoletti 8 years ago
parent
commit
716d661459

+ 7 - 7
frameworks/C++/cutelyst/benchmark_config.json

@@ -2,7 +2,7 @@
     "framework": "cutelyst",
     "tests": [{
             "default": {
-                "setup_file": "setup",
+                "setup_file": "setup_pf",
                 "json_url": "/json",
                 "plaintext_url": "/plaintext",
                 "port": 8080,
@@ -21,7 +21,7 @@
                 "versus": ""
             },
             "postgres-raw": {
-                "setup_file": "setup",
+                "setup_file": "setup_pf_pg",
                 "db_url": "/db_postgres",
                 "query_url": "/query_postgres?queries=",
                 "update_url": "/updates_postgres?queries=",
@@ -42,7 +42,7 @@
                 "versus": ""
             },
             "mysql-raw": {
-                "setup_file": "setup",
+                "setup_file": "setup_pf_my",
                 "db_url": "/db_mysql",
                 "query_url": "/query_mysql?queries=",
                 "update_url": "/updates_mysql?queries=",
@@ -82,7 +82,7 @@
                 "versus": ""
             },
             "thread-postgres-raw": {
-                "setup_file": "setup_thread",
+                "setup_file": "setup_thread_pg",
                 "db_url": "/db_postgres",
                 "query_url": "/query_postgres?queries=",
                 "update_url": "/updates_postgres?queries=",
@@ -103,7 +103,7 @@
                 "versus": ""
             },
             "thread-mysql-raw": {
-                "setup_file": "setup_thread",
+                "setup_file": "setup_thread_my",
                 "db_url": "/db_mysql",
                 "query_url": "/query_mysql?queries=",
                 "update_url": "/updates_mysql?queries=",
@@ -143,7 +143,7 @@
                 "versus": ""
             },
             "nginx-postgres-raw": {
-                "setup_file": "setup_uwsgi_nginx",
+                "setup_file": "setup_uwsgi_nginx_pg",
                 "db_url": "/db_postgres",
                 "query_url": "/query_postgres?queries=",
                 "update_url": "/updates_postgres?queries=",
@@ -164,7 +164,7 @@
                 "versus": ""
             },
             "nginx-mysql-raw": {
-                "setup_file": "setup_uwsgi_nginx",
+                "setup_file": "setup_uwsgi_nginx_my",
                 "db_url": "/db_mysql",
                 "query_url": "/query_mysql?queries=",
                 "update_url": "/updates_mysql?queries=",

+ 58 - 0
frameworks/C++/cutelyst/config.sh

@@ -0,0 +1,58 @@
+#!/bin/bash
+
+fw_depends cutelyst
+
+# configure
+# DRIVER
+# UWSGI
+# NGINX
+# PROCESS_OR_THREAD
+
+echo DRIVER=${DRIVER}
+echo UWSGI=${UWSGI}
+echo NGINX=${NGINX}
+echo QT_VERSION_MM=${QT_VERSION_MM}
+
+if [ "${DRIVER}" == "QMYSQL" ]; then
+  fw_depends mysql
+elif [ "${DRIVER}" == "QPSQL" ]; then
+  fw_depends postgresql
+fi
+
+
+mkdir ${IROOT}/cutelyst-benchmarks || true
+cd ${IROOT}/cutelyst-benchmarks
+
+# build
+export CMAKE_PREFIX_PATH=/opt/qt${QT_VERSION_MM}:${IROOT}
+cmake $TROOT -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$IROOT
+make -j $MAX_THREADS
+
+if [ -n "${UWSGI}" ]; then
+  cp -v ${TROOT}/config/config_socket.ini ${IROOT}/config.ini
+  SEND_DATE=true
+else
+  cp -v ${TROOT}/config/config.ini ${IROOT}/config.ini
+  SEND_DATE=false
+fi
+
+sed -i "s|Driver=.*|Driver=${DRIVER}|g" ${IROOT}/config.ini
+sed -i "s|DatabaseHostName=.*|DatabaseHostName=${DBHOST}|g" ${IROOT}/config.ini
+sed -i "s|SendDate=.*|SendDate=${SEND_DATE}|g" ${IROOT}/config.ini
+
+export LD_LIBRARY_PATH=/opt/qt${QT_VERSION_MM}/lib:${IROOT}/lib/x86_64-linux-gnu/
+
+if [ -n "${UWSGI}" ]; then
+  uwsgi --ini ${IROOT}/config.ini --cutelyst-app ${IROOT}/cutelyst-benchmarks/src/libcutelyst_benchmarks.so ${PROCESS_OR_THREAD} $MAX_THREADS &
+else
+  ${IROOT}/bin/cutelyst-wsgi --ini ${IROOT}/config.ini -a ${IROOT}/cutelyst-benchmarks/src/libcutelyst_benchmarks.so ${PROCESS_OR_THREAD} $MAX_THREADS &
+fi
+
+# configure Nginx
+if [ -n "${NGINX}" ]; then
+  fw_depends nginx
+  cp -v ${TROOT}/nginx.conf ${IROOT}/nginx.conf
+  sed -i "s|include .*/conf/uwsgi_params;|include ${NGINX_HOME}/conf/uwsgi_params;|g" ${IROOT}/nginx.conf
+  nginx -c ${IROOT}/nginx.conf
+fi
+

+ 1 - 0
frameworks/C++/cutelyst/config/config.ini

@@ -17,5 +17,6 @@ pidfile = /tmp/uwsgi.pid
 plugin = cutelyst
 
 [Cutelyst]
+Driver=
 DatabaseHostName=
 SendDate=

+ 1 - 0
frameworks/C++/cutelyst/config/config_socket.ini

@@ -20,5 +20,6 @@ pidfile = /tmp/uwsgi.pid
 plugin = cutelyst
 
 [Cutelyst]
+Driver=
 DatabaseHostName=
 SendDate=

+ 0 - 22
frameworks/C++/cutelyst/setup.sh

@@ -1,22 +0,0 @@
-#!/bin/bash
-
-fw_depends mysql postgresql cutelyst
-
-sed -i 's|DatabaseHostName=.*|DatabaseHostName='"$DBHOST"'|g' config/config.ini
-sed -i 's|SendDate=.*|SendDate=false|g' config/config.ini
-
-cd $IROOT
-mkdir cutelyst-benchmarks || true
-cd cutelyst-benchmarks
-
-QT_VERSION_MM=56
-export CMAKE_PREFIX_PATH=/opt/qt${QT_VERSION_MM}:${IROOT}
-
-cmake $TROOT -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$IROOT
-
-make -j $MAX_THREADS
-
-export LD_LIBRARY_PATH=/opt/qt${QT_VERSION_MM}/lib:${IROOT}/lib/x86_64-linux-gnu/
-export CUTELYST_CONFIG=${TROOT}/config/config.ini
-
-${IROOT}/bin/cutelyst-wsgi --http-socket :8080 -a ${IROOT}/cutelyst-benchmarks/src/libcutelyst_benchmarks.so -p $MAX_THREADS &

+ 8 - 0
frameworks/C++/cutelyst/setup_pf.sh

@@ -0,0 +1,8 @@
+#!/bin/bash
+
+DRIVER=
+UWSGI=
+NGINX=
+PROCESS_OR_THREAD=-p
+
+source ${TROOT}/config.sh

+ 8 - 0
frameworks/C++/cutelyst/setup_pf_my.sh

@@ -0,0 +1,8 @@
+#!/bin/bash
+
+DRIVER=QMYSQL
+UWSGI=
+NGINX=
+PROCESS_OR_THREAD=-p
+
+source ${TROOT}/config.sh

+ 8 - 0
frameworks/C++/cutelyst/setup_pf_pg.sh

@@ -0,0 +1,8 @@
+#!/bin/bash
+
+DRIVER=QPSQL
+UWSGI=
+NGINX=
+PROCESS_OR_THREAD=-p
+
+source ${TROOT}/config.sh

+ 5 - 18
frameworks/C++/cutelyst/setup_thread.sh

@@ -1,21 +1,8 @@
 #!/bin/bash
 
-fw_depends mysql postgresql cutelyst
+DRIVER=
+UWSGI=
+NGINX=
+PROCESS_OR_THREAD=-t
 
-sed -i 's|DatabaseHostName=.*|DatabaseHostName='"$DBHOST"'|g' config/config.ini
-sed -i 's|SendDate=.*|SendDate=false|g' config/config.ini
-
-cd $IROOT
-mkdir cutelyst-benchmarks || true
-cd cutelyst-benchmarks
-
-QT_VERSION_MM=56
-export CMAKE_PREFIX_PATH=/opt/qt${QT_VERSION_MM}:${IROOT}
-
-cmake $TROOT -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$IROOT
-
-make -j $MAX_THREADS
-
-export LD_LIBRARY_PATH=/opt/qt${QT_VERSION_MM}/lib:${IROOT}/lib/x86_64-linux-gnu/
-
-${IROOT}/bin/cutelyst-wsgi --ini ${TROOT}/config/config.ini --http-socket :8080 -a ${IROOT}/cutelyst-benchmarks/src/libcutelyst_benchmarks.so -t $MAX_THREADS &
+source ${TROOT}/config.sh

+ 8 - 0
frameworks/C++/cutelyst/setup_thread_my.sh

@@ -0,0 +1,8 @@
+#!/bin/bash
+
+DRIVER=QMYSQL
+UWSGI=
+NGINX=
+PROCESS_OR_THREAD=-t
+
+source ${TROOT}/config.sh

+ 8 - 0
frameworks/C++/cutelyst/setup_thread_pg.sh

@@ -0,0 +1,8 @@
+#!/bin/bash
+
+DRIVER=QPSQL
+UWSGI=
+NGINX=
+PROCESS_OR_THREAD=-t
+
+source ${TROOT}/config.sh

+ 5 - 20
frameworks/C++/cutelyst/setup_uwsgi_nginx.sh

@@ -1,23 +1,8 @@
 #!/bin/bash
 
-fw_depends mysql postgresql cutelyst nginx
+DRIVER=
+UWSGI=1
+NGINX=1
+PROCESS_OR_THREAD=-p
 
-sed -i 's|DatabaseHostName=.*|DatabaseHostName='"$DBHOST"'|g' config/config_socket.ini
-sed -i 's|SendDate=.*|SendDate=false|g' config/config_socket.ini
-sed -i 's|include .*/conf/uwsgi_params;|include '"${NGINX_HOME}"'/conf/uwsgi_params;|g' nginx.conf
-
-cd $IROOT
-mkdir cutelyst-benchmarks || true
-cd cutelyst-benchmarks
-
-QT_VERSION_MM=56
-export CMAKE_PREFIX_PATH=/opt/qt${QT_VERSION_MM}:${IROOT}
-
-cmake $TROOT -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$IROOT
-
-make -j $MAX_THREADS
-
-nginx -c $TROOT/nginx.conf
-
-export LD_LIBRARY_PATH=/opt/qt${QT_VERSION_MM}/lib:${IROOT}/lib/x86_64-linux-gnu/
-uwsgi --ini ${TROOT}/config/config_socket.ini --cutelyst-app ${IROOT}/cutelyst-benchmarks/src/libcutelyst_benchmarks.so -p $MAX_THREADS &
+source ${TROOT}/config.sh

+ 8 - 0
frameworks/C++/cutelyst/setup_uwsgi_nginx_my.sh

@@ -0,0 +1,8 @@
+#!/bin/bash
+
+DRIVER=QMYSQL
+UWSGI=1
+NGINX=1
+PROCESS_OR_THREAD=-p
+
+source ${TROOT}/config.sh

+ 8 - 0
frameworks/C++/cutelyst/setup_uwsgi_nginx_pg.sh

@@ -0,0 +1,8 @@
+#!/bin/bash
+
+DRIVER=QPSQL
+UWSGI=1
+NGINX=1
+PROCESS_OR_THREAD=-p
+
+source ${TROOT}/config.sh

+ 26 - 21
frameworks/C++/cutelyst/src/cutelyst-benchmarks.cpp

@@ -1,6 +1,6 @@
 #include "cutelyst-benchmarks.h"
 
-#include <Cutelyst/Plugins/StaticSimple/staticsimple.h>
+#include <Cutelyst/Plugins/Utils/Sql>
 
 #include <QtSql/QSqlDatabase>
 #include <QtSql/QSqlError>
@@ -52,27 +52,32 @@ bool cutelyst_benchmarks::init()
 
 bool cutelyst_benchmarks::postFork()
 {
-    QMutexLocker locker(&mutex);
-
-    QSqlDatabase db;
-    db = QSqlDatabase::addDatabase(QLatin1String("QPSQL"), QLatin1String("postgres-") + QThread::currentThread()->objectName());
-    db.setDatabaseName(QLatin1String("hello_world"));
-    db.setUserName(QLatin1String("benchmarkdbuser"));
-    db.setPassword(QLatin1String("benchmarkdbpass"));
-    db.setHostName(config(QLatin1String("DatabaseHostName")).toString());
-    if (!db.open()) {
-        qDebug() << "Error opening PostgreSQL db:" << db << db.connectionName() << db.lastError().databaseText();
-        return false;
-    }
 
-    db = QSqlDatabase::addDatabase(QLatin1String("QMYSQL"), QLatin1String("mysql-") + QThread::currentThread()->objectName());
-    db.setDatabaseName(QLatin1String("hello_world"));
-    db.setUserName(QLatin1String("benchmarkdbuser"));
-    db.setPassword(QLatin1String("benchmarkdbpass"));
-    db.setHostName(config(QLatin1String("DatabaseHostName")).toString());
-    if (!db.open()) {
-        qDebug() << "Error opening MySQL db:" << db << db.connectionName() << db.lastError().databaseText();
-        return false;
+    const auto driver = config(QLatin1String("Driver")).toString();
+    if (driver == QLatin1String("QPSQL")) {
+        QSqlDatabase db;
+        db = QSqlDatabase::addDatabase(driver, Sql::databaseNameThread(QStringLiteral("postgres")));
+        db.setDatabaseName(QLatin1String("hello_world"));
+        db.setUserName(QLatin1String("benchmarkdbuser"));
+        db.setPassword(QLatin1String("benchmarkdbpass"));
+        db.setHostName(config(QLatin1String("DatabaseHostName")).toString());
+        if (!db.open()) {
+            qDebug() << "Error opening PostgreSQL db:" << db << db.connectionName() << db.lastError().databaseText();
+            return false;
+        }
+    } else if (driver == QLatin1String("QMYSQL")) {
+        QMutexLocker locker(&mutex); // MySQL driver is not thread-safe
+
+        QSqlDatabase db;
+        db = QSqlDatabase::addDatabase(driver, Sql::databaseNameThread(QStringLiteral("mysql")));
+        db.setDatabaseName(QLatin1String("hello_world"));
+        db.setUserName(QLatin1String("benchmarkdbuser"));
+        db.setPassword(QLatin1String("benchmarkdbpass"));
+        db.setHostName(config(QLatin1String("DatabaseHostName")).toString());
+        if (!db.open()) {
+            qDebug() << "Error opening MySQL db:" << db << db.connectionName() << db.lastError().databaseText();
+            return false;
+        }
     }
 
     qDebug() << "Connections" << QCoreApplication::applicationPid() << QThread::currentThread() << QSqlDatabase::connectionNames();

+ 8 - 8
frameworks/C++/cutelyst/src/databaseupdatestest.cpp

@@ -16,23 +16,23 @@ DatabaseUpdatesTest::DatabaseUpdatesTest(QObject *parent) : Controller(parent)
 
 void DatabaseUpdatesTest::updates_postgres(Context *c)
 {
-    QSqlQuery query = CPreparedSqlQueryForDatabase(
+    QSqlQuery query = CPreparedSqlQueryThreadForDB(
                 QLatin1String("SELECT randomNumber FROM world WHERE id = :id"),
-                QSqlDatabase::database(QLatin1String("postgres-") + QThread::currentThread()->objectName()));
-    QSqlQuery updateQuery = CPreparedSqlQueryForDatabase(
+                QStringLiteral("postgres"));
+    QSqlQuery updateQuery = CPreparedSqlQueryThreadForDB(
                 QLatin1String("UPDATE world SET randomNumber = :randomNumber WHERE id = :id"),
-                QSqlDatabase::database(QLatin1String("postgres-") + QThread::currentThread()->objectName()));
+                QStringLiteral("postgres"));
     processQuery(c, query, updateQuery);
 }
 
 void DatabaseUpdatesTest::updates_mysql(Context *c)
 {
-    QSqlQuery query = CPreparedSqlQueryForDatabase(
+    QSqlQuery query = CPreparedSqlQueryThreadForDB(
                 QLatin1String("SELECT randomNumber FROM world WHERE id = :id"),
-                QSqlDatabase::database(QLatin1String("mysql-") + QThread::currentThread()->objectName()));
-    QSqlQuery updateQuery = CPreparedSqlQueryForDatabase(
+                QStringLiteral("mysql"));
+    QSqlQuery updateQuery = CPreparedSqlQueryThreadForDB(
                 QLatin1String("UPDATE world SET randomNumber = :randomNumber WHERE id = :id"),
-                QSqlDatabase::database(QLatin1String("mysql-") + QThread::currentThread()->objectName()));
+                QStringLiteral("mysql"));
     processQuery(c, query, updateQuery);
 }
 

+ 4 - 4
frameworks/C++/cutelyst/src/fortunetest.cpp

@@ -13,18 +13,18 @@ FortuneTest::FortuneTest(QObject *parent) : Controller(parent)
 
 void FortuneTest::fortunes_raw_postgres(Context *c)
 {
-    QSqlQuery query = CPreparedSqlQueryForDatabase(
+    QSqlQuery query = CPreparedSqlQueryThreadForDB(
                 QLatin1String("SELECT id, message FROM fortune"),
-                QSqlDatabase::database(QLatin1String("postgres-") + QThread::currentThread()->objectName()));
+                QStringLiteral("postgres"));
     auto fortunes = processQuery(c, query);
     renderRaw(c, fortunes);
 }
 
 void FortuneTest::fortunes_raw_mysql(Context *c)
 {
-    QSqlQuery query = CPreparedSqlQueryForDatabase(
+    QSqlQuery query = CPreparedSqlQueryThreadForDB(
                 QLatin1String("SELECT id, message FROM fortune"),
-                QSqlDatabase::database(QLatin1String("mysql-") + QThread::currentThread()->objectName()));
+                QStringLiteral("mysql"));
     auto fortunes = processQuery(c, query);
     renderRaw(c, fortunes);
 }

+ 4 - 4
frameworks/C++/cutelyst/src/multipledatabasequeriestest.cpp

@@ -16,17 +16,17 @@ MultipleDatabaseQueriesTest::MultipleDatabaseQueriesTest(QObject *parent) : Cont
 
 void MultipleDatabaseQueriesTest::query_postgres(Context *c)
 {
-    QSqlQuery query = CPreparedSqlQueryForDatabase(
+    QSqlQuery query = CPreparedSqlQueryThreadForDB(
                 QLatin1String("SELECT id, randomNumber FROM world WHERE id = :id"),
-                QSqlDatabase::database(QLatin1String("postgres-") + QThread::currentThread()->objectName()));
+                QStringLiteral("postgres"));
     processQuery(c, query);
 }
 
 void MultipleDatabaseQueriesTest::query_mysql(Context *c)
 {
-    QSqlQuery query = CPreparedSqlQueryForDatabase(
+    QSqlQuery query = CPreparedSqlQueryThreadForDB(
                 QLatin1String("SELECT id, randomNumber FROM world WHERE id = :id"),
-                QSqlDatabase::database(QLatin1String("mysql-") + QThread::currentThread()->objectName()));
+                QStringLiteral("mysql"));
     processQuery(c, query);
 }
 

+ 4 - 4
frameworks/C++/cutelyst/src/singledatabasequerytest.cpp

@@ -15,17 +15,17 @@ SingleDatabaseQueryTest::SingleDatabaseQueryTest(QObject *parent) : Controller(p
 
 void SingleDatabaseQueryTest::db_postgres(Context *c)
 {
-    QSqlQuery query = CPreparedSqlQueryForDatabase(
+    QSqlQuery query = CPreparedSqlQueryThreadForDB(
                 QLatin1String("SELECT id, randomNumber FROM world WHERE id = :id"),
-                QSqlDatabase::database(QLatin1String("postgres-") + QThread::currentThread()->objectName()));
+                QStringLiteral("postgres"));
     processQuery(c, query);
 }
 
 void SingleDatabaseQueryTest::db_mysql(Context *c)
 {
-    QSqlQuery query = CPreparedSqlQueryForDatabase(
+    QSqlQuery query = CPreparedSqlQueryThreadForDB(
                 QLatin1String("SELECT id, randomNumber FROM world WHERE id = :id"),
-                QSqlDatabase::database(QLatin1String("mysql-") + QThread::currentThread()->objectName()));
+                QStringLiteral("mysql"));
     processQuery(c, query);
 }
 

+ 2 - 3
toolset/setup/linux/frameworks/cutelyst.sh

@@ -2,7 +2,7 @@
 
 fw_installed cutelyst && return 0
 
-CUTELYST_VER=r1.0.0
+CUTELYST_VER=r1.2.0
 QT_VERSION_MM=56
 QT_VERSION_FULL=562-trusty
 
@@ -25,6 +25,5 @@ cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$IROOT
 
 make -j $MAX_THREADS && sudo make install
 
-echo "" > $IROOT/cutelyst.installed
+echo "QT_VERSION_MM=${QT_VERSION_MM}" > $IROOT/cutelyst.installed
 
-source $IROOT/cutelyst.installed