From e054766ec186f423a83ea9bda2fd12ee74885060 Mon Sep 17 00:00:00 2001 From: Timm Fitschen <t.fitschen@indiscale.com> Date: Sat, 6 Nov 2021 14:01:06 +0100 Subject: [PATCH] WIP: fix conan setup --- conanfile.py | 6 ++++-- include/caosdb/configuration.h | 11 +++++++++-- include/caosdb/info.h | 11 ++++++----- include/caosdb/logging.h | 9 ++------- include/caosdb/transaction.h | 2 +- src/caosdb/configuration.cpp | 9 +++++---- src/caosdb/connection.cpp | 2 +- .../file_transmission/download_request_handler.cpp | 7 ------- src/caosdb/logging.cpp | 4 +--- src/caosdb/protobuf_helper.cpp | 6 ++---- src/caosdb/transaction.cpp | 3 ++- test/test_data_type.cpp | 3 +-- 12 files changed, 34 insertions(+), 39 deletions(-) diff --git a/conanfile.py b/conanfile.py index 3495107..b37a045 100644 --- a/conanfile.py +++ b/conanfile.py @@ -14,10 +14,12 @@ class CaosdbConan(ConanFile): default_options = {"shared": False, "fPIC": True} generators = "cmake" requires = [ - ("boost/1.77.0"), - ("gtest/1.11.0"), + ("boost/1.76.0"), ("grpc/1.39.1"), ] + build_requires = [ + ("gtest/1.11.0"), + ] exports = "*.cpp", "*.h", "*.cmake", "*CMakeLists.txt", "*.in", "*.proto", "*.c" exports_sources = "src", "doc", "include", "test", "cmake", "proto" diff --git a/include/caosdb/configuration.h b/include/caosdb/configuration.h index 83b4781..1c3f014 100644 --- a/include/caosdb/configuration.h +++ b/include/caosdb/configuration.h @@ -25,6 +25,7 @@ #include "caosdb/certificate_provider.h" // for CertificateProvider, path #include "caosdb/exceptions.h" // for ConfigurationError #include "caosdb/logging.h" // for CAOSDB_LOG_... +#include "caosdb/protobuf_helper.h" // for reset_arena #include "caosdb/utility.h" // for load_json_file // IWYU pragma: no_include "boost/json/fwd.hpp" #include <boost/filesystem/operations.hpp> // for exists @@ -32,10 +33,12 @@ #include <boost/json/object.hpp> // for object #include <boost/json/value.hpp> // for value #include <boost/json/value_ref.hpp> // IWYU pragma: keep +#include <google/protobuf/arena.h> // for Arena #include <grpcpp/security/credentials.h> // for ChannelCredentials #include <iosfwd> // for ostream -#include <memory> // for unique_ptr, shared_ptr -#include <string> // for string +#include <iostream> +#include <memory> // for unique_ptr, shared_ptr +#include <string> // for string namespace caosdb::configuration { using boost::filesystem::exists; @@ -47,6 +50,7 @@ using caosdb::authentication::Authenticator; using caosdb::authentication::PlainPasswordAuthenticator; using caosdb::exceptions::ConfigurationError; using caosdb::utility::load_json_file; +using google::protobuf::Arena; using grpc::ChannelCredentials; const std::string logger_name = "caosdb::configuration"; @@ -218,7 +222,10 @@ public: ConfigurationManager(ConfigurationManager const &) = delete; void operator=(ConfigurationManager const &) = delete; + inline static auto GetArena() -> Arena * { return &GetInstance().arena; } + private: + Arena arena; value json_configuration; ConnectionConfigurationHelper connection_configuration_helper; LoggingConfigurationHelper logging_configuration_helper; diff --git a/include/caosdb/info.h b/include/caosdb/info.h index e9e7e17..87b1b32 100644 --- a/include/caosdb/info.h +++ b/include/caosdb/info.h @@ -54,11 +54,12 @@ public: * CaosDBConnection::GetVersionInfo() instead to get the version of the * server behind the given connection. */ - explicit inline VersionInfo(ProtoVersionInfo *info) : info(info) { - if (this->info->GetArena() == nullptr) { - caosdb::utility::get_arena()->Own(this->info); - } - }; + explicit inline VersionInfo(ProtoVersionInfo *info) + : info(info){ + // if (this->info->GetArena() == nullptr) { + // caosdb::utility::get_arena()->Own(this->info); + //} + }; [[nodiscard]] inline auto GetMajor() const -> int32_t { return this->info->major(); } [[nodiscard]] inline auto GetMinor() const -> int32_t { return this->info->minor(); } [[nodiscard]] inline auto GetPatch() const -> int32_t { return this->info->patch(); } diff --git a/include/caosdb/logging.h b/include/caosdb/logging.h index 73f14ca..eb99f9a 100644 --- a/include/caosdb/logging.h +++ b/include/caosdb/logging.h @@ -41,19 +41,14 @@ typedef boost::log::sources::severity_channel_logger_mt<int, std::string> boost_ class logger { public: - static auto destroy() -> void { - auto &instance = logger::GetInstance(); - delete instance._logger_instance; - } - static auto get() -> boost_logger_class & { return *logger::GetInstance()._logger_instance; } + static auto get() -> boost_logger_class & { return logger::GetInstance()._logger_instance; } private: - logger() { this->_logger_instance = new boost_logger_class(); }; static logger &GetInstance() { static logger instance; return instance; } - boost_logger_class *_logger_instance; + boost_logger_class _logger_instance; }; /** diff --git a/include/caosdb/transaction.h b/include/caosdb/transaction.h index 634c7a0..006b9f3 100644 --- a/include/caosdb/transaction.h +++ b/include/caosdb/transaction.h @@ -407,7 +407,7 @@ public: * Instead, do Execute() or WaitForIt() and only call this method afterwards. */ [[nodiscard]] inline auto GetResultSet() const noexcept -> const ResultSet & { - if (!this->result_set) { + if (this->result_set == nullptr) { CAOSDB_LOG_ERROR(logger_name) << "GetResultSet was called before the transaction has terminated. This is a programming " "error of the code which uses the transaction."; diff --git a/src/caosdb/configuration.cpp b/src/caosdb/configuration.cpp index 3d78ac7..aa35901 100644 --- a/src/caosdb/configuration.cpp +++ b/src/caosdb/configuration.cpp @@ -46,10 +46,11 @@ #include <exception> // IWYU pragma: keep // IWYU pragma: no_include <bits/exception.h> #include <grpcpp/security/credentials.h> // for SslCredentials -#include <iterator> // for next -#include <map> // for map -#include <stdexcept> // for out_of_range -#include <string> // for string, operator+ +#include <iostream> +#include <iterator> // for next +#include <map> // for map +#include <stdexcept> // for out_of_range +#include <string> // for string, operator+ namespace caosdb::configuration { using boost::filesystem::exists; diff --git a/src/caosdb/connection.cpp b/src/caosdb/connection.cpp index fcf4b11..9951cbf 100644 --- a/src/caosdb/connection.cpp +++ b/src/caosdb/connection.cpp @@ -82,7 +82,7 @@ auto Connection::RetrieveVersionInfoNoExceptions() const noexcept -> Transaction error_message); } } else { - this->version_info = std::make_unique<VersionInfo>(response->release_version_info()); + this->version_info = std::make_unique<VersionInfo>(response->mutable_version_info()); } return status; diff --git a/src/caosdb/file_transmission/download_request_handler.cpp b/src/caosdb/file_transmission/download_request_handler.cpp index 755c8a4..e915075 100644 --- a/src/caosdb/file_transmission/download_request_handler.cpp +++ b/src/caosdb/file_transmission/download_request_handler.cpp @@ -128,22 +128,15 @@ void DownloadRequestHandler::handleNewCallState() { CAOSDB_LOG_TRACE(logger_name) << "Enter DownloadRequestHandler::handleNewCallState. local_path = " << file_descriptor_.local_path << ", download_id = " << file_descriptor_.file_transmission_id; - CAOSDB_LOG_TRACE(logger_name) << "HERE 1"; fileWriter_ = std::make_unique<FileWriter>(file_descriptor_.local_path); - CAOSDB_LOG_TRACE(logger_name) << "HERE 2"; auto *tid = request_->mutable_file_transmission_id(); - CAOSDB_LOG_TRACE(logger_name) << "HERE 3"; tid->CopyFrom(*(file_descriptor_.file_transmission_id)); - CAOSDB_LOG_TRACE(logger_name) << "HERE 4"; rpc_ = stub_->PrepareAsyncFileDownload(&ctx_, *request_, cq_); - CAOSDB_LOG_TRACE(logger_name) << "HERE 5"; transaction_status = TransactionStatus::EXECUTING(); - CAOSDB_LOG_TRACE(logger_name) << "HERE 6"; state_ = CallState::SendingRequest; - CAOSDB_LOG_TRACE(logger_name) << "HERE 7"; rpc_->StartCall(tag_); CAOSDB_LOG_TRACE(logger_name) << "Leave DownloadRequestHandler::handleNewCallState"; } diff --git a/src/caosdb/logging.cpp b/src/caosdb/logging.cpp index ddbda4f..ead331d 100644 --- a/src/caosdb/logging.cpp +++ b/src/caosdb/logging.cpp @@ -20,6 +20,7 @@ */ #include "caosdb/logging.h" #include "caosdb/log_level.h" +#include "caosdb/protobuf_helper.h" #include <boost/core/swap.hpp> // for swap #include <boost/iterator/iterator_facade.hpp> #include <boost/log/attributes/clock.hpp> @@ -44,9 +45,6 @@ #include <utility> // for move #include <vector> -void __attribute__((constructor)) startup() {} -void __attribute__((destructor)) shutdown() { caosdb::logging::logger::destroy(); } - namespace caosdb::logging { LoggingConfiguration::LoggingConfiguration(int level) : LevelConfiguration(level) {} diff --git a/src/caosdb/protobuf_helper.cpp b/src/caosdb/protobuf_helper.cpp index 9633f58..2b58476 100644 --- a/src/caosdb/protobuf_helper.cpp +++ b/src/caosdb/protobuf_helper.cpp @@ -19,16 +19,14 @@ * */ #include "caosdb/protobuf_helper.h" +#include "caosdb/configuration.h" #include <google/protobuf/arena.h> // for Arena namespace caosdb::utility { using google::protobuf::Arena; -auto get_arena() -> Arena * { - static Arena arena; - return &arena; -} +auto get_arena() -> Arena * { return caosdb::configuration::ConfigurationManager::GetArena(); } auto reset_arena() -> void { get_arena()->Reset(); } diff --git a/src/caosdb/transaction.cpp b/src/caosdb/transaction.cpp index d315bf8..7abaa17 100644 --- a/src/caosdb/transaction.cpp +++ b/src/caosdb/transaction.cpp @@ -251,7 +251,8 @@ auto Transaction::ExecuteAsynchronously() noexcept -> StatusCode { // NOLINT auto *entity_response = sub_response.mutable_retrieve_response()->mutable_entity_response(); auto entity_id = entity_response->entity().id(); - download_files[entity_id].file_transmission_id = entity_response->release_download_id(); + download_files[entity_id].file_transmission_id = + entity_response->unsafe_arena_release_download_id(); // TODO(tf) handle error } } diff --git a/test/test_data_type.cpp b/test/test_data_type.cpp index b1e714d..5d0fa1b 100644 --- a/test/test_data_type.cpp +++ b/test/test_data_type.cpp @@ -39,8 +39,6 @@ #include <utility> // for pair namespace caosdb::entity { -using ProtoEntity = caosdb::entity::v1alpha1::Entity; -using ProtoParent = caosdb::entity::v1alpha1::Parent; using ProtoDataType = caosdb::entity::v1alpha1::DataType; using ProtoAtomicDataType = caosdb::entity::v1alpha1::AtomicDataType; @@ -65,6 +63,7 @@ TEST(test_data_type, test_atomic) { EXPECT_TRUE(data_type.IsAtomic()); EXPECT_EQ(data_type.GetAsAtomic(), map_el.first); } + caosdb::utility::reset_arena(); } TEST(test_data_type, test_reference) { -- GitLab