176 const std::string& data_dir,
177 const std::string& tree_heights_json,
178 const std::string& tree_prefill_json,
179 const std::string& map_sizes_json,
181 uint32_t initial_header_generator_point,
182 const std::string& prefilled_public_data_json,
183 uint64_t genesis_timestamp,
184 size_t request_ring_size,
185 size_t response_ring_size)
190 auto tree_height = parse_tree_uint32_map(tree_heights_json);
191 auto tree_prefill = parse_tree_index_map(tree_prefill_json);
200 if (!map_sizes_json.empty()) {
201 auto parsed = parse_tree_uint64_map(map_sizes_json);
202 for (
const auto& [k, v] : parsed) {
209 if (!prefilled_public_data_json.empty()) {
210 prefilled_public_data = parse_prefilled_public_data(prefilled_public_data_json);
211 std::cerr <<
"Parsed " << prefilled_public_data.size() <<
" prefilled public data entries" <<
'\n';
215 std::cerr <<
"Creating WorldState at " << data_dir <<
" with " << threads <<
" threads" <<
'\n';
221 prefilled_public_data,
222 initial_header_generator_point,
230 if (input_path.size() >= 4 && input_path.substr(input_path.size() - 4) ==
".shm") {
231 std::string base_name = input_path.substr(0, input_path.size() - 4);
232 constexpr size_t MAX_SHM_CLIENTS = 2;
234 std::cerr <<
"MPSC shared memory server at " << base_name <<
" (max " << MAX_SHM_CLIENTS <<
" clients)\n";
235 }
else if (input_path.size() >= 5 && input_path.substr(input_path.size() - 5) ==
".sock") {
237 std::cerr <<
"Socket server at " << input_path <<
'\n';
239 std::cerr <<
"Error: --input path must end with .sock or .shm" <<
'\n';
246 auto graceful_shutdown_handler = [](
int signal) {
247 std::cerr <<
"\nReceived signal " << signal <<
", shutting down gracefully..." <<
'\n';
253 auto fatal_error_handler = [](
int signal) {
254 const char* signal_name = (signal == SIGBUS) ?
"SIGBUS" : (signal == SIGSEGV) ?
"SIGSEGV" :
"UNKNOWN";
255 std::cerr <<
"\nFatal error: received " << signal_name <<
'\n';
257 global_server->
close();
262 (void)
std::signal(SIGTERM, graceful_shutdown_handler);
263 (void)
std::signal(SIGINT, graceful_shutdown_handler);
267 setup_parent_death_monitoring();
269 if (!server->listen()) {
270 std::cerr <<
"Error: Could not start IPC server" <<
'\n';
274 std::cerr <<
"aztec-wsdb IPC server ready" <<
'\n';
281 auto unpacked = msgpack::unpack(
reinterpret_cast<const char*
>(raw_request.data()), raw_request.size());
282 auto obj = unpacked.get();
286 if (obj.type != msgpack::type::ARRAY || obj.via.array.size != 1) {
287 std::cerr <<
"Error: Expected array of size 1 from client " << client_id <<
'\n';
292 auto& command_obj = obj.via.array.ptr[0];
296 if (command_obj.type == msgpack::type::ARRAY && command_obj.via.array.size == 2 &&
297 command_obj.via.array.ptr[0].type == msgpack::type::STR) {
299 std::string_view command_name(command_obj.via.array.ptr[0].via.str.ptr,
300 command_obj.via.array.ptr[0].via.str.size);
301 bool is_shutdown = (command_name ==
"WsdbShutdown");
305 command_obj.convert(command);
309 msgpack::sbuffer response_buffer;
310 msgpack::pack(response_buffer, response);
311 std::vector<uint8_t> result(response_buffer.data(), response_buffer.data() + response_buffer.size());
322 command_obj.convert(command);
325 msgpack::sbuffer response_buffer;
326 msgpack::pack(response_buffer, response);
327 return std::vector<uint8_t>(response_buffer.data(), response_buffer.data() + response_buffer.size());
331 }
catch (
const std::exception& e) {
332 std::cerr <<
"Error processing request from client " << client_id <<
": " << e.what() <<
'\n';
338 msgpack::sbuffer response_buffer;
339 msgpack::pack(response_buffer, response);
340 return std::vector<uint8_t>(response_buffer.data(), response_buffer.data() + response_buffer.size());
int execute_wsdb_server(const std::string &input_path, const std::string &data_dir, const std::string &tree_heights_json, const std::string &tree_prefill_json, const std::string &map_sizes_json, uint32_t threads, uint32_t initial_header_generator_point, const std::string &prefilled_public_data_json, uint64_t genesis_timestamp, size_t request_ring_size, size_t response_ring_size)
Start the aztec-wsdb IPC server.