Skip to content

Commit

Permalink
Optimize label APIs
Browse files Browse the repository at this point in the history
  • Loading branch information
owent committed Jan 4, 2024
1 parent 96071e4 commit 80abab5
Show file tree
Hide file tree
Showing 5 changed files with 119 additions and 68 deletions.
13 changes: 12 additions & 1 deletion include/atframe/atapp.h
Original file line number Diff line number Diff line change
Expand Up @@ -349,10 +349,21 @@ class app {
LIBATAPP_MACRO_API const atapp::protocol::atapp_configure &get_origin_configure() const noexcept;
LIBATAPP_MACRO_API const atapp::protocol::atapp_log &get_log_configure() const noexcept;
LIBATAPP_MACRO_API const atapp::protocol::atapp_metadata &get_metadata() const noexcept;
LIBATAPP_MACRO_API atapp::protocol::atapp_metadata &mutable_metadata();
LIBATAPP_MACRO_API const atapp::protocol::atapp_runtime &get_runtime_configure() const noexcept;
LIBATAPP_MACRO_API atapp::protocol::atapp_runtime &mutable_runtime_configure();

LIBATAPP_MACRO_API void set_api_version(gsl::string_view value);
LIBATAPP_MACRO_API void set_kind(gsl::string_view value);
LIBATAPP_MACRO_API void set_group(gsl::string_view value);

LIBATAPP_MACRO_API void set_metadata_name(gsl::string_view value);
LIBATAPP_MACRO_API void set_metadata_namespace_name(gsl::string_view value);
LIBATAPP_MACRO_API void set_metadata_uid(gsl::string_view value);

LIBATAPP_MACRO_API void set_metadata_service_subset(gsl::string_view value);

LIBATAPP_MACRO_API void set_metadata_label(gsl::string_view key, gsl::string_view value);

/**
* @brief Get the runtime stateful pod index from configure atapp.runtime.spec.node_name
* @note It can also can be set by environment variable ATAPP_RUNTIME_SPEC_NODE_NAME
Expand Down
1 change: 0 additions & 1 deletion include/atframe/atapp_conf.proto
Original file line number Diff line number Diff line change
Expand Up @@ -284,7 +284,6 @@ message atapp_metadata {
// https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#syntax-and-character-set
// https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/cri-api/pkg/apis/runtime/v1/api.proto
map<string, string> labels = 24;
map<string, string> annotations = 25;
}

message atapp_runtime_spec {
Expand Down
112 changes: 106 additions & 6 deletions src/atframe/atapp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1273,18 +1273,118 @@ LIBATAPP_MACRO_API const atapp::protocol::atapp_log &app::get_log_configure() co

LIBATAPP_MACRO_API const atapp::protocol::atapp_metadata &app::get_metadata() const noexcept { return conf_.metadata; }

LIBATAPP_MACRO_API atapp::protocol::atapp_metadata &app::mutable_metadata() {
LIBATAPP_MACRO_API const atapp::protocol::atapp_runtime &app::get_runtime_configure() const noexcept {
return conf_.runtime;
}

LIBATAPP_MACRO_API atapp::protocol::atapp_runtime &app::mutable_runtime_configure() { return conf_.runtime; }

LIBATAPP_MACRO_API void app::set_api_version(gsl::string_view value) {
if (conf_.metadata.api_version() == value) {
return;
}

if (internal_module_etcd_) {
internal_module_etcd_->set_maybe_update_keepalive_metadata();
}
return conf_.metadata;

conf_.metadata.set_api_version(value.data(), value.size());
}

LIBATAPP_MACRO_API const atapp::protocol::atapp_runtime &app::get_runtime_configure() const noexcept {
return conf_.runtime;
LIBATAPP_MACRO_API void app::set_kind(gsl::string_view value) {
if (conf_.metadata.kind() == value) {
return;
}

if (internal_module_etcd_) {
internal_module_etcd_->set_maybe_update_keepalive_metadata();
}

conf_.metadata.set_kind(value.data(), value.size());
}

LIBATAPP_MACRO_API atapp::protocol::atapp_runtime &app::mutable_runtime_configure() { return conf_.runtime; }
LIBATAPP_MACRO_API void app::set_group(gsl::string_view value) {
if (conf_.metadata.group() == value) {
return;
}

if (internal_module_etcd_) {
internal_module_etcd_->set_maybe_update_keepalive_metadata();
}

conf_.metadata.set_group(value.data(), value.size());
}

LIBATAPP_MACRO_API void app::set_metadata_name(gsl::string_view value) {
if (conf_.metadata.name() == value) {
return;
}

if (internal_module_etcd_) {
internal_module_etcd_->set_maybe_update_keepalive_metadata();
}

conf_.metadata.set_name(value.data(), value.size());
}

LIBATAPP_MACRO_API void app::set_metadata_namespace_name(gsl::string_view value) {
if (conf_.metadata.namespace_name() == value) {
return;
}

if (internal_module_etcd_) {
internal_module_etcd_->set_maybe_update_keepalive_metadata();
}

conf_.metadata.set_namespace_name(value.data(), value.size());
}

LIBATAPP_MACRO_API void app::set_metadata_uid(gsl::string_view value) {
if (conf_.metadata.uid() == value) {
return;
}

if (internal_module_etcd_) {
internal_module_etcd_->set_maybe_update_keepalive_metadata();
}

conf_.metadata.set_uid(value.data(), value.size());
}

LIBATAPP_MACRO_API void app::set_metadata_service_subset(gsl::string_view value) {
if (conf_.metadata.service_subset() == value) {
return;
}

if (internal_module_etcd_) {
internal_module_etcd_->set_maybe_update_keepalive_metadata();
}

conf_.metadata.set_service_subset(value.data(), value.size());
}

LIBATAPP_MACRO_API void app::set_metadata_label(gsl::string_view key, gsl::string_view value) {
if (key.empty()) {
return;
}

auto labels = conf_.metadata.mutable_labels();
if (nullptr == labels) {
return;
}

std::string key_string = static_cast<std::string>(key);
auto iter = labels->find(key_string);
if (iter != labels->end() && iter->second == value) {
return;
}

if (internal_module_etcd_) {
internal_module_etcd_->set_maybe_update_keepalive_metadata();
}

(*labels)[key_string] = static_cast<std::string>(value);
}

LIBATAPP_MACRO_API int32_t app::get_runtime_stateful_pod_index() const noexcept {
if (static_cast<int32_t>(atapp_pod_stateful_index::kUnset) != conf_.runtime_pod_stateful_index) {
Expand Down Expand Up @@ -2228,7 +2328,7 @@ int app::apply_configure() {

// reset metadata from configure
if (conf_.origin.has_metadata()) {
mutable_metadata() = conf_.origin.metadata();
conf_.metadata = conf_.origin.metadata();
}

if (conf_.origin.has_runtime()) {
Expand Down
45 changes: 1 addition & 44 deletions src/atframe/etcdcli/etcd_discovery.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ static const std::vector<etcd_discovery_node::ptr_t> &get_empty_discovery_set()
static bool is_empty(const etcd_discovery_set::metadata_type &metadata) noexcept {
return metadata.api_version().empty() && metadata.kind().empty() && metadata.group().empty() &&
metadata.namespace_name().empty() && metadata.name().empty() && metadata.uid().empty() &&
metadata.service_subset().empty() && 0 == metadata.labels_size() && 0 == metadata.annotations_size();
metadata.service_subset().empty() && 0 == metadata.labels_size();
}

} // namespace
Expand Down Expand Up @@ -313,14 +313,6 @@ etcd_discovery_set::metadata_hash_type::operator()(const metadata_type &metadata
}
}

if (metadata.annotations_size() > 0) {
sort_string_map(metadata.annotations(), kvs);
for (auto &annotations : kvs) {
consistent_hash_combine(reinterpret_cast<const void *>(annotations.second.data()), annotations.second.size(),
hash_value);
}
}

return hash_value.first;
}

Expand Down Expand Up @@ -362,10 +354,6 @@ LIBATAPP_MACRO_API bool etcd_discovery_set::metadata_equal_type::operator()(cons
return false;
}

if (l.annotations_size() != r.annotations_size()) {
return false;
}

if (l.api_version() != r.api_version()) {
return false;
}
Expand Down Expand Up @@ -408,18 +396,6 @@ LIBATAPP_MACRO_API bool etcd_discovery_set::metadata_equal_type::operator()(cons
}
}

sort_string_map(l.annotations(), kvs_l);
sort_string_map(r.annotations(), kvs_r);
for (size_t i = 0; i < kvs_l.size() && i < kvs_r.size(); ++i) {
if (kvs_l[i].first.size() != kvs_r[i].first.size() || kvs_l[i].second.size() != kvs_r[i].second.size()) {
return false;
}

if (kvs_l[i].first != kvs_r[i].first || kvs_l[i].second != kvs_r[i].second) {
return false;
}
}

return true;
}

Expand Down Expand Up @@ -472,25 +448,6 @@ LIBATAPP_MACRO_API bool etcd_discovery_set::metadata_equal_type::filter(const me
}
}

for (auto &annotation : rule.annotations()) {
if (annotation.second.empty()) {
continue;
}

auto iter = metadata.annotations().find(annotation.first);
if (iter == metadata.annotations().end()) {
return false;
}

if (iter->second.size() != annotation.second.size()) {
return false;
}

if (iter->second != annotation.second) {
return false;
}
}

return true;
}

Expand Down
16 changes: 0 additions & 16 deletions test/case/atapp_discovery_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,6 @@ CASE_TEST(atapp_discovery, metadata_filter) {

(*metadata.mutable_labels())["label1"] = "value1";
(*metadata.mutable_labels())["label2"] = "value2";
(*metadata.mutable_annotations())["annotation1"] = "value3";
(*metadata.mutable_annotations())["annotation2"] = "value4";

// empty rule
CASE_EXPECT_TRUE(etcd_discovery_set::metadata_equal_type::filter(rule, metadata));
Expand Down Expand Up @@ -89,18 +87,6 @@ CASE_TEST(atapp_discovery, metadata_filter) {
rule.mutable_labels()->clear();
CASE_EXPECT_TRUE(etcd_discovery_set::metadata_equal_type::filter(rule, metadata));
}

// annotations
{
rule.mutable_annotations()->erase("annotation1");
CASE_EXPECT_TRUE(etcd_discovery_set::metadata_equal_type::filter(rule, metadata));
(*rule.mutable_annotations())["annotation1"] = "";
CASE_EXPECT_TRUE(etcd_discovery_set::metadata_equal_type::filter(rule, metadata));
(*rule.mutable_annotations())["annotation1"] = "mismatch value";
CASE_EXPECT_FALSE(etcd_discovery_set::metadata_equal_type::filter(rule, metadata));
rule.mutable_annotations()->clear();
CASE_EXPECT_TRUE(etcd_discovery_set::metadata_equal_type::filter(rule, metadata));
}
}

CASE_TEST(atapp_discovery, get_discovery_by_metadata) {
Expand All @@ -123,8 +109,6 @@ CASE_TEST(atapp_discovery, get_discovery_by_metadata) {
discovery_data.mutable_metadata()->set_service_subset("next");
(*discovery_data.mutable_metadata()->mutable_labels())["label1"] = "value1";
(*discovery_data.mutable_metadata()->mutable_labels())["label2"] = "value2";
(*discovery_data.mutable_metadata()->mutable_annotations())["annotation1"] = "value3";
(*discovery_data.mutable_metadata()->mutable_annotations())["annotation2"] = "value4";

etcd_discovery_node::ptr_t node1 = std::make_shared<etcd_discovery_node>();
discovery_data.set_id(1);
Expand Down

0 comments on commit 80abab5

Please sign in to comment.