Browse Source

Upgrade ffead-cpp to v5.2 (#6127)

* Upgrade ffead-cpp to v5.2

* Fixed failing profiled postgresql tests

* Removed postgresql fodler
Sumeet Chhetri 4 years ago
parent
commit
1447f26669
53 changed files with 937 additions and 266 deletions
  1. 127 23
      frameworks/C++/ffead-cpp/benchmark_config.json
  2. 1 1
      frameworks/C++/ffead-cpp/ffead-cpp-apache.dockerfile
  3. 34 0
      frameworks/C++/ffead-cpp/ffead-cpp-base-debug.dockerfile
  4. 5 3
      frameworks/C++/ffead-cpp/ffead-cpp-base.dockerfile
  5. 1 1
      frameworks/C++/ffead-cpp/ffead-cpp-cinatra.dockerfile
  6. 1 1
      frameworks/C++/ffead-cpp/ffead-cpp-crystal-h2o.dockerfile
  7. 2 2
      frameworks/C++/ffead-cpp/ffead-cpp-crystal-http.dockerfile
  8. 39 0
      frameworks/C++/ffead-cpp/ffead-cpp-d-hunt.dockerfile
  9. 1 1
      frameworks/C++/ffead-cpp/ffead-cpp-drogon.dockerfile
  10. 1 1
      frameworks/C++/ffead-cpp/ffead-cpp-go-fasthttp.dockerfile
  11. 1 1
      frameworks/C++/ffead-cpp/ffead-cpp-go-gnet.dockerfile
  12. 7 5
      frameworks/C++/ffead-cpp/ffead-cpp-h2o.dockerfile
  13. 2 16
      frameworks/C++/ffead-cpp/ffead-cpp-java-base.dockerfile
  14. 1 1
      frameworks/C++/ffead-cpp/ffead-cpp-java-firenio.dockerfile
  15. 1 1
      frameworks/C++/ffead-cpp/ffead-cpp-java-rapidoid.dockerfile
  16. 1 1
      frameworks/C++/ffead-cpp/ffead-cpp-java-wizzardo-http.dockerfile
  17. 29 0
      frameworks/C++/ffead-cpp/ffead-cpp-julia-http.dockerfile
  18. 1 1
      frameworks/C++/ffead-cpp/ffead-cpp-libreactor.dockerfile
  19. 1 1
      frameworks/C++/ffead-cpp/ffead-cpp-lithium.dockerfile
  20. 1 1
      frameworks/C++/ffead-cpp/ffead-cpp-mongo-raw.dockerfile
  21. 1 1
      frameworks/C++/ffead-cpp/ffead-cpp-mysql.dockerfile
  22. 1 1
      frameworks/C++/ffead-cpp/ffead-cpp-nginx.dockerfile
  23. 1 1
      frameworks/C++/ffead-cpp/ffead-cpp-postgresql-raw-async.dockerfile
  24. 7 0
      frameworks/C++/ffead-cpp/ffead-cpp-postgresql-raw-clibpqb-profiled.dockerfile
  25. 7 0
      frameworks/C++/ffead-cpp/ffead-cpp-postgresql-raw-profiled.dockerfile
  26. 1 1
      frameworks/C++/ffead-cpp/ffead-cpp-postgresql-raw.dockerfile
  27. 1 1
      frameworks/C++/ffead-cpp/ffead-cpp-postgresql.dockerfile
  28. 1 1
      frameworks/C++/ffead-cpp/ffead-cpp-rust-actix.dockerfile
  29. 2 16
      frameworks/C++/ffead-cpp/ffead-cpp-rust-base.dockerfile
  30. 1 1
      frameworks/C++/ffead-cpp/ffead-cpp-rust-hyper.dockerfile
  31. 2 14
      frameworks/C++/ffead-cpp/ffead-cpp-rust-rocket-base.dockerfile
  32. 1 1
      frameworks/C++/ffead-cpp/ffead-cpp-rust-rocket.dockerfile
  33. 85 0
      frameworks/C++/ffead-cpp/ffead-cpp-sql-raw-clibpqb-profiled-base.dockerfile
  34. 85 0
      frameworks/C++/ffead-cpp/ffead-cpp-sql-raw-profiled-base.dockerfile
  35. 31 0
      frameworks/C++/ffead-cpp/ffead-cpp-swift-nio.dockerfile
  36. 2 15
      frameworks/C++/ffead-cpp/ffead-cpp-v-base.dockerfile
  37. 2 2
      frameworks/C++/ffead-cpp/ffead-cpp-v-picov.dockerfile
  38. 1 1
      frameworks/C++/ffead-cpp/ffead-cpp-v-vweb.dockerfile
  39. 1 1
      frameworks/C++/ffead-cpp/ffead-cpp.dockerfile
  40. 7 7
      frameworks/C++/ffead-cpp/install-mimalloc-snmalloc.sh
  41. 53 6
      frameworks/C++/ffead-cpp/install_ffead-cpp-backends.sh
  42. 28 16
      frameworks/C++/ffead-cpp/install_ffead-cpp-dependencies.sh
  43. 16 7
      frameworks/C++/ffead-cpp/install_ffead-cpp-framework.sh
  44. 0 6
      frameworks/C++/ffead-cpp/install_ffead-cpp-httpd.sh
  45. 61 0
      frameworks/C++/ffead-cpp/install_ffead-cpp-sql-raw-profiled.sh
  46. 14 3
      frameworks/C++/ffead-cpp/run_ffead.sh
  47. 76 0
      frameworks/C++/ffead-cpp/sql-profiled-install-clang.sh
  48. 69 0
      frameworks/C++/ffead-cpp/sql-profiled-install.sh
  49. 9 9
      frameworks/C++/ffead-cpp/te-benchmark-um-pq-async/include/TeBkUmLpqAsync.h
  50. 48 37
      frameworks/C++/ffead-cpp/te-benchmark-um-pq-async/src/TeBkUmLpqAsync.cpp
  51. 6 6
      frameworks/C++/ffead-cpp/te-benchmark-um-pq/include/TeBkUmLpq.h
  52. 59 50
      frameworks/C++/ffead-cpp/te-benchmark-um-pq/src/TeBkUmLpq.cpp
  53. 1 1
      frameworks/C++/ffead-cpp/te-benchmark-um/src/TeBkUm.cpp

+ 127 - 23
frameworks/C++/ffead-cpp/benchmark_config.json

@@ -174,7 +174,7 @@
 			"language": "C++",
 			"language": "C++",
 			"orm": "None",
 			"orm": "None",
 			"platform": "None",
 			"platform": "None",
-			"webserver": "crystal",
+			"webserver": "crystal-http",
 			"os": "Linux",
 			"os": "Linux",
 			"database_os": "Linux",
 			"database_os": "Linux",
 			"display_name": "ffead-cpp-crystal-http",
 			"display_name": "ffead-cpp-crystal-http",
@@ -182,7 +182,7 @@
 			"versus": "",
 			"versus": "",
 			"tags": []
 			"tags": []
 		},
 		},
-		"rust-actix": {
+		"d-hunt": {
 			"json_url": "/te-benchmark-um/json",
 			"json_url": "/te-benchmark-um/json",
 			"plaintext_url": "/plaintext",
 			"plaintext_url": "/plaintext",
 			"port": 8080,
 			"port": 8080,
@@ -193,15 +193,15 @@
 			"language": "C++",
 			"language": "C++",
 			"orm": "None",
 			"orm": "None",
 			"platform": "None",
 			"platform": "None",
-			"webserver": "actix",
+			"webserver": "hunt",
 			"os": "Linux",
 			"os": "Linux",
 			"database_os": "Linux",
 			"database_os": "Linux",
-			"display_name": "ffead-cpp-rust-actix",
+			"display_name": "ffead-cpp-d-hunt",
 			"notes": "",
 			"notes": "",
 			"versus": "",
 			"versus": "",
 			"tags": []
 			"tags": []
 		},
 		},
-		"rust-hyper": {
+		"go-gnet": {
 			"json_url": "/te-benchmark-um/json",
 			"json_url": "/te-benchmark-um/json",
 			"plaintext_url": "/plaintext",
 			"plaintext_url": "/plaintext",
 			"port": 8080,
 			"port": 8080,
@@ -212,15 +212,15 @@
 			"language": "C++",
 			"language": "C++",
 			"orm": "None",
 			"orm": "None",
 			"platform": "None",
 			"platform": "None",
-			"webserver": "hyper",
+			"webserver": "gnet",
 			"os": "Linux",
 			"os": "Linux",
 			"database_os": "Linux",
 			"database_os": "Linux",
-			"display_name": "ffead-cpp-rust-hyper",
+			"display_name": "ffead-cpp-go-gnet",
 			"notes": "",
 			"notes": "",
 			"versus": "",
 			"versus": "",
 			"tags": []
 			"tags": []
 		},
 		},
-		"rust-thruster": {
+		"go-fasthttp": {
 			"json_url": "/te-benchmark-um/json",
 			"json_url": "/te-benchmark-um/json",
 			"plaintext_url": "/plaintext",
 			"plaintext_url": "/plaintext",
 			"port": 8080,
 			"port": 8080,
@@ -231,15 +231,34 @@
 			"language": "C++",
 			"language": "C++",
 			"orm": "None",
 			"orm": "None",
 			"platform": "None",
 			"platform": "None",
-			"webserver": "thruster",
+			"webserver": "fasthttp",
 			"os": "Linux",
 			"os": "Linux",
 			"database_os": "Linux",
 			"database_os": "Linux",
-			"display_name": "ffead-cpp-rust-thruster",
+			"display_name": "ffead-cpp-go-fasthttp",
+			"notes": "",
+			"versus": "",
+			"tags": []
+		},
+		"julia-http": {
+			"json_url": "/te-benchmark-um/json",
+			"plaintext_url": "/plaintext",
+			"port": 8080,
+			"approach": "Realistic",
+			"classification": "Fullstack",
+			"database": "None",
+			"framework": "ffead-cpp",
+			"language": "C++",
+			"orm": "None",
+			"platform": "None",
+			"webserver": "julia-http",
+			"os": "Linux",
+			"database_os": "Linux",
+			"display_name": "ffead-cpp-julia-http",
 			"notes": "",
 			"notes": "",
 			"versus": "",
 			"versus": "",
 			"tags": ["broken"]
 			"tags": ["broken"]
 		},
 		},
-		"rust-rocket": {
+		"swift-nio": {
 			"json_url": "/te-benchmark-um/json",
 			"json_url": "/te-benchmark-um/json",
 			"plaintext_url": "/plaintext",
 			"plaintext_url": "/plaintext",
 			"port": 8080,
 			"port": 8080,
@@ -250,15 +269,15 @@
 			"language": "C++",
 			"language": "C++",
 			"orm": "None",
 			"orm": "None",
 			"platform": "None",
 			"platform": "None",
-			"webserver": "rocket",
+			"webserver": "swift-nio",
 			"os": "Linux",
 			"os": "Linux",
 			"database_os": "Linux",
 			"database_os": "Linux",
-			"display_name": "ffead-cpp-rust-rocket",
+			"display_name": "ffead-cpp-swift-nio",
 			"notes": "",
 			"notes": "",
 			"versus": "",
 			"versus": "",
 			"tags": ["broken"]
 			"tags": ["broken"]
 		},
 		},
-		"go-gnet": {
+		"rust-actix": {
 			"json_url": "/te-benchmark-um/json",
 			"json_url": "/te-benchmark-um/json",
 			"plaintext_url": "/plaintext",
 			"plaintext_url": "/plaintext",
 			"port": 8080,
 			"port": 8080,
@@ -269,15 +288,15 @@
 			"language": "C++",
 			"language": "C++",
 			"orm": "None",
 			"orm": "None",
 			"platform": "None",
 			"platform": "None",
-			"webserver": "gnet",
+			"webserver": "actix",
 			"os": "Linux",
 			"os": "Linux",
 			"database_os": "Linux",
 			"database_os": "Linux",
-			"display_name": "ffead-cpp-go-gnet",
+			"display_name": "ffead-cpp-rust-actix",
 			"notes": "",
 			"notes": "",
 			"versus": "",
 			"versus": "",
 			"tags": []
 			"tags": []
 		},
 		},
-		"go-fasthttp": {
+		"rust-hyper": {
 			"json_url": "/te-benchmark-um/json",
 			"json_url": "/te-benchmark-um/json",
 			"plaintext_url": "/plaintext",
 			"plaintext_url": "/plaintext",
 			"port": 8080,
 			"port": 8080,
@@ -288,15 +307,15 @@
 			"language": "C++",
 			"language": "C++",
 			"orm": "None",
 			"orm": "None",
 			"platform": "None",
 			"platform": "None",
-			"webserver": "fasthttp",
+			"webserver": "hyper",
 			"os": "Linux",
 			"os": "Linux",
 			"database_os": "Linux",
 			"database_os": "Linux",
-			"display_name": "ffead-cpp-go-fasthttp",
+			"display_name": "ffead-cpp-rust-hyper",
 			"notes": "",
 			"notes": "",
 			"versus": "",
 			"versus": "",
 			"tags": []
 			"tags": []
 		},
 		},
-		"v-vweb": {
+		"rust-thruster": {
 			"json_url": "/te-benchmark-um/json",
 			"json_url": "/te-benchmark-um/json",
 			"plaintext_url": "/plaintext",
 			"plaintext_url": "/plaintext",
 			"port": 8080,
 			"port": 8080,
@@ -307,15 +326,34 @@
 			"language": "C++",
 			"language": "C++",
 			"orm": "None",
 			"orm": "None",
 			"platform": "None",
 			"platform": "None",
-			"webserver": "vweb",
+			"webserver": "thruster",
 			"os": "Linux",
 			"os": "Linux",
 			"database_os": "Linux",
 			"database_os": "Linux",
-			"display_name": "ffead-cpp-v-vweb",
+			"display_name": "ffead-cpp-rust-thruster",
 			"notes": "",
 			"notes": "",
 			"versus": "",
 			"versus": "",
 			"tags": ["broken"]
 			"tags": ["broken"]
 		},
 		},
-		"v-picov": {
+		"rust-rocket": {
+			"json_url": "/te-benchmark-um/json",
+			"plaintext_url": "/plaintext",
+			"port": 8080,
+			"approach": "Realistic",
+			"classification": "Fullstack",
+			"database": "None",
+			"framework": "ffead-cpp",
+			"language": "C++",
+			"orm": "None",
+			"platform": "None",
+			"webserver": "rocket",
+			"os": "Linux",
+			"database_os": "Linux",
+			"display_name": "ffead-cpp-rust-rocket",
+			"notes": "",
+			"versus": "",
+			"tags": ["broken"]
+		},
+		"v-vweb": {
 			"json_url": "/te-benchmark-um/json",
 			"json_url": "/te-benchmark-um/json",
 			"plaintext_url": "/plaintext",
 			"plaintext_url": "/plaintext",
 			"port": 8080,
 			"port": 8080,
@@ -329,6 +367,30 @@
 			"webserver": "vweb",
 			"webserver": "vweb",
 			"os": "Linux",
 			"os": "Linux",
 			"database_os": "Linux",
 			"database_os": "Linux",
+			"display_name": "ffead-cpp-v-vweb",
+			"notes": "",
+			"versus": "",
+			"tags": ["broken"]
+		},
+		"v-picov": {
+			"json_url": "/te-benchmark-um-pq/json",
+			"plaintext_url": "/plaintext",
+			"db_url": "/te-benchmark-um-pq/db",
+			"query_url": "/te-benchmark-um-pq/queries?queries=",
+			"fortune_url": "/te-benchmark-um-pq/fortunes",
+			"update_url": "/te-benchmark-um-pq/updates?queries=",
+			"cached_query_url": "/te-benchmark-um-pq/cached-worlds?count=",
+			"port": 8080,
+			"approach": "Realistic",
+			"classification": "Fullstack",
+			"database": "postgres",
+			"framework": "ffead-cpp",
+			"language": "C++",
+			"orm": "Raw",
+			"platform": "None",
+			"webserver": "picov",
+			"os": "Linux",
+			"database_os": "Linux",
 			"display_name": "ffead-cpp-v-picov",
 			"display_name": "ffead-cpp-v-picov",
 			"notes": "",
 			"notes": "",
 			"versus": "",
 			"versus": "",
@@ -462,6 +524,48 @@
 			"versus": "",
 			"versus": "",
 			"tags": []
 			"tags": []
 		},
 		},
+		"postgresql-raw-profiled": {
+			"db_url": "/te-benchmark-um-pq/db",
+			"query_url": "/te-benchmark-um-pq/queries?queries=",
+			"fortune_url": "/te-benchmark-um-pq/fortunes",
+			"update_url": "/te-benchmark-um-pq/updates?queries=",
+			"port": 8080,
+			"approach": "Realistic",
+			"classification": "Fullstack",
+			"database": "postgres",
+			"framework": "ffead-cpp",
+			"language": "C++",
+			"orm": "Raw",
+			"platform": "None",
+			"webserver": "ffead-cpp",
+			"os": "Linux",
+			"database_os": "Linux",
+			"display_name": "ffead-cpp-postgresql-raw-profiled",
+			"notes": "memory profiled",
+			"versus": "",
+			"tags": []
+		},
+		"postgresql-raw-clibpqb-profiled": {
+			"db_url": "/te-benchmark-um-pq/db",
+			"query_url": "/te-benchmark-um-pq/queries?queries=",
+			"fortune_url": "/te-benchmark-um-pq/fortunes",
+			"update_url": "/te-benchmark-um-pq/bupdates?queries=",
+			"port": 8080,
+			"approach": "Realistic",
+			"classification": "Fullstack",
+			"database": "postgres",
+			"framework": "ffead-cpp",
+			"language": "C++",
+			"orm": "Raw",
+			"platform": "None",
+			"webserver": "ffead-cpp",
+			"os": "Linux",
+			"database_os": "Linux",
+			"display_name": "ffead-cpp-postgresql-raw-clibpqb-profiled",
+			"notes": "memory libpq batch patch profiled",
+			"versus": "",
+			"tags": []
+		},
 		"postgresql-raw-async": {
 		"postgresql-raw-async": {
 			"json_url": "/te-benchmark-um-pq-async/json",
 			"json_url": "/te-benchmark-um-pq-async/json",
 			"plaintext_url": "/plaintext",
 			"plaintext_url": "/plaintext",

+ 1 - 1
frameworks/C++/ffead-cpp/ffead-cpp-apache.dockerfile

@@ -1,4 +1,4 @@
-FROM sumeetchhetri/ffead-cpp-5.0-base:5.1
+FROM sumeetchhetri/ffead-cpp-5.0-base:5.2
 
 
 ENV IROOT=/installs
 ENV IROOT=/installs
 
 

+ 34 - 0
frameworks/C++/ffead-cpp/ffead-cpp-base-debug.dockerfile

@@ -0,0 +1,34 @@
+FROM ubuntu:20.04
+LABEL maintainer="Sumeet Chhetri"
+LABEL version="5.2-debug"
+LABEL description="Base ffead-cpp docker image with commit id - master"
+
+ENV IROOT=/installs
+ENV DEBUG=on
+
+ENV DEBIAN_FRONTEND noninteractive
+RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections
+
+RUN mkdir /installs
+COPY te-benchmark-um/ /installs/te-benchmark-um/
+COPY te-benchmark-um-pq/ /installs/te-benchmark-um-pq/
+COPY te-benchmark-um-mgr/ /installs/te-benchmark-um-mgr/
+
+WORKDIR ${IROOT}
+
+COPY install_ffead-cpp-dependencies.sh ${IROOT}/
+RUN chmod 755 ${IROOT}/install_ffead-cpp-dependencies.sh
+RUN ./install_ffead-cpp-dependencies.sh
+
+COPY install_ffead-cpp-backends.sh ${IROOT}/
+RUN chmod 755 ${IROOT}/install_ffead-cpp-backends.sh
+RUN ./install_ffead-cpp-backends.sh
+
+COPY install_ffead-cpp-framework.sh install_ffead-cpp-httpd.sh install_ffead-cpp-nginx.sh server.sh ${IROOT}/
+RUN chmod 755 ${IROOT}/*.sh
+RUN ./install_ffead-cpp-framework.sh && ./install_ffead-cpp-httpd.sh && ./install_ffead-cpp-nginx.sh && cd ${IROOT}/ffead-cpp-src && make clean && rm -rf CMakeFiles
+
+COPY run_ffead.sh /
+RUN chmod 755 /run_ffead.sh
+
+RUN apt update -yqq && apt install -yqq gdb net-tools vim

+ 5 - 3
frameworks/C++/ffead-cpp/ffead-cpp-base.dockerfile

@@ -1,15 +1,17 @@
-FROM buildpack-deps:bionic
+FROM ubuntu:20.04
 LABEL maintainer="Sumeet Chhetri"
 LABEL maintainer="Sumeet Chhetri"
-LABEL version="5.1"
+LABEL version="5.2"
 LABEL description="Base ffead-cpp docker image with commit id - master"
 LABEL description="Base ffead-cpp docker image with commit id - master"
 
 
 ENV IROOT=/installs
 ENV IROOT=/installs
 ENV DEBUG=off
 ENV DEBUG=off
 
 
+ENV DEBIAN_FRONTEND noninteractive
+RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections
+
 RUN mkdir /installs
 RUN mkdir /installs
 COPY te-benchmark-um/ /installs/te-benchmark-um/
 COPY te-benchmark-um/ /installs/te-benchmark-um/
 COPY te-benchmark-um-pq/ /installs/te-benchmark-um-pq/
 COPY te-benchmark-um-pq/ /installs/te-benchmark-um-pq/
-COPY te-benchmark-um-pq-async/ /installs/te-benchmark-um-pq-async/
 COPY te-benchmark-um-mgr/ /installs/te-benchmark-um-mgr/
 COPY te-benchmark-um-mgr/ /installs/te-benchmark-um-mgr/
 
 
 WORKDIR ${IROOT}
 WORKDIR ${IROOT}

+ 1 - 1
frameworks/C++/ffead-cpp/ffead-cpp-cinatra.dockerfile

@@ -1,4 +1,4 @@
-FROM sumeetchhetri/ffead-cpp-5.0-base:5.1
+FROM sumeetchhetri/ffead-cpp-5.0-base:5.2
 
 
 ENV IROOT=/installs
 ENV IROOT=/installs
 
 

+ 1 - 1
frameworks/C++/ffead-cpp/ffead-cpp-crystal-h2o.dockerfile

@@ -1,4 +1,4 @@
-FROM sumeetchhetri/ffead-cpp-5.0-base:5.1
+FROM sumeetchhetri/ffead-cpp-5.0-base:5.2
 
 
 ENV IROOT=/installs
 ENV IROOT=/installs
 
 

+ 2 - 2
frameworks/C++/ffead-cpp/ffead-cpp-crystal-http.dockerfile

@@ -1,4 +1,4 @@
-FROM sumeetchhetri/ffead-cpp-5.0-base:5.1
+FROM sumeetchhetri/ffead-cpp-5.0-base:5.2
 
 
 ENV IROOT=/installs
 ENV IROOT=/installs
 
 
@@ -10,7 +10,7 @@ RUN rm -f /usr/local/lib/libffead-* /usr/local/lib/libte_benc* /usr/local/lib/li
 	ln -s ${IROOT}/ffead-cpp-5.0/lib/libdinter.so /usr/local/lib/libdinter.so && \
 	ln -s ${IROOT}/ffead-cpp-5.0/lib/libdinter.so /usr/local/lib/libdinter.so && \
 	ldconfig
 	ldconfig
 
 
-RUN curl -sL "https://keybase.io/crystal/pgp_keys.asc" | apt-key add - \
+RUN apt-get update -y && apt install -y --no-install-recommends gnupg && curl -sL "https://keybase.io/crystal/pgp_keys.asc" | apt-key add - \
 	&& echo "deb https://dist.crystal-lang.org/apt crystal main" | tee /etc/apt/sources.list.d/crystal.list \
 	&& echo "deb https://dist.crystal-lang.org/apt crystal main" | tee /etc/apt/sources.list.d/crystal.list \
 	&& apt-get update -y && apt install -y --no-install-recommends crystal && rm -rf /var/lib/apt/lists/*
 	&& apt-get update -y && apt install -y --no-install-recommends crystal && rm -rf /var/lib/apt/lists/*
 WORKDIR ${IROOT}/lang-server-backends/crystal/crystal
 WORKDIR ${IROOT}/lang-server-backends/crystal/crystal

+ 39 - 0
frameworks/C++/ffead-cpp/ffead-cpp-d-hunt.dockerfile

@@ -0,0 +1,39 @@
+FROM sumeetchhetri/ffead-cpp-5.0-base:5.2
+
+ENV IROOT=/installs
+
+ENV DEBIAN_FRONTEND noninteractive
+RUN rm -f /usr/local/lib/libffead-* /usr/local/lib/libte_benc* /usr/local/lib/libinter.so /usr/local/lib/libdinter.so && \
+	ln -s ${IROOT}/ffead-cpp-5.0/lib/libte_benchmark_um.so /usr/local/lib/libte_benchmark_um.so && \
+	ln -s ${IROOT}/ffead-cpp-5.0/lib/libffead-modules.so /usr/local/lib/libffead-modules.so && \
+	ln -s ${IROOT}/ffead-cpp-5.0/lib/libffead-framework.so /usr/local/lib/libffead-framework.so && \
+	ln -s ${IROOT}/ffead-cpp-5.0/lib/libinter.so /usr/local/lib/libinter.so && \
+	ln -s ${IROOT}/ffead-cpp-5.0/lib/libdinter.so /usr/local/lib/libdinter.so && \
+	ldconfig
+
+ENV LDC_VERSION 1.24.0
+ENV LDC_PATH /usr/local/ldc
+
+RUN apt-get update && \
+    apt-get install -y --no-install-recommends curl wget gcc ca-certificates xz-utils libxml2 make git zlib1g-dev && \
+    rm -rf /var/lib/apt/lists/* /var/cache/apt/*
+
+RUN set -ex && \
+        wget -q https://github.com/ldc-developers/ldc/releases/download/v${LDC_VERSION}/ldc2-${LDC_VERSION}-linux-x86_64.tar.xz && \
+        tar xf ldc2-${LDC_VERSION}-linux-x86_64.tar.xz && \
+        mv ldc2-${LDC_VERSION}-linux-x86_64 ${LDC_PATH} && \
+        rm -rf ldc2*
+
+ENV PATH="${LDC_PATH}/bin:${PATH}"
+ENV LIBRARY_PATH="${LDC_PATH}/lib:${LIBRARY_PATH}"
+ENV LD_LIBRARY_PATH="${LDC_PATH}/lib:/usr/local/lib:${LD_LIBRARY_PATH}"
+
+RUN chmod 755 -R $LDC_PATH
+
+WORKDIR ${IROOT}/lang-server-backends/d/hunt
+RUN dub upgrade --verbose && dub build --build=release --arch=x86_64 --compiler=ldc2 -c=minihttp -f && cp hunt-minihttp ${IROOT}/ \
+	&& chmod +x ${IROOT}/hunt-minihttp && rm -rf ${IROOT}/lang-server-backends
+
+WORKDIR /
+
+CMD ./run_ffead.sh ffead-cpp-5.0 d-hunt

+ 1 - 1
frameworks/C++/ffead-cpp/ffead-cpp-drogon.dockerfile

@@ -1,4 +1,4 @@
-FROM sumeetchhetri/ffead-cpp-5.0-base:5.1
+FROM sumeetchhetri/ffead-cpp-5.0-base:5.2
 
 
 ENV IROOT=/installs
 ENV IROOT=/installs
 
 

+ 1 - 1
frameworks/C++/ffead-cpp/ffead-cpp-go-fasthttp.dockerfile

@@ -1,4 +1,4 @@
-FROM sumeetchhetri/ffead-cpp-5.0-base:5.1
+FROM sumeetchhetri/ffead-cpp-5.0-base:5.2
 
 
 ENV IROOT=/installs
 ENV IROOT=/installs
 
 

+ 1 - 1
frameworks/C++/ffead-cpp/ffead-cpp-go-gnet.dockerfile

@@ -1,4 +1,4 @@
-FROM sumeetchhetri/ffead-cpp-5.0-base:5.1
+FROM sumeetchhetri/ffead-cpp-5.0-base:5.2
 
 
 ENV IROOT=/installs
 ENV IROOT=/installs
 
 

+ 7 - 5
frameworks/C++/ffead-cpp/ffead-cpp-h2o.dockerfile

@@ -1,7 +1,8 @@
-FROM sumeetchhetri/ffead-cpp-5.0-base:5.1
+FROM sumeetchhetri/ffead-cpp-5.0-base:5.2
 
 
 ENV IROOT=/installs
 ENV IROOT=/installs
 
 
+ENV DEBIAN_FRONTEND noninteractive
 RUN rm -f /usr/local/lib/libffead-* /usr/local/lib/libte_benc* /usr/local/lib/libinter.so /usr/local/lib/libdinter.so && \
 RUN rm -f /usr/local/lib/libffead-* /usr/local/lib/libte_benc* /usr/local/lib/libinter.so /usr/local/lib/libdinter.so && \
 	ln -s ${IROOT}/ffead-cpp-5.0/lib/libte_benchmark_um.so /usr/local/lib/libte_benchmark_um.so && \
 	ln -s ${IROOT}/ffead-cpp-5.0/lib/libte_benchmark_um.so /usr/local/lib/libte_benchmark_um.so && \
 	ln -s ${IROOT}/ffead-cpp-5.0/lib/libffead-modules.so /usr/local/lib/libffead-modules.so && \
 	ln -s ${IROOT}/ffead-cpp-5.0/lib/libffead-modules.so /usr/local/lib/libffead-modules.so && \
@@ -11,8 +12,8 @@ RUN rm -f /usr/local/lib/libffead-* /usr/local/lib/libte_benc* /usr/local/lib/li
 	ldconfig
 	ldconfig
 
 
 WORKDIR ${IROOT}
 WORKDIR ${IROOT}
-RUN apt-get update -y && apt-get install -y --no-install-recommends autoconf bison cmake curl file flex g++ git libssl-dev libtool libz-dev make wget \
-	 && rm -rf /var/lib/apt/lists/*
+RUN apt-get update -y && apt-get install -y --no-install-recommends autoconf bison cmake curl file flex g++ git libnuma-dev libpq-dev \
+	libssl-dev libtool libyajl-dev libz-dev make wget && rm -rf /var/lib/apt/lists/*
 
 
 ARG H2O_VERSION=v2.2.6
 ARG H2O_VERSION=v2.2.6
 
 
@@ -24,14 +25,15 @@ RUN mkdir -p "${H2O_BUILD_DIR}/build" && \
     wget -qO - "https://github.com/h2o/h2o/archive/${H2O_VERSION}.tar.gz" | \
     wget -qO - "https://github.com/h2o/h2o/archive/${H2O_VERSION}.tar.gz" | \
     tar xz --strip-components=1 && \
     tar xz --strip-components=1 && \
     cd build && \
     cd build && \
-    cmake -DCMAKE_C_FLAGS="-flto -march=native" \
+    cmake -DCMAKE_INSTALL_PREFIX="$H2O_PREFIX" -DCMAKE_C_FLAGS="-flto -march=native" \
           -DCMAKE_AR=/usr/bin/gcc-ar -DCMAKE_RANLIB=/usr/bin/gcc-ranlib .. && \
           -DCMAKE_AR=/usr/bin/gcc-ar -DCMAKE_RANLIB=/usr/bin/gcc-ranlib .. && \
     make -j "$(nproc)" install && \
     make -j "$(nproc)" install && \
     cd ../.. && \
     cd ../.. && \
     rm -rf "$H2O_BUILD_DIR"
     rm -rf "$H2O_BUILD_DIR"
 
 
 WORKDIR ${IROOT}/lang-server-backends/c/h2o
 WORKDIR ${IROOT}/lang-server-backends/c/h2o
-RUN cmake . && make && cp h2o_app $IROOT/ && rm -rf ${IROOT}/lang-server-backends
+RUN chmod +x h2o.sh
+#RUN ./h2o.sh && rm -rf ${IROOT}/lang-server-backends
 
 
 WORKDIR /
 WORKDIR /
 
 

+ 2 - 16
frameworks/C++/ffead-cpp/ffead-cpp-java-base.dockerfile

@@ -1,6 +1,6 @@
-FROM sumeetchhetri/ffead-cpp-5.0-base:5.1
+FROM sumeetchhetri/ffead-cpp-5.0-base:5.2
 LABEL maintainer="Sumeet Chhetri"
 LABEL maintainer="Sumeet Chhetri"
-LABEL version="5.1"
+LABEL version="5.2"
 LABEL description="Base java docker image with master code"
 LABEL description="Base java docker image with master code"
 
 
 ENV IROOT=/installs
 ENV IROOT=/installs
@@ -18,17 +18,3 @@ RUN cd ${IROOT}/lang-server-backends/java/firenio && mvn compile assembly:single
 RUN cd ${IROOT}/lang-server-backends/java/rapidoid && mvn compile assembly:single -q && cp target/rapidoid-ffead-cpp-1.0-jar-with-dependencies.jar $IROOT/
 RUN cd ${IROOT}/lang-server-backends/java/rapidoid && mvn compile assembly:single -q && cp target/rapidoid-ffead-cpp-1.0-jar-with-dependencies.jar $IROOT/
 RUN cd ${IROOT}/lang-server-backends/java/wizzardo-http && gradle --refresh-dependencies clean fatJar -q && cp build/libs/wizzardo-ffead-cpp-all-1.0.jar $IROOT/
 RUN cd ${IROOT}/lang-server-backends/java/wizzardo-http && gradle --refresh-dependencies clean fatJar -q && cp build/libs/wizzardo-ffead-cpp-all-1.0.jar $IROOT/
 RUN rm -rf ${IROOT}/lang-server-backends
 RUN rm -rf ${IROOT}/lang-server-backends
-
-FROM buildpack-deps:bionic
-RUN apt update -yqq && apt install --no-install-recommends -yqq uuid-dev odbc-postgresql unixodbc unixodbc-dev memcached \
-	libmemcached-dev libssl-dev libhiredis-dev zlib1g-dev libcurl4-openssl-dev redis-server default-jre libpq-dev && rm -rf /var/lib/apt/lists/*
-COPY --from=0 /installs/ffead-cpp-5.0 /installs/ffead-cpp-5.0
-COPY --from=0 /installs/ffead-cpp-5.0-sql /installs/ffead-cpp-5.0-sql
-COPY --from=0 /installs/firenio-ffead-cpp-0.1-jar-with-dependencies.jar /installs/
-COPY --from=0 /installs/rapidoid-ffead-cpp-1.0-jar-with-dependencies.jar /installs/
-COPY --from=0 /installs/wizzardo-ffead-cpp-all-1.0.jar /installs/
-RUN mkdir -p /installs/snmalloc-0.4.2/build
-COPY --from=0 /installs/snmalloc-0.4.2/build/libsnmallocshim-1mib.so /installs/snmalloc-0.4.2/build/
-COPY --from=0 /usr/lib/x86_64-linux-gnu/odbc /usr/lib/x86_64-linux-gnu/odbc
-COPY --from=0 /usr/local/lib /usr/local/lib
-COPY --from=0 /run_ffead.sh /

+ 1 - 1
frameworks/C++/ffead-cpp/ffead-cpp-java-firenio.dockerfile

@@ -1,4 +1,4 @@
-FROM sumeetchhetri/ffead-cpp-5.0-java-base:5.1
+FROM sumeetchhetri/ffead-cpp-5.0-java-base:5.2
 
 
 ENV IROOT=/installs
 ENV IROOT=/installs
 
 

+ 1 - 1
frameworks/C++/ffead-cpp/ffead-cpp-java-rapidoid.dockerfile

@@ -1,4 +1,4 @@
-FROM sumeetchhetri/ffead-cpp-5.0-java-base:5.1
+FROM sumeetchhetri/ffead-cpp-5.0-java-base:5.2
 
 
 ENV IROOT=/installs
 ENV IROOT=/installs
 
 

+ 1 - 1
frameworks/C++/ffead-cpp/ffead-cpp-java-wizzardo-http.dockerfile

@@ -1,4 +1,4 @@
-FROM sumeetchhetri/ffead-cpp-5.0-java-base:5.1
+FROM sumeetchhetri/ffead-cpp-5.0-java-base:5.2
 
 
 ENV IROOT=/installs
 ENV IROOT=/installs
 
 

+ 29 - 0
frameworks/C++/ffead-cpp/ffead-cpp-julia-http.dockerfile

@@ -0,0 +1,29 @@
+FROM sumeetchhetri/ffead-cpp-5.0-base:5.2
+
+ENV IROOT=/installs
+
+ENV DEBIAN_FRONTEND noninteractive
+RUN rm -f /usr/local/lib/libffead-* /usr/local/lib/libte_benc* /usr/local/lib/libinter.so /usr/local/lib/libdinter.so && \
+	ln -s ${IROOT}/ffead-cpp-5.0/lib/libte_benchmark_um.so /usr/local/lib/libte_benchmark_um.so && \
+	ln -s ${IROOT}/ffead-cpp-5.0/lib/libffead-modules.so /usr/local/lib/libffead-modules.so && \
+	ln -s ${IROOT}/ffead-cpp-5.0/lib/libffead-framework.so /usr/local/lib/libffead-framework.so && \
+	ln -s ${IROOT}/ffead-cpp-5.0/lib/libinter.so /usr/local/lib/libinter.so && \
+	ln -s ${IROOT}/ffead-cpp-5.0/lib/libdinter.so /usr/local/lib/libdinter.so && \
+	ldconfig
+
+WORKDIR ${IROOT}
+#RUN apt-get update -y && apt-get install -y --no-install-recommends julia
+RUN wget --no-check-certificate -q https://julialang-s3.julialang.org/bin/linux/x64/1.5/julia-1.5.2-linux-x86_64.tar.gz
+RUN tar -xzf julia-1.5.2-linux-x86_64.tar.gz
+RUN mv julia-1.5.2 /opt/
+RUN rm -f julia-1.5.2-linux-x86_64.tar.gz
+ENV PATH="/opt/julia-1.5.2/bin:${PATH}"
+
+RUN julia -e 'import Pkg; Pkg.update()' && \
+    julia -e 'import Pkg; Pkg.add("HTTP")' && \
+    julia -e 'import Pkg; Pkg.precompile()'
+
+WORKDIR /
+
+CMD ./run_ffead.sh ffead-cpp-5.0 julia-http
+

+ 1 - 1
frameworks/C++/ffead-cpp/ffead-cpp-libreactor.dockerfile

@@ -1,4 +1,4 @@
-FROM sumeetchhetri/ffead-cpp-5.0-base:5.1
+FROM sumeetchhetri/ffead-cpp-5.0-base:5.2
 
 
 ENV IROOT=/installs
 ENV IROOT=/installs
 
 

+ 1 - 1
frameworks/C++/ffead-cpp/ffead-cpp-lithium.dockerfile

@@ -1,4 +1,4 @@
-FROM sumeetchhetri/ffead-cpp-5.0-base:5.1
+FROM sumeetchhetri/ffead-cpp-5.0-base:5.2
 
 
 ENV IROOT=/installs
 ENV IROOT=/installs
 
 

+ 1 - 1
frameworks/C++/ffead-cpp/ffead-cpp-mongo-raw.dockerfile

@@ -1,4 +1,4 @@
-FROM sumeetchhetri/ffead-cpp-5.0-base:5.1
+FROM sumeetchhetri/ffead-cpp-5.0-base:5.2
 
 
 ENV IROOT=/installs
 ENV IROOT=/installs
 
 

+ 1 - 1
frameworks/C++/ffead-cpp/ffead-cpp-mysql.dockerfile

@@ -1,4 +1,4 @@
-FROM sumeetchhetri/ffead-cpp-5.0-base:5.1
+FROM sumeetchhetri/ffead-cpp-5.0-base:5.2
 
 
 ENV IROOT=/installs
 ENV IROOT=/installs
 
 

+ 1 - 1
frameworks/C++/ffead-cpp/ffead-cpp-nginx.dockerfile

@@ -1,4 +1,4 @@
-FROM sumeetchhetri/ffead-cpp-5.0-base:5.1
+FROM sumeetchhetri/ffead-cpp-5.0-base:5.2
 
 
 ENV IROOT=/installs
 ENV IROOT=/installs
 
 

+ 1 - 1
frameworks/C++/ffead-cpp/ffead-cpp-postgresql-raw-async.dockerfile

@@ -1,4 +1,4 @@
-FROM sumeetchhetri/ffead-cpp-5.0-base:5.1
+FROM sumeetchhetri/ffead-cpp-5.0-base:5.2
 
 
 ENV IROOT=/installs
 ENV IROOT=/installs
 
 

+ 7 - 0
frameworks/C++/ffead-cpp/ffead-cpp-postgresql-raw-clibpqb-profiled.dockerfile

@@ -0,0 +1,7 @@
+FROM sumeetchhetri/ffead-cpp-5.0-sql-raw-clibpqb-profiled-base:5.2
+
+ENV IROOT=/installs
+
+WORKDIR /
+
+CMD ./run_ffead.sh ffead-cpp-5.0-sql emb postgresql-raw memory

+ 7 - 0
frameworks/C++/ffead-cpp/ffead-cpp-postgresql-raw-profiled.dockerfile

@@ -0,0 +1,7 @@
+FROM sumeetchhetri/ffead-cpp-5.0-sql-raw-profiled-base:5.2
+
+ENV IROOT=/installs
+
+WORKDIR /
+
+CMD ./run_ffead.sh ffead-cpp-5.0-sql emb postgresql-raw memory

+ 1 - 1
frameworks/C++/ffead-cpp/ffead-cpp-postgresql-raw.dockerfile

@@ -1,4 +1,4 @@
-FROM sumeetchhetri/ffead-cpp-5.0-base:5.1
+FROM sumeetchhetri/ffead-cpp-5.0-base:5.2
 
 
 ENV IROOT=/installs
 ENV IROOT=/installs
 
 

+ 1 - 1
frameworks/C++/ffead-cpp/ffead-cpp-postgresql.dockerfile

@@ -1,4 +1,4 @@
-FROM sumeetchhetri/ffead-cpp-5.0-base:5.1
+FROM sumeetchhetri/ffead-cpp-5.0-base:5.2
 
 
 ENV IROOT=/installs
 ENV IROOT=/installs
 
 

+ 1 - 1
frameworks/C++/ffead-cpp/ffead-cpp-rust-actix.dockerfile

@@ -1,4 +1,4 @@
-FROM sumeetchhetri/ffead-cpp-5.0-rust-base:5.1
+FROM sumeetchhetri/ffead-cpp-5.0-rust-base:5.2
 
 
 ENV IROOT=/installs
 ENV IROOT=/installs
 
 

+ 2 - 16
frameworks/C++/ffead-cpp/ffead-cpp-rust-base.dockerfile

@@ -1,6 +1,6 @@
-FROM sumeetchhetri/ffead-cpp-5.0-base:5.1
+FROM sumeetchhetri/ffead-cpp-5.0-base:5.2
 LABEL maintainer="Sumeet Chhetri"
 LABEL maintainer="Sumeet Chhetri"
-LABEL version="5.1"
+LABEL version="5.2"
 LABEL description="Base rust docker image with ffead-cpp v4.0 - commit id - master"
 LABEL description="Base rust docker image with ffead-cpp v4.0 - commit id - master"
 
 
 ENV IROOT=/installs
 ENV IROOT=/installs
@@ -20,17 +20,3 @@ RUN cd ${IROOT}/lang-server-backends/rust/actix-ffead-cpp && RUSTFLAGS="-C targe
 	cd ${IROOT}/lang-server-backends/rust/hyper-ffead-cpp && RUSTFLAGS="-C target-cpu=native" cargo build --release && cp target/release/hyper-ffead-cpp $IROOT/ && rm -rf target && \
 	cd ${IROOT}/lang-server-backends/rust/hyper-ffead-cpp && RUSTFLAGS="-C target-cpu=native" cargo build --release && cp target/release/hyper-ffead-cpp $IROOT/ && rm -rf target && \
 	cd ${IROOT}/lang-server-backends/rust/thruster-ffead-cpp && RUSTFLAGS="-C target-cpu=native" cargo build --release && cp target/release/thruster-ffead-cpp $IROOT/ && rm -rf target && \
 	cd ${IROOT}/lang-server-backends/rust/thruster-ffead-cpp && RUSTFLAGS="-C target-cpu=native" cargo build --release && cp target/release/thruster-ffead-cpp $IROOT/ && rm -rf target && \
 	rm -rf ${IROOT}/lang-server-backends && rm -rf /root/.rustup /root/.cargo
 	rm -rf ${IROOT}/lang-server-backends && rm -rf /root/.rustup /root/.cargo
-
-FROM buildpack-deps:bionic
-RUN apt update -yqq && apt install --no-install-recommends -yqq uuid-dev odbc-postgresql unixodbc unixodbc-dev memcached \
-	libmemcached-dev libssl-dev libhiredis-dev zlib1g-dev libcurl4-openssl-dev redis-server libpq-dev && rm -rf /var/lib/apt/lists/*
-COPY --from=0 /installs/ffead-cpp-5.0 /installs/ffead-cpp-5.0
-COPY --from=0 /installs/ffead-cpp-5.0-sql /installs/ffead-cpp-5.0-sql
-COPY --from=0 /installs/actix-ffead-cpp /installs/
-COPY --from=0 /installs/hyper-ffead-cpp /installs/
-COPY --from=0 /installs/thruster-ffead-cpp /installs/
-RUN mkdir -p /installs/snmalloc-0.4.2/build
-COPY --from=0 /installs/snmalloc-0.4.2/build/libsnmallocshim-1mib.so /installs/snmalloc-0.4.2/build
-COPY --from=0 /usr/lib/x86_64-linux-gnu/odbc /usr/lib/x86_64-linux-gnu/odbc
-COPY --from=0 /usr/local/lib /usr/local/lib
-COPY --from=0 /run_ffead.sh /

+ 1 - 1
frameworks/C++/ffead-cpp/ffead-cpp-rust-hyper.dockerfile

@@ -1,4 +1,4 @@
-FROM sumeetchhetri/ffead-cpp-5.0-rust-base:5.1
+FROM sumeetchhetri/ffead-cpp-5.0-rust-base:5.2
 
 
 ENV IROOT=/installs
 ENV IROOT=/installs
 
 

+ 2 - 14
frameworks/C++/ffead-cpp/ffead-cpp-rust-rocket-base.dockerfile

@@ -1,6 +1,6 @@
-FROM sumeetchhetri/ffead-cpp-5.0-base:5.1
+FROM sumeetchhetri/ffead-cpp-5.0-base:5.2
 LABEL maintainer="Sumeet Chhetri"
 LABEL maintainer="Sumeet Chhetri"
-LABEL version="5.1"
+LABEL version="5.2"
 LABEL description="Base rust rocket docker image with ffead-cpp v5.0 - commit id - master"
 LABEL description="Base rust rocket docker image with ffead-cpp v5.0 - commit id - master"
 
 
 ENV IROOT=/installs
 ENV IROOT=/installs
@@ -17,15 +17,3 @@ RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
 WORKDIR ${IROOT}/lang-server-backends/rust/rocket-ffead-cpp/
 WORKDIR ${IROOT}/lang-server-backends/rust/rocket-ffead-cpp/
 ENV PATH="/root/.cargo/bin:${PATH}"
 ENV PATH="/root/.cargo/bin:${PATH}"
 RUN rustup default nightly && cargo update && cargo build --release && cp target/release/rocket-ffead-cpp $IROOT/ && rm -rf ${IROOT}/lang-server-backends
 RUN rustup default nightly && cargo update && cargo build --release && cp target/release/rocket-ffead-cpp $IROOT/ && rm -rf ${IROOT}/lang-server-backends
-
-FROM buildpack-deps:bionic
-RUN apt update -yqq && apt install --no-install-recommends -yqq uuid-dev odbc-postgresql unixodbc unixodbc-dev memcached \
-	libmemcached-dev libssl-dev libhiredis-dev zlib1g-dev libcurl4-openssl-dev redis-server libpq-dev && rm -rf /var/lib/apt/lists/*
-COPY --from=0 /installs/ffead-cpp-5.0 /installs/ffead-cpp-5.0
-COPY --from=0 /installs/ffead-cpp-5.0-sql /installs/ffead-cpp-5.0-sql
-COPY --from=0 /installs/rocket-ffead-cpp /installs/
-RUN mkdir -p /installs/snmalloc-0.4.2/build
-COPY --from=0 /installs/snmalloc-0.4.2/build/libsnmallocshim-1mib.so /installs/snmalloc-0.4.2/build
-COPY --from=0 /usr/lib/x86_64-linux-gnu/odbc /usr/lib/x86_64-linux-gnu/odbc
-COPY --from=0 /usr/local/lib /usr/local/lib
-COPY --from=0 /run_ffead.sh /

+ 1 - 1
frameworks/C++/ffead-cpp/ffead-cpp-rust-rocket.dockerfile

@@ -1,4 +1,4 @@
-FROM sumeetchhetri/ffead-cpp-5.0-rust-rocket-base:5.1
+FROM sumeetchhetri/ffead-cpp-5.0-rust-rocket-base:5.2
 
 
 ENV IROOT=/installs
 ENV IROOT=/installs
 
 

+ 85 - 0
frameworks/C++/ffead-cpp/ffead-cpp-sql-raw-clibpqb-profiled-base.dockerfile

@@ -0,0 +1,85 @@
+FROM sumeetchhetri/ffead-cpp-5.0-base:5.2
+LABEL maintainer="Sumeet Chhetri"
+LABEL version="5.2"
+LABEL description="SQL Raw Custom libpq batch patched Base ffead-cpp docker image with commit id - master"
+
+WORKDIR /tmp
+RUN mkdir postgresql
+
+COPY postgresql/* /tmp/postgresql/
+
+#POSTGRESQL
+WORKDIR /tmp/postgresql/
+
+# prepare PostgreSQL APT repository
+RUN apt-get -yqq update && apt-get -yqq install locales gnupg lsb-release
+
+RUN wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
+RUN echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" | tee  /etc/apt/sources.list.d/pgdg.list
+
+ENV PG_VERSION 13
+RUN locale-gen en_US.UTF-8
+ENV LANG en_US.UTF-8
+ENV LANGUAGE en_US:en
+ENV LC_ALL en_US.UTF-8
+ENV DEBIAN_FRONTEND noninteractive
+
+# install postgresql on database machine
+RUN apt-get -yqq update && apt-get -yqq install postgresql-13 postgresql-contrib-13 &&  rm -rf /var/lib/apt/lists/*
+
+# Make sure all the configuration files in main belong to postgres
+RUN mv postgresql.conf /etc/postgresql/${PG_VERSION}/main/postgresql.conf
+RUN mv pg_hba.conf /etc/postgresql/${PG_VERSION}/main/pg_hba.conf
+
+RUN chown -Rf postgres:postgres /etc/postgresql/${PG_VERSION}/main
+
+RUN mkdir /ssd
+RUN cp -R -p /var/lib/postgresql/${PG_VERSION}/main /ssd/postgresql
+RUN cp /etc/postgresql/${PG_VERSION}/main/postgresql.conf /ssd/postgresql
+RUN mv 60-postgresql-shm.conf /etc/sysctl.d/60-postgresql-shm.conf
+
+RUN chown -Rf postgres:postgres /var/run/postgresql
+RUN chmod 2777 /var/run/postgresql
+RUN chown postgres:postgres /etc/sysctl.d/60-postgresql-shm.conf
+RUN chown postgres:postgres create-postgres*
+RUN chown -Rf postgres:postgres /ssd
+
+ENV PGDATA=/ssd/postgresql
+
+USER postgres
+
+# We have to wait for postgres to start before we can use the cli
+RUN service postgresql start && \
+    until psql -c "\q"; do sleep 1; done && \
+    psql < create-postgres-database.sql && \
+    psql -a hello_world < create-postgres.sql && \
+    service postgresql stop
+#POSTGRESQL
+
+USER root
+
+#WRK
+WORKDIR /tmp/wrk
+RUN apt-get -yqq update && apt-get -yqq install libluajit-5.1-dev libssl-dev luajit && rm -rf /var/lib/apt/lists/* && \
+	curl -sL https://github.com/wg/wrk/archive/4.1.0.tar.gz | tar xz --strip-components=1
+ENV LDFLAGS="-O3 -march=native -flto"
+ENV CFLAGS="-I /usr/include/luajit-2.1 $LDFLAGS"
+RUN make WITH_LUAJIT=/usr WITH_OPENSSL=/usr -j "$(nproc)"
+RUN cp wrk /usr/local/bin
+
+ENV name name
+ENV server_host server_host
+ENV levels levels
+ENV duration duration
+ENV max_concurrency max_concurrency
+ENV max_threads max_threads
+ENV pipeline pipeline
+ENV accept accept
+#WRK
+
+WORKDIR ${IROOT}
+
+COPY sql-profiled-install-clang.sh install_ffead-cpp-sql-raw-profiled.sh ${IROOT}/
+RUN chmod 755 ${IROOT}/sql-profiled-install-clang.sh ${IROOT}/install_ffead-cpp-sql-raw-profiled.sh
+
+RUN ./sql-profiled-install-clang.sh batch

+ 85 - 0
frameworks/C++/ffead-cpp/ffead-cpp-sql-raw-profiled-base.dockerfile

@@ -0,0 +1,85 @@
+FROM sumeetchhetri/ffead-cpp-5.0-base:5.2
+LABEL maintainer="Sumeet Chhetri"
+LABEL version="5.2"
+LABEL description="SQL Raw Base ffead-cpp docker image with commit id - master"
+
+WORKDIR /tmp
+RUN mkdir postgresql
+
+COPY postgresql/* /tmp/postgresql/
+
+#POSTGRESQL
+WORKDIR /tmp/postgresql/
+
+# prepare PostgreSQL APT repository
+RUN apt-get -yqq update && apt-get -yqq install locales gnupg lsb-release
+
+RUN wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
+RUN echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" | tee  /etc/apt/sources.list.d/pgdg.list
+
+ENV PG_VERSION 13
+RUN locale-gen en_US.UTF-8
+ENV LANG en_US.UTF-8
+ENV LANGUAGE en_US:en
+ENV LC_ALL en_US.UTF-8
+ENV DEBIAN_FRONTEND noninteractive
+
+# install postgresql on database machine
+RUN apt-get -yqq update && apt-get -yqq install postgresql-13 postgresql-contrib-13 &&  rm -rf /var/lib/apt/lists/*
+
+# Make sure all the configuration files in main belong to postgres
+RUN mv postgresql.conf /etc/postgresql/${PG_VERSION}/main/postgresql.conf
+RUN mv pg_hba.conf /etc/postgresql/${PG_VERSION}/main/pg_hba.conf
+
+RUN chown -Rf postgres:postgres /etc/postgresql/${PG_VERSION}/main
+
+RUN mkdir /ssd
+RUN cp -R -p /var/lib/postgresql/${PG_VERSION}/main /ssd/postgresql
+RUN cp /etc/postgresql/${PG_VERSION}/main/postgresql.conf /ssd/postgresql
+RUN mv 60-postgresql-shm.conf /etc/sysctl.d/60-postgresql-shm.conf
+
+RUN chown -Rf postgres:postgres /var/run/postgresql
+RUN chmod 2777 /var/run/postgresql
+RUN chown postgres:postgres /etc/sysctl.d/60-postgresql-shm.conf
+RUN chown postgres:postgres create-postgres*
+RUN chown -Rf postgres:postgres /ssd
+
+ENV PGDATA=/ssd/postgresql
+
+USER postgres
+
+# We have to wait for postgres to start before we can use the cli
+RUN service postgresql start && \
+    until psql -c "\q"; do sleep 1; done && \
+    psql < create-postgres-database.sql && \
+    psql -a hello_world < create-postgres.sql && \
+    service postgresql stop
+#POSTGRESQL
+
+USER root
+
+#WRK
+WORKDIR /tmp/wrk
+RUN apt-get -yqq update && apt-get -yqq install libluajit-5.1-dev libssl-dev luajit && rm -rf /var/lib/apt/lists/* && \
+	curl -sL https://github.com/wg/wrk/archive/4.1.0.tar.gz | tar xz --strip-components=1
+ENV LDFLAGS="-O3 -march=native -flto"
+ENV CFLAGS="-I /usr/include/luajit-2.1 $LDFLAGS"
+RUN make WITH_LUAJIT=/usr WITH_OPENSSL=/usr -j "$(nproc)"
+RUN cp wrk /usr/local/bin
+
+ENV name name
+ENV server_host server_host
+ENV levels levels
+ENV duration duration
+ENV max_concurrency max_concurrency
+ENV max_threads max_threads
+ENV pipeline pipeline
+ENV accept accept
+#WRK
+
+WORKDIR ${IROOT}
+
+COPY sql-profiled-install.sh install_ffead-cpp-sql-raw-profiled.sh ${IROOT}/
+RUN chmod 755 ${IROOT}/sql-profiled-install.sh ${IROOT}/install_ffead-cpp-sql-raw-profiled.sh
+
+RUN ./sql-profiled-install.sh

+ 31 - 0
frameworks/C++/ffead-cpp/ffead-cpp-swift-nio.dockerfile

@@ -0,0 +1,31 @@
+FROM sumeetchhetri/ffead-cpp-5.0-base:5.2
+
+ENV IROOT=/installs
+
+ENV DEBIAN_FRONTEND noninteractive
+RUN rm -f /usr/local/lib/libffead-* /usr/local/lib/libte_benc* /usr/local/lib/libinter.so /usr/local/lib/libdinter.so && \
+	ln -s ${IROOT}/ffead-cpp-5.0/lib/libte_benchmark_um.so /usr/local/lib/libte_benchmark_um.so && \
+	ln -s ${IROOT}/ffead-cpp-5.0/lib/libffead-modules.so /usr/local/lib/libffead-modules.so && \
+	ln -s ${IROOT}/ffead-cpp-5.0/lib/libffead-framework.so /usr/local/lib/libffead-framework.so && \
+	ln -s ${IROOT}/ffead-cpp-5.0/lib/libinter.so /usr/local/lib/libinter.so && \
+	ln -s ${IROOT}/ffead-cpp-5.0/lib/libdinter.so /usr/local/lib/libdinter.so && \
+	ldconfig
+
+WORKDIR ${IROOT}
+RUN apt-get update -y && apt-get install -y --no-install-recommends clang libicu-dev libpython2.7-dev libtinfo5 libncurses5 libz3-dev \
+	 && rm -rf /var/lib/apt/lists/*
+	 
+RUN wget -q https://swift.org/builds/swift-5.3-release/ubuntu2004/swift-5.3-RELEASE/swift-5.3-RELEASE-ubuntu20.04.tar.gz
+RUN tar -xzf swift-5.3-RELEASE-ubuntu20.04.tar.gz
+RUN mv swift-5.3-RELEASE-ubuntu20.04 /opt/ && rm -f swift-5.3-RELEASE-ubuntu20.04.tar.gz
+RUN ln -s /opt/swift-5.3-RELEASE-ubuntu20.04 /opt/swift
+
+ENV PATH=/opt/swift/usr/bin:${PATH}
+
+WORKDIR ${IROOT}/lang-server-backends/swift/swift-nio/app
+RUN swift build --enable-test-discovery -c release -Xlinker "-L/usr/local/lib" -Xlinker "-lffead-framework" \
+	&& mv .build/release/app ${IROOT}/ && chmod +x ${IROOT}/app && rm -rf ${IROOT}/lang-server-backends
+
+WORKDIR /
+
+CMD ./run_ffead.sh ffead-cpp-5.0 swift-nio

+ 2 - 15
frameworks/C++/ffead-cpp/ffead-cpp-v-base.dockerfile

@@ -1,6 +1,6 @@
-FROM sumeetchhetri/ffead-cpp-5.0-base:5.1
+FROM sumeetchhetri/ffead-cpp-5.0-base:5.2
 LABEL maintainer="Sumeet Chhetri"
 LABEL maintainer="Sumeet Chhetri"
-LABEL version="5.1"
+LABEL version="5.2"
 LABEL description="Base v docker image with ffead-cpp v4.0 commit id - master"
 LABEL description="Base v docker image with ffead-cpp v4.0 commit id - master"
 
 
 ENV IROOT=/installs
 ENV IROOT=/installs
@@ -23,16 +23,3 @@ RUN chmod +x *.sh && ./build.sh && cp vweb $IROOT/
 WORKDIR ${IROOT}/lang-server-backends/v/pico.v
 WORKDIR ${IROOT}/lang-server-backends/v/pico.v
 #COPY main.v ${IROOT}/lang-server-backends/v/pico.v/
 #COPY main.v ${IROOT}/lang-server-backends/v/pico.v/
 RUN chmod +x *.sh && ./build.sh && cp main $IROOT/ && rm -rf ${IROOT}/lang-server-backends
 RUN chmod +x *.sh && ./build.sh && cp main $IROOT/ && rm -rf ${IROOT}/lang-server-backends
-
-FROM buildpack-deps:bionic
-RUN apt update -yqq && apt install --no-install-recommends -yqq uuid-dev odbc-postgresql unixodbc unixodbc-dev memcached \
-	libmemcached-dev libssl-dev libhiredis-dev zlib1g-dev libcurl4-openssl-dev redis-server libpq-dev && rm -rf /var/lib/apt/lists/*
-COPY --from=0 /installs/ffead-cpp-5.0 /installs/ffead-cpp-5.0
-COPY --from=0 /installs/ffead-cpp-5.0-sql /installs/ffead-cpp-5.0-sql
-COPY --from=0 /installs/main /installs/
-COPY --from=0 /installs/vweb /installs/
-RUN mkdir -p /installs/snmalloc-0.4.2/build
-COPY --from=0 /installs/snmalloc-0.4.2/build/libsnmallocshim-1mib.so /installs/snmalloc-0.4.2/build/
-COPY --from=0 /usr/lib/x86_64-linux-gnu/odbc /usr/lib/x86_64-linux-gnu/odbc
-COPY --from=0 /usr/local/lib /usr/local/lib
-COPY --from=0 /run_ffead.sh /

+ 2 - 2
frameworks/C++/ffead-cpp/ffead-cpp-v-picov.dockerfile

@@ -1,7 +1,7 @@
-FROM sumeetchhetri/ffead-cpp-5.0-v-base:5.1
+FROM sumeetchhetri/ffead-cpp-5.0-v-base:5.2
 
 
 ENV IROOT=/installs
 ENV IROOT=/installs
 
 
 WORKDIR /
 WORKDIR /
 
 
-CMD ./run_ffead.sh ffead-cpp-5.0 v-picov
+CMD ./run_ffead.sh ffead-cpp-5.0 v-picov postgresql-raw memory

+ 1 - 1
frameworks/C++/ffead-cpp/ffead-cpp-v-vweb.dockerfile

@@ -1,4 +1,4 @@
-FROM sumeetchhetri/ffead-cpp-5.0-v-base:5.1
+FROM sumeetchhetri/ffead-cpp-5.0-v-base:5.2
 
 
 ENV IROOT=/installs
 ENV IROOT=/installs
 
 

+ 1 - 1
frameworks/C++/ffead-cpp/ffead-cpp.dockerfile

@@ -1,4 +1,4 @@
-FROM sumeetchhetri/ffead-cpp-5.0-base:5.1
+FROM sumeetchhetri/ffead-cpp-5.0-base:5.2
 
 
 ENV IROOT=/installs
 ENV IROOT=/installs
 
 

+ 7 - 7
frameworks/C++/ffead-cpp/install-mimalloc-snmalloc.sh

@@ -1,19 +1,19 @@
 apt install -y clang-format-9 ninja-build
 apt install -y clang-format-9 ninja-build
 
 
 wget -q https://github.com/microsoft/mimalloc/archive/v1.6.3.tar.gz
 wget -q https://github.com/microsoft/mimalloc/archive/v1.6.3.tar.gz
-tar xf mimalloc-1.6.3.tar.gz
-cd mimalloc-1.6.3
+tar xf mimalloc-1.6.7.tar.gz
+cd mimalloc-1.6.7
 mkdir -p out/release
 mkdir -p out/release
 cmake ../.. -DCMAKE_BUILD_TYPE=Release
 cmake ../.. -DCMAKE_BUILD_TYPE=Release
 make && make install
 make && make install
 cd $IROOT
 cd $IROOT
-rm -rf mimalloc-1.6.3
+rm -rf mimalloc-1.6.7
 
 
-wget -q https://github.com/microsoft/snmalloc/archive/0.4.2.tar.gz
-tar xf snmalloc-0.4.2.tar.gz
-cd snmalloc-0.4.2
+wget -q https://github.com/microsoft/snmalloc/archive/0.5.1.tar.gz
+tar xf snmalloc-0.5.1.tar.gz
+cd snmalloc-0.5.1
 mkdir build
 mkdir build
 cmake -G Ninja .. -DCMAKE_BUILD_TYPE=Release
 cmake -G Ninja .. -DCMAKE_BUILD_TYPE=Release
 ninja
 ninja
 cd $IROOT
 cd $IROOT
-rm -rf snmalloc-0.4.2
+rm -rf snmalloc-0.5.1

+ 53 - 6
frameworks/C++/ffead-cpp/install_ffead-cpp-backends.sh

@@ -4,7 +4,7 @@ cd $IROOT
 
 
 git clone https://github.com/sumeetchhetri/ffead-cpp
 git clone https://github.com/sumeetchhetri/ffead-cpp
 cd ffead-cpp
 cd ffead-cpp
-git checkout aad0799955d93793e0b3659f29deaa19f74c25fe -b 5.1
+git checkout e6fc4e54a266ee0af1cca7a5e0e6359c06129af7 -b 5.2
 rm -rf .git
 rm -rf .git
 cd ..
 cd ..
 mv ffead-cpp ffead-cpp-src
 mv ffead-cpp ffead-cpp-src
@@ -41,11 +41,10 @@ then
 	git clone --recurse-submodules https://github.com/sumeetchhetri/drogon
 	git clone --recurse-submodules https://github.com/sumeetchhetri/drogon
 	cd  drogon
 	cd  drogon
 	git checkout a10934f3f85f361cde58a891d3cf1f1df3a8ea8a -b works
 	git checkout a10934f3f85f361cde58a891d3cf1f1df3a8ea8a -b works
-	rm -rf .git
 	mkdir build
 	mkdir build
 	cd build
 	cd build
-	cmake -DCMAKE_BUILD_TYPE=Release ..
-	make && make install
+	cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_CTL=off -DBUILD_EXAMPLES=off -DBUILD_ORM=off ..
+	make -j4 install
 	cd $IROOT
 	cd $IROOT
 	rm -rf drogon
 	rm -rf drogon
 fi
 fi
@@ -56,12 +55,60 @@ then
 	apt install --no-install-recommends -y libjansson-dev libc-ares-dev libboost-all-dev
 	apt install --no-install-recommends -y libjansson-dev libc-ares-dev libboost-all-dev
 	cd $IROOT
 	cd $IROOT
 	wget -q https://github.com/nghttp2/nghttp2/releases/download/v1.41.0/nghttp2-1.41.0.tar.gz
 	wget -q https://github.com/nghttp2/nghttp2/releases/download/v1.41.0/nghttp2-1.41.0.tar.gz
-	tar xvf nghttp2-1.41.0.tar.gz
+	tar xf nghttp2-1.41.0.tar.gz
 	cd nghttp2-1.41.0
 	cd nghttp2-1.41.0
 	cmake -DENABLE_ASIO_LIB=on -GNinja .
 	cmake -DENABLE_ASIO_LIB=on -GNinja .
 	ninja install
 	ninja install
 	cd $IROOT
 	cd $IROOT
-	rm -rf nghttp2-1.41.0
+	rm -rf nghttp2-1.41.0 nghttp2-1.41.0.tar.gz
+fi
+
+CURR_TYPE="mongols"
+if [ "$CURR_TYPE" = "mongols" ]
+then
+	cd $IROOT
+	wget -q https://github.com/webcpp/mongols/archive/release-1.8.4.9.tar.gz
+	tar xf release-1.8.4.9.tar.gz
+	cd mongols-release-1.8.4.9/
+	make clean && make -j4 && make install && ldconfig
+	cp -rf inc/mongols/lib/* /usr/local/include/
+	cd $IROOT
+	rm -rf mongols-release-1.8.4.9/ release-1.8.4.9.tar.gz
+fi
+
+CURR_TYPE="uv-cpp"
+if [ "$CURR_TYPE" = "uv-cpp" ]
+then
+	apt install --no-install-recommends -y libuv1-dev
+	cd $IROOT
+	git clone https://github.com/sumeetchhetri/uv-cpp
+	cd uv-cpp
+	cmake .
+	make -j4 install
+	cd $IROOT
+	rm -rf uv-cpp
+fi
+
+CURR_TYPE="CppServer"
+if [ "$CURR_TYPE" = "CppServer" ]
+then
+	apt install --no-install-recommends -y python3 python3-pip
+	pip3 install gil
+	cd $IROOT
+	git clone https://github.com/chronoxor/CppServer
+	cd CppServer
+	gil update
+	cd build
+	./unix.sh
+	cp $IROOT/CppServer/bin/libcppserver.a /usr/local/lib/
+	cp -rf $IROOT/CppServer/modules/asio/asio/include/* /usr/local/include/
+	cp -rf $IROOT/CppServer/modules/CppCommon/include/* /usr/local/include/
+	cp -rf $IROOT/CppServer/include/* /usr/local/include/
+	cp $IROOT/CppServer/temp/modules/libasio.a /usr/local/lib/
+	cp $IROOT/CppServer/temp/modules/CppCommon/libcppcommon.a /usr/local/lib/
+	cp $IROOT/CppServer/temp/modules/CppCommon/modules/libfmt.a /usr/local/lib/
+	cd $IROOT
+	rm -rf CppServer
 fi
 fi
 
 
 rm -rf /var/lib/apt/lists/*
 rm -rf /var/lib/apt/lists/*

+ 28 - 16
frameworks/C++/ffead-cpp/install_ffead-cpp-dependencies.sh

@@ -2,7 +2,14 @@
 
 
 apt update -yqq && apt install --no-install-recommends -yqq autoconf-archive unzip uuid-dev odbc-postgresql unixodbc unixodbc-dev \
 apt update -yqq && apt install --no-install-recommends -yqq autoconf-archive unzip uuid-dev odbc-postgresql unixodbc unixodbc-dev \
 	apache2 apache2-dev libapr1-dev libaprutil1-dev memcached libmemcached-dev redis-server libssl-dev \
 	apache2 apache2-dev libapr1-dev libaprutil1-dev memcached libmemcached-dev redis-server libssl-dev \
-	zlib1g-dev cmake make clang-format-9 ninja-build libhiredis-dev libcurl4-openssl-dev libpq-dev
+	zlib1g-dev cmake make clang-format-9 ninja-build libcurl4-openssl-dev libpq-dev git \
+	wget build-essential pkg-config libpcre3-dev curl libgtk2.0-dev libgdk-pixbuf2.0-dev
+apt-get install --reinstall ca-certificates
+
+mkdir /usr/local/share/ca-certificates/cacert.org
+wget -P /usr/local/share/ca-certificates/cacert.org http://www.cacert.org/certs/root.crt http://www.cacert.org/certs/class3.crt
+update-ca-certificates
+git config --global http.sslCAinfo /etc/ssl/certs/ca-certificates.crt
 
 
 #redis will not start correctly on bionic with this config
 #redis will not start correctly on bionic with this config
 sed -i "s/bind .*/bind 127.0.0.1/g" /etc/redis/redis.conf
 sed -i "s/bind .*/bind 127.0.0.1/g" /etc/redis/redis.conf
@@ -24,13 +31,19 @@ make install
 cd $IROOT
 cd $IROOT
 rm -rf libcuckoo
 rm -rf libcuckoo
 
 
-mkdir -p /usr/lib/x86_64-linux-gnu/odbc
-wget -q https://downloads.mysql.com/archives/get/p/10/file/mysql-connector-odbc-8.0.19-linux-ubuntu18.04-x86-64bit.tar.gz
-tar xf mysql-connector-odbc-8.0.19-linux-ubuntu18.04-x86-64bit.tar.gz
-mv mysql-connector-odbc-8.0.19-linux-ubuntu18.04-x86-64bit/lib/libmyodbc8* /usr/lib/x86_64-linux-gnu/odbc/
-mysql-connector-odbc-8.0.19-linux-ubuntu18.04-x86-64bit/bin/myodbc-installer -d -a -n "MySQL" -t "DRIVER=/usr/lib/x86_64-linux-gnu/odbc/libmyodbc8w.so;"
-rm -f mysql-connector-odbc-8.0.19-linux-ubuntu18.04-x86-64bit.tar.gz
-rm -rf mysql-connector-odbc-8.0.19-linux-ubuntu18.04-x86-64bit
+wget -q https://downloads.mysql.com/archives/get/p/10/file/mysql-connector-odbc_8.0.21-1ubuntu20.04_amd64.deb
+dpkg -i mysql-connector-odbc_8.0.21-1ubuntu20.04_amd64.deb
+wget -q https://downloads.mysql.com/archives/get/p/10/file/mysql-connector-odbc-setup_8.0.21-1ubuntu20.04_amd64.deb
+dpkg -i mysql-connector-odbc-setup_8.0.21-1ubuntu20.04_amd64.deb
+rm -f *.deb
+
+#mkdir -p /usr/lib/x86_64-linux-gnu/odbc
+#wget -q https://downloads.mysql.com/archives/get/p/10/file/mysql-connector-odbc-8.0.19-linux-ubuntu18.04-x86-64bit.tar.gz
+#tar xf mysql-connector-odbc-8.0.19-linux-ubuntu18.04-x86-64bit.tar.gz
+#mv mysql-connector-odbc-8.0.19-linux-ubuntu18.04-x86-64bit/lib/libmyodbc8* /usr/lib/x86_64-linux-gnu/odbc/
+#mysql-connector-odbc-8.0.19-linux-ubuntu18.04-x86-64bit/bin/myodbc-installer -d -a -n "MySQL" -t "DRIVER=/usr/lib/x86_64-linux-gnu/odbc/libmyodbc8w.so;"
+#rm -f mysql-connector-odbc-8.0.19-linux-ubuntu18.04-x86-64bit.tar.gz
+#rm -rf mysql-connector-odbc-8.0.19-linux-ubuntu18.04-x86-64bit
 
 
 #wget -q https://cdn.mysql.com/archives/mysql-connector-odbc-5.3/mysql-connector-odbc-5.3.11-linux-ubuntu16.04-x86-64bit.tar.gz
 #wget -q https://cdn.mysql.com/archives/mysql-connector-odbc-5.3/mysql-connector-odbc-5.3.11-linux-ubuntu16.04-x86-64bit.tar.gz
 #tar xf mysql-connector-odbc-5.3.11-linux-ubuntu16.04-x86-64bit.tar.gz
 #tar xf mysql-connector-odbc-5.3.11-linux-ubuntu16.04-x86-64bit.tar.gz
@@ -48,14 +61,13 @@ cd mongo-c-driver-1.4.2/ && \
 cd $IROOT
 cd $IROOT
 rm -rf mongo-c-driver-1.4.2 
 rm -rf mongo-c-driver-1.4.2 
 
 
-#wget -q https://github.com/redis/hiredis/archive/v0.13.3.tar.gz
-#tar xf v0.13.3.tar.gz
-#rm -f v0.13.3.tar.gz
-#cd hiredis-0.13.3/
-#make
-#PREFIX=/usr make install
-#cd $IROOT
-#rm -rf hiredis-0.13.3
+wget -q https://github.com/redis/hiredis/archive/v1.0.0.tar.gz
+tar xf v1.0.0.tar.gz
+rm -f v1.0.0.tar.gz
+cd hiredis-1.0.0/
+cmake . && make install
+cd $IROOT
+rm -rf hiredis-1.0.0
 
 
 cd $IROOT
 cd $IROOT
 wget -q https://github.com/microsoft/mimalloc/archive/v1.6.3.tar.gz
 wget -q https://github.com/microsoft/mimalloc/archive/v1.6.3.tar.gz

+ 16 - 7
frameworks/C++/ffead-cpp/install_ffead-cpp-framework.sh

@@ -38,7 +38,6 @@ sed -i 's|EVH_SINGLE=true|EVH_SINGLE=false|g' resources/server.prop
 
 
 rm -rf web/default web/oauthApp web/flexApp web/markers web/te-benchmark web/peer-server
 rm -rf web/default web/oauthApp web/flexApp web/markers web/te-benchmark web/peer-server
 
 
-sed -i 's|localhost|tfb-database|g' web/te-benchmark-um/config/sdorm.xml
 sed -i 's|localhost|tfb-database|g' web/te-benchmark-um/config/sdormmongo.xml
 sed -i 's|localhost|tfb-database|g' web/te-benchmark-um/config/sdormmongo.xml
 sed -i 's|localhost|tfb-database|g' web/te-benchmark-um/config/sdormmysql.xml
 sed -i 's|localhost|tfb-database|g' web/te-benchmark-um/config/sdormmysql.xml
 sed -i 's|localhost|tfb-database|g' web/te-benchmark-um/config/sdormpostgresql.xml
 sed -i 's|localhost|tfb-database|g' web/te-benchmark-um/config/sdormpostgresql.xml
@@ -53,12 +52,12 @@ sed -i 's|add_subdirectory(${PROJECT_SOURCE_DIR}/web/oauthApp)||g' CMakeLists.tx
 sed -i 's|add_subdirectory(${PROJECT_SOURCE_DIR}/web/markers)||g' CMakeLists.txt
 sed -i 's|add_subdirectory(${PROJECT_SOURCE_DIR}/web/markers)||g' CMakeLists.txt
 sed -i 's|add_subdirectory(${PROJECT_SOURCE_DIR}/web/te-benchmark)||g' CMakeLists.txt
 sed -i 's|add_subdirectory(${PROJECT_SOURCE_DIR}/web/te-benchmark)||g' CMakeLists.txt
 sed -i 's|add_subdirectory(${PROJECT_SOURCE_DIR}/web/peer-server)||g' CMakeLists.txt
 sed -i 's|add_subdirectory(${PROJECT_SOURCE_DIR}/web/peer-server)||g' CMakeLists.txt
-sed -i 's|install(FILES ${PROJECT_BINARY_DIR}/web/default/libdefault${CMAKE_SHARED_LIBRARY_SUFFIX} DESTINATION ${PROJECT_NAME}-bin/lib)||g' CMakeLists.txt
-sed -i 's|install(FILES ${PROJECT_BINARY_DIR}/web/flexApp/libflexApp${CMAKE_SHARED_LIBRARY_SUFFIX} DESTINATION ${PROJECT_NAME}-bin/lib)||g' CMakeLists.txt
-sed -i 's|install(FILES ${PROJECT_BINARY_DIR}/web/oauthApp/liboauthApp${CMAKE_SHARED_LIBRARY_SUFFIX} DESTINATION ${PROJECT_NAME}-bin/lib)||g' CMakeLists.txt
-sed -i 's|install(FILES ${PROJECT_BINARY_DIR}/web/markers/libmarkers${CMAKE_SHARED_LIBRARY_SUFFIX} DESTINATION ${PROJECT_NAME}-bin/lib)||g' CMakeLists.txt
-sed -i 's|install(FILES ${PROJECT_BINARY_DIR}/web/te-benchmark/libte_benchmark${CMAKE_SHARED_LIBRARY_SUFFIX} DESTINATION ${PROJECT_NAME}-bin/lib)||g' CMakeLists.txt
-sed -i 's|install(FILES ${PROJECT_BINARY_DIR}/web/peer-server/libpeer_server${CMAKE_SHARED_LIBRARY_SUFFIX} DESTINATION ${PROJECT_NAME}-bin/lib)||g' CMakeLists.txt
+sed -i 's|install(FILES ${PROJECT_BINARY_DIR}/web/default/libdefault${LIB_EXT} DESTINATION ${PROJECT_NAME}-bin/lib)||g' CMakeLists.txt
+sed -i 's|install(FILES ${PROJECT_BINARY_DIR}/web/flexApp/libflexApp${LIB_EXT} DESTINATION ${PROJECT_NAME}-bin/lib)||g' CMakeLists.txt
+sed -i 's|install(FILES ${PROJECT_BINARY_DIR}/web/oauthApp/liboauthApp${LIB_EXT} DESTINATION ${PROJECT_NAME}-bin/lib)||g' CMakeLists.txt
+sed -i 's|install(FILES ${PROJECT_BINARY_DIR}/web/markers/libmarkers${LIB_EXT} DESTINATION ${PROJECT_NAME}-bin/lib)||g' CMakeLists.txt
+sed -i 's|install(FILES ${PROJECT_BINARY_DIR}/web/te-benchmark/libte_benchmark${LIB_EXT} DESTINATION ${PROJECT_NAME}-bin/lib)||g' CMakeLists.txt
+sed -i 's|install(FILES ${PROJECT_BINARY_DIR}/web/peer-server/libpeer_server${LIB_EXT} DESTINATION ${PROJECT_NAME}-bin/lib)||g' CMakeLists.txt
 sed -i 's|web/default/src/autotools/Makefile||g' configure.ac
 sed -i 's|web/default/src/autotools/Makefile||g' configure.ac
 sed -i 's|web/flexApp/src/autotools/Makefile||g' configure.ac
 sed -i 's|web/flexApp/src/autotools/Makefile||g' configure.ac
 sed -i 's|web/oauthApp/src/autotools/Makefile||g' configure.ac
 sed -i 's|web/oauthApp/src/autotools/Makefile||g' configure.ac
@@ -84,6 +83,11 @@ rm -f /usr/local/lib/libte_benc*
 rm -f /usr/local/lib/libinter.so
 rm -f /usr/local/lib/libinter.so
 rm -f /usr/local/lib/libdinter.so
 rm -f /usr/local/lib/libdinter.so
 
 
+if [ ! -d "ffead-cpp-5.0-bin" ]
+then
+	exit 1
+fi
+
 cd ffead-cpp-5.0-bin
 cd ffead-cpp-5.0-bin
 #cache related dockerfiles will add the cache.xml accordingly whenever needed
 #cache related dockerfiles will add the cache.xml accordingly whenever needed
 chmod 755 *.sh resources/*.sh rtdcf/autotools/*.sh
 chmod 755 *.sh resources/*.sh rtdcf/autotools/*.sh
@@ -118,6 +122,11 @@ cp -f web/te-benchmark-um/sql-src/TeBkUmWorldsql.h web/te-benchmark-um/include/T
 cp -f web/te-benchmark-um/sql-src/TeBkUmWorldsql.cpp web/te-benchmark-um/src/TeBkUmWorld.cpp
 cp -f web/te-benchmark-um/sql-src/TeBkUmWorldsql.cpp web/te-benchmark-um/src/TeBkUmWorld.cpp
 make install -j${MAX_THREADS}
 make install -j${MAX_THREADS}
 
 
+if [ ! -d "ffead-cpp-5.0-bin" ]
+then
+	exit 1
+fi
+
 cd ffead-cpp-5.0-bin
 cd ffead-cpp-5.0-bin
 #cache related dockerfiles will add the cache.xml accordingly whenever needed
 #cache related dockerfiles will add the cache.xml accordingly whenever needed
 chmod 755 *.sh resources/*.sh rtdcf/autotools/*.sh
 chmod 755 *.sh resources/*.sh rtdcf/autotools/*.sh

+ 0 - 6
frameworks/C++/ffead-cpp/install_ffead-cpp-httpd.sh

@@ -29,12 +29,6 @@ sed -i 's|#define PACKAGE_STRING "ffead-cpp 5.0"| |g' ${IROOT}/ffead-cpp-5.0/inc
 sed -i 's|#define PACKAGE_TARNAME "ffead-cpp"| |g' ${IROOT}/ffead-cpp-5.0/include/AppDefines.h
 sed -i 's|#define PACKAGE_TARNAME "ffead-cpp"| |g' ${IROOT}/ffead-cpp-5.0/include/AppDefines.h
 sed -i 's|#define PACKAGE_VERSION "5.0"| |g' ${IROOT}/ffead-cpp-5.0/include/AppDefines.h
 sed -i 's|#define PACKAGE_VERSION "5.0"| |g' ${IROOT}/ffead-cpp-5.0/include/AppDefines.h
 
 
-#cd ${IROOT}/ffead-cpp-src/modules/apache_mod_ffeadcpp/
-#g++ -fpic -DSHARED_MODULE -fpermissive -std=gnu++11 -I"/usr/include/apache2" -I"/usr/include/apr-1.0" -I"${IROOT}/ffead-cpp-5.0/include/" -I"${IROOT}/include" -I"${IROOT}/include/libbson-1.0/" -I"${IROOT}/include/libmongoc-1.0" mod_ffeadcpp.cpp -L"${IROOT}/ffead-cpp-5.0/lib" -L"${IROOT}" -L"${IROOT}/lib" -lffead_common -lffead_framework -ldl -lcrypto -lssl -lhiredis -lmemcachedutil -c mod_ffeadcpp.cpp
-#g++ -shared -o mod_ffeadcpplib.so mod_ffeadcpp.o -L"${IROOT}/ffead-cpp-5.0/lib" -L"${IROOT}" -L"${IROOT}/lib" -lffead_common -lffead_framework -ldl -lcrypto -lssl -lapr-1 -laprutil-1 -lstdc++ -lhiredis -lmemcachedutil
-#apxs -i -n 'ffead_cpp_module' mod_ffeadcpplib.so
-#cd -
-
 FFEADROOT=${IROOT}/ffead-cpp-5.0
 FFEADROOT=${IROOT}/ffead-cpp-5.0
 ETROOT=${FFEADROOT//\//\\/}
 ETROOT=${FFEADROOT//\//\\/}
 EIROOT=${IROOT//\//\\/}
 EIROOT=${IROOT//\//\\/}

+ 61 - 0
frameworks/C++/ffead-cpp/install_ffead-cpp-sql-raw-profiled.sh

@@ -0,0 +1,61 @@
+#!/bin/bash
+
+chmod +x $IROOT/ffead-cpp-sql-raw/*.sh
+
+cp $IROOT/ffead-cpp-sql-raw/server.sh /server_orig.sh
+
+cd $IROOT/ffead-cpp-sql-raw
+nohup bash -c "./server.sh > ffead.log &"
+echo "Waiting for ffead-cpp to launch on port 8080..."
+COUNTER=0
+while [ ! -f lib/libinter.so ]
+do
+  sleep 1
+  COUNTER=$((COUNTER+1))
+  if [ "$COUNTER" = 600 ]
+  then
+  	cat ffead.log
+  	cat logs/jobs.log
+    echo "exiting...."
+    exit 1
+  fi
+done
+COUNTER=0
+while [ ! -f lib/libdinter.so ]
+do
+  sleep 1
+  COUNTER=$((COUNTER+1))
+  if [ "$COUNTER" = 120 ]
+  then
+  	cat ffead.log
+  	cat logs/jobs.log
+    echo "exiting....dlib"
+    exit 1
+  fi
+done
+rm -f serv.ctrl
+pkill ffead-cpp
+
+#Start postgresql
+service postgresql start
+#For profiling/benchmarking
+
+sed -i 's|EVH_SINGLE=false|EVH_SINGLE=true|g' resources/server.prop
+nohup bash -c "./server.sh > ffead.log &"
+sleep 5
+echo "ffead-cpp with sql-raw support launched"
+wrk -H 'Host: localhost' -H 'Accept: application/json,text/html;q=0.9,application/xhtml+xml;q=0.9,application/xml;q=0.8,*/*;q=0.7' \
+	-H 'Connection: keep-alive' --latency -d 15 -c 256 --timeout 8 -t 2 "http://localhost:8080/te-benchmark-um-pq/fortunes"
+wrk -H 'Host: localhost' -H 'Accept: application/json,text/html;q=0.9,application/xhtml+xml;q=0.9,application/xml;q=0.8,*/*;q=0.7' \
+	-H 'Connection: keep-alive' --latency -d 15 -c 512 --timeout 8 -t 2 "http://localhost:8080/te-benchmark-um-pq/db"
+wrk -H 'Host: localhost' -H 'Accept: application/json,text/html;q=0.9,application/xhtml+xml;q=0.9,application/xml;q=0.8,*/*;q=0.7' \
+	-H 'Connection: keep-alive' --latency -d 15 -c 512 --timeout 8 -t 2 "http://localhost:8080/te-benchmark-um-pq/queries?queries=20"
+wrk -H 'Host: localhost' -H 'Accept: application/json,text/html;q=0.9,application/xhtml+xml;q=0.9,application/xml;q=0.8,*/*;q=0.7' \
+	-H 'Connection: keep-alive' --latency -d 15 -c 512 --timeout 8 -t 2 "http://localhost:8080/te-benchmark-um-pq/updates?queries=20"
+echo "normal shutdown"
+rm -f serv.ctrl
+pkill ffead-cpp
+
+cd /
+
+exit 0

+ 14 - 3
frameworks/C++/ffead-cpp/run_ffead.sh

@@ -72,7 +72,6 @@ then
 else
 else
 	WEB_DIR=$FFEAD_CPP_PATH/web/te-benchmark-um
 	WEB_DIR=$FFEAD_CPP_PATH/web/te-benchmark-um
 	rm -rf web/te-benchmark-um-mgr web/te-benchmark-um-pq web/te-benchmark-um-pq-async
 	rm -rf web/te-benchmark-um-mgr web/te-benchmark-um-pq web/te-benchmark-um-pq-async
-	sed -i'' -e "s|<init>TeBkUmRouter.updateCache</init>||g" ${WEB_DIR}/config/cache.xml
 fi
 fi
 
 
 if [ "$4" = "memory" ]
 if [ "$4" = "memory" ]
@@ -141,8 +140,8 @@ then
 	./libreactor-ffead-cpp $FFEAD_CPP_PATH 8080
 	./libreactor-ffead-cpp $FFEAD_CPP_PATH 8080
 elif [ "$2" = "h2o" ]
 elif [ "$2" = "h2o" ]
 then
 then
-	cd ${IROOT}
-	./h2o_app $FFEAD_CPP_PATH 0.0.0.0 8080
+	cd ${IROOT}/lang-server-backends/c/h2o
+	./h2o.sh ${FFEAD_CPP_PATH} ${LD_LIBRARY_PATH} 8080
 elif [ "$2" = "crystal-http" ]
 elif [ "$2" = "crystal-http" ]
 then
 then
 	cd ${IROOT}
 	cd ${IROOT}
@@ -155,6 +154,17 @@ then
 	for i in $(seq 0 $(($(nproc --all)-1))); do
 	for i in $(seq 0 $(($(nproc --all)-1))); do
 	  taskset -c $i ./h2o-evloop-ffead-cpp.out --ffead-cpp-dir=$FFEAD_CPP_PATH --to=8080 &
 	  taskset -c $i ./h2o-evloop-ffead-cpp.out --ffead-cpp-dir=$FFEAD_CPP_PATH --to=8080 &
 	done
 	done
+elif [ "$2" = "julia-http" ]
+then
+	julia ${IROOT}/lang-server-backends/julia/http.jl/server.jl $FFEAD_CPP_PATH
+elif [ "$2" = "swift-nio" ]
+then
+	cd ${IROOT}
+	./app $FFEAD_CPP_PATH
+elif [ "$2" = "d-hunt" ]
+then
+	cd ${IROOT}
+	./hunt-minihttp -s $FFEAD_CPP_PATH
 elif [ "$2" = "rust-actix" ]
 elif [ "$2" = "rust-actix" ]
 then
 then
 	cd ${IROOT}
 	cd ${IROOT}
@@ -188,6 +198,7 @@ then
 elif [ "$2" = "v-picov" ]
 elif [ "$2" = "v-picov" ]
 then
 then
 	cd ${IROOT}
 	cd ${IROOT}
+	sed -i 's|EVH_SINGLE=false|EVH_SINGLE=true|g' $FFEAD_CPP_PATH/resources/server.prop
 	for i in $(seq 0 $(($(nproc --all)-1))); do
 	for i in $(seq 0 $(($(nproc --all)-1))); do
 		taskset -c $i ./main --server_dir=$FFEAD_CPP_PATH --server_port=8080 &
 		taskset -c $i ./main --server_dir=$FFEAD_CPP_PATH --server_port=8080 &
 	done
 	done

+ 76 - 0
frameworks/C++/ffead-cpp/sql-profiled-install-clang.sh

@@ -0,0 +1,76 @@
+mkdir /tmp/profile-data
+
+rm -rf $IROOT/ffead-cpp-5.0-sql
+
+if [ "$1" = "batch" ]
+then
+	apt remove -yqq libpq-dev
+	apt autoremove -yqq
+	apt update && apt install -y bison flex libreadline-dev
+	cd /tmp
+	wget -q https://github.com/an-tao/postgres/archive/batch_mode_ubuntu.tar.gz
+	tar -xzf batch_mode_ubuntu.tar.gz
+	cd postgres-batch_mode_ubuntu
+	./configure --prefix=/usr CFLAGS='-O2 -pipe -march=native'
+	make && make install
+fi
+
+apt update -yqq && apt install -yqq clang
+
+cd $IROOT/ffead-cpp-src/
+rm -rf CMakeCache.txt CMakeFiles
+rm -rf web/te-benchmark-um web/te-benchmark-um-mgr web/te-benchmark-um-pq-async
+
+sed -i 's|add_subdirectory(${PROJECT_SOURCE_DIR}/web/te-benchmark-um)||g' CMakeLists.txt
+sed -i 's|add_subdirectory(${PROJECT_SOURCE_DIR}/web/te-benchmark-um-mgr)||g' CMakeLists.txt
+sed -i 's|add_subdirectory(${PROJECT_SOURCE_DIR}/web/te-benchmark-um-pq-async)||g' CMakeLists.txt
+sed -i 's|install(FILES ${PROJECT_BINARY_DIR}/web/te-benchmark-um/libte_benchmark_um${LIB_EXT} DESTINATION ${PROJECT_NAME}-bin/lib)||g' CMakeLists.txt
+sed -i 's|install(FILES ${PROJECT_BINARY_DIR}/web/te-benchmark-um-mgr/libte_benchmark_um_mgr${LIB_EXT} DESTINATION ${PROJECT_NAME}-bin/lib)||g' CMakeLists.txt
+sed -i 's|install(FILES ${PROJECT_BINARY_DIR}/web/te-benchmark-um-pq-async/libte_benchmark_um_pq_async${LIB_EXT} DESTINATION ${PROJECT_NAME}-bin/lib)||g' CMakeLists.txt
+
+sed -i 's|tfb-database|localhost|g' $IROOT/ffead-cpp-src/web/te-benchmark-um-pq/config/sdorm.xml
+
+rm -rf build
+mkdir build
+cd build
+CC=/usr/bin/clang CXX=/usr/bin/clang++ CXXFLAGS="-march=native -flto -fprofile-instr-generate=/tmp/cprof.prof" cmake -DSRV_EMB=on -DMOD_REDIS=on ..
+make install && mv $IROOT/ffead-cpp-src/ffead-cpp-5.0-bin $IROOT/ffead-cpp-sql-raw
+
+#Start postgresql
+service postgresql stop
+#For profiling/benchmarking
+
+cd $IROOT/
+sed -i 's|cmake .|CC=/usr/bin/clang CXX=/usr/bin/clang++ cmake .|g' $IROOT/ffead-cpp-sql-raw/resources/rundyn-automake.sh
+#sed -i 's|-fprofile-instr-generate=/tmp/cprof.prof|-fprofile-instr-generate=/tmp/cprofdi.prof|g' $IROOT/ffead-cpp-sql-raw/rtdcf/CMakeLists.txt.template
+./install_ffead-cpp-sql-raw-profiled.sh
+rm -rf $IROOT/ffead-cpp-sql-raw
+
+cd $IROOT/ffead-cpp-src
+rm -rf build
+mkdir build
+cd build
+llvm-profdata-10 merge -output=/tmp/cprof.pgo  /tmp/cprof.prof
+#llvm-profdata-10 merge -output=/tmp/cprofdi.pgo  /tmp/cprofdi.prof
+ls -ltr /tmp/cprof*
+CC=/usr/bin/clang CXX=/usr/bin/clang++ CXXFLAGS="-march=native -flto -fprofile-instr-use=/tmp/cprof.pgo" cmake -DSRV_EMB=on -DMOD_MEMCACHED=on -DMOD_REDIS=on -DMOD_SDORM_MONGO=on ..
+make install && mv $IROOT/ffead-cpp-src/ffead-cpp-5.0-bin $IROOT/ffead-cpp-sql-raw
+
+#Start postgresql
+service postgresql stop
+#For profiling/benchmarking
+
+cd $IROOT/
+sed -i 's|cmake .|CC=/usr/bin/clang CXX=/usr/bin/clang++ cmake .|g' $IROOT/ffead-cpp-sql-raw/resources/rundyn-automake.sh
+#sed -i 's|-fprofile-instr-use=/tmp/cprof.pgo|-fprofile-instr-use=/tmp/cprofdi.pgo|g' $IROOT/ffead-cpp-sql-raw/rtdcf/CMakeLists.txt.template
+./install_ffead-cpp-sql-raw-profiled.sh
+mv $IROOT/ffead-cpp-sql-raw $IROOT/ffead-cpp-5.0-sql
+
+sed -i 's|localhost|tfb-database|g' $IROOT/ffead-cpp-5.0-sql/web/te-benchmark-um-pq/config/sdorm.xml
+
+apt remove -yqq postgresql-13 postgresql-contrib-13 gnupg lsb-release
+apt autoremove -yqq
+rm -rf /ssd/postgresql
+rm -rf /tmp/postgresql
+rm -rf /tmp/wrk /usr/local/bin/wrk
+

+ 69 - 0
frameworks/C++/ffead-cpp/sql-profiled-install.sh

@@ -0,0 +1,69 @@
+mkdir /tmp/profile-data
+
+rm -rf $IROOT/ffead-cpp-5.0-sql
+
+if [ "$1" = "batch" ]
+then
+	apt remove -yqq libpq-dev
+	apt autoremove -yqq
+	apt update && apt install -y bison flex libreadline-dev
+	cd /tmp
+	wget -q https://github.com/an-tao/postgres/archive/batch_mode_ubuntu.tar.gz
+	tar -xzf batch_mode_ubuntu.tar.gz
+	cd postgres-batch_mode_ubuntu
+	./configure --prefix=/usr CFLAGS='-O2 -pipe -march=native'
+	make && make install
+fi
+
+cd $IROOT/ffead-cpp-src/
+rm -rf CMakeCache.txt CMakeFiles
+rm -rf web/te-benchmark-um web/te-benchmark-um-mgr web/te-benchmark-um-pq-async
+
+sed -i 's|add_subdirectory(${PROJECT_SOURCE_DIR}/web/te-benchmark-um)||g' CMakeLists.txt
+sed -i 's|add_subdirectory(${PROJECT_SOURCE_DIR}/web/te-benchmark-um-mgr)||g' CMakeLists.txt
+sed -i 's|add_subdirectory(${PROJECT_SOURCE_DIR}/web/te-benchmark-um-pq-async)||g' CMakeLists.txt
+sed -i 's|install(FILES ${PROJECT_BINARY_DIR}/web/te-benchmark-um/libte_benchmark_um${LIB_EXT} DESTINATION ${PROJECT_NAME}-bin/lib)||g' CMakeLists.txt
+sed -i 's|install(FILES ${PROJECT_BINARY_DIR}/web/te-benchmark-um-mgr/libte_benchmark_um_mgr${LIB_EXT} DESTINATION ${PROJECT_NAME}-bin/lib)||g' CMakeLists.txt
+sed -i 's|install(FILES ${PROJECT_BINARY_DIR}/web/te-benchmark-um-pq-async/libte_benchmark_um_pq_async${LIB_EXT} DESTINATION ${PROJECT_NAME}-bin/lib)||g' CMakeLists.txt
+
+sed -i 's|tfb-database|localhost|g' $IROOT/ffead-cpp-src/web/te-benchmark-um-pq/config/sdorm.xml
+
+rm -rf build
+mkdir build
+cd build
+CXXFLAGS="-march=native -flto -fprofile-dir=/tmp/profile-data -fprofile-generate" cmake -DSRV_EMB=on -DMOD_REDIS=on ..
+make install && mv $IROOT/ffead-cpp-src/ffead-cpp-5.0-bin $IROOT/ffead-cpp-sql-raw
+
+#Start postgresql
+service postgresql stop
+#For profiling/benchmarking
+
+cd $IROOT/
+#sed -i 's|cmake .|cmake -DCMAKE_EXE_LINKER_FLAGS="-fprofile-dir=/tmp/profile-data -fprofile-generate" -DCMAKE_CXX_FLAGS="-march=native -fprofile-dir=/tmp/profile-data  -fprofile-generate" .|g' $IROOT/ffead-cpp-sql-raw/resources/rundyn-automake.sh
+./install_ffead-cpp-sql-raw-profiled.sh
+rm -rf $IROOT/ffead-cpp-sql-raw
+
+cd $IROOT/ffead-cpp-src
+rm -rf build
+mkdir build
+cd build
+CXXFLAGS="-march=native -flto -fprofile-dir=/tmp/profile-data -fprofile-use=/tmp/profile-data -fprofile-correction" cmake -DSRV_EMB=on -DMOD_MEMCACHED=on -DMOD_REDIS=on -DMOD_SDORM_MONGO=on ..
+make install && mv $IROOT/ffead-cpp-src/ffead-cpp-5.0-bin $IROOT/ffead-cpp-sql-raw
+
+#Start postgresql
+service postgresql stop
+#For profiling/benchmarking
+
+cd $IROOT/
+#sed -i 's|cmake .|CXXFLAGS="-march=native -fprofile-dir=/tmp/profile-data -fprofile-use -fprofile-correction" cmake .|g' $IROOT/ffead-cpp-sql-raw/resources/rundyn-automake.sh
+./install_ffead-cpp-sql-raw-profiled.sh
+mv $IROOT/ffead-cpp-sql-raw $IROOT/ffead-cpp-5.0-sql
+
+sed -i 's|localhost|tfb-database|g' $IROOT/ffead-cpp-5.0-sql/web/te-benchmark-um-pq/config/sdorm.xml
+
+apt remove -yqq postgresql-13 postgresql-contrib-13 gnupg lsb-release
+apt autoremove -yqq
+rm -rf /ssd/postgresql
+rm -rf /tmp/postgresql
+rm -rf /tmp/wrk /usr/local/bin/wrk
+

+ 9 - 9
frameworks/C++/ffead-cpp/te-benchmark-um-pq-async/include/TeBkUmLpqAsync.h

@@ -106,24 +106,24 @@ class TeBkUmLpqAsyncRouter : public Router {
 	bool strToNum(const char* str, int len, int& ret);
 	bool strToNum(const char* str, int len, int& ret);
 
 
 	void dbAsync(AsyncReq* req);
 	void dbAsync(AsyncReq* req);
-	static void dbAsyncUtil(void* ctx, int rn, std::vector<LibpqRes>& data);
-	static void dbAsyncCh(void* ctx, bool status, std::string q, int counter);
+	static void dbAsyncUtil(void* ctx, int rn, int cn, char * d);
+	static void dbAsyncCh(void* ctx, bool status, const std::string& q, int counter);
 
 
 	void queriesAsync(const char* q, int ql, AsyncReq* req);
 	void queriesAsync(const char* q, int ql, AsyncReq* req);
-	static void queriesAsyncUtil(void* ctx, int rn, std::vector<LibpqRes>& data);
-	static void queriesAsyncCh(void* ctx, bool status, std::string q, int counter);
+	static void queriesAsyncUtil(void* ctx, int rn, int cn, char * d);
+	static void queriesAsyncCh(void* ctx, bool status, const std::string& q, int counter);
 
 
 	void updatesAsync(const char* q, int ql, AsyncReq* req);
 	void updatesAsync(const char* q, int ql, AsyncReq* req);
-	static void updatesAsyncChQ(void* ctx, bool status, std::string q, int counter);
-	static void updatesAsyncChU(void* ctx, bool status, std::string q, int counter);
+	static void updatesAsyncChQ(void* ctx, bool status, const std::string& q, int counter);
+	static void updatesAsyncChU(void* ctx, bool status, const std::string& q, int counter);
 	
 	
 	void cachedWorlds(const char*, int, std::vector<TeBkUmLpqAsyncWorld>&);
 	void cachedWorlds(const char*, int, std::vector<TeBkUmLpqAsyncWorld>&);
 	static void updateCacheAsyncUtil(void* ctx, int rn, std::vector<LibpqRes>& data);
 	static void updateCacheAsyncUtil(void* ctx, int rn, std::vector<LibpqRes>& data);
-	static void updateCacheAsyncCh(void* ctx, bool status, std::string q, int counter);
+	static void updateCacheAsyncCh(void* ctx, bool status, const std::string& q, int counter);
 
 
 	void getContextAsync(AsyncReq* req);
 	void getContextAsync(AsyncReq* req);
-	static void getContextAsyncUtil(void* ctx, int rn, std::vector<LibpqRes>& data);
-	static void getContextAsyncCh(void* ctx, bool status, std::string q, int counter);
+	static void getContextAsyncUtil(void* ctx, int rn, int cn, char * d, int l);
+	static void getContextAsyncCh(void* ctx, bool status, const std::string& q, int counter);
 
 
 	LibpqDataSourceImpl* sqli;
 	LibpqDataSourceImpl* sqli;
 	LibpqDataSourceImpl* getDb();
 	LibpqDataSourceImpl* getDb();

+ 48 - 37
frameworks/C++/ffead-cpp/te-benchmark-um-pq-async/src/TeBkUmLpqAsync.cpp

@@ -96,19 +96,19 @@ void TeBkUmLpqAsyncRouter::dbAsync(AsyncReq* req) {
 	try {
 	try {
 		std::vector<LibpqParam> pars;
 		std::vector<LibpqParam> pars;
 		LibpqDataSourceImpl::ADD_INT4(pars, rid);
 		LibpqDataSourceImpl::ADD_INT4(pars, rid);
-		void* areq = sqli->executeQueryAsync(WORLD_ONE_QUERY, pars, req, &TeBkUmLpqAsyncRouter::dbAsyncUtil, &TeBkUmLpqAsyncRouter::dbAsyncCh, NULL);
+		void* areq = sqli->executeQueryAsync(WORLD_ONE_QUERY, std::move(pars), req, &TeBkUmLpqAsyncRouter::dbAsyncUtil, &TeBkUmLpqAsyncRouter::dbAsyncCh, NULL);
 		sqli->completeAsync(areq);
 		sqli->completeAsync(areq);
 	} catch(const std::exception& e) {
 	} catch(const std::exception& e) {
 		throw e;
 		throw e;
 	}
 	}
 }
 }
-void TeBkUmLpqAsyncRouter::dbAsyncUtil(void* ctx, int rn, std::vector<LibpqRes>& data) {
+void TeBkUmLpqAsyncRouter::dbAsyncUtil(void* ctx, int rn, int cn, char * d) {
 	AsyncReq* req = (AsyncReq*)ctx;
 	AsyncReq* req = (AsyncReq*)ctx;
 	TeBkUmLpqAsyncWorld* w = (TeBkUmLpqAsyncWorld*)req->d;
 	TeBkUmLpqAsyncWorld* w = (TeBkUmLpqAsyncWorld*)req->d;
-	w->setId(ntohl(*((uint32_t *) data.at(0).d)));
-	w->setRandomNumber(ntohl(*((uint32_t *) data.at(1).d)));
+	if(cn==0)w->setId(ntohl(*((uint32_t *) d)));
+	if(cn==1)w->setRandomNumber(ntohl(*((uint32_t *) d)));
 }
 }
-void TeBkUmLpqAsyncRouter::dbAsyncCh(void* ctx, bool status, std::string q, int counter) {
+void TeBkUmLpqAsyncRouter::dbAsyncCh(void* ctx, bool status, const std::string& q, int counter) {
 	AsyncReq* req = (AsyncReq*)ctx;
 	AsyncReq* req = (AsyncReq*)ctx;
 	TeBkUmLpqAsyncWorld* w = (TeBkUmLpqAsyncWorld*)req->d;
 	TeBkUmLpqAsyncWorld* w = (TeBkUmLpqAsyncWorld*)req->d;
 	req->r.setContent(JSONSerialize::serializeUnknown(w, 0, "TeBkUmLpqAsyncWorld", APP_NAME));
 	req->r.setContent(JSONSerialize::serializeUnknown(w, 0, "TeBkUmLpqAsyncWorld", APP_NAME));
@@ -140,22 +140,24 @@ void TeBkUmLpqAsyncRouter::queriesAsync(const char* q, int ql, AsyncReq* req) {
 			int rid = rand() % 10000 + 1;
 			int rid = rand() % 10000 + 1;
 			std::vector<LibpqParam> pars;
 			std::vector<LibpqParam> pars;
 			LibpqDataSourceImpl::ADD_INT4(pars, rid);
 			LibpqDataSourceImpl::ADD_INT4(pars, rid);
-			areq = sqli->executeQueryAsync(WORLD_ONE_QUERY, pars, req, &TeBkUmLpqAsyncRouter::queriesAsyncUtil, &TeBkUmLpqAsyncRouter::queriesAsyncCh, areq);
+			areq = sqli->executeQueryAsync(WORLD_ONE_QUERY, std::move(pars), req, &TeBkUmLpqAsyncRouter::queriesAsyncUtil, &TeBkUmLpqAsyncRouter::queriesAsyncCh, areq);
 		}
 		}
 		sqli->completeAsync(areq);
 		sqli->completeAsync(areq);
 	} catch(const std::exception& e) {
 	} catch(const std::exception& e) {
 		throw e;
 		throw e;
 	}
 	}
 }
 }
-void TeBkUmLpqAsyncRouter::queriesAsyncUtil(void* ctx, int rn, std::vector<LibpqRes>& data) {
+void TeBkUmLpqAsyncRouter::queriesAsyncUtil(void* ctx, int rn, int cn, char * d) {
 	AsyncReq* req = (AsyncReq*)ctx;
 	AsyncReq* req = (AsyncReq*)ctx;
 	std::vector<TeBkUmLpqAsyncWorld>* vec = (std::vector<TeBkUmLpqAsyncWorld>*)req->d;
 	std::vector<TeBkUmLpqAsyncWorld>* vec = (std::vector<TeBkUmLpqAsyncWorld>*)req->d;
-	TeBkUmLpqAsyncWorld w;
-	w.setId(ntohl(*((uint32_t *) data.at(0).d)));
-	w.setRandomNumber(ntohl(*((uint32_t *) data.at(1).d)));
-	vec->push_back(w);
+	if(cn==0) {
+		vec->push_back(TeBkUmLpqAsyncWorld());
+	}
+	TeBkUmLpqAsyncWorld& w = vec->at(vec->size()-1);
+	if(cn==0)w.setId(ntohl(*((uint32_t *) d)));
+	if(cn==1)w.setRandomNumber(ntohl(*((uint32_t *) d)));
 }
 }
-void TeBkUmLpqAsyncRouter::queriesAsyncCh(void* ctx, bool status, std::string q, int counter) {
+void TeBkUmLpqAsyncRouter::queriesAsyncCh(void* ctx, bool status, const std::string& q, int counter) {
 	AsyncReq* req = (AsyncReq*)ctx;
 	AsyncReq* req = (AsyncReq*)ctx;
 	std::vector<TeBkUmLpqAsyncWorld>* vec = (std::vector<TeBkUmLpqAsyncWorld>*)req->d;
 	std::vector<TeBkUmLpqAsyncWorld>* vec = (std::vector<TeBkUmLpqAsyncWorld>*)req->d;
 	req->r.setContent(JSONSerialize::serializeUnknown(vec, 100, "std::vector<TeBkUmLpqAsyncWorld>", APP_NAME));
 	req->r.setContent(JSONSerialize::serializeUnknown(vec, 100, "std::vector<TeBkUmLpqAsyncWorld>", APP_NAME));
@@ -188,22 +190,23 @@ void TeBkUmLpqAsyncRouter::updatesAsync(const char* q, int ql, AsyncReq* req) {
 			int rid = rand() % 10000 + 1;
 			int rid = rand() % 10000 + 1;
 			std::vector<LibpqParam> pars;
 			std::vector<LibpqParam> pars;
 			LibpqDataSourceImpl::ADD_INT4(pars, rid);
 			LibpqDataSourceImpl::ADD_INT4(pars, rid);
-			areq = sqli->executeQueryAsync(WORLD_ONE_QUERY, pars, req, &TeBkUmLpqAsyncRouter::queriesAsyncUtil, &TeBkUmLpqAsyncRouter::updatesAsyncChQ, areq);
+			areq = sqli->executeQueryAsync(WORLD_ONE_QUERY, std::move(pars), req, &TeBkUmLpqAsyncRouter::queriesAsyncUtil, &TeBkUmLpqAsyncRouter::updatesAsyncChQ, areq);
 		}
 		}
 		sqli->completeAsync(areq);
 		sqli->completeAsync(areq);
 	} catch(const std::exception& e) {
 	} catch(const std::exception& e) {
 		throw e;
 		throw e;
 	}
 	}
 }
 }
-void TeBkUmLpqAsyncRouter::updatesAsyncChQ(void* ctx, bool status, std::string q, int counter) {
+void TeBkUmLpqAsyncRouter::updatesAsyncChQ(void* ctx, bool status, const std::string& q, int counter) {
 	AsyncReq* req = (AsyncReq*)ctx;
 	AsyncReq* req = (AsyncReq*)ctx;
 	std::vector<TeBkUmLpqAsyncWorld>* vec = (std::vector<TeBkUmLpqAsyncWorld>*)req->d;
 	std::vector<TeBkUmLpqAsyncWorld>* vec = (std::vector<TeBkUmLpqAsyncWorld>*)req->d;
 
 
 	std::stringstream ss;
 	std::stringstream ss;
-	ss << "update world as t set randomnumber = c.randomnumber from (values";
+	//ss << "update world as t set randomnumber = c.randomnumber from (values";
 
 
-	std::vector<LibpqParam> pars;
+	LibpqDataSourceImpl* sqli = req->sqli;
 
 
+	void* areq = NULL;
 	int queryCount = (int)vec->size();
 	int queryCount = (int)vec->size();
 	for (int c = 0; c < queryCount; ++c) {
 	for (int c = 0; c < queryCount; ++c) {
 		int newRandomNumber = rand() % 10000 + 1;
 		int newRandomNumber = rand() % 10000 + 1;
@@ -214,14 +217,21 @@ void TeBkUmLpqAsyncRouter::updatesAsyncChQ(void* ctx, bool status, std::string q
 			}
 			}
 		}
 		}
 		vec->at(c).setRandomNumber(newRandomNumber);
 		vec->at(c).setRandomNumber(newRandomNumber);
-		ss << "(" << vec->at(c).getId() << "," << newRandomNumber << ")";
-		if(c!=queryCount-1) {
-			ss << ",";
+		if(areq==NULL) {
+			areq = sqli->beginAsync(areq);
+		} else {
+			sqli->beginAsync(areq);
 		}
 		}
+		ss.str(std::string());
+		std::vector<LibpqParam> pars;
+		ss << "update world set randomnumber = " << newRandomNumber << " where id = " << vec->at(c).getId();
+		sqli->executeUpdateQueryAsync(ss.str(), std::move(pars), NULL, NULL, areq, false);
+		sqli->commitAsync(areq);
+		/*if(c!=queryCount-1) {
+			ss << ",";
+		}*/
 	}
 	}
-	ss << ") as c(id, randomnumber) where c.id = t.id";
-
-	LibpqDataSourceImpl* sqli = req->sqli;
+	//ss << ") as c(id, randomnumber) where c.id = t.id";
 
 
 	AsyncReq* ar = new AsyncReq;
 	AsyncReq* ar = new AsyncReq;
 	ar->sif = req->sif;
 	ar->sif = req->sif;
@@ -231,15 +241,12 @@ void TeBkUmLpqAsyncRouter::updatesAsyncChQ(void* ctx, bool status, std::string q
 	req->sif = NULL;
 	req->sif = NULL;
 
 
 	try {
 	try {
-		void* areq = sqli->beginAsync();
-		sqli->executeUpdateQueryAsync(ss.str(), pars, NULL, NULL, areq, false);
-		sqli->commitAsync(areq);
 		sqli->completeAsync(areq, ar, &TeBkUmLpqAsyncRouter::updatesAsyncChU);
 		sqli->completeAsync(areq, ar, &TeBkUmLpqAsyncRouter::updatesAsyncChU);
 	} catch(const std::exception& e) {
 	} catch(const std::exception& e) {
 		throw e;
 		throw e;
 	}
 	}
 }
 }
-void TeBkUmLpqAsyncRouter::updatesAsyncChU(void* ctx, bool status, std::string q, int counter) {
+void TeBkUmLpqAsyncRouter::updatesAsyncChU(void* ctx, bool status, const std::string& q, int counter) {
 	AsyncReq* req = (AsyncReq*)ctx;
 	AsyncReq* req = (AsyncReq*)ctx;
 	std::vector<TeBkUmLpqAsyncWorld>* vec = (std::vector<TeBkUmLpqAsyncWorld>*)req->d;
 	std::vector<TeBkUmLpqAsyncWorld>* vec = (std::vector<TeBkUmLpqAsyncWorld>*)req->d;
 	req->r.setContent(JSONSerialize::serializeUnknown(vec, 100, "std::vector<TeBkUmLpqAsyncWorld>", APP_NAME));
 	req->r.setContent(JSONSerialize::serializeUnknown(vec, 100, "std::vector<TeBkUmLpqAsyncWorld>", APP_NAME));
@@ -263,7 +270,7 @@ void TeBkUmLpqAsyncRouter::updateCache() {
 
 
 	try {
 	try {
 		std::vector<LibpqParam> pars;
 		std::vector<LibpqParam> pars;
-		void* areq = sqli->executeQueryAsync(WORLD_ALL_QUERY, pars, req, &TeBkUmLpqAsyncRouter::updateCacheAsyncUtil, &TeBkUmLpqAsyncRouter::updateCacheAsyncCh, NULL);
+		void* areq = sqli->executeQueryAsync(WORLD_ALL_QUERY, std::move(pars), req, &TeBkUmLpqAsyncRouter::updateCacheAsyncUtil, &TeBkUmLpqAsyncRouter::updateCacheAsyncCh, NULL);
 		sqli->completeAsync(areq);
 		sqli->completeAsync(areq);
 	} catch(const std::exception& e) {
 	} catch(const std::exception& e) {
 		throw e;
 		throw e;
@@ -277,7 +284,7 @@ void TeBkUmLpqAsyncRouter::updateCacheAsyncUtil(void* ctx, int rn, std::vector<L
 	w.setRandomNumber(ntohl(*((uint32_t *) data.at(1).d)));
 	w.setRandomNumber(ntohl(*((uint32_t *) data.at(1).d)));
 	wlist->push_back(w);
 	wlist->push_back(w);
 }
 }
-void TeBkUmLpqAsyncRouter::updateCacheAsyncCh(void* ctx, bool status, std::string q, int counter) {
+void TeBkUmLpqAsyncRouter::updateCacheAsyncCh(void* ctx, bool status, const std::string& q, int counter) {
 	CacheReq* req = (CacheReq*)ctx;
 	CacheReq* req = (CacheReq*)ctx;
 	std::vector<TeBkUmLpqAsyncWorld>* wlist = (std::vector<TeBkUmLpqAsyncWorld>*)req->d;
 	std::vector<TeBkUmLpqAsyncWorld>* wlist = (std::vector<TeBkUmLpqAsyncWorld>*)req->d;
 	CacheInterface* cchi = req->cchi;
 	CacheInterface* cchi = req->cchi;
@@ -338,23 +345,27 @@ void TeBkUmLpqAsyncRouter::getContextAsync(AsyncReq* req) {
 
 
 	try {
 	try {
 		std::vector<LibpqParam> pars;
 		std::vector<LibpqParam> pars;
-		void* areq = sqli->executeQueryAsync(FORTUNE_ALL_QUERY, pars, req, &TeBkUmLpqAsyncRouter::getContextAsyncUtil, &TeBkUmLpqAsyncRouter::getContextAsyncCh, NULL);
+		void* areq = sqli->executeQueryAsync(FORTUNE_ALL_QUERY, std::move(pars), req, &TeBkUmLpqAsyncRouter::getContextAsyncUtil, &TeBkUmLpqAsyncRouter::getContextAsyncCh, NULL);
 		sqli->completeAsync(areq);
 		sqli->completeAsync(areq);
 	} catch(...) {
 	} catch(...) {
 		throw;
 		throw;
 	}
 	}
 }
 }
-void TeBkUmLpqAsyncRouter::getContextAsyncUtil(void* ctx, int rn, std::vector<LibpqRes>& data) {
+void TeBkUmLpqAsyncRouter::getContextAsyncUtil(void* ctx, int rn, int cn, char * d, int l) {
 	AsyncReq* req = (AsyncReq*)ctx;
 	AsyncReq* req = (AsyncReq*)ctx;
 	std::vector<TeBkUmLpqAsyncFortune>* flst = (std::vector<TeBkUmLpqAsyncFortune>*)req->d;
 	std::vector<TeBkUmLpqAsyncFortune>* flst = (std::vector<TeBkUmLpqAsyncFortune>*)req->d;
-	TeBkUmLpqAsyncFortune w;
-	w.setId(ntohl(*((uint32_t *) data.at(0).d)));
-	std::string nm = std::string(data.at(1).d, data.at(1).l);
-	CryptoHandler::sanitizeHtml(nm);
-	w.setMessage(nm);
-	flst->push_back(w);
+	if(cn==0) {
+		flst->push_back(TeBkUmLpqAsyncFortune());
+	}
+	TeBkUmLpqAsyncFortune& w = flst->at(flst->size()-1);
+	if(cn==0)w.setId(ntohl(*((uint32_t *) d)));
+	else {
+		std::string nm = std::string(d, l);
+		CryptoHandler::sanitizeHtml(nm);
+		w.setMessage(nm);
+	}
 }
 }
-void TeBkUmLpqAsyncRouter::getContextAsyncCh(void* ctx, bool status, std::string q, int counter) {
+void TeBkUmLpqAsyncRouter::getContextAsyncCh(void* ctx, bool status, const std::string& q, int counter) {
 	AsyncReq* req = (AsyncReq*)ctx;
 	AsyncReq* req = (AsyncReq*)ctx;
 	std::vector<TeBkUmLpqAsyncFortune>* flst = (std::vector<TeBkUmLpqAsyncFortune>*)req->d;
 	std::vector<TeBkUmLpqAsyncFortune>* flst = (std::vector<TeBkUmLpqAsyncFortune>*)req->d;
 
 

+ 6 - 6
frameworks/C++/ffead-cpp/te-benchmark-um-pq/include/TeBkUmLpq.h

@@ -100,20 +100,20 @@ class TeBkUmLpqRouter : public Router {
 	void db(TeBkUmLpqWorld&);
 	void db(TeBkUmLpqWorld&);
 	void queries(const char*, int, std::vector<TeBkUmLpqWorld>&);
 	void queries(const char*, int, std::vector<TeBkUmLpqWorld>&);
 	void queriesMulti(const char*, int, std::vector<TeBkUmLpqWorld>&);
 	void queriesMulti(const char*, int, std::vector<TeBkUmLpqWorld>&);
-	static void dbUtil(void* ctx, int rn, std::vector<LibpqRes>& data);
-	static void queriesMultiUtil(void* ctx, int rn, std::vector<LibpqRes>& data);
+	static void dbUtil(void* ctx, int, int, char *);
+	static void queriesMultiUtil(void* ctx, int, int, char *, int);
 
 
 	void updates(const char*, int, std::vector<TeBkUmLpqWorld>&);
 	void updates(const char*, int, std::vector<TeBkUmLpqWorld>&);
-	static void updatesUtil(void* ctx, int rn, std::vector<LibpqRes>& data);
+	static void updatesUtil(void* ctx, int, int, char *);
 	void updatesMulti(const char*, int, std::vector<TeBkUmLpqWorld>&);
 	void updatesMulti(const char*, int, std::vector<TeBkUmLpqWorld>&);
-	static void updatesMultiUtil(void* ctx, int rn, std::vector<LibpqRes>& data);
-	static void updatesMultiUtilCh(void* ctx, bool status, std::string query, int counter);
+	static void updatesMultiUtil(void* ctx, int, int, char *, int);
+	static void updatesMultiUtilCh(void* ctx, bool status, const std::string& query, int counter);
 	
 	
 	void cachedWorlds(const char*, int, std::vector<TeBkUmLpqWorld>&);
 	void cachedWorlds(const char*, int, std::vector<TeBkUmLpqWorld>&);
 	static void updateCacheUtil(void* ctx, int rn, std::vector<LibpqRes>& data);
 	static void updateCacheUtil(void* ctx, int rn, std::vector<LibpqRes>& data);
 
 
 	void getContext(HttpRequest* request, Context* context);
 	void getContext(HttpRequest* request, Context* context);
-	static void getContextUtil(void* ctx, int rn, std::vector<LibpqRes>& data);
+	static void getContextUtil(void* ctx, int, int, char *, int);
 
 
 	LibpqDataSourceImpl* sqli;
 	LibpqDataSourceImpl* sqli;
 	LibpqDataSourceImpl* getDb();
 	LibpqDataSourceImpl* getDb();

+ 59 - 50
frameworks/C++/ffead-cpp/te-benchmark-um-pq/src/TeBkUmLpq.cpp

@@ -100,10 +100,10 @@ void TeBkUmLpqRouter::db(TeBkUmLpqWorld& w) {
 		throw e;
 		throw e;
 	}
 	}
 }
 }
-void TeBkUmLpqRouter::dbUtil(void* ctx, int rn, std::vector<LibpqRes>& data) {
+void TeBkUmLpqRouter::dbUtil(void* ctx, int rn, int cn, char * d) {
 	TeBkUmLpqWorld* w = (TeBkUmLpqWorld*)ctx;
 	TeBkUmLpqWorld* w = (TeBkUmLpqWorld*)ctx;
-	w->setId(ntohl(*((uint32_t *) data.at(0).d)));
-	w->setRandomNumber(ntohl(*((uint32_t *) data.at(1).d)));
+	if(cn==0)w->setId(ntohl(*((uint32_t *) d)));
+	if(cn==1)w->setRandomNumber(ntohl(*((uint32_t *) d)));
 }
 }
 
 
 
 
@@ -159,15 +159,16 @@ void TeBkUmLpqRouter::queriesMulti(const char* q, int ql, std::vector<TeBkUmLpqW
 		throw e;
 		throw e;
 	}
 	}
 }
 }
-void TeBkUmLpqRouter::queriesMultiUtil(void* ctx, int rn, std::vector<LibpqRes>& data) {
+void TeBkUmLpqRouter::queriesMultiUtil(void* ctx, int rn, int cn, char * d, int l) {
 	std::vector<TeBkUmLpqWorld>* wlst = (std::vector<TeBkUmLpqWorld>*)ctx;
 	std::vector<TeBkUmLpqWorld>* wlst = (std::vector<TeBkUmLpqWorld>*)ctx;
-	TeBkUmLpqWorld w;
+	if(cn==0) {
+		wlst->push_back(TeBkUmLpqWorld());
+	}
+	TeBkUmLpqWorld& w = wlst->at(wlst->size()-1);
 	int tmp = 0;
 	int tmp = 0;
-	strToNum(data.at(0).d, data.at(0).l, tmp);
-	w.setId(tmp);
-	strToNum(data.at(1).d, data.at(1).l, tmp);
-	w.setRandomNumber(tmp);
-	wlst->push_back(w);
+	strToNum(d, l, tmp);
+	if(cn==0)w.setId(tmp);
+	if(cn==1)w.setRandomNumber(tmp);
 }
 }
 
 
 
 
@@ -218,18 +219,20 @@ void TeBkUmLpqRouter::updates(const char* q, int ql, std::vector<TeBkUmLpqWorld>
 		throw e;
 		throw e;
 	}
 	}
 }
 }
-void TeBkUmLpqRouter::updatesUtil(void* ctx, int rn, std::vector<LibpqRes>& data) {
+void TeBkUmLpqRouter::updatesUtil(void* ctx, int rn, int cn, char * d) {
 	std::vector<LibpqParam>* pars = (std::vector<LibpqParam>*)ctx;
 	std::vector<LibpqParam>* pars = (std::vector<LibpqParam>*)ctx;
-	int newRandomNumber = rand() % 10000 + 1;
-	if((int)ntohl(*((uint32_t *) data.at(1).d)) == newRandomNumber) {
-		newRandomNumber += 1;
-		if(newRandomNumber>=10000) {
-			newRandomNumber = 1;
+	if(cn==0) {
+		LibpqDataSourceImpl::ADD_INT4(*pars, *(uint32_t *)d, false);
+	} else {
+		int newRandomNumber = rand() % 10000 + 1;
+		if((int)ntohl(*((uint32_t *) d)) == newRandomNumber) {
+			newRandomNumber += 1;
+			if(newRandomNumber>=10000) {
+				newRandomNumber = 1;
+			}
 		}
 		}
+		LibpqDataSourceImpl::ADD_INT4(*pars, newRandomNumber);
 	}
 	}
-	uint32_t id = *(uint32_t *)data.at(0).d;
-	LibpqDataSourceImpl::ADD_INT4(*pars, id, false);
-	LibpqDataSourceImpl::ADD_INT4(*pars, newRandomNumber);
 }
 }
 
 
 void TeBkUmLpqRouter::updatesMulti(const char* q, int ql, std::vector<TeBkUmLpqWorld>& wlst) {
 void TeBkUmLpqRouter::updatesMulti(const char* q, int ql, std::vector<TeBkUmLpqWorld>& wlst) {
@@ -242,7 +245,7 @@ void TeBkUmLpqRouter::updatesMulti(const char* q, int ql, std::vector<TeBkUmLpqW
 
 
 	try {
 	try {
 		std::stringstream ss, ssq;
 		std::stringstream ss, ssq;
-		ss << "begin;update world as t set randomnumber = c.randomnumber from (values";
+		//ss << "begin;update world as t set randomnumber = c.randomnumber from (values";
 
 
 		UpdQrData updt;
 		UpdQrData updt;
 		updt.wlist = &wlst;
 		updt.wlist = &wlst;
@@ -256,7 +259,7 @@ void TeBkUmLpqRouter::updatesMulti(const char* q, int ql, std::vector<TeBkUmLpqW
 		}
 		}
 
 
 		sqli->executeMultiQuery(ssq.str(), &updt, &TeBkUmLpqRouter::updatesMultiUtil, &TeBkUmLpqRouter::updatesMultiUtilCh);
 		sqli->executeMultiQuery(ssq.str(), &updt, &TeBkUmLpqRouter::updatesMultiUtil, &TeBkUmLpqRouter::updatesMultiUtilCh);
-		ss << ") as c(id, randomnumber) where c.id = t.id;commit";
+		//ss << ") as c(id, randomnumber) where c.id = t.id;commit";
 
 
 		if(!updt.status) {
 		if(!updt.status) {
 			return;
 			return;
@@ -272,30 +275,29 @@ void TeBkUmLpqRouter::updatesMulti(const char* q, int ql, std::vector<TeBkUmLpqW
 		throw e;
 		throw e;
 	}
 	}
 }
 }
-void TeBkUmLpqRouter::updatesMultiUtil(void* ctx, int rn, std::vector<LibpqRes>& data) {
+void TeBkUmLpqRouter::updatesMultiUtil(void* ctx, int rn, int cn, char * d, int l) {
 	UpdQrData* updt = (UpdQrData*)ctx;
 	UpdQrData* updt = (UpdQrData*)ctx;
 	std::stringstream* ss = updt->ss;
 	std::stringstream* ss = updt->ss;
-	TeBkUmLpqWorld w;
+	if(cn==0) {
+		updt->wlist->push_back(TeBkUmLpqWorld());
+	}
+	TeBkUmLpqWorld& w = updt->wlist->at(updt->wlist->size()-1);
 	int tmp = 0;
 	int tmp = 0;
-	strToNum(data.at(0).d, data.at(0).l, tmp);
-	w.setId(tmp);
-	strToNum(data.at(1).d, data.at(1).l, tmp);
-	int newRandomNumber = rand() % 10000 + 1;
-	if(tmp == newRandomNumber) {
-		newRandomNumber += 1;
-		if(newRandomNumber>=10000) {
-			newRandomNumber = 1;
+	strToNum(d, l, tmp);
+	if(cn==0)w.setId(tmp);
+	else {
+		int newRandomNumber = rand() % 10000 + 1;
+		if(tmp == newRandomNumber) {
+			newRandomNumber += 1;
+			if(newRandomNumber>=10000) {
+				newRandomNumber = 1;
+			}
 		}
 		}
-	}
-	w.setRandomNumber(newRandomNumber);
-	updt->wlist->push_back(w);
-	*ss << "(" << w.getId() << "," << w.getRandomNumber() << ")";
-	updt->queryCount--;
-	if(updt->queryCount>0) {
-		*ss << ",";
+		w.setRandomNumber(newRandomNumber);
+		*ss << "begin;update world set randomnumber = " << newRandomNumber << " where id = " << w.getId() << ";commit;";
 	}
 	}
 }
 }
-void TeBkUmLpqRouter::updatesMultiUtilCh(void* ctx, bool status, std::string query, int counter) {
+void TeBkUmLpqRouter::updatesMultiUtilCh(void* ctx, bool status, const std::string& query, int counter) {
 	UpdQrData* updt = (UpdQrData*)ctx;
 	UpdQrData* updt = (UpdQrData*)ctx;
 	if(!status) {
 	if(!status) {
 		updt->status = status;
 		updt->status = status;
@@ -341,16 +343,19 @@ void TeBkUmLpqRouter::cachedWorlds(const char* q, int ql, std::vector<TeBkUmLpqW
 	CacheInterface* cchi = CacheManager::getImpl();
 	CacheInterface* cchi = CacheManager::getImpl();
 
 
 	try {
 	try {
-		std::vector<std::string> keys;
+		std::vector<std::string> keys, values;
 		for (int c = 0; c < queryCount; ++c) {
 		for (int c = 0; c < queryCount; ++c) {
 			int rid = rand() % 10000 + 1;
 			int rid = rand() % 10000 + 1;
+			keys.push_back(CastUtil::fromNumber(rid));
+		}
+		cchi->mgetRaw(keys, values);
+		for (int c = 0; c < queryCount; ++c) {
 			TeBkUmLpqWorld w;
 			TeBkUmLpqWorld w;
-			std::string v = cchi->getValue(CastUtil::fromNumber(rid));
+			std::string& v = values.at(c);
 			size_t fn = v.find(";");
 			size_t fn = v.find(";");
 			int tmp = 0;
 			int tmp = 0;
 			strToNum(v.substr(0, fn).c_str(), fn, tmp);
 			strToNum(v.substr(0, fn).c_str(), fn, tmp);
 			w.setId(tmp);
 			w.setId(tmp);
-			tmp = 0;
 			strToNum(v.substr(fn+1).c_str(), v.length()-fn-1, tmp);
 			strToNum(v.substr(fn+1).c_str(), v.length()-fn-1, tmp);
 			w.setRandomNumber(tmp);
 			w.setRandomNumber(tmp);
 			wlst.push_back(w);
 			wlst.push_back(w);
@@ -381,14 +386,18 @@ void TeBkUmLpqRouter::getContext(HttpRequest* request, Context* context) {
 		throw;
 		throw;
 	}
 	}
 }
 }
-void TeBkUmLpqRouter::getContextUtil(void* ctx, int rn, std::vector<LibpqRes>& data) {
+void TeBkUmLpqRouter::getContextUtil(void* ctx, int rn, int cn, char * d, int l) {
 	std::vector<TeBkUmLpqFortune>* flst = (std::vector<TeBkUmLpqFortune>*)ctx;
 	std::vector<TeBkUmLpqFortune>* flst = (std::vector<TeBkUmLpqFortune>*)ctx;
-	TeBkUmLpqFortune w;
-	w.setId(ntohl(*((uint32_t *) data.at(0).d)));
-	std::string nm = std::string(data.at(1).d, data.at(1).l);
-	CryptoHandler::sanitizeHtml(nm);
-	w.setMessage(nm);
-	flst->push_back(w);
+	if(cn==0) {
+		flst->push_back(TeBkUmLpqFortune());
+	}
+	TeBkUmLpqFortune& w = flst->at(flst->size()-1);
+	if(cn==0)w.setId(ntohl(*((uint32_t *) d)));
+	else {
+		std::string nm = std::string(d, l);
+		CryptoHandler::sanitizeHtml(nm);
+		w.setMessage(nm);
+	}
 }
 }
 
 
 
 
@@ -451,7 +460,7 @@ bool TeBkUmLpqRouter::route(HttpRequest* req, HttpResponse* res, void* dlib, voi
 			res->setContentType(ContentTypes::CONTENT_TYPE_TEXT_SHTML);
 			res->setContentType(ContentTypes::CONTENT_TYPE_TEXT_SHTML);
 			res->setHTTPResponseStatus(HTTPResponseStatus::Ok);
 			res->setHTTPResponseStatus(HTTPResponseStatus::Ok);
 		}
 		}
-	} else if(StringUtil::endsWith(path, "/updates_old")) {
+	} else if(StringUtil::endsWith(path, "/bupdates")) {
 		struct yuarel_param params[1];
 		struct yuarel_param params[1];
 		yuarel_parse_query((char*)req->getQueryStr().data(), req->getQueryStr().size(), params, 1);
 		yuarel_parse_query((char*)req->getQueryStr().data(), req->getQueryStr().size(), params, 1);
 		std::vector<TeBkUmLpqWorld> msg;
 		std::vector<TeBkUmLpqWorld> msg;

+ 1 - 1
frameworks/C++/ffead-cpp/te-benchmark-um/src/TeBkUm.cpp

@@ -175,7 +175,7 @@ void TeBkUmRouter::cachedWorlds(const char* q, int ql, std::vector<TeBkUmWorld>&
 			keys.push_back(CastUtil::fromNumber(rid));
 			keys.push_back(CastUtil::fromNumber(rid));
 		}
 		}
 
 
-		wlst = cchi->mgetO<TeBkUmWorld>(keys);
+		cchi->mgetO<TeBkUmWorld>(keys, wlst);
 		CacheManager::cleanImpl(cchi);
 		CacheManager::cleanImpl(cchi);
 	} catch(const std::exception& e) {
 	} catch(const std::exception& e) {
 		CacheManager::cleanImpl(cchi);
 		CacheManager::cleanImpl(cchi);