src/crdt/atomic_transaction.hpp¶
Namespaces¶
| Name |
|---|
| sgns |
| sgns::crdt |
Classes¶
| Name | |
|---|---|
| class | sgns::crdt::AtomicTransaction AtomicTransaction provides atomic multi-key operations for CRDT datastore All operations within a transaction are combined into a single delta and published atomically to ensure consistency. |
Source code¶
#ifndef SUPERGENIUS_ATOMIC_TRANSACTION_HPP
#define SUPERGENIUS_ATOMIC_TRANSACTION_HPP
#include "base/buffer.hpp"
#include "crdt/hierarchical_key.hpp"
#include "crdt/proto/delta.pb.h"
#include "outcome/outcome.hpp"
#include "primitives/cid/cid.hpp"
#include <memory>
#include <vector>
#include <optional>
#include <unordered_set>
namespace sgns::crdt
{
class CrdtDatastore;
class AtomicTransaction;
class AtomicTransaction
{
public:
using Buffer = base::Buffer;
using Delta = pb::Delta;
explicit AtomicTransaction( std::shared_ptr<CrdtDatastore> datastore );
~AtomicTransaction();
outcome::result<void> Put( HierarchicalKey key, Buffer value );
outcome::result<void> Remove( const HierarchicalKey &key );
outcome::result<Buffer> Get( const HierarchicalKey &key ) const;
outcome::result<void> Erase( const HierarchicalKey &key );
bool HasKey( const HierarchicalKey &key ) const;
outcome::result<CID> Commit( const std::unordered_set<std::string> &topics );
private:
enum class Operation
{
PUT,
REMOVE
};
struct PendingOperation
{
Operation type;
HierarchicalKey key;
Buffer value;
};
void Rollback();
std::optional<PendingOperation> FindLatestOperation( const HierarchicalKey &key ) const;
std::shared_ptr<CrdtDatastore> datastore_;
std::vector<PendingOperation> operations_;
std::unordered_set<std::string> modified_keys_; // Track which keys have been modified
bool is_committed_;
};
} // namespace sgns::crdt
#endif // SUPERGENIUS_ATOMIC_TRANSACTION_HPP
Updated on 2026-03-04 at 13:10:44 -0800