From 06ed2313e244d6476e1304658646615abe0825c0 Mon Sep 17 00:00:00 2001 From: mehrdadn Date: Wed, 15 Jul 2020 22:17:11 -0700 Subject: [PATCH] Fix clang-cl build (#9494) Co-authored-by: Mehrdad --- src/ray/gcs/asio.cc | 4 ++++ src/ray/gcs/asio.h | 2 -- src/ray/gcs/gcs_client/service_based_gcs_client.cc | 4 ++++ .../gcs/gcs_server/gcs_redis_failure_detector.cc | 4 ++++ src/ray/gcs/redis_async_context.h | 6 ++++-- src/ray/gcs/redis_client.cc | 4 ++++ src/ray/gcs/redis_context.cc | 4 ++++ src/ray/gcs/redis_context.h | 13 ++++++------- src/ray/gcs/tables.cc | 4 ++++ src/ray/gcs/test/redis_gcs_client_test.cc | 9 ++++----- .../test/object_manager_stress_test.cc | 4 ++++ src/ray/object_manager/test/object_manager_test.cc | 4 ++++ 12 files changed, 46 insertions(+), 16 deletions(-) diff --git a/src/ray/gcs/asio.cc b/src/ray/gcs/asio.cc index 0de559d38..d74ce0902 100644 --- a/src/ray/gcs/asio.cc +++ b/src/ray/gcs/asio.cc @@ -16,6 +16,10 @@ #include "ray/util/logging.h" +extern "C" { +#include "hiredis/async.h" +} + RedisAsioClient::RedisAsioClient(boost::asio::io_service &io_service, ray::gcs::RedisAsyncContext &redis_async_context) : redis_async_context_(redis_async_context), diff --git a/src/ray/gcs/asio.h b/src/ray/gcs/asio.h index 0bac1d189..264672a86 100644 --- a/src/ray/gcs/asio.h +++ b/src/ray/gcs/asio.h @@ -42,8 +42,6 @@ #include #include -#include "hiredis/async.h" -#include "hiredis/hiredis.h" #include "ray/gcs/redis_async_context.h" class RedisAsioClient { diff --git a/src/ray/gcs/gcs_client/service_based_gcs_client.cc b/src/ray/gcs/gcs_client/service_based_gcs_client.cc index 6f5a36b2b..58fcf0f6f 100644 --- a/src/ray/gcs/gcs_client/service_based_gcs_client.cc +++ b/src/ray/gcs/gcs_client/service_based_gcs_client.cc @@ -17,6 +17,10 @@ #include "ray/common/ray_config.h" #include "ray/gcs/gcs_client/service_based_accessor.h" +extern "C" { +#include "hiredis/hiredis.h" +} + namespace ray { namespace gcs { diff --git a/src/ray/gcs/gcs_server/gcs_redis_failure_detector.cc b/src/ray/gcs/gcs_server/gcs_redis_failure_detector.cc index 980fdaa61..24ab9dc45 100644 --- a/src/ray/gcs/gcs_server/gcs_redis_failure_detector.cc +++ b/src/ray/gcs/gcs_server/gcs_redis_failure_detector.cc @@ -15,6 +15,10 @@ #include "gcs_redis_failure_detector.h" #include "ray/common/ray_config.h" +extern "C" { +#include "hiredis/hiredis.h" +} + namespace ray { namespace gcs { diff --git a/src/ray/gcs/redis_async_context.h b/src/ray/gcs/redis_async_context.h index 31025069b..6647cc279 100644 --- a/src/ray/gcs/redis_async_context.h +++ b/src/ray/gcs/redis_async_context.h @@ -18,9 +18,11 @@ #include #include "ray/common/status.h" +// These are forward declarations from hiredis. extern "C" { -#include "hiredis/async.h" -#include "hiredis/hiredis.h" +struct redisAsyncContext; +struct redisReply; +typedef void redisCallbackFn(struct redisAsyncContext *, void *, void *); } namespace ray { diff --git a/src/ray/gcs/redis_client.cc b/src/ray/gcs/redis_client.cc index ab15b3c87..1ce07bd56 100644 --- a/src/ray/gcs/redis_client.cc +++ b/src/ray/gcs/redis_client.cc @@ -18,6 +18,10 @@ #include "ray/common/ray_config.h" #include "ray/gcs/redis_context.h" +extern "C" { +#include "hiredis/hiredis.h" +} + namespace ray { namespace gcs { diff --git a/src/ray/gcs/redis_context.cc b/src/ray/gcs/redis_context.cc index 8d7bf516b..7252d256d 100644 --- a/src/ray/gcs/redis_context.cc +++ b/src/ray/gcs/redis_context.cc @@ -445,6 +445,10 @@ Status RedisContext::PublishAsync(const std::string &channel, const std::string return RunArgvAsync(args, redisCallback); } +void RedisContext::FreeRedisReply(void *reply) { return freeReplyObject(reply); } + +int RedisContext::GetRedisError(redisContext *context) { return context->err; } + } // namespace gcs } // namespace ray diff --git a/src/ray/gcs/redis_context.h b/src/ray/gcs/redis_context.h index 688a2fc08..7dca6f01f 100644 --- a/src/ray/gcs/redis_context.h +++ b/src/ray/gcs/redis_context.h @@ -28,11 +28,6 @@ #include "ray/gcs/redis_async_context.h" #include "ray/protobuf/gcs.pb.h" -extern "C" { -#include "hiredis/async.h" -#include "hiredis/hiredis.h" -} - struct redisContext; struct redisAsyncContext; @@ -289,6 +284,10 @@ class RedisContext { boost::asio::io_service &io_service() { return io_service_; } private: + // These functions avoid problems with dependence on hiredis headers with clang-cl. + static int GetRedisError(redisContext *context); + static void FreeRedisReply(void *reply); + boost::asio::io_service &io_service_; redisContext *context_; std::unique_ptr redis_async_context_; @@ -352,12 +351,12 @@ std::shared_ptr RedisContext::RunSync( id.Data(), id.Size()); } if (redis_reply == nullptr) { - RAY_LOG(INFO) << "Run redis command failed , err is " << context_->err; + RAY_LOG(INFO) << "Run redis command failed , err is " << GetRedisError(context_); return nullptr; } else { std::shared_ptr callback_reply = std::make_shared(reinterpret_cast(redis_reply)); - freeReplyObject(redis_reply); + FreeRedisReply(redis_reply); return callback_reply; } } diff --git a/src/ray/gcs/tables.cc b/src/ray/gcs/tables.cc index 11e80f27e..5f295a996 100644 --- a/src/ray/gcs/tables.cc +++ b/src/ray/gcs/tables.cc @@ -20,6 +20,10 @@ #include "ray/common/ray_config.h" #include "ray/gcs/redis_gcs_client.h" +extern "C" { +#include "hiredis/hiredis.h" +} + namespace { static const std::string kTableAppendCommand = "RAY.TABLE_APPEND"; diff --git a/src/ray/gcs/test/redis_gcs_client_test.cc b/src/ray/gcs/test/redis_gcs_client_test.cc index 9191f622a..fc348764e 100644 --- a/src/ray/gcs/test/redis_gcs_client_test.cc +++ b/src/ray/gcs/test/redis_gcs_client_test.cc @@ -14,17 +14,16 @@ #include "gtest/gtest.h" -// TODO(pcm): get rid of this and replace with the type safe plasma event loop -extern "C" { -#include "hiredis/hiredis.h" -} - #include "ray/common/ray_config.h" #include "ray/common/test_util.h" #include "ray/gcs/pb_util.h" #include "ray/gcs/redis_gcs_client.h" #include "ray/gcs/tables.h" +extern "C" { +#include "hiredis/hiredis.h" +} + namespace ray { namespace gcs { diff --git a/src/ray/object_manager/test/object_manager_stress_test.cc b/src/ray/object_manager/test/object_manager_stress_test.cc index 9d0723bc3..4b8376113 100644 --- a/src/ray/object_manager/test/object_manager_stress_test.cc +++ b/src/ray/object_manager/test/object_manager_stress_test.cc @@ -25,6 +25,10 @@ #include "ray/object_manager/object_manager.h" #include "ray/util/filesystem.h" +extern "C" { +#include "hiredis/hiredis.h" +} + namespace ray { using rpc::GcsNodeInfo; diff --git a/src/ray/object_manager/test/object_manager_test.cc b/src/ray/object_manager/test/object_manager_test.cc index f82ae85fc..62cb7e46f 100644 --- a/src/ray/object_manager/test/object_manager_test.cc +++ b/src/ray/object_manager/test/object_manager_test.cc @@ -24,6 +24,10 @@ #include "ray/common/test_util.h" #include "ray/util/filesystem.h" +extern "C" { +#include "hiredis/hiredis.h" +} + namespace { int64_t wait_timeout_ms; } // namespace