Goddess of Justice DB, the database used for storage on IzaroDFS
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.
 
 
 

84 rader
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;
};