Skip to content

Commit

Permalink
Fix availability handler sending false on offer (#510)
Browse files Browse the repository at this point in the history
Don't ignore service requests after Offer, if service is set to ANY_SERVICE
or instance is set to ANY_INSTANCE.
  • Loading branch information
doschropa committed Nov 7, 2023
1 parent 6e40119 commit bc87c0a
Showing 1 changed file with 53 additions and 31 deletions.
84 changes: 53 additions & 31 deletions implementation/routing/src/routing_manager_impl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4119,28 +4119,39 @@ routing_manager_impl::get_requesters_unlocked(
std::set<client_t> its_requesters;

auto found_service = requested_services_.find(_service);
if (found_service != requested_services_.end()) {
auto found_instance = found_service->second.find(_instance);
if (found_instance != found_service->second.end()) {
for (const auto& its_major : found_instance->second) {
if (its_major.first == _major || _major == DEFAULT_MAJOR
|| its_major.first == ANY_MAJOR) {
for (const auto &its_minor : its_major.second) {
if (its_minor.first <= _minor
|| _minor == DEFAULT_MINOR
|| its_minor.first == ANY_MINOR) {
if (its_requesters.empty()) {
its_requesters = its_minor.second;
} else {
its_requesters.insert(its_minor.second.cbegin(),
its_minor.second.cend());
}
}
if (found_service == requested_services_.end()) {
found_service = requested_services_.find(ANY_SERVICE);
if (found_service == requested_services_.end()) {
return its_requesters;
}
}

auto found_instance = found_service->second.find(_instance);
if (found_instance == found_service->second.end()) {
found_instance = found_service->second.find(ANY_INSTANCE);
if (found_instance == found_service->second.end()) {
return its_requesters;
}
}

for (const auto& its_major : found_instance->second) {
if (its_major.first == _major || _major == DEFAULT_MAJOR
|| its_major.first == ANY_MAJOR) {
for (const auto &its_minor : its_major.second) {
if (its_minor.first <= _minor
|| _minor == DEFAULT_MINOR
|| its_minor.first == ANY_MINOR) {
if (its_requesters.empty()) {
its_requesters = its_minor.second;
} else {
its_requesters.insert(its_minor.second.cbegin(),
its_minor.second.cend());
}
}
}
}
}

return its_requesters;
}

Expand All @@ -4150,24 +4161,35 @@ routing_manager_impl::has_requester_unlocked(
major_version_t _major, minor_version_t _minor) {

auto found_service = requested_services_.find(_service);
if (found_service != requested_services_.end()) {
auto found_instance = found_service->second.find(_instance);
if (found_instance != found_service->second.end()) {
for (const auto& its_major : found_instance->second) {
if (its_major.first == _major || _major == DEFAULT_MAJOR
|| its_major.first == ANY_MAJOR) {
for (const auto &its_minor : its_major.second) {
if (its_minor.first <= _minor
|| _minor == DEFAULT_MINOR
|| its_minor.first == ANY_MINOR) {

return true;
}
}
if (found_service == requested_services_.end()) {
found_service = requested_services_.find(ANY_SERVICE);
if (found_service == requested_services_.end()) {
return false;
}
}

auto found_instance = found_service->second.find(_instance);
if (found_instance == found_service->second.end()) {
found_instance = found_service->second.find(ANY_INSTANCE);
if (found_instance == found_service->second.end()) {
return false;
}
}

for (const auto& its_major : found_instance->second) {
if (its_major.first == _major || _major == DEFAULT_MAJOR
|| its_major.first == ANY_MAJOR) {
for (const auto &its_minor : its_major.second) {
if (its_minor.first <= _minor
|| _minor == DEFAULT_MINOR
|| its_minor.first == ANY_MINOR) {

return true;
}
}
}
}

return false;
}

Expand Down

0 comments on commit bc87c0a

Please sign in to comment.