Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
wsdb_schedule.hpp
Go to the documentation of this file.
1#pragma once
15#include "barretenberg/wsdb/generated/wsdb_dispatch.hpp" // Responder
18
19#include <cstdint>
20#include <exception>
21#include <string>
22#include <utility>
23
24namespace bb::wsdb {
25
26namespace detail {
27template <typename Resp, typename Fn> std::function<void()> wrap(Responder<Resp> respond, Fn&& logic)
28{
29 return [respond = std::move(respond), logic = std::forward<Fn>(logic)]() mutable {
30 try {
31 respond.ok(logic());
32 } catch (const std::exception& e) {
33 respond.error(e.what());
34 }
35 };
36}
37} // namespace detail
38
43template <typename Resp, typename Fn>
44void schedule_read(WsdbRequest& ctx, uint64_t fork, bool committed, Responder<Resp> respond, Fn&& logic)
45{
46 ctx.scheduler->submit_read(fork, committed, detail::wrap(std::move(respond), std::forward<Fn>(logic)));
47}
48
50template <typename Resp, typename Fn>
51void schedule_write(WsdbRequest& ctx, uint64_t fork, Responder<Resp> respond, Fn&& logic)
52{
53 ctx.scheduler->submit_write(fork, detail::wrap(std::move(respond), std::forward<Fn>(logic)));
54}
55
56} // namespace bb::wsdb
void submit_write(uint64_t fork, std::function< void()> work)
void submit_read(uint64_t fork, bool committed, std::function< void()> work)
std::function< void()> wrap(Responder< Resp > respond, Fn &&logic)
void schedule_read(WsdbRequest &ctx, uint64_t fork, bool committed, Responder< Resp > respond, Fn &&logic)
Run a read on fork and respond. committed true => independent snapshot, never ordered; false => waits...
void schedule_write(WsdbRequest &ctx, uint64_t fork, Responder< Resp > respond, Fn &&logic)
Run a write on fork (exclusive on that fork) and respond.
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
WsdbScheduler * scheduler
Service-level context passed to every wsdb handler.
Server-side per-fork ordering for the concurrent wsdb.