From e6250a33aa079ff3bd6670463165e3e49bea3d34 Mon Sep 17 00:00:00 2001
From: Carsten Patzke <carsten.patzke@desy.de>
Date: Wed, 16 Sep 2020 13:58:23 +0200
Subject: [PATCH] Added env 'ASAPO_PRINT_FALLBACK_REASON' to see why TCP was
 used

---
 common/cpp/include/asapo_fabric/fabric_error.h              | 2 +-
 common/cpp/src/asapo_fabric/asapo_fabric.cpp                | 2 +-
 common/cpp/src/asapo_fabric/common/fabric_context_impl.cpp  | 4 ++--
 .../asapo_fabric/common/task/fabric_self_requeuing_task.cpp | 2 +-
 .../asapo_fabric/common/task/fabric_self_requeuing_task.h   | 2 +-
 .../server/task/fabric_handshake_accepting_task.cpp         | 2 +-
 .../server/task/fabric_handshake_accepting_task.h           | 2 +-
 consumer/api/cpp/src/server_data_broker.cpp                 | 6 ++++++
 receiver/src/receiver_data_server/receiver_data_server.cpp  | 1 +
 9 files changed, 15 insertions(+), 8 deletions(-)

diff --git a/common/cpp/include/asapo_fabric/fabric_error.h b/common/cpp/include/asapo_fabric/fabric_error.h
index 40c88b6ec..1a8ca0106 100644
--- a/common/cpp/include/asapo_fabric/fabric_error.h
+++ b/common/cpp/include/asapo_fabric/fabric_error.h
@@ -25,7 +25,7 @@ auto const kNotSupportedOnBuildError = FabricErrorTemplate {
     "This build of ASAPO does not support LibFabric", FabricErrorType::kNotSupported
 };
 auto const kLibraryNotFoundError = FabricErrorTemplate {
-    "asapo-fabric, LibFabric or dependencies were not found", FabricErrorType::kLibraryNotFound
+    "LibFabric or dependencies were not found", FabricErrorType::kLibraryNotFound
 };
 auto const kLibraryCompatibilityError = FabricErrorTemplate {
     "LibFabric was found but somehow some a function is missing", FabricErrorType::kLibraryCompatibilityError
diff --git a/common/cpp/src/asapo_fabric/asapo_fabric.cpp b/common/cpp/src/asapo_fabric/asapo_fabric.cpp
index 1d5c84fd2..e4612b7c7 100644
--- a/common/cpp/src/asapo_fabric/asapo_fabric.cpp
+++ b/common/cpp/src/asapo_fabric/asapo_fabric.cpp
@@ -15,7 +15,7 @@ std::unique_ptr<FabricFactory> asapo::fabric::GenerateDefaultFabricFactory() {
         return std::unique_ptr<FabricFactory>(new FabricFactoryImpl());
     }
 
-    void* handle = dlopen("libfabric.so", RTLD_LAZY);
+    void* handle = dlopen("libfabric.so.1", RTLD_LAZY);
     if (handle) {
 #define ADD_FABRIC_CALL(fName) do { if (!(*((void**)&gffm().fName) = dlsym(handle, #fName))) goto functionNotFoundError; } while(0)
         ADD_FABRIC_CALL(fi_version);
diff --git a/common/cpp/src/asapo_fabric/common/fabric_context_impl.cpp b/common/cpp/src/asapo_fabric/common/fabric_context_impl.cpp
index 67e56366f..3d46fe042 100644
--- a/common/cpp/src/asapo_fabric/common/fabric_context_impl.cpp
+++ b/common/cpp/src/asapo_fabric/common/fabric_context_impl.cpp
@@ -7,6 +7,7 @@
 #include <netinet/in.h>
 #include <arpa/inet.h>
 #include <rdma/fi_tagged.h>
+#include <iostream>
 #include "fabric_context_impl.h"
 #include "fabric_memory_region_impl.h"
 
@@ -31,8 +32,7 @@ std::string __PRETTY_FUNCTION_TO_NAMESPACE__(const std::string& prettyFunction)
         }                                                       \
     } while(0) // Enforce ';'
 
-// TODO: It is super important that version 1.10 is installed, but since its not released yet we go with 1.9
-const uint32_t FabricContextImpl::kMinExpectedLibFabricVersion = FI_VERSION(1, 9);
+const uint32_t FabricContextImpl::kMinExpectedLibFabricVersion = FI_VERSION(1, 11);
 
 FabricContextImpl::FabricContextImpl() : io__{ GenerateDefaultIO() }, alive_check_response_task_(this) {
 }
diff --git a/common/cpp/src/asapo_fabric/common/task/fabric_self_requeuing_task.cpp b/common/cpp/src/asapo_fabric/common/task/fabric_self_requeuing_task.cpp
index 75b18f1c4..53c48236f 100644
--- a/common/cpp/src/asapo_fabric/common/task/fabric_self_requeuing_task.cpp
+++ b/common/cpp/src/asapo_fabric/common/task/fabric_self_requeuing_task.cpp
@@ -49,6 +49,6 @@ void FabricSelfRequeuingTask::AfterCompletion() {
     }
 }
 
-FabricContextImpl* FabricSelfRequeuingTask::ParentContext() {
+FabricContextImpl* FabricSelfRequeuingTask::ParentContext() const {
     return parent_context_;
 }
diff --git a/common/cpp/src/asapo_fabric/common/task/fabric_self_requeuing_task.h b/common/cpp/src/asapo_fabric/common/task/fabric_self_requeuing_task.h
index 905b6f1db..0c23c3e44 100644
--- a/common/cpp/src/asapo_fabric/common/task/fabric_self_requeuing_task.h
+++ b/common/cpp/src/asapo_fabric/common/task/fabric_self_requeuing_task.h
@@ -25,7 +25,7 @@ class FabricSelfRequeuingTask : public FabricTask {
     void HandleCompletion(const fi_cq_tagged_entry* entry, FabricAddress source) final;
     void HandleErrorCompletion(const fi_cq_err_entry* errEntry) final;
   protected:
-    FabricContextImpl* ParentContext();
+    FabricContextImpl* ParentContext() const;
 
     virtual void RequeueSelf() = 0;
     virtual void OnCompletion(const fi_cq_tagged_entry* entry, FabricAddress source) = 0;
diff --git a/common/cpp/src/asapo_fabric/server/task/fabric_handshake_accepting_task.cpp b/common/cpp/src/asapo_fabric/server/task/fabric_handshake_accepting_task.cpp
index 44ed14d06..253d778b4 100644
--- a/common/cpp/src/asapo_fabric/server/task/fabric_handshake_accepting_task.cpp
+++ b/common/cpp/src/asapo_fabric/server/task/fabric_handshake_accepting_task.cpp
@@ -10,7 +10,7 @@ FabricHandshakeAcceptingTask::FabricHandshakeAcceptingTask(FabricServerImpl* par
     : FabricSelfRequeuingTask(parentServerContext) {
 }
 
-FabricServerImpl* FabricHandshakeAcceptingTask::ServerContext() {
+FabricServerImpl* FabricHandshakeAcceptingTask::ServerContext() const {
     return dynamic_cast<FabricServerImpl*>(ParentContext());
 }
 
diff --git a/common/cpp/src/asapo_fabric/server/task/fabric_handshake_accepting_task.h b/common/cpp/src/asapo_fabric/server/task/fabric_handshake_accepting_task.h
index 74ffd3742..dedf61822 100644
--- a/common/cpp/src/asapo_fabric/server/task/fabric_handshake_accepting_task.h
+++ b/common/cpp/src/asapo_fabric/server/task/fabric_handshake_accepting_task.h
@@ -18,7 +18,7 @@ class FabricHandshakeAcceptingTask : public FabricSelfRequeuingTask {
     explicit FabricHandshakeAcceptingTask(FabricServerImpl* server);
 
   private:
-    FabricServerImpl* ServerContext();
+    FabricServerImpl* ServerContext() const;
 
   protected: // override FabricSelfRequeuingTask
     void RequeueSelf() override;
diff --git a/consumer/api/cpp/src/server_data_broker.cpp b/consumer/api/cpp/src/server_data_broker.cpp
index 3fd91d9db..c53e29b06 100644
--- a/consumer/api/cpp/src/server_data_broker.cpp
+++ b/consumer/api/cpp/src/server_data_broker.cpp
@@ -134,6 +134,8 @@ Error ServerDataBroker::ProcessPostRequest(const RequestInfo& request, RequestOu
             httpclient__->Post(RequestWithToken(request.host + request.api) + request.extra_params, request.cookie,
                                request.body, &response->data_output, response->data_output_size, code);
         break;
+    default:
+        break;
     }
     return err;
 }
@@ -373,6 +375,10 @@ Error ServerDataBroker::TryGetDataFromBuffer(const FileInfo* info, FileData* dat
                     return error; // Successfully received data and is now using a fabric client
                 }
 
+                if (std::getenv("ASAPO_PRINT_FALLBACK_REASON")) {
+                    std::cout << "Fallback to TCP because error: " << error << std::endl;
+                }
+
                 // Retry with TCP
                 should_try_rdma_first_ = false;
                 error = nullptr;
diff --git a/receiver/src/receiver_data_server/receiver_data_server.cpp b/receiver/src/receiver_data_server/receiver_data_server.cpp
index 5526d602a..4b2609754 100644
--- a/receiver/src/receiver_data_server/receiver_data_server.cpp
+++ b/receiver/src/receiver_data_server/receiver_data_server.cpp
@@ -24,6 +24,7 @@ void ReceiverDataServer::Run() {
         if (err == IOErrorTemplates::kTimeout) {
             continue;
         }
+
         if (!err) {
             err = request_pool__->AddRequests(std::move(requests));
         }
-- 
GitLab