Skip to content
Snippets Groups Projects
Verified Commit f74d19f4 authored by Timm Fitschen's avatar Timm Fitschen
Browse files

WIP: files

parent 11ba13a1
No related branches found
No related tags found
1 merge request!11F files
Pipeline #11241 passed
Pipeline: caosdb-cppinttest

#11242

    ......@@ -20,7 +20,7 @@
    cmake_minimum_required(VERSION 3.13)
    set(libcaosdb_VERSION 0.0.9)
    set(libcaosdb_VERSION 0.0.10)
    set(libcaosdb_COMPATIBLE_SERVER_VERSION_MAJOR 0)
    set(libcaosdb_COMPATIBLE_SERVER_VERSION_MINOR 5)
    set(libcaosdb_COMPATIBLE_SERVER_VERSION_PATCH 0)
    ......
    ......@@ -3,7 +3,7 @@ from conans import ConanFile, CMake, tools
    class CaosdbConan(ConanFile):
    name = "caosdb"
    version = "0.0.9"
    version = "0.0.10"
    license = "AGPL-3.0-or-later"
    author = "Timm C. Fitschen <t.fitschen@indiscale.com>"
    url = "https://gitlab.indiscale.com/caosdb/src/caosdb-cpplib.git"
    ......
    ......@@ -45,6 +45,7 @@ using boost::filesystem::path;
    using caosdb::authentication::Authenticator;
    using caosdb::configuration::ConnectionConfiguration;
    using caosdb::entity::v1alpha1::EntityTransactionService;
    using caosdb::entity::v1alpha1::FileTransmissionService;
    using caosdb::info::VersionInfo;
    using caosdb::info::v1alpha1::GeneralInfoService;
    using caosdb::transaction::Transaction;
    ......@@ -104,6 +105,9 @@ private:
    /// Service for entity transactions. We use a shared pointer because
    /// Transaction instances also own this service stub.
    std::shared_ptr<EntityTransactionService::Stub> entity_transaction_service;
    /// Service for file transmission (download and upload). We use a shared
    /// pointer because Transaction instances also own this service stub.
    std::shared_ptr<FileTransmissionService::Stub> file_transmission_service;
    };
    /**
    ......
    ......@@ -139,9 +139,11 @@ namespace caosdb::transaction {
    using caosdb::entity::Entity;
    using ProtoEntity = caosdb::entity::v1alpha1::Entity;
    using caosdb::entity::v1alpha1::EntityTransactionService;
    using caosdb::entity::v1alpha1::FileTransmissionService;
    using caosdb::entity::v1alpha1::IdResponse;
    using caosdb::entity::v1alpha1::MultiTransactionRequest;
    using caosdb::entity::v1alpha1::MultiTransactionResponse;
    using caosdb::entity::v1alpha1::RegisterFileUploadResponse;
    using caosdb::transaction::TransactionStatus;
    using WrappedResponseCase =
    caosdb::entity::v1alpha1::TransactionResponse::WrappedResponseCase;
    ......@@ -219,6 +221,7 @@ private:
    */
    class Transaction {
    public:
    auto RegisterUploadFile(RegisterFileUploadResponse *response) -> void;
    enum TransactionType {
    NONE,
    READ_ONLY,
    ......@@ -228,7 +231,8 @@ public:
    MIXED_WRITE,
    MIXED_READ_AND_WRITE
    };
    Transaction(std::shared_ptr<EntityTransactionService::Stub> service_stub);
    Transaction(std::shared_ptr<EntityTransactionService::Stub> entity_service,
    std::shared_ptr<FileTransmissionService::Stub> file_service);
    /**
    * Add an entity id to this transaction for retrieval.
    ......@@ -339,7 +343,8 @@ private:
    TransactionType transaction_type = TransactionType::NONE;
    mutable std::unique_ptr<ResultSet> result_set;
    mutable TransactionStatus status = TransactionStatus::INITIAL();
    std::shared_ptr<EntityTransactionService::Stub> service_stub;
    std::shared_ptr<EntityTransactionService::Stub> entity_service;
    std::shared_ptr<FileTransmissionService::Stub> file_service;
    MultiTransactionRequest *request;
    mutable MultiTransactionResponse *response;
    std::string error_message;
    ......
    Subproject commit daf705ef4e86c30f96b3aac429a66667f50c7b77
    Subproject commit e6188445188a88c16c9a603060b40334e509ece6
    ......@@ -37,6 +37,7 @@ namespace caosdb::connection {
    using caosdb::configuration::ConfigurationManager;
    using caosdb::configuration::ConnectionConfiguration;
    using caosdb::entity::v1alpha1::EntityTransactionService;
    using caosdb::entity::v1alpha1::FileTransmissionService;
    using caosdb::info::VersionInfo;
    using caosdb::info::v1alpha1::GeneralInfoService;
    using caosdb::info::v1alpha1::GetVersionInfoRequest;
    ......@@ -52,6 +53,8 @@ Connection::Connection(const ConnectionConfiguration &configuration) {
    this->general_info_service = GeneralInfoService::NewStub(this->channel);
    this->entity_transaction_service =
    std::make_shared<EntityTransactionService::Stub>(this->channel);
    this->file_transmission_service =
    std::make_shared<FileTransmissionService::Stub>(this->channel);
    }
    auto Connection::RetrieveVersionInfoNoExceptions() const noexcept
    ......@@ -95,8 +98,9 @@ auto Connection::RetrieveVersionInfo() const -> const VersionInfo & {
    [[nodiscard]] auto Connection::CreateTransaction() const
    -> std::unique_ptr<Transaction> {
    auto service_stub = this->entity_transaction_service;
    return std::make_unique<Transaction>(service_stub);
    auto entity_service = this->entity_transaction_service;
    auto file_service = this->file_transmission_service;
    return std::make_unique<Transaction>(entity_service, file_service);
    }
    auto ConnectionManager::mHasConnection(const std::string &name) const -> bool {
    ......
    ......@@ -91,8 +91,11 @@ auto get_status_description(int code) -> const std::string & {
    namespace caosdb::transaction {
    using caosdb::entity::v1alpha1::EntityTransactionService;
    using caosdb::entity::v1alpha1::FileTransmissionService;
    using caosdb::entity::v1alpha1::MultiTransactionRequest;
    using caosdb::entity::v1alpha1::MultiTransactionResponse;
    using caosdb::entity::v1alpha1::RegisterFileUploadRequest;
    using caosdb::entity::v1alpha1::RegisterFileUploadResponse;
    using WrappedResponseCase =
    caosdb::entity::v1alpha1::TransactionResponse::WrappedResponseCase;
    using caosdb::utility::get_arena;
    ......@@ -106,12 +109,14 @@ using grpc::CompletionQueue;
    }
    Transaction::Transaction(
    std::shared_ptr<EntityTransactionService::Stub> service_stub)
    std::shared_ptr<EntityTransactionService::Stub> entity_service,
    std::shared_ptr<FileTransmissionService::Stub> file_service)
    : request(google::protobuf::Arena::CreateMessage<MultiTransactionRequest>(
    get_arena())),
    response(google::protobuf::Arena::CreateMessage<MultiTransactionResponse>(
    get_arena())) {
    this->service_stub = std::move(service_stub);
    this->entity_service = std::move(entity_service);
    this->file_service = std::move(file_service);
    }
    auto Transaction::RetrieveById(const std::string &id) noexcept -> StatusCode {
    ......@@ -145,7 +150,7 @@ auto Transaction::InsertEntity(Entity *entity) noexcept -> StatusCode {
    ASSERT_CAN_ADD_INSERTION
    auto *sub_request = this->request->add_requests();
    auto *proto_entity = sub_request->mutable_insert_request();
    auto *proto_entity = sub_request->mutable_insert_request()->mutable_entity();
    // copy the original entity for the transaction
    entity->CopyTo(proto_entity);
    ......@@ -156,10 +161,10 @@ auto Transaction::UpdateEntity(Entity *entity) noexcept -> StatusCode {
    ASSERT_CAN_ADD_UPDATE
    auto *sub_request = this->request->add_requests();
    auto *proto_entity = sub_request->mutable_update_request();
    entity->Switch(proto_entity);
    auto *proto_entity = sub_request->mutable_update_request()->mutable_entity();
    // copy the original entity for the transaction
    entity->CopyTo(proto_entity);
    return StatusCode::INITIAL;
    }
    ......@@ -197,8 +202,8 @@ auto Transaction::ExecuteAsynchronously() noexcept -> StatusCode {
    grpc::ClientContext context;
    std::unique_ptr<ClientAsyncResponseReader<MultiTransactionResponse>> rpc(
    this->service_stub->PrepareAsyncMultiTransaction(&context, *(this->request),
    &cq));
    this->entity_service->PrepareAsyncMultiTransaction(&context,
    *(this->request), &cq));
    rpc->StartCall();
    int tag = 1;
    ......@@ -278,4 +283,29 @@ auto Transaction::WaitForIt() const noexcept -> TransactionStatus {
    return this->status;
    }
    auto Transaction::RegisterUploadFile(RegisterFileUploadResponse *response)
    -> void {
    grpc::Status grpc_status;
    CompletionQueue cq;
    RegisterFileUploadRequest request;
    grpc::ClientContext context;
    std::unique_ptr<ClientAsyncResponseReader<RegisterFileUploadResponse>> rpc(
    this->file_service->PrepareAsyncRegisterFileUpload(&context, request, &cq));
    rpc->StartCall();
    int tag = 1;
    void *send_tag = static_cast<void *>(&tag);
    rpc->Finish(response, &grpc_status, send_tag);
    void *recv_tag = nullptr;
    bool ok = false;
    // TODO(tf) make this actually asynchronous by moving this to WaitForIt()
    cq.Next(&recv_tag, &ok);
    assert(recv_tag == send_tag);
    assert(ok);
    }
    } // namespace caosdb::transaction
    ......@@ -136,7 +136,8 @@ TEST(test_entity, test_copy_to) {
    TEST(test_entity, test_insert_entity) {
    auto transaction = caosdb::transaction::Transaction(
    std::shared_ptr<transaction::EntityTransactionService::Stub>(nullptr));
    std::shared_ptr<transaction::EntityTransactionService::Stub>(nullptr),
    std::shared_ptr<transaction::FileTransmissionService::Stub>(nullptr));
    auto entity = Entity();
    entity.SetRole("entity_role");
    ......@@ -154,7 +155,8 @@ TEST(test_entity, test_insert_entity) {
    // TODO(fspreck) cognitive complexity > 25 (threshold)
    TEST(test_entity, test_insert_with_role) { // NOLINT
    auto transaction = caosdb::transaction::Transaction(
    std::shared_ptr<transaction::EntityTransactionService::Stub>(nullptr));
    std::shared_ptr<transaction::EntityTransactionService::Stub>(nullptr),
    std::shared_ptr<transaction::FileTransmissionService::Stub>(nullptr));
    auto entity = Entity();
    entity.SetRole("Property");
    ......@@ -174,7 +176,8 @@ TEST(test_entity, test_insert_with_role) { // NOLINT
    TEST(test_entity, test_insert_with_parent) {
    auto transaction = caosdb::transaction::Transaction(
    std::shared_ptr<transaction::EntityTransactionService::Stub>(nullptr));
    std::shared_ptr<transaction::EntityTransactionService::Stub>(nullptr),
    std::shared_ptr<transaction::FileTransmissionService::Stub>(nullptr));
    auto entity = Entity();
    entity.SetName("entity_name");
    ......@@ -200,7 +203,8 @@ TEST(test_entity, test_insert_with_parent) {
    // TODO(fspreck) cognitive complexity > 25 (threshold)
    TEST(test_entity, test_insert_with_property) { // NOLINT
    auto transaction = caosdb::transaction::Transaction(
    std::shared_ptr<transaction::EntityTransactionService::Stub>(nullptr));
    std::shared_ptr<transaction::EntityTransactionService::Stub>(nullptr),
    std::shared_ptr<transaction::FileTransmissionService::Stub>(nullptr));
    auto entity = Entity();
    entity.SetName("entity_name");
    ......
    0% Loading or .
    You are about to add 0 people to the discussion. Proceed with caution.
    Please register or to comment