Goddess of Justice DB, the database used for storage on IzaroDFS
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

84 regels
2.1 KiB

#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;
};