Files
rippled/include/xrpl/nodestore/Scheduler.h
2026-07-13 10:40:40 +00:00

75 lines
1.6 KiB
C++

#pragma once
#include <xrpl/nodestore/Task.h>
#include <chrono>
namespace xrpl::NodeStore {
enum class FetchType { Synchronous, Async };
/**
* Contains information about a fetch operation.
*/
struct FetchReport
{
explicit FetchReport(FetchType fetchType) : fetchType(fetchType)
{
}
std::chrono::milliseconds elapsed{};
FetchType const fetchType;
bool wasFound = false;
};
/**
* Contains information about a batch write operation.
*/
struct BatchWriteReport
{
explicit BatchWriteReport() = default;
std::chrono::milliseconds elapsed;
int writeCount;
};
/**
* Scheduling for asynchronous backend activity
*
* For improved performance, a backend has the option of performing writes
* in batches. These writes can be scheduled using the provided scheduler
* object.
*
* @see BatchWriter
*/
class Scheduler
{
public:
virtual ~Scheduler() = default;
/**
* Schedules a task.
* Depending on the implementation, the task may be invoked either on
* the current thread of execution, or an unspecified
* implementation-defined foreign thread.
*/
virtual void
scheduleTask(Task& task) = 0;
/**
* Reports completion of a fetch
* Allows the scheduler to monitor the node store's performance
*/
virtual void
onFetch(FetchReport const& report) = 0;
/**
* Reports the completion of a batch write
* Allows the scheduler to monitor the node store's performance
*/
virtual void
onBatchWrite(BatchWriteReport const& report) = 0;
};
} // namespace xrpl::NodeStore