#pragma once #include "types.hpp" #include "Key.hpp" #include "DataView.hpp" #include #include #include namespace odhtdb { class Group; struct StagedCreateObject { Key key; Group *primaryAdminGroup; u64 timestamp; // In microseconds }; struct StagedAddObject { Key key; DataView data; u64 timestamp; // In microseconds }; class Database { public: Database(const char *bootstrapNodeAddr, u16 port); ~Database(); void create(const Key &key, Group *primaryAdminGroup); void add(const Key &key, DataView data); void commit(); private: void commitStagedCreateObject(const StagedCreateObject &stagedObject); void commitStagedAddObject(const StagedAddObject &stagedObject); ntp::NtpTimestamp getSyncedTimestampUtc() const; private: dht::DhtRunner node; std::vector stagedCreateObjects; std::vector stagedAddObjects; }; }