From 571ead77f7b7427709dd4433acd7d2703b94033c Mon Sep 17 00:00:00 2001 From: Carsten Patzke <carsten.patzke@desy.de> Date: Thu, 16 Apr 2020 16:14:17 +0200 Subject: [PATCH] Replaced Fabric's timeout error with standard IO timeout error --- common/cpp/include/asapo_fabric/fabric_error.h | 5 ----- .../cpp/src/asapo_fabric/common/fabric_context_impl.cpp | 8 ++++---- common/cpp/src/asapo_fabric/common/fabric_context_impl.h | 2 +- .../src/asapo_fabric/common/task/fabric_waitable_task.cpp | 3 ++- common/cpp/src/system_io/system_io_linux_mac.cpp | 2 ++ consumer/api/cpp/src/fabric_consumer_client.h | 1 + tests/automatic/asapo_fabric/timeout_test.cpp | 3 ++- tests/manual/asapo_fabric/fabric_server.cpp | 2 +- 8 files changed, 13 insertions(+), 13 deletions(-) diff --git a/common/cpp/include/asapo_fabric/fabric_error.h b/common/cpp/include/asapo_fabric/fabric_error.h index 854d677f4..3c15ea604 100644 --- a/common/cpp/include/asapo_fabric/fabric_error.h +++ b/common/cpp/include/asapo_fabric/fabric_error.h @@ -11,7 +11,6 @@ enum class FabricErrorType { kInternalConnectionError, // This might occur when the connection is unexpectedly closed kNoDeviceFound, kClientNotInitialized, - kTimeout, kConnectionRefused, }; @@ -39,10 +38,6 @@ auto const kClientNotInitializedError = FabricErrorTemplate { "The client was not initialized. Add server address first!", FabricErrorType::kClientNotInitialized }; -auto const kTimeout = FabricErrorTemplate { - "Timeout", - FabricErrorType::kTimeout -}; auto const kConnectionRefusedError = FabricErrorTemplate { "Connection refused", FabricErrorType::kConnectionRefused 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 b4cac75c1..c4b88a377 100644 --- a/common/cpp/src/asapo_fabric/common/fabric_context_impl.cpp +++ b/common/cpp/src/asapo_fabric/common/fabric_context_impl.cpp @@ -284,13 +284,13 @@ void FabricContextImpl::InternalWait(FabricAddress targetAddress, FabricWaitable // Check if we simply can wait for our task task->Wait(requestTimeoutMs_, error); - if (*error == FabricErrorTemplates::kTimeout) { + if (*error == IOErrorTemplates::kTimeout) { if (targetAddress == FI_ASAPO_ADDR_NO_ALIVE_CHECK) { CancelTask(task, error); // We expect the task to fail with 'Operation canceled' if (*error == FabricErrorTemplates::kInternalOperationCanceledError) { // Switch it to a timeout so its more clearly what happened - *error = FabricErrorTemplates::kTimeout.Generate(); + *error = IOErrorTemplates::kTimeout.Generate(); } } else { InternalWaitWithAliveCheck(targetAddress, task, error); @@ -301,7 +301,7 @@ void FabricContextImpl::InternalWait(FabricAddress targetAddress, FabricWaitable void FabricContextImpl::InternalWaitWithAliveCheck(FabricAddress targetAddress, FabricWaitableTask* task, Error* error) {// Handle advanced alive check bool aliveCheckFailed = false; - for (uint32_t i = 0; i < maxTimeoutRetires_ && *error == FabricErrorTemplates::kTimeout; i++) { + for (uint32_t i = 0; i < maxTimeoutRetires_ && *error == IOErrorTemplates::kTimeout; i++) { *error = nullptr; printf("HandleFiCommandAndWait - Tries: %d\n", i); if (!TargetIsAliveCheck(targetAddress)) { @@ -316,7 +316,7 @@ void FabricContextImpl::InternalWaitWithAliveCheck(FabricAddress targetAddress, if (aliveCheckFailed) { *error = FabricErrorTemplates::kInternalConnectionError.Generate(); } else if(*error == FabricErrorTemplates::kInternalOperationCanceledError) { - *error = FabricErrorTemplates::kTimeout.Generate(); + *error = IOErrorTemplates::kTimeout.Generate(); } } diff --git a/common/cpp/src/asapo_fabric/common/fabric_context_impl.h b/common/cpp/src/asapo_fabric/common/fabric_context_impl.h index 8d51c4cb1..12fc38d3e 100644 --- a/common/cpp/src/asapo_fabric/common/fabric_context_impl.h +++ b/common/cpp/src/asapo_fabric/common/fabric_context_impl.h @@ -141,7 +141,7 @@ class FabricContextImpl : public FabricContext { // Success break; case FI_EAGAIN: // We felt trough our own timeout loop - *error = FabricErrorTemplates::kTimeout.Generate(); + *error = IOErrorTemplates::kTimeout.Generate(); break; case FI_ENOENT: *error = FabricErrorTemplates::kConnectionRefusedError.Generate(); diff --git a/common/cpp/src/asapo_fabric/common/task/fabric_waitable_task.cpp b/common/cpp/src/asapo_fabric/common/task/fabric_waitable_task.cpp index 47efa2fe8..e4a13b07f 100644 --- a/common/cpp/src/asapo_fabric/common/task/fabric_waitable_task.cpp +++ b/common/cpp/src/asapo_fabric/common/task/fabric_waitable_task.cpp @@ -1,3 +1,4 @@ +#include <common/io_error.h> #include "fabric_waitable_task.h" #include "../../fabric_internal_error.h" @@ -21,7 +22,7 @@ void FabricWaitableTask::HandleErrorCompletion(const fi_cq_err_entry* errEntry) void FabricWaitableTask::Wait(uint32_t sleepInMs, Error* error) { if (sleepInMs) { if (future_.wait_for(std::chrono::milliseconds(sleepInMs)) == std::future_status::timeout) { - *error = FabricErrorTemplates::kTimeout.Generate(); + *error = IOErrorTemplates::kTimeout.Generate(); return; } } else { diff --git a/common/cpp/src/system_io/system_io_linux_mac.cpp b/common/cpp/src/system_io/system_io_linux_mac.cpp index aa8d193ae..43137367a 100644 --- a/common/cpp/src/system_io/system_io_linux_mac.cpp +++ b/common/cpp/src/system_io/system_io_linux_mac.cpp @@ -31,6 +31,8 @@ Error GetLastErrorFromErrno() { switch (errno) { case 0: return nullptr; + case EINTR: + return TextError("Interrupt occurred, is a debugger attached?"); case EBADF: return IOErrorTemplates::kBadFileNumber.Generate(); case EAGAIN: diff --git a/consumer/api/cpp/src/fabric_consumer_client.h b/consumer/api/cpp/src/fabric_consumer_client.h index 1f98c5913..a852b1ba3 100644 --- a/consumer/api/cpp/src/fabric_consumer_client.h +++ b/consumer/api/cpp/src/fabric_consumer_client.h @@ -7,6 +7,7 @@ #include <mutex> #include "asapo_fabric/asapo_fabric.h" #include "net_client.h" +#include "common/networking.h" namespace asapo { diff --git a/tests/automatic/asapo_fabric/timeout_test.cpp b/tests/automatic/asapo_fabric/timeout_test.cpp index 42abd6408..0e2ab643b 100644 --- a/tests/automatic/asapo_fabric/timeout_test.cpp +++ b/tests/automatic/asapo_fabric/timeout_test.cpp @@ -4,6 +4,7 @@ #include <logger/logger.h> #include <testing.h> #include <asapo_fabric/asapo_fabric.h> +#include <common/io_error.h> using namespace asapo; using namespace fabric; @@ -64,7 +65,7 @@ void ClientThread(const std::string& hostname, uint16_t port) { "The following call might take a while since its able to reach the server but the server is not responding" << std::endl; client->Recv(serverAddress, 0, &dummyBuffer, sizeof(dummyBuffer), &err); - M_AssertEq(FabricErrorTemplates::kTimeout, err, "client->Recv"); + M_AssertEq(IOErrorTemplates::kTimeout, err, "client->Recv"); err = nullptr; serverShutdown.set_value(); diff --git a/tests/manual/asapo_fabric/fabric_server.cpp b/tests/manual/asapo_fabric/fabric_server.cpp index fb973398b..2b55cfd3a 100644 --- a/tests/manual/asapo_fabric/fabric_server.cpp +++ b/tests/manual/asapo_fabric/fabric_server.cpp @@ -16,7 +16,7 @@ void ServerThread(FabricServer* server, size_t bufferSize, FileData* buffer) { GenericRequestHeader request; server->RecvAny(&clientAddress, &messageId, &request, sizeof(request), &error); - if (error == FabricErrorTemplates::kTimeout) { + if (error == IOErrorTemplates::kTimeout) { error = nullptr; continue; } -- GitLab