init-bare/zeek-setup: Groundwork for instantiating cluster backends

This commit is contained in:
Arne Welzel 2024-11-14 18:51:04 +01:00
parent fdde1e9841
commit b3080f2652
2 changed files with 35 additions and 3 deletions

View file

@ -5756,6 +5756,16 @@ export {
## Cluster backend to use. Default is the broker backend. ## Cluster backend to use. Default is the broker backend.
const backend = Cluster::CLUSTER_BACKEND_BROKER &redef; 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; module Weird;

View file

@ -831,11 +831,33 @@ SetupResult setup(int argc, char** argv, Options* zopts) {
cluster::backend = broker_mgr; cluster::backend = broker_mgr;
} }
else { else {
reporter->Error("Unsupported cluster backend configured: %s", const auto& event_serializer_val = id::find_val<zeek::EnumVal>("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<zeek::EnumVal>("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()); zeek::obj_desc_short(cluster_backend_val.get()).c_str());
exit(1); exit(1);
} }
cluster::backend = backend.release();
}
broker_mgr->InitPostScript(); broker_mgr->InitPostScript();
if ( cluster::backend != broker_mgr ) if ( cluster::backend != broker_mgr )
cluster::backend->InitPostScript(); cluster::backend->InitPostScript();