mirror of
https://github.com/vale981/ray
synced 2025-03-05 10:01:43 -05:00
[GCS] Add MessagePublisher to GCS (#7771)
This commit is contained in:
parent
7c52359b00
commit
c222d64ca1
4 changed files with 127 additions and 0 deletions
18
BUILD.bazel
18
BUILD.bazel
|
@ -983,6 +983,24 @@ cc_test(
|
|||
],
|
||||
)
|
||||
|
||||
cc_library(
|
||||
name = "gcs_pubsub",
|
||||
srcs = [
|
||||
"src/ray/gcs/pubsub/redis_message_publisher.cc",
|
||||
],
|
||||
hdrs = [
|
||||
"src/ray/gcs/callback.h",
|
||||
"src/ray/gcs/pubsub/message_publisher.h",
|
||||
"src/ray/gcs/pubsub/redis_message_publisher.h",
|
||||
],
|
||||
copts = COPTS,
|
||||
deps = [
|
||||
":ray_common",
|
||||
":ray_util",
|
||||
":redis_client",
|
||||
],
|
||||
)
|
||||
|
||||
cc_library(
|
||||
name = "gcs",
|
||||
srcs = glob(
|
||||
|
|
33
src/ray/gcs/pubsub/message_publisher.h
Normal file
33
src/ray/gcs/pubsub/message_publisher.h
Normal file
|
@ -0,0 +1,33 @@
|
|||
#ifndef RAY_GCS_PUBSUB_MESSAGE_PUBLISHER_H
|
||||
#define RAY_GCS_PUBSUB_MESSAGE_PUBLISHER_H
|
||||
|
||||
#include <string>
|
||||
#include "ray/common/status.h"
|
||||
#include "ray/gcs/callback.h"
|
||||
#include "ray/util/io_service_pool.h"
|
||||
#include "ray/util/logging.h"
|
||||
|
||||
namespace ray {
|
||||
|
||||
namespace gcs {
|
||||
|
||||
class MessagePublisher {
|
||||
public:
|
||||
virtual ~MessagePublisher() {}
|
||||
|
||||
virtual Status Init() = 0;
|
||||
|
||||
virtual void Shutdown() = 0;
|
||||
|
||||
virtual Status PublishMessage(const std::string &channel, const std::string &message,
|
||||
const StatusCallback &callback) = 0;
|
||||
|
||||
protected:
|
||||
MessagePublisher() {}
|
||||
};
|
||||
|
||||
} // namespace gcs
|
||||
|
||||
} // namespace ray
|
||||
|
||||
#endif // RAY_GCS_PUBSUB_MESSAGE_PUBLISHER_H
|
44
src/ray/gcs/pubsub/redis_message_publisher.cc
Normal file
44
src/ray/gcs/pubsub/redis_message_publisher.cc
Normal file
|
@ -0,0 +1,44 @@
|
|||
#include "ray/gcs/pubsub/redis_message_publisher.h"
|
||||
#include "ray/gcs/redis_context.h"
|
||||
|
||||
namespace ray {
|
||||
|
||||
namespace gcs {
|
||||
|
||||
RedisMessagePublisher::RedisMessagePublisher(
|
||||
const RedisClientOptions &options, std::shared_ptr<IOServicePool> io_service_pool)
|
||||
: redis_client_(new RedisClient(options)),
|
||||
io_service_pool_(std::move(io_service_pool)) {}
|
||||
|
||||
Status RedisMessagePublisher::Init() {
|
||||
auto io_services = io_service_pool_->GetAll();
|
||||
Status status = redis_client_->Connect(io_services);
|
||||
RAY_LOG(INFO) << "RedisMessagePublisher::Init finished with status "
|
||||
<< status.ToString();
|
||||
return status;
|
||||
}
|
||||
|
||||
void RedisMessagePublisher::Shutdown() {
|
||||
redis_client_->Disconnect();
|
||||
RAY_LOG(INFO) << "RedisMessagePublisher::Shutdown.";
|
||||
}
|
||||
|
||||
Status RedisMessagePublisher::PublishMessage(const std::string &channel,
|
||||
const std::string &message,
|
||||
const StatusCallback &callback) {
|
||||
std::vector<std::string> args = {"PUBLISH", channel, message};
|
||||
|
||||
RedisCallback pub_callback = nullptr;
|
||||
if (callback) {
|
||||
pub_callback = [callback](std::shared_ptr<CallbackReply> reply) {
|
||||
callback(Status::OK());
|
||||
};
|
||||
}
|
||||
// Select shard context by channel.
|
||||
auto shard_context = redis_client_->GetShardContext(channel);
|
||||
return shard_context->RunArgvAsync(args, pub_callback);
|
||||
}
|
||||
|
||||
} // namespace gcs
|
||||
|
||||
} // namespace ray
|
32
src/ray/gcs/pubsub/redis_message_publisher.h
Normal file
32
src/ray/gcs/pubsub/redis_message_publisher.h
Normal file
|
@ -0,0 +1,32 @@
|
|||
#ifndef RAY_GCS_PUBSUB_REDIS_MESSAGE_PUBLISHER_H
|
||||
#define RAY_GCS_PUBSUB_REDIS_MESSAGE_PUBLISHER_H
|
||||
|
||||
#include "ray/gcs/pubsub/message_publisher.h"
|
||||
#include "ray/gcs/redis_client.h"
|
||||
|
||||
namespace ray {
|
||||
|
||||
namespace gcs {
|
||||
|
||||
class RedisMessagePublisher : public MessagePublisher {
|
||||
public:
|
||||
RedisMessagePublisher(const RedisClientOptions &options,
|
||||
std::shared_ptr<IOServicePool> io_service_pool);
|
||||
|
||||
Status Init() override;
|
||||
|
||||
void Shutdown() override;
|
||||
|
||||
Status PublishMessage(const std::string &channel, const std::string &message,
|
||||
const StatusCallback &callback) override;
|
||||
|
||||
private:
|
||||
std::shared_ptr<RedisClient> redis_client_;
|
||||
std::shared_ptr<IOServicePool> io_service_pool_;
|
||||
};
|
||||
|
||||
} // namespace gcs
|
||||
|
||||
} // namespace ray
|
||||
|
||||
#endif // RAY_GCS_PUBSUB_REDIS_MESSAGE_PUBLISHER_H
|
Loading…
Add table
Reference in a new issue