Skip to content
Snippets Groups Projects

Better Error Handling and Logging

Merged Timm Fitschen requested to merge dev into main
2 files
+ 8
2
Compare changes
  • Side-by-side
  • Inline
Files
2
@@ -19,24 +19,24 @@
*
*/
#ifndef CAOSDB_TRANSACTION_H
#define CAOSDB_TRANSACTION_H
/**
* @brief Creation and execution of transactions.
*/
#ifndef CAOSDB_TRANSACTION_H
#define CAOSDB_TRANSACTION_H
#include <memory> // for shared_ptr, unique_ptr
#include <string> // for string
#include "caosdb/entity.h" // for Entity
#include "caosdb/entity/v1alpha1/main.grpc.pb.h" // for EntityTransactionSe...
#include "caosdb/entity/v1alpha1/main.pb.h" // for Entity, RetrieveReq...
#include "caosdb/transaction_status.h" // for TransactionStatus
namespace caosdb::transaction {
using caosdb::entity::Entity;
using ProtoEntity = caosdb::entity::v1alpha1::Entity;
using caosdb::entity::v1alpha1::EntityTransactionService;
using caosdb::entity::v1alpha1::RetrieveRequest;
using caosdb::transaction::TransactionStatus;
class ResultSet {
public:
@@ -54,22 +54,50 @@ private:
std::unique_ptr<Entity> entity;
};
enum TransactionState { INIT = 10, EXECUTING = 20, SUCCESS = 30, ERROR = 40 };
/**
* @brief Create a transaction via `CaosDBConnection.createTransaction()`
*/
class Transaction {
private:
std::unique_ptr<ResultSet> result_set;
TransactionState state = TransactionState::INIT;
TransactionStatus status = TransactionStatus::INITIAL();
std::shared_ptr<EntityTransactionService::Stub> service_stub;
RetrieveRequest request; // TODO(tf)
std::string error_message;
public:
Transaction(std::shared_ptr<EntityTransactionService::Stub> service_stub);
auto RetrieveById(const std::string &id) -> void;
auto Execute() -> void;
/**
* Execute this transaction in blocking mode and return the status.
*/
auto Execute() -> TransactionStatus;
/**
* Execute this transaction in non-blocking mode and return immediately.
*
* A client may request the current status at any time via GetStatus().
*
* Use WaitForIt() to join the back-ground execution of this transaction.
*/
auto ExecuteAsynchronously() noexcept -> void;
/**
* Join the background execution and return the status when the execution
* terminates.
*
* Use this after ExecuteAsynchronously().
*/
[[nodiscard]] auto WaitForIt() const noexcept -> TransactionStatus;
/**
* Return the current status of the transaction.
*/
[[nodiscard]] inline auto GetStatus() const -> TransactionStatus {
return this->status;
}
[[nodiscard]] inline auto GetResultSet() const -> const ResultSet & {
const ResultSet *result_set = this->result_set.get();
return *result_set;
Loading