From 6d4601251f6c09dc492a97755a4c73c88680f0b2 Mon Sep 17 00:00:00 2001
From: Carsten Patzke <carsten.patzke@desy.de>
Date: Thu, 16 Apr 2020 19:34:19 +0200
Subject: [PATCH] [Receiver] Added new config entry "NetworkMode"

---
 receiver/src/main.cpp                              | 14 ++++++++++++--
 receiver/src/receiver_config.cpp                   |  1 +
 .../net_server/rds_fabric_server.cpp               |  2 ++
 .../net_server/rds_tcp_server.cpp                  |  4 ++--
 .../receiver_data_server_config.h                  |  1 +
 5 files changed, 18 insertions(+), 4 deletions(-)

diff --git a/receiver/src/main.cpp b/receiver/src/main.cpp
index e09fefd4d..01e44e8c4 100644
--- a/receiver/src/main.cpp
+++ b/receiver/src/main.cpp
@@ -10,6 +10,7 @@
 
 #include "receiver_data_server/receiver_data_server.h"
 #include "receiver_data_server/net_server/rds_tcp_server.h"
+#include "receiver_data_server/net_server/rds_fabric_server.h"
 
 asapo::Error ReadConfigFile(int argc, char* argv[]) {
     if (argc != 2) {
@@ -22,8 +23,17 @@ asapo::Error ReadConfigFile(int argc, char* argv[]) {
 
 void AddDataServers(const asapo::ReceiverConfig* config, asapo::SharedCache cache,
                     std::vector<asapo::RdsNetServerPtr>& netServers) {
-    // Add TCP
-    netServers.emplace_back(new asapo::RdsTcpServer("0.0.0.0:" + std::to_string(config->dataserver.listen_port)));
+    auto ds_config = config->dataserver;
+    auto networkingMode = ds_config.network_mode;
+    if (std::find(networkingMode.begin(), networkingMode.end(), "tcp") != networkingMode.end()) {
+        // Add TCP
+        netServers.emplace_back(new asapo::RdsTcpServer("0.0.0.0:" + std::to_string(ds_config.listen_port)));
+    }
+
+    if (std::find(networkingMode.begin(), networkingMode.end(), "fabric") != networkingMode.end()) {
+        // Add Fabric
+        netServers.emplace_back(new asapo::RdsFabricServer(ds_config.advertise_uri));
+    }
 }
 
 std::vector<std::thread> StartDataServers(const asapo::ReceiverConfig* config, asapo::SharedCache cache,
diff --git a/receiver/src/receiver_config.cpp b/receiver/src/receiver_config.cpp
index f0dffeef0..a3334cbe2 100644
--- a/receiver/src/receiver_config.cpp
+++ b/receiver/src/receiver_config.cpp
@@ -35,6 +35,7 @@ Error ReceiverConfigFactory::SetConfig(std::string file_name) {
     (err = parser.GetUInt64("AuthorizationInterval", &config.authorization_interval_ms)) ||
     (err = parser.GetString("PerformanceDbName", &config.performance_db_name)) ||
     (err = parser.Embedded("DataServer").GetString("AdvertiseURI", &config.dataserver.advertise_uri)) ||
+    (err = parser.Embedded("DataServer").GetArrayString("NetworkMode", &config.dataserver.network_mode)) ||
     (err = parser.GetString("LogLevel", &log_level));
 
     if (err) {
diff --git a/receiver/src/receiver_data_server/net_server/rds_fabric_server.cpp b/receiver/src/receiver_data_server/net_server/rds_fabric_server.cpp
index 43fa3b758..a559456e5 100644
--- a/receiver/src/receiver_data_server/net_server/rds_fabric_server.cpp
+++ b/receiver/src/receiver_data_server/net_server/rds_fabric_server.cpp
@@ -29,6 +29,8 @@ Error RdsFabricServer::Initialize() {
         return err;
     }
 
+    log__->Info("Started Fabric ReceiverDataServer at '" + server__->GetAddress() + "'");
+
     return err;
 }
 
diff --git a/receiver/src/receiver_data_server/net_server/rds_tcp_server.cpp b/receiver/src/receiver_data_server/net_server/rds_tcp_server.cpp
index 8d681e9f4..14c6cc84c 100644
--- a/receiver/src/receiver_data_server/net_server/rds_tcp_server.cpp
+++ b/receiver/src/receiver_data_server/net_server/rds_tcp_server.cpp
@@ -14,9 +14,9 @@ Error RdsTcpServer::Initialize() {
     if (master_socket_ == kDisconnectedSocketDescriptor) {
         master_socket_ = io__->CreateAndBindIPTCPSocketListener(address_, kMaxPendingConnections, &err);
         if (!err) {
-            log__->Info("data server listening on " + address_);
+            log__->Info("Started TCP ReceiverDataServer at '" + address_ + "'");
         } else {
-            log__->Error("dataserver cannot listen on " + address_ + ": " + err->Explain());
+            log__->Error("TCP ReceiverDataServer cannot listen on " + address_ + ": " + err->Explain());
         }
     } else {
         err = TextError("Server was already initialized");
diff --git a/receiver/src/receiver_data_server/receiver_data_server_config.h b/receiver/src/receiver_data_server/receiver_data_server_config.h
index 46a3594dd..208c87d96 100644
--- a/receiver/src/receiver_data_server/receiver_data_server_config.h
+++ b/receiver/src/receiver_data_server/receiver_data_server_config.h
@@ -10,6 +10,7 @@ struct ReceiverDataServerConfig {
     uint64_t nthreads = 0;
     std::string tag;
     std::string advertise_uri;
+    std::vector<std::string> network_mode;
 };
 
 }
-- 
GitLab