22#ifndef ACTIONENGINE_STORES_CHUNK_STORE_H_
23#define ACTIONENGINE_STORES_CHUNK_STORE_H_
33#include <absl/status/status.h>
34#include <absl/status/statusor.h>
35#include <absl/time/time.h>
86 ChunkStore() =
default;
89 ChunkStore(
const ChunkStore&) =
delete;
90 ChunkStore& operator=(
const ChunkStore& other) =
delete;
92 virtual ~ChunkStore() =
default;
94 virtual void Notify() {}
122 virtual absl::StatusOr<Chunk>
Get(int64_t seq, absl::Duration timeout);
139 absl::Duration timeout);
157 virtual absl::StatusOr<std::reference_wrapper<const Chunk>>
GetRef(
158 int64_t seq, absl::Duration timeout);
175 virtual absl::StatusOr<std::reference_wrapper<const Chunk>>
211 virtual absl::Status
Put(int64_t seq,
Chunk chunk,
bool final) = 0;
227 virtual absl::StatusOr<std::optional<Chunk>>
Pop(int64_t seq) = 0;
245 virtual absl::StatusOr<size_t> Size() = 0;
246 virtual absl::StatusOr<bool> Contains(int64_t seq) = 0;
248 virtual absl::Status SetId(std::string_view
id) = 0;
249 [[nodiscard]]
virtual auto GetId() const -> std::string_view = 0;
251 virtual absl::StatusOr<int64_t> GetSeqForArrivalOffset(
252 int64_t arrival_offset) = 0;
253 virtual absl::StatusOr<int64_t> GetFinalSeq() = 0;
258 virtual std::optional<
Chunk> PopOrDie(int64_t seq) noexcept;
259 virtual
void CloseWritesWithStatusOrDie(absl::Status status) noexcept;
260 [[nodiscard]] virtual
size_t SizeOrDie() noexcept;
261 [[nodiscard]] virtual
bool ContainsOrDie(int64_t seq) noexcept;
262 virtual
void SetIdOrDie(std::string_view
id) noexcept;
263 [[nodiscard]] virtual int64_t GetSeqForArrivalOffsetOrDie(
264 int64_t arrival_offset) noexcept;
265 [[nodiscard]] virtual int64_t GetFinalSeqOrDie() noexcept;
268using ChunkStoreFactory =
269 std::function<std::unique_ptr<ChunkStore>(std::string_view)>;
271template <typename T, typename... Args>
272std::unique_ptr<T> MakeChunkStore(Args&&... args) {
273 return std::make_unique<T>(std::forward<Args>(args)...);
virtual absl::StatusOr< std::reference_wrapper< const Chunk > > GetRef(int64_t seq, absl::Duration timeout)
Same as Get(), but returns a reference to the chunk instead of copying it.
Definition chunk_store.cc:35
virtual absl::StatusOr< std::reference_wrapper< const Chunk > > GetRefByArrivalOrder(int64_t seq, absl::Duration timeout)
Same as GetByArrivalOrder(), but returns a reference to the chunk instead of copying it.
Definition chunk_store.cc:41
virtual absl::StatusOr< Chunk > Get(int64_t seq, absl::Duration timeout)
Get a chunk by its sequence number from the represented store.
Definition chunk_store.cc:24
virtual absl::Status Put(int64_t seq, Chunk chunk, bool final)=0
Put a chunk into the store with the specified sequence number.
virtual absl::StatusOr< std::optional< Chunk > > Pop(int64_t seq)=0
Pop a chunk from the store by its sequence number.
virtual absl::Status CloseWritesWithStatus(absl::Status status)=0
Closes the store for writes, allowing for finalization of the store.
virtual absl::StatusOr< Chunk > GetByArrivalOrder(int64_t arrival_order, absl::Duration timeout)
Same as Get(), but retrieves the chunk by its arrival order (rank by arrival time) instead of sequenc...
Definition chunk_store.cc:29
ActionEngine data structures used to implement actions and nodes (data streams).