diff --git a/common/cpp/include/asapo_fabric/fabric_error.h b/common/cpp/include/asapo_fabric/fabric_error.h index 854d677f4b4d0773038eb183fead83323148f350..3c15ea6040cc8026c01fe468b98a67288c4a0534 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 b4cac75c1e61600bd5013fd0c6c2c1bf19ff132f..c4b88a377e4fde26ee72aeba96b089b83a8f2aba 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 8d51c4cb18a57f62509faff4a19d9538de508ed3..12fc38d3ef7b63b48644d74a0518e2ec6b7afba7 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 47efa2fe8f558d934cbdf7969d44ad40710548fb..e4a13b07f910e7586410ba6fc557f73e977a3618 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 aa8d193ae60102b55081cd37c278e94bf12b0063..43137367a4300f26c0d55cb8b203559cba32ed38 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 1f98c591323c64b1213fe3bf4e7adea8b15e0f53..a852b1ba33c93a0756d1f2e343008ef73f7d1616 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 42abd640883fb8304d00bc4fd982d63acf304d1e..0e2ab643b2e3f4935b7ccf1543eba21930eae00e 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 fb973398bbc07b93cf75fecc9972235382596e5a..2b55cfd3a67121a0645f9e6c1d6ff727ba45d8c9 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; }