Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions xllm/core/common/etcd_client.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,17 @@ EtcdClient::EtcdClient(const std::string& etcd_addr)
}
}

EtcdClient::EtcdClient(const std::string& etcd_addr,
const std::string& username,
const std::string& password)
: client_(etcd_addr, username, password), etcd_addr_(etcd_addr) {
auto response = client_.put("XLLM_PING", "PING");
if (!response.is_ok()) {
LOG(FATAL) << "etcd connect to etcd server failed: "
<< response.error_message();
}
}

EtcdClient::~EtcdClient() {
stop_watch();

Expand Down
3 changes: 3 additions & 0 deletions xllm/core/common/etcd_client.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,9 @@ using Callback = std::function<void(const etcd::Response&)>;
class EtcdClient {
public:
EtcdClient(const std::string& etcd_addr);
EtcdClient(const std::string& etcd_addr,
const std::string& username,
const std::string& password);
~EtcdClient();

void add_watch(const std::string& key_prefix,
Expand Down
21 changes: 20 additions & 1 deletion xllm/core/runtime/xservice_client.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ limitations under the License.
#include <algorithm>
#include <unordered_map>

#include "util/env_var.h"
#include "util/hash_util.h"
#include "util/net.h"
#include "util/uuid.h"
Expand All @@ -35,6 +36,8 @@ namespace {
static std::string ETCD_MASTER_SERVICE_KEY = "XLLM:SERVICE:MASTER";
static std::string ETCD_XSERVICES_KEY_PREFIX =
"XLLM:SERVICE:"; // all xllm_service registeration prefix
constexpr const char* kEtcdUsernameEnvVar = "ETCD_USERNAME";
constexpr const char* kEtcdPasswordEnvVar = "ETCD_PASSWORD";
static std::unordered_map<xllm_service::proto::InstanceType, std::string>
ETCD_KEYS_PREFIX_MAP = {
{xllm_service::proto::InstanceType::DEFAULT, "XLLM:DEFAULT:"},
Expand Down Expand Up @@ -90,7 +93,23 @@ bool XServiceClient::init(const std::string& etcd_addr,
chan_options_.max_retry = 3;
chan_options_.timeout_ms = FLAGS_rpc_channel_timeout_ms;

etcd_client_ = std::make_unique<EtcdClient>(etcd_addr);
const std::string etcd_username =
util::get_optional_string_env(kEtcdUsernameEnvVar).value_or("");
const std::string etcd_password =
util::get_optional_string_env(kEtcdPasswordEnvVar).value_or("");
const bool has_etcd_auth_user = !etcd_username.empty();
const bool has_etcd_auth_password = !etcd_password.empty();
if (has_etcd_auth_user != has_etcd_auth_password) {
LOG(ERROR) << "Both " << kEtcdUsernameEnvVar << " and "
<< kEtcdPasswordEnvVar << " must be set together.";
return false;
}
if (has_etcd_auth_user) {
etcd_client_ =
std::make_unique<EtcdClient>(etcd_addr, etcd_username, etcd_password);
} else {
etcd_client_ = std::make_unique<EtcdClient>(etcd_addr);
}

// connect master xllm_service
while (!etcd_client_->get_master_service(ETCD_MASTER_SERVICE_KEY,
Expand Down
8 changes: 8 additions & 0 deletions xllm/core/util/env_var.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,14 @@ std::string get_string_env(const std::string& name) {
return std::string(val);
}

std::optional<std::string> get_optional_string_env(const std::string& name) {
const char* val = std::getenv(name.c_str());
if (val == nullptr) {
return std::nullopt;
}
return std::string(val);
}

double get_double_env(const std::string& key, double defaultValue = -1) {
const char* val = std::getenv(key.c_str());
if (val == nullptr) {
Expand Down
1 change: 1 addition & 0 deletions xllm/core/util/env_var.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ bool get_bool_env(const std::string& key, bool defaultValue);
int64_t get_int_env(const std::string& key, int64_t defaultValue);

std::string get_string_env(const std::string& name);
std::optional<std::string> get_optional_string_env(const std::string& name);

// Get the timeout in seconds for process group test operations.
// This timeout is used when waiting for process group initialization tests
Expand Down
Loading