From cbe2845a453295fd06fdb947a6688f2f7cebb3d0 Mon Sep 17 00:00:00 2001 From: Sebastian Elsner Date: Mon, 11 Mar 2024 15:49:59 +0100 Subject: [PATCH] use unordered maps for tickets --- afanasy/src/libafanasy/affarm.cpp | 10 +++++----- afanasy/src/libafanasy/affarm.h | 10 +++++----- afanasy/src/libafanasy/name_af.h | 1 + afanasy/src/server/afnodefarm.cpp | 6 +++--- afanasy/src/server/poolsrv.cpp | 10 +++++----- afanasy/src/server/renderaf.cpp | 8 ++++---- 6 files changed, 23 insertions(+), 22 deletions(-) diff --git a/afanasy/src/libafanasy/affarm.cpp b/afanasy/src/libafanasy/affarm.cpp index f8b891c6f..a0d3d3818 100644 --- a/afanasy/src/libafanasy/affarm.cpp +++ b/afanasy/src/libafanasy/affarm.cpp @@ -49,13 +49,13 @@ void Farm::readwrite(Msg *msg) rw_String (m_properties_host, msg); } -void Farm::rw_Tickets(std::map & io_tickets, Msg * io_msg) +void Farm::rw_Tickets(std::unordered_map & io_tickets, Msg * io_msg) { uint32_t size = io_tickets.size(); rw_uint32_t(size, io_msg); if (io_msg->isWriting()) - for (std::map::iterator it = io_tickets.begin(); it != io_tickets.end(); it++) + for (std::unordered_map::iterator it = io_tickets.begin(); it != io_tickets.end(); it++) { w_String (it->first, io_msg); rw_int32_t(it->second.count, io_msg); @@ -91,7 +91,7 @@ void Farm::jsonRead(const JSON &i_object, std::string *io_changes) jr_Tickets("tickets_host", m_tickets_host, i_object); } -bool Farm::jr_Tickets(const char * i_name, std::map & o_tickets, const JSON & i_object) +bool Farm::jr_Tickets(const char * i_name, std::unordered_map & o_tickets, const JSON & i_object) { const JSON & jObj = i_object[i_name]; if( false == jObj.IsObject()) @@ -162,10 +162,10 @@ void Farm::jsonWrite(std::ostringstream &o_str, int i_type) const o_str << ",\n\"properties_host\":\"" << m_properties_host << "\""; } -void Farm::jw_Tickets(const char * i_name, const std::map & i_tickets, std::ostringstream & o_str) +void Farm::jw_Tickets(const char * i_name, const std::unordered_map & i_tickets, std::ostringstream & o_str) { o_str << ",\n\"" << i_name << "\":{"; - for (std::map::const_iterator it = i_tickets.begin(); it != i_tickets.end(); it++) + for (std::unordered_map::const_iterator it = i_tickets.begin(); it != i_tickets.end(); it++) { if (it != i_tickets.begin()) o_str << "\n,"; diff --git a/afanasy/src/libafanasy/affarm.h b/afanasy/src/libafanasy/affarm.h index 916a56ef8..51155c6fa 100644 --- a/afanasy/src/libafanasy/affarm.h +++ b/afanasy/src/libafanasy/affarm.h @@ -68,8 +68,8 @@ struct Tiks std::vector m_services; std::vector m_services_disabled; - std::map m_tickets_pool; - std::map m_tickets_host; + std::unordered_map m_tickets_pool; + std::unordered_map m_tickets_host; int32_t m_max_tasks_host; int32_t m_capacity_host; @@ -78,8 +78,8 @@ struct Tiks std::string m_properties_host; private: - static void rw_Tickets(std::map & io_tickets, Msg * io_msg); - static bool jr_Tickets(const char * i_name, std::map & o_map, const JSON & i_object); - static void jw_Tickets(const char * i_name, const std::map & i_map, std::ostringstream & o_str); + static void rw_Tickets(std::unordered_map & io_tickets, Msg * io_msg); + static bool jr_Tickets(const char * i_name, std::unordered_map & o_map, const JSON & i_object); + static void jw_Tickets(const char * i_name, const std::unordered_map & i_map, std::ostringstream & o_str); }; } diff --git a/afanasy/src/libafanasy/name_af.h b/afanasy/src/libafanasy/name_af.h index 9f42f7fe9..11c94c68b 100644 --- a/afanasy/src/libafanasy/name_af.h +++ b/afanasy/src/libafanasy/name_af.h @@ -19,6 +19,7 @@ #include #include #include +#include #include #include #include diff --git a/afanasy/src/server/afnodefarm.cpp b/afanasy/src/server/afnodefarm.cpp index c0eb8142b..bffd1a3e2 100644 --- a/afanasy/src/server/afnodefarm.cpp +++ b/afanasy/src/server/afnodefarm.cpp @@ -220,7 +220,7 @@ bool AfNodeFarm::actionTicket(Action & i_action) af::jr_bool("host", tk_host, operation); // Choose to pool or host tickets to operate - std::map * tickets; + std::unordered_map * tickets; if (tk_host) { tickets = &m_farm->m_tickets_host; @@ -237,7 +237,7 @@ bool AfNodeFarm::actionTicket(Action & i_action) } // Find ticket and get usage: - std::map::iterator it = tickets->find(tk_name); + std::unordered_map::iterator it = tickets->find(tk_name); int32_t tk_usage = 0; if (it != tickets->end()) tk_usage = it->second.usage; @@ -314,7 +314,7 @@ bool AfNodeFarm::canRunService(const std::string & i_service_name, bool i_hasSer bool AfNodeFarm::hasHostTicket(const std::string & i_name, const int32_t & i_count) const { - std::map::const_iterator it = m_farm->m_tickets_host.find(i_name); + std::unordered_map::const_iterator it = m_farm->m_tickets_host.find(i_name); if (it != m_farm->m_tickets_host.end()) { if (it->second.count == -1) diff --git a/afanasy/src/server/poolsrv.cpp b/afanasy/src/server/poolsrv.cpp index f352fadd2..addff270f 100644 --- a/afanasy/src/server/poolsrv.cpp +++ b/afanasy/src/server/poolsrv.cpp @@ -475,7 +475,7 @@ void PoolSrv::actionDeleteRenders(Action & i_action, const std::string & i_log) bool PoolSrv::hasPoolTicket(const std::string & i_name, const int32_t & i_count, const bool i_ticket_running) const { - std::map::const_iterator it = m_farm->m_tickets_pool.find(i_name); + std::unordered_map::const_iterator it = m_farm->m_tickets_pool.find(i_name); if (it != m_farm->m_tickets_pool.end()) { if (it->second.count == -1) @@ -521,7 +521,7 @@ void PoolSrv::taskAcuire(const af::TaskExec * i_taskexec, const std::listgetTickets()) { - std::map::iterator it = m_tickets_pool.find(eIt.first); + std::unordered_map::iterator it = m_tickets_pool.find(eIt.first); if (it != m_tickets_pool.end()) it->second.usage += eIt.second; else @@ -556,7 +556,7 @@ void PoolSrv::taskRelease(const af::TaskExec * i_taskexec, const std::listgetTickets()) { - std::map::iterator it = m_tickets_pool.find(eIt.first); + std::unordered_map::iterator it = m_tickets_pool.find(eIt.first); if (it != m_tickets_pool.end()) { it->second.usage -= eIt.second; @@ -681,7 +681,7 @@ void PoolSrv::v_refresh(time_t i_currentTime, AfContainer * i_container, Monitor i_monitoring->addEvent(af::Monitor::EVT_pools_change, m_id); // Remove dummy tickets that were needed to store usage only - std::map::iterator pIt = m_tickets_pool.begin(); + std::unordered_map::iterator pIt = m_tickets_pool.begin(); while (pIt != m_tickets_pool.end()) { if ((pIt->second.count < 0) && (pIt->second.usage <= 0)) @@ -689,7 +689,7 @@ void PoolSrv::v_refresh(time_t i_currentTime, AfContainer * i_container, Monitor else pIt++; } - std::map::iterator hIt = m_tickets_host.begin(); + std::unordered_map::iterator hIt = m_tickets_host.begin(); while (hIt != m_tickets_host.end()) { if ((hIt->second.count < 0) && (hIt->second.usage <= 0)) diff --git a/afanasy/src/server/renderaf.cpp b/afanasy/src/server/renderaf.cpp index 5a78c4909..5bdb35014 100644 --- a/afanasy/src/server/renderaf.cpp +++ b/afanasy/src/server/renderaf.cpp @@ -806,7 +806,7 @@ bool RenderAf::hasTickets(const std::map & i_tickets) cons if (m_parent) { bool ticket_running = false; - std::map::const_iterator rIt = m_farm->m_tickets_host.find(it.first); + std::unordered_map::const_iterator rIt = m_farm->m_tickets_host.find(it.first); if (rIt != m_tickets_host.end()) { if (rIt->second.usage > 0) @@ -848,7 +848,7 @@ void RenderAf::addTask(af::TaskExec * i_taskexec, MonitorContainer * i_monitorin std::list new_tickets; for (auto & tIt : i_taskexec->getTickets()) { - std::map::iterator hIt = m_tickets_host.find(tIt.first); + std::unordered_map::iterator hIt = m_tickets_host.find(tIt.first); if (hIt != m_tickets_host.end()) { if (hIt->second.usage == 0) @@ -901,7 +901,7 @@ void RenderAf::removeTask(const af::TaskExec * i_taskexec, MonitorContainer * i_ std::list exp_tickets; for (auto & tIt : i_taskexec->getTickets()) { - std::map::iterator hIt = m_tickets_host.find(tIt.first); + std::unordered_map::iterator hIt = m_tickets_host.find(tIt.first); if (hIt != m_tickets_host.end()) { hIt->second.usage -= tIt.second; @@ -1005,7 +1005,7 @@ void RenderAf::v_refresh( time_t i_current_time, AfContainer * pointer, Monitor // Remove dummy tickets that were needed to store usage only bool dummy_ticket_found = false; - std::map::iterator hIt = m_tickets_host.begin(); + std::unordered_map::iterator hIt = m_tickets_host.begin(); while (hIt != m_tickets_host.end()) { if ((hIt->second.count < 0) && (hIt->second.usage <= 0))