Browse Source

remove C++/wt broken implementation (#7220)

Nate 3 years ago
parent
commit
db2c5ea760

+ 0 - 376
frameworks/C++/wt/benchmark.cpp

@@ -1,376 +0,0 @@
-#include <signal.h>
-#include <cstdlib>
-#include <cstring>
-#include <string>
-#include <vector>
-#include <algorithm>
-
-#include <Wt/WServer.h>
-#include <Wt/WResource.h>
-#include <Wt/Http/Request.h>
-#include <Wt/Http/Response.h>
-#include <Wt/WTemplate.h>
-#include <Wt/Utils.h>
-
-#include <Wt/Dbo/Dbo.h>
-#include <Wt/Dbo/Json.h>
-#ifndef BENCHMARK_USE_POSTGRES
-#include <Wt/Dbo/backend/MySQL.h>
-#else
-#include <Wt/Dbo/backend/Postgres.h>
-#endif
-
-#include <random>
-
-#ifndef WT_WIN32
-extern char **environ;
-#endif // WT_WIN32
-
-class MyMessage {
-public:
-  std::string message;
-
-  template<class Action>
-  void persist(Action& a) {
-    Wt::Dbo::field(a, message, "message");
-  }
-};
-
-class World {
-public:
-  int randomNumber;
-
-  template<class Action>
-  void persist(Action& a) {
-    Wt::Dbo::field(a, randomNumber, "randomnumber");
-  }
-};
-
-class Fortune {
-public:
-  std::string message;
-
-  template<class Action>
-  void persist(Action& a) {
-    Wt::Dbo::field(a, message, "message");
-  }
-};
-
-namespace Wt {
-  namespace Dbo {
-    template<>
-    struct dbo_traits<World> : public dbo_default_traits {
-      static const char *versionField() {
-        return 0;
-      }
-      static IdType invalidId() {
-        return 0;
-      }
-    };
-    template<>
-    struct dbo_traits<Fortune> : public dbo_default_traits {
-      static const char *versionField() {
-        return 0;
-      }
-      static IdType invalidId() {
-        return 0;
-      }
-    };
-  }
-}
-
-class JsonResource : public Wt::WResource {
-public:
-    virtual void handleRequest(const Wt::Http::Request &request, Wt::Http::Response &response) {
-        response.setMimeType("application/json");
-        response.addHeader("Server", "Wt");
-
-        MyMessage message;
-        message.message = "Hello, World!";
-
-        Wt::Dbo::JsonSerializer writer(response.out());
-        writer.serialize(message);
-    }
-};
-
-class MyConnection : public
-#ifdef BENCHMARK_USE_POSTGRES
-  Wt::Dbo::backend::Postgres
-#else
-  Wt::Dbo::backend::MySQL
-#endif
-{
-public:
-#ifdef BENCHMARK_USE_POSTGRES
-  MyConnection(const std::string &db) :
-  Wt::Dbo::backend::Postgres(db) {}
-#else
-  MyConnection(const std::string &db, const std::string &dbuser, const std::string &dbpasswd, const std::string &dbhost, unsigned int dbport) :
-  Wt::Dbo::backend::MySQL(db, dbuser, dbpasswd, dbhost, dbport) {}
-#endif
-
-  virtual void startTransaction() { }
-  virtual void commitTransaction() { }
-  virtual void rollbackTransaction() { }
-};
-
-struct DbStruct {
-  MyConnection *connection;
-  Wt::Dbo::Session session;
-
-  std::default_random_engine rng;
-  std::uniform_int_distribution<int> distribution;
-
-  DbStruct()
-    : connection(0),
-      rng(clock()),
-      distribution(1, 10000) {
-    std::string dbHostStr = "localhost";
-    char *dbHost = std::getenv("DBHOST");
-    if (dbHost)
-      dbHostStr = std::string(dbHost);
-#ifndef BENCHMARK_USE_POSTGRES
-    auto c = Wt::cpp14::make_unique<MyConnection>("hello_world", "benchmarkdbuser", "benchmarkdbpass", dbHostStr, 3306);
-#else
-    auto connStr = std::string("host=") + dbHostStr + " port=5432 user=benchmarkdbuser password=benchmarkdbpass dbname=hello_world";
-    auto c = Wt::cpp14::make_unique<MyConnection>(connStr);
-#endif
-
-    connection = c.get();
-    session.setConnection(std::move(c));
-    session.mapClass<World>("world");
-    session.mapClass<Fortune>("fortune");
-  }
-
-  int rand() {
-    return distribution(rng);
-  }
-};
-
-namespace {
-  thread_local DbStruct *dbStruct_;
-}
-
-class DbResource : public Wt::WResource {
-public:
-  virtual void handleRequest(const Wt::Http::Request &request, Wt::Http::Response &response) {
-    response.setMimeType("application/json");
-    response.addHeader("Server", "Wt");
-
-    if (!dbStruct_) {
-      dbStruct_ = new DbStruct();
-    }
-
-    Wt::Dbo::Transaction transaction(dbStruct_->session);
-    Wt::Dbo::ptr<World> entry = dbStruct_->session.load<World>(dbStruct_->rand());
-    
-    Wt::Dbo::JsonSerializer writer(response.out());
-    writer.serialize(entry);
-  }
-};
-
-class QueriesResource : public Wt::WResource {
-public:
-  virtual void handleRequest(const Wt::Http::Request &request, Wt::Http::Response &response) {
-    int n;
-    if (const std::string *queries = request.getParameter("queries")) {
-      n = atoi(queries->c_str());
-      if (n < 1)
-        n = 1;
-      else if (n > 500)
-        n = 500;
-    } else {
-      n = 1;
-    }
-
-    response.setMimeType("application/json");
-    response.addHeader("Server", "Wt");
-
-    if (!dbStruct_) {
-      dbStruct_ = new DbStruct();
-    }
-
-    Wt::Dbo::Transaction transaction(dbStruct_->session);
-    std::vector<Wt::Dbo::ptr<World> > results;
-    results.reserve(n);
-    for (int i = 0; i < n; ++i) {
-      results.push_back(dbStruct_->session.load<World>(dbStruct_->rand()));
-    }
-    Wt::Dbo::JsonSerializer writer(response.out());
-    writer.serialize(results);
-  }
-};
-
-typedef Wt::Dbo::collection< Wt::Dbo::ptr<Fortune> > Fortunes;
-typedef std::vector<Wt::Dbo::ptr<Fortune> > VFortunes;
-
-bool fortuneCmp(const Wt::Dbo::ptr<Fortune>& f1, const Wt::Dbo::ptr<Fortune>& f2) {
-  return strcmp(f1->message.c_str(), f2->message.c_str()) < 0;
-}
-
-class FortuneTemplate : public Wt::WTemplate {
-private:
-  const VFortunes *fortunes_;
-  mutable std::vector<Wt::Dbo::ptr<Fortune> >::const_iterator it_;
-public:
-  FortuneTemplate(const std::vector<Wt::Dbo::ptr<Fortune> >& fortunes)
-    : Wt::WTemplate(tr("fortunes")),
-      fortunes_(&fortunes),
-      it_(fortunes.end())
-  {
-    addFunction("while", &Wt::WTemplate::Functions::while_f);
-  }
-
-  virtual bool conditionValue(const std::string& name) const {
-    if (name == "next-fortune") {
-      if (it_ == fortunes_->end())
-        it_ = fortunes_->begin();
-      else
-        ++it_;
-
-      if (it_ == fortunes_->end())
-        return false;
-
-      return true;
-    } else
-      return Wt::WTemplate::conditionValue(name);
-  }
-
-  virtual void resolveString(const std::string& varName, const std::vector<Wt::WString>& vars, std::ostream& result) {
-    if (varName == "id")
-      result << it_->id();
-    else if (varName == "message")
-      format(result, Wt::WString((*it_)->message));
-    else
-      Wt::WTemplate::resolveString(varName, vars, result);
-  }
-};
-
-class FortuneResource : public Wt::WResource {
-public:
-  virtual void handleRequest(const Wt::Http::Request &request, Wt::Http::Response &response) {
-    response.setMimeType("text/html; charset=utf-8");
-    response.addHeader("Server", "Wt");
-
-    if (!dbStruct_) {
-      dbStruct_ = new DbStruct();
-    }
-
-    Wt::Dbo::Transaction transaction(dbStruct_->session);
-    Fortunes fortunes = dbStruct_->session.find<Fortune>();
-    VFortunes vFortunes;
-    for (Fortunes::const_iterator i = fortunes.begin(); i != fortunes.end(); ++i)
-      vFortunes.push_back(*i);
-    auto additionalFortune = Wt::cpp14::make_unique<Fortune>();
-    additionalFortune->message = "Additional fortune added at request time.";
-    vFortunes.push_back(Wt::Dbo::ptr<Fortune>(std::move(additionalFortune)));
-
-    std::sort(vFortunes.begin(), vFortunes.end(), fortuneCmp);
-
-    FortuneTemplate tpl(vFortunes);
-
-    response.out() << "<!DOCTYPE html>";
-    tpl.renderTemplate(response.out());
-  }
-};
-
-class UpdateResource : public Wt::WResource {
-public:
-  virtual void handleRequest(const Wt::Http::Request &request, Wt::Http::Response &response) {
-    int n;
-    if (const std::string *queries = request.getParameter("queries")) {
-      n = atoi(queries->c_str());
-      if (n < 1)
-        n = 1;
-      else if (n > 500)
-        n = 500;
-    } else {
-      n = 1;
-    }
-
-    response.setMimeType("application/json");
-    response.addHeader("Server", "Wt");
-
-    if (!dbStruct_) {
-      dbStruct_ = new DbStruct();
-    }
-
-    std::vector<Wt::Dbo::ptr<World> > results;
-
-    for (int i = 0; i < n; ++i) {
-      bool success = false;
-      while (!success) {
-        try {
-          Wt::Dbo::Transaction transaction(dbStruct_->session);
-          Wt::Dbo::ptr<World> world = dbStruct_->session.load<World>(dbStruct_->rand());
-          world.modify()->randomNumber = dbStruct_->rand();
-          transaction.commit();
-          results.push_back(world);
-          success = true;
-        } catch (Wt::Dbo::Exception& e) {
-          // Retry
-        }
-      }
-    }
-
-    Wt::Dbo::JsonSerializer writer(response.out());
-    writer.serialize(results);
-  }
-};
-
-class PlaintextResource : public Wt::WResource {
-  virtual void handleRequest(const Wt::Http::Request &request, Wt::Http::Response &response) {
-    response.setMimeType("text/plain");
-    response.addHeader("Server", "Wt");
-
-    response.out() << "Hello, World!";
-  }
-};
-
-int main(int argc, char** argv) {
-  try {
-    Wt::WServer server(argv[0]);
-
-    server.setServerConfiguration(argc, argv, WTHTTP_CONFIGURATION);
-
-    auto bundle = std::make_shared<Wt::WMessageResourceBundle>();
-    bundle->use(server.appRoot() + "fortunes");
-    server.setLocalizedStrings(bundle);
-
-    JsonResource jsonResource;
-    server.addResource(&jsonResource, "/json");
-
-    DbResource dbResource;
-    server.addResource(&dbResource, "/db");
-
-    QueriesResource queriesResource;
-    server.addResource(&queriesResource, "/queries");
-
-    FortuneResource fortuneResource;
-    server.addResource(&fortuneResource, "/fortune");
-
-    UpdateResource updateResource;
-    server.addResource(&updateResource, "/updates");
-    
-    PlaintextResource plaintextResource;
-    server.addResource(&plaintextResource, "/plaintext");
-
-    if (server.start()) {
-      int sig = Wt::WServer::waitForShutdown();
-
-      std::cerr << "Shutdown (signal = " << sig << ")" << std::endl;
-      server.stop();
-
-#ifndef WT_WIN32
-      if (sig == SIGHUP)
-        Wt::WServer::restart(argc, argv, environ);
-#endif // WT_WIN32
-    }
-  } catch (Wt::WServer::Exception& e) {
-    std::cerr << e.what() << "\n";
-    return 1;
-  } catch (std::exception& e) {
-    std::cerr << "exception: " << e.what() << "\n";
-    return 1;
-  }
-}

+ 0 - 50
frameworks/C++/wt/benchmark_config.json

@@ -1,50 +0,0 @@
-{
-  "framework": "wt",
-  "tests": [{
-     "default": {
-     	"json_url": "/json",
-     	"db_url": "/db",
-     	"query_url": "/queries?queries=",
-     	"fortune_url": "/fortune",
-     	"update_url": "/updates?queries=",
-     	"plaintext_url": "/plaintext",
-     	"port": 8080,
-     	"approach": "Realistic",
-     	"classification": "Fullstack",
-     	"database": "MySQL",
-     	"framework": "wt",
-     	"language": "C++",
-          "flavor": "None",
-     	"orm": "Full",
-     	"platform": "None",
-     	"webserver": "None",
-     	"os": "Linux",
-     	"database_os": "Linux",
-     	"display_name": "wt",
-     	"notes": "",
-          "versus": "wt"
-     },
-     "postgres": {
-     	"db_url": "/db",
-     	"query_url": "/queries?queries=",
-     	"fortune_url": "/fortune",
-     	"update_url": "/updates?queries=",
-     	"port": 8080,
-     	"approach": "Realistic",
-     	"classification": "Fullstack",
-     	"database": "Postgres",
-     	"framework": "wt",
-     	"language": "C++",
-        "flavor": "None",
-     	"orm": "Full",
-     	"platform": "None",
-     	"webserver": "None",
-     	"os": "Linux",
-     	"database_os": "Linux",
-     	"display_name": "wt-postgres",
-     	"notes": "",
-        "versus": "wt",
-		"tags": ["broken"]
-     }
-  }]
-}

+ 0 - 34
frameworks/C++/wt/config.toml

@@ -1,34 +0,0 @@
-[framework]
-name = "wt"
-
-[main]
-urls.plaintext = "/plaintext"
-urls.json = "/json"
-urls.db = "/db"
-urls.query = "/queries?queries="
-urls.update = "/updates?queries="
-urls.fortune = "/fortune"
-approach = "Realistic"
-classification = "Fullstack"
-database = "MySQL"
-database_os = "Linux"
-os = "Linux"
-orm = "Full"
-platform = "None"
-webserver = "None"
-versus = "wt"
-
-[postgres]
-urls.db = "/db"
-urls.query = "/queries?queries="
-urls.update = "/updates?queries="
-urls.fortune = "/fortune"
-approach = "Realistic"
-classification = "Fullstack"
-database = "Postgres"
-database_os = "Linux"
-os = "Linux"
-orm = "Full"
-platform = "None"
-webserver = "None"
-versus = "wt"

+ 0 - 25
frameworks/C++/wt/fortunes.xml

@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<messages>
-    <message id="fortunes">
-<html>
-    <head>
-        <title>Fortunes</title>
-    </head>
-    <body>
-        <table>
-            <tr>
-                <th>id</th>
-                <th>message</th>
-            </tr>
-            ${while:next-fortune fortune-table-row}
-        </table>
-    </body>
-</html></message>
-
-    <message id="fortune-table-row">
-        <tr>
-            <td>${id}</td>
-            <td>${message}</td>
-        </tr>
-    </message>
-</messages>

+ 0 - 86
frameworks/C++/wt/wt-postgres.dockerfile

@@ -1,86 +0,0 @@
-FROM buildpack-deps:xenial
-
-RUN apt-get update -yqq && apt-get install -yqq software-properties-common unzip cmake
-
-RUN add-apt-repository ppa:ubuntu-toolchain-r/test -y
-RUN apt-get update -yqq
-RUN apt-get install -yqq gcc-6 g++-6
-
-ENV WT_VERSION 4.0.2
-ENV BOOST_ROOT /boost
-ENV BOOST_INC ${BOOST_ROOT}/include
-ENV BOOST_LIB ${BOOST_ROOT}/lib
-ENV WT_ROOT /wt
-ENV WT_LIB ${WT_ROOT}/lib
-ENV WT_INC ${WT_ROOT}/include
-ENV LD_LIBRARY_PATH ${BOOST_LIB}:${WT_LIB}:${LD_LIBRARY_PATH}
-ENV CPLUS_INCLUDE_PATH /usr/include/postgresql:/usr/include/postgresql/9.3/server:${CPLUS_INCLUDE_PATH}
-
-WORKDIR ${WT_ROOT}
-COPY benchmark.cpp benchmark.cpp
-COPY fortunes.xml fortunes.xml
-COPY wt_config.xml wt_config.xml
-
-# Build boost_thread, boost_system, boost_filesystem and boost_program_options
-RUN wget -q https://dl.bintray.com/boostorg/release/1.65.1/source/boost_1_65_1.tar.gz
-RUN tar xf boost_1_65_1.tar.gz
-RUN cd boost_1_65_1 && \
-    ./bootstrap.sh && \
-    ./b2 \
-      -d0 \
-      toolset=gcc-6 \
-      variant=release \
-      link=static \
-      cxxflags="-std=c++14 -march=native" \
-      cflags="-march=native" \
-      --prefix=${BOOST_ROOT} \
-      --with-system \
-      --with-thread \
-      --with-program_options \
-      --with-filesystem \
-      install
-
-RUN wget -q https://github.com/emweb/wt/archive/${WT_VERSION}.tar.gz
-RUN mv ${WT_VERSION}.tar.gz wt-${WT_VERSION}.tar.gz
-RUN tar xf wt-${WT_VERSION}.tar.gz
-
-RUN cd wt-$WT_VERSION && \
-    mkdir -p build && \
-    cd build && \
-    cmake .. -DCMAKE_CXX_STANDARD=14 -DCMAKE_BUILD_TYPE=Release \
-      -DBOOST_PREFIX=${BOOST_ROOT} \
-      -DCMAKE_INSTALL_PREFIX=${WT_ROOT} -DCONFIGDIR=${WT_ROOT}/etc \
-      -DCMAKE_C_COMPILER=$(which gcc-6) \
-      -DCMAKE_CXX_COMPILER=$(which g++-6) -DDESTDIR=${WT_ROOT} \
-      -DWEBUSER=$(id -u -n) -DWEBGROUP=$(id -g -n) \
-      -DENABLE_SSL=OFF -DHTTP_WITH_ZLIB=OFF \
-      -DCMAKE_C_FLAGS_RELEASE="-O3 -march=native -DNDEBUG" \
-      -DCMAKE_CXX_FLAGS_RELEASE="-O3 -march=native -DNDEBUG" \
-      -DBUILD_TESTS=OFF -DENABLE_LIBWTTEST=OFF \
-      -DSHARED_LIBS=OFF >/dev/null && \
-    make && make install
-
-RUN g++-6 \
-  -std=c++14 \
-  -O3 -march=native -DNDEBUG \
-  -I${BOOST_INC} \
-  -L${BOOST_LIB} \
-  -I${WT_INC} \
-  -L${WT_LIB} \
-  -o te-benchmark-pg.wt \
-  -DBENCHMARK_USE_POSTGRES \
-  benchmark.cpp \
-  -lwthttp -lwt \
-  -lwtdbo -lwtdbopostgres \
-  -lboost_system \
-  -lboost_program_options \
-  -lboost_thread \
-  -lboost_filesystem \
-  -lpthread \
-  -lpq
-
-ENV DBHOST tfb-database
-
-EXPOSE 8080
-
-CMD ./te-benchmark-pg.wt -c wt_config.xml -t $(nproc) --docroot . --approot . --http-listen 0.0.0.0:8080 --accesslog=- --no-compression

+ 0 - 85
frameworks/C++/wt/wt.dockerfile

@@ -1,85 +0,0 @@
-FROM buildpack-deps:xenial
-
-RUN apt-get update -yqq && apt-get install -yqq software-properties-common unzip cmake
-
-RUN add-apt-repository ppa:ubuntu-toolchain-r/test -y
-RUN apt-get update -yqq
-RUN apt-get install -yqq gcc-6 g++-6
-
-ENV WT_VERSION 4.0.2
-ENV BOOST_ROOT /boost
-ENV BOOST_INC ${BOOST_ROOT}/include
-ENV BOOST_LIB ${BOOST_ROOT}/lib
-ENV WT_ROOT /wt
-ENV WT_LIB ${WT_ROOT}/lib
-ENV WT_INC ${WT_ROOT}/include
-ENV LD_LIBRARY_PATH ${BOOST_LIB}:${WT_LIB}:${LD_LIBRARY_PATH}
-ENV CPLUS_INCLUDE_PATH /usr/include/postgresql:/usr/include/postgresql/9.3/server:${CPLUS_INCLUDE_PATH}
-
-WORKDIR ${WT_ROOT}
-COPY benchmark.cpp benchmark.cpp
-COPY fortunes.xml fortunes.xml
-COPY wt_config.xml wt_config.xml
-
-# Build boost_thread, boost_system, boost_filesystem and boost_program_options
-RUN wget -q https://dl.bintray.com/boostorg/release/1.65.1/source/boost_1_65_1.tar.gz
-RUN tar xf boost_1_65_1.tar.gz
-RUN cd boost_1_65_1 && \
-    ./bootstrap.sh && \
-    ./b2 \
-      -d0 \
-      toolset=gcc-6 \
-      variant=release \
-      link=static \
-      cxxflags="-std=c++14 -march=native" \
-      cflags="-march=native" \
-      --prefix=${BOOST_ROOT} \
-      --with-system \
-      --with-thread \
-      --with-program_options \
-      --with-filesystem \
-      install
-
-RUN wget -q https://github.com/emweb/wt/archive/${WT_VERSION}.tar.gz
-RUN mv ${WT_VERSION}.tar.gz wt-${WT_VERSION}.tar.gz
-RUN tar xf wt-${WT_VERSION}.tar.gz
-
-RUN cd wt-$WT_VERSION && \
-    mkdir -p build && \
-    cd build && \
-    cmake .. -DCMAKE_CXX_STANDARD=14 -DCMAKE_BUILD_TYPE=Release \
-      -DBOOST_PREFIX=${BOOST_ROOT} \
-      -DCMAKE_INSTALL_PREFIX=${WT_ROOT} -DCONFIGDIR=${WT_ROOT}/etc \
-      -DCMAKE_C_COMPILER=$(which gcc-6) \
-      -DCMAKE_CXX_COMPILER=$(which g++-6) -DDESTDIR=${WT_ROOT} \
-      -DWEBUSER=$(id -u -n) -DWEBGROUP=$(id -g -n) \
-      -DENABLE_SSL=OFF -DHTTP_WITH_ZLIB=OFF \
-      -DCMAKE_C_FLAGS_RELEASE="-O3 -march=native -DNDEBUG" \
-      -DCMAKE_CXX_FLAGS_RELEASE="-O3 -march=native -DNDEBUG" \
-      -DBUILD_TESTS=OFF -DENABLE_LIBWTTEST=OFF \
-      -DSHARED_LIBS=OFF >/dev/null && \
-    make && make install
-
-RUN g++-6 \
-  -std=c++14 \
-  -O3 -march=native -DNDEBUG \
-  -I${BOOST_INC} \
-  -L${BOOST_LIB} \
-  -I${WT_INC} \
-  -L${WT_LIB} \
-  -o te-benchmark.wt \
-  benchmark.cpp \
-  -lwthttp -lwt \
-  -lwtdbo -lwtdbomysql \
-  -lboost_system \
-  -lboost_program_options \
-  -lboost_thread \
-  -lboost_filesystem \
-  -lpthread \
-  -lmysqlclient
-
-ENV DBHOST tfb-database
-
-EXPOSE 8080
-
-CMD ./te-benchmark.wt -c wt_config.xml -t $(nproc) --docroot . --approot . --http-listen 0.0.0.0:8080 --accesslog=- --no-compression

+ 0 - 6
frameworks/C++/wt/wt_config.xml

@@ -1,6 +0,0 @@
-<server>
-    <application-settings location="*">
-        <log-file></log-file>
-        <log-config>-*</log-config>
-    </application-settings>
-</server>