From b3080f26525dc8bd33813d8b3ac8670f1389c630 Mon Sep 17 00:00:00 2001 From: Arne Welzel Date: Thu, 14 Nov 2024 18:51:04 +0100 Subject: [PATCH] init-bare/zeek-setup: Groundwork for instantiating cluster backends --- scripts/base/init-bare.zeek | 10 ++++++++++ src/zeek-setup.cc | 28 +++++++++++++++++++++++++--- 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/scripts/base/init-bare.zeek b/scripts/base/init-bare.zeek index 55cac66883..f0251f483b 100644 --- a/scripts/base/init-bare.zeek +++ b/scripts/base/init-bare.zeek @@ -5756,6 +5756,16 @@ export { ## Cluster backend to use. Default is the broker backend. const backend = Cluster::CLUSTER_BACKEND_BROKER &redef; + + ## The event serializer to use by the cluster backend. + ## + ## This currently has no effect for backend BROKER. + const event_serializer = Cluster::EVENT_SERIALIZER_BROKER_BIN_V1 &redef; + + ## The log serializer to use by the backend. + ## + ## This currently has no effect for backend BROKER. + const log_serializer = Cluster::LOG_SERIALIZER_ZEEK_BIN_V1 &redef; } module Weird; diff --git a/src/zeek-setup.cc b/src/zeek-setup.cc index 5beab093df..e4d8c8e95c 100644 --- a/src/zeek-setup.cc +++ b/src/zeek-setup.cc @@ -831,9 +831,31 @@ SetupResult setup(int argc, char** argv, Options* zopts) { cluster::backend = broker_mgr; } else { - reporter->Error("Unsupported cluster backend configured: %s", - zeek::obj_desc_short(cluster_backend_val.get()).c_str()); - exit(1); + const auto& event_serializer_val = id::find_val("Cluster::event_serializer"); + auto event_serializer = cluster::manager->InstantiateEventSerializer(event_serializer_val); + if ( ! event_serializer ) { + reporter->Error("Failed to instantiate event serializer: %s", + zeek::obj_desc(event_serializer_val.get()).c_str()); + exit(1); + } + + const auto& log_serializer_val = id::find_val("Cluster::log_serializer"); + auto log_serializer = cluster::manager->InstantiateLogSerializer(log_serializer_val); + if ( ! log_serializer ) { + reporter->Error("Failed to instantiate log serializer: %s", + zeek::obj_desc(log_serializer_val.get()).c_str()); + exit(1); + } + + auto backend = cluster::manager->InstantiateBackend(cluster_backend_val, std::move(event_serializer), + std::move(log_serializer)); + if ( ! backend ) { + reporter->Error("Failed to instantiate cluster backend: %s", + zeek::obj_desc_short(cluster_backend_val.get()).c_str()); + exit(1); + } + + cluster::backend = backend.release(); } broker_mgr->InitPostScript();