From 17362929c2d1de8e8ccdb6eb306838263f1332bc Mon Sep 17 00:00:00 2001 From: Sergey Yakubov <sergey.yakubov@desy.de> Date: Sun, 28 Jan 2018 10:24:11 +0100 Subject: [PATCH] start server databroker --- .../worker/process_folder/process_folder.cpp | 2 +- .../content_multithread.cpp | 2 +- .../next_multithread/next_multithread.cpp | 2 +- worker/api/cpp/CMakeLists.txt | 2 +- worker/api/cpp/include/worker/data_broker.h | 6 +++++- worker/api/cpp/src/data_broker.cpp | 21 +++++++++++++++---- worker/api/cpp/src/server_data_broker.cpp | 17 +++++++++++++++ worker/api/cpp/src/server_data_broker.h | 17 +++++++++++++++ worker/api/cpp/unittests/test_worker_api.cpp | 18 ++++++++++++++-- 9 files changed, 76 insertions(+), 11 deletions(-) create mode 100644 worker/api/cpp/src/server_data_broker.cpp create mode 100644 worker/api/cpp/src/server_data_broker.h diff --git a/examples/worker/process_folder/process_folder.cpp b/examples/worker/process_folder/process_folder.cpp index 54935ab54..40bf59482 100644 --- a/examples/worker/process_folder/process_folder.cpp +++ b/examples/worker/process_folder/process_folder.cpp @@ -28,7 +28,7 @@ std::string ProcessCommandArguments(int argc, char* argv[]) { std::unique_ptr<hidra2::DataBroker> CreateBroker(const std::string& folder) { hidra2::WorkerErrorCode err; - auto broker = hidra2::DataBrokerFactory::Create(folder, &err); + auto broker = hidra2::DataBrokerFactory::CreateFolderBroker(folder, &err); if (err != WorkerErrorCode::kOK) { std::cout << "Cannot create broker" << std::endl; exit(EXIT_FAILURE); diff --git a/tests/worker/connect_multithread/content_multithread.cpp b/tests/worker/connect_multithread/content_multithread.cpp index 677fc65fc..e4bfcceb8 100644 --- a/tests/worker/connect_multithread/content_multithread.cpp +++ b/tests/worker/connect_multithread/content_multithread.cpp @@ -40,7 +40,7 @@ int main(int argc, char* argv[]) { auto args = GetArgs(argc, argv); hidra2::WorkerErrorCode err; - auto broker = hidra2::DataBrokerFactory::Create(args.folder, &err); + auto broker = hidra2::DataBrokerFactory::CreateFolderBroker(args.folder, &err); std::vector<WorkerErrorCode>errors(args.nthreads, WorkerErrorCode::kUnknownIOError); diff --git a/tests/worker/next_multithread/next_multithread.cpp b/tests/worker/next_multithread/next_multithread.cpp index c94436b94..01f66e9fb 100644 --- a/tests/worker/next_multithread/next_multithread.cpp +++ b/tests/worker/next_multithread/next_multithread.cpp @@ -42,7 +42,7 @@ Args GetArgs(int argc, char* argv[]) { void ReadFiles(const Args& args) { hidra2::WorkerErrorCode err; - auto broker = hidra2::DataBrokerFactory::Create(args.folder, &err); + auto broker = hidra2::DataBrokerFactory::CreateFolderBroker(args.folder, &err); broker->Connect(); std::vector<hidra2::FileInfo>file_infos(args.nthreads); diff --git a/worker/api/cpp/CMakeLists.txt b/worker/api/cpp/CMakeLists.txt index 46b83b837..44b0b1912 100644 --- a/worker/api/cpp/CMakeLists.txt +++ b/worker/api/cpp/CMakeLists.txt @@ -1,6 +1,6 @@ set(TARGET_NAME hidra2-worker) -set(SOURCE_FILES include/worker/data_broker.h src/data_broker.cpp src/folder_data_broker.cpp src/folder_data_broker.h include/hidra2_worker.h) +set(SOURCE_FILES include/worker/data_broker.h src/data_broker.cpp src/folder_data_broker.cpp src/folder_data_broker.h include/hidra2_worker.h src/server_data_broker.cpp src/server_data_broker.h) ################################ diff --git a/worker/api/cpp/include/worker/data_broker.h b/worker/api/cpp/include/worker/data_broker.h index 57393eab7..71c69d2a2 100644 --- a/worker/api/cpp/include/worker/data_broker.h +++ b/worker/api/cpp/include/worker/data_broker.h @@ -39,7 +39,11 @@ class DataBroker { /*! A class to create a data broker instance. The class's only function Create is used for this*/ class DataBrokerFactory { public: - static std::unique_ptr<DataBroker> Create(const std::string& source_name, WorkerErrorCode* return_code) noexcept; + static std::unique_ptr<DataBroker> CreateFolderBroker(const std::string& source_name, + WorkerErrorCode* return_code) noexcept; + static std::unique_ptr<DataBroker> CreateServerBroker(const std::string& source_name, + WorkerErrorCode* return_code) noexcept; + }; } diff --git a/worker/api/cpp/src/data_broker.cpp b/worker/api/cpp/src/data_broker.cpp index 70a821580..517ec519b 100644 --- a/worker/api/cpp/src/data_broker.cpp +++ b/worker/api/cpp/src/data_broker.cpp @@ -1,11 +1,13 @@ #include "worker/data_broker.h" #include "folder_data_broker.h" +#include "server_data_broker.h" -namespace hidra2 { -std::unique_ptr<DataBroker> DataBrokerFactory::Create(const std::string& source_name, - WorkerErrorCode* return_code) noexcept { +namespace hidra2 { +template <class Broker> +std::unique_ptr<DataBroker> Create(const std::string& source_name, + WorkerErrorCode* return_code) noexcept { if (source_name.empty()) { *return_code = WorkerErrorCode::kEmptyDatasource; return nullptr; @@ -13,14 +15,25 @@ std::unique_ptr<DataBroker> DataBrokerFactory::Create(const std::string& source_ std::unique_ptr<DataBroker> p = nullptr; try { - p.reset(new FolderDataBroker(source_name)); + p.reset(new Broker(source_name)); *return_code = WorkerErrorCode::kOK; } catch (...) { // we do not test this part *return_code = WorkerErrorCode::kMemoryError; } return p; + +} + +std::unique_ptr<DataBroker> DataBrokerFactory::CreateFolderBroker(const std::string& source_name, + WorkerErrorCode* return_code) noexcept { + return Create<FolderDataBroker>(source_name, return_code); }; +std::unique_ptr<DataBroker> DataBrokerFactory::CreateServerBroker(const std::string& source_name, + WorkerErrorCode* return_code) noexcept { + return Create<ServerDataBroker>(source_name, return_code); +} + } diff --git a/worker/api/cpp/src/server_data_broker.cpp b/worker/api/cpp/src/server_data_broker.cpp new file mode 100644 index 000000000..cf08000be --- /dev/null +++ b/worker/api/cpp/src/server_data_broker.cpp @@ -0,0 +1,17 @@ +#include "server_data_broker.h" + +namespace hidra2 { + +ServerDataBroker::ServerDataBroker(const std::string& source_name) { + +} + +WorkerErrorCode ServerDataBroker::Connect() { + return WorkerErrorCode::kOK; +} + +WorkerErrorCode ServerDataBroker::GetNext(FileInfo* info, FileData* data) { + return {}; +} + +} \ No newline at end of file diff --git a/worker/api/cpp/src/server_data_broker.h b/worker/api/cpp/src/server_data_broker.h new file mode 100644 index 000000000..32a77072a --- /dev/null +++ b/worker/api/cpp/src/server_data_broker.h @@ -0,0 +1,17 @@ +#ifndef HIDRA2_SERVER_DATA_BROKER_H +#define HIDRA2_SERVER_DATA_BROKER_H + +#include "worker/data_broker.h" + +namespace hidra2 { + +class ServerDataBroker final : public hidra2::DataBroker { + public: + explicit ServerDataBroker(const std::string& source_name); + WorkerErrorCode Connect() override; + WorkerErrorCode GetNext(FileInfo* info, FileData* data) override; +}; + +} + +#endif //HIDRA2_SERVER_DATA_BROKER_H diff --git a/worker/api/cpp/unittests/test_worker_api.cpp b/worker/api/cpp/unittests/test_worker_api.cpp index 227dda59b..b8e7fb7b4 100644 --- a/worker/api/cpp/unittests/test_worker_api.cpp +++ b/worker/api/cpp/unittests/test_worker_api.cpp @@ -2,10 +2,14 @@ #include "worker/data_broker.h" #include "../src/folder_data_broker.h" +#include "../src/server_data_broker.h" + using hidra2::DataBrokerFactory; using hidra2::DataBroker; using hidra2::FolderDataBroker; +using hidra2::ServerDataBroker; + using hidra2::WorkerErrorCode; using ::testing::Eq; @@ -19,7 +23,7 @@ namespace { TEST(DataBrokerFactoryTests, CreateFolderDataSource) { WorkerErrorCode return_code; - auto data_broker = DataBrokerFactory::Create("path/to/file", &return_code); + auto data_broker = DataBrokerFactory::CreateFolderBroker("path/to/file", &return_code); ASSERT_THAT(return_code, Eq(WorkerErrorCode::kOK)); ASSERT_THAT(dynamic_cast<FolderDataBroker*>(data_broker.get()), Ne(nullptr)); @@ -28,10 +32,20 @@ TEST(DataBrokerFactoryTests, CreateFolderDataSource) { TEST(DataBrokerFactoryTests, FailCreateDataSourceWithEmptySource) { WorkerErrorCode return_code; - auto data_broker = DataBrokerFactory::Create("", &return_code); + auto data_broker = DataBrokerFactory::CreateFolderBroker("", &return_code); ASSERT_THAT(return_code, Eq(WorkerErrorCode::kEmptyDatasource)); ASSERT_THAT(data_broker.release(), Eq(nullptr)); } +TEST(DataBrokerFactoryTests, CreateServerDataSource) { + WorkerErrorCode return_code; + + auto data_broker = DataBrokerFactory::CreateServerBroker("server", &return_code); + + ASSERT_THAT(return_code, Eq(WorkerErrorCode::kOK)); + ASSERT_THAT(dynamic_cast<ServerDataBroker*>(data_broker.get()), Ne(nullptr)); +} + + } -- GitLab