#pragma once
|
|
#include "endian.hpp"
|
|
#include "database.hpp"
|
|
|
|
/*************************************/
|
|
/* STORAGE SERVER */
|
|
/*************************************/
|
|
|
|
enum class db_op : uint32_t {
|
|
version = 0,
|
|
read = 1,
|
|
write = 2,
|
|
remove = 3,
|
|
stats = 4,
|
|
sread = 5,
|
|
swrite = (2 << 16) + write,
|
|
sallocate = 7,
|
|
sremove = (2 << 16) + remove,
|
|
confirm = 8,
|
|
bulk_write = (2 << 15) + write
|
|
};
|
|
|
|
struct [[gnu::packed]] received_data {
|
|
bitops::regulated<db_op> op = db_op::version;
|
|
bitops::regulated<uint64_t> rep_id = 0;
|
|
record_identifier identifier = record_identifier{};
|
|
db_page page = {0};
|
|
};
|
|
|
|
struct [[gnu::packed]] received_bulk_data {
|
|
bitops::regulated<db_op> op = db_op::version;
|
|
bitops::regulated<uint64_t> rep_id = 0;
|
|
bitops::regulated<uint32_t> nb_count = 0;
|
|
std::array<record_identifier, 4096/sizeof(record_identifier)> identifiers;
|
|
std::array<db_page, 4096/sizeof(record_identifier)> page;
|
|
};
|
|
|
|
struct [[gnu::packed]] sending_data {
|
|
bitops::regulated<uint64_t> rep_id = 0;
|
|
record identifier = record{};
|
|
db_page page = {0};
|
|
};
|
|
|
|
struct [[gnu::packed]] stats_data {
|
|
bitops::regulated<uint64_t> free;
|
|
bitops::regulated<uint64_t> free_deleted;
|
|
bitops::regulated<uint64_t> total_pages;
|
|
bitops::regulated<uint64_t> total_records;
|
|
bitops::regulated<uint64_t> total_delete;
|
|
bitops::regulated<uint64_t> cow_full;
|
|
bitops::regulated<uint64_t> free_records;
|
|
bitops::regulated<uint64_t> sync_rate_µs;
|
|
bitops::regulated<uint64_t> sync_duration_µs;
|
|
bitops::regulated<uint64_t> max_sync_duration_µs;
|
|
bitops::regulated<uint64_t> avg_sync_duration_µs;
|
|
};
|
|
|
|
/*************************************/
|
|
/* COORDINATE SERVER */
|
|
/*************************************/
|
|
|
|
|
|
enum class coord_op : uint32_t {
|
|
version = 0,
|
|
read = 1,
|
|
write = 2,
|
|
remove = 3,
|
|
stats = 4
|
|
};
|
|
|
|
|
|
struct [[gnu::packed]] received_data_coord {
|
|
bitops::regulated<db_op> op = db_op::version;
|
|
bitops::regulated<uint64_t> rep_id = 0;
|
|
record_identifier identifier = record_identifier{};
|
|
db_page pageA = {0};
|
|
db_page pageB = {0};
|
|
};
|
|
|
|
struct req_rep {
|
|
uint64_t id = 0;
|
|
uint64_t client_ts = 0;
|
|
bitops::regulated<uint64_t> server_ts = 0;
|
|
};
|