#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 op = db_op::version; bitops::regulated rep_id = 0; record_identifier identifier = record_identifier{}; db_page page = {0}; }; struct [[gnu::packed]] received_bulk_data { bitops::regulated op = db_op::version; bitops::regulated rep_id = 0; bitops::regulated nb_count = 0; std::array identifiers; std::array page; }; struct [[gnu::packed]] sending_data { bitops::regulated rep_id = 0; record identifier = record{}; db_page page = {0}; }; struct [[gnu::packed]] stats_data { bitops::regulated free; bitops::regulated free_deleted; bitops::regulated total_pages; bitops::regulated total_records; bitops::regulated total_delete; bitops::regulated cow_full; bitops::regulated free_records; bitops::regulated sync_rate_µs; bitops::regulated sync_duration_µs; bitops::regulated max_sync_duration_µs; bitops::regulated 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 op = db_op::version; bitops::regulated 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 server_ts = 0; };