Loading BuilderQueue/src/BuilderQueue.cpp +9 −8 Original line number Diff line number Diff line Loading @@ -12,7 +12,12 @@ void BuilderQueue::tick(asio::yield_context yield) { auto all_builders = OpenStackBuilder::get_builders(io_service, yield); std::set<Builder> unavailable_builders; // Process reservations // Delete reservations that are completed reservations.remove_if([](const auto &reservation) { return reservation.finalized(); }); // Process existing reservations for (auto &reservation : reservations) { // Set unavailable builders, that is builders which are attached to a reservation if (reservation.builder) { Loading @@ -30,18 +35,13 @@ void BuilderQueue::tick(asio::yield_context yield) { } } // Delete reservations that are completed reservations.remove_if([](const auto &reservation) { return reservation.finalized(); }); // Available_builders = all_builders - unavailable_builders std::set<Builder> available_builders; std::set_difference(all_builders.begin(), all_builders.end(), unavailable_builders.begin(), unavailable_builders.end(), std::inserter(available_builders, available_builders.begin())); // Assign builders to any pending reservations // Assign any available builders to any pending reservations for (auto &reservation : reservations) { if (reservation.pending() && !available_builders.empty()) { reservation.ready(*available_builders.begin()); Loading @@ -50,7 +50,8 @@ void BuilderQueue::tick(asio::yield_context yield) { } // Request new builders if slots are open // Care must be taken as all_builders may include the the pending request before it's returned(open_slots, open_available_slots may be negative) // Care must be taken as all_builders may include a builder from a pending request that hasn't completely returned yet // that is to say open_slots, open_available_slots may be negative int open_slots = max_builders - all_builders.size() - pending_requests; int open_available_slots = max_available_builders - available_builders.size() - pending_requests; int request_count = std::min(open_slots, open_available_slots); Loading Loading
BuilderQueue/src/BuilderQueue.cpp +9 −8 Original line number Diff line number Diff line Loading @@ -12,7 +12,12 @@ void BuilderQueue::tick(asio::yield_context yield) { auto all_builders = OpenStackBuilder::get_builders(io_service, yield); std::set<Builder> unavailable_builders; // Process reservations // Delete reservations that are completed reservations.remove_if([](const auto &reservation) { return reservation.finalized(); }); // Process existing reservations for (auto &reservation : reservations) { // Set unavailable builders, that is builders which are attached to a reservation if (reservation.builder) { Loading @@ -30,18 +35,13 @@ void BuilderQueue::tick(asio::yield_context yield) { } } // Delete reservations that are completed reservations.remove_if([](const auto &reservation) { return reservation.finalized(); }); // Available_builders = all_builders - unavailable_builders std::set<Builder> available_builders; std::set_difference(all_builders.begin(), all_builders.end(), unavailable_builders.begin(), unavailable_builders.end(), std::inserter(available_builders, available_builders.begin())); // Assign builders to any pending reservations // Assign any available builders to any pending reservations for (auto &reservation : reservations) { if (reservation.pending() && !available_builders.empty()) { reservation.ready(*available_builders.begin()); Loading @@ -50,7 +50,8 @@ void BuilderQueue::tick(asio::yield_context yield) { } // Request new builders if slots are open // Care must be taken as all_builders may include the the pending request before it's returned(open_slots, open_available_slots may be negative) // Care must be taken as all_builders may include a builder from a pending request that hasn't completely returned yet // that is to say open_slots, open_available_slots may be negative int open_slots = max_builders - all_builders.size() - pending_requests; int open_available_slots = max_available_builders - available_builders.size() - pending_requests; int request_count = std::min(open_slots, open_available_slots); Loading