X-Git-Url: http://sru.miketaylor.org.uk/?a=blobdiff_plain;f=src%2Ffilter_load_balance.cpp;h=183acf858772eaf2eae3d12914bd5854546e4af7;hb=c1d953eee6c00432493bc364da6284704ccd9cc2;hp=57e1eb87344b17c390625a0543367c873f599b63;hpb=0dcfd01a8fc058f1537af7bf16f29ca901a3e61b;p=metaproxy-moved-to-github.git diff --git a/src/filter_load_balance.cpp b/src/filter_load_balance.cpp index 57e1eb8..183acf8 100644 --- a/src/filter_load_balance.cpp +++ b/src/filter_load_balance.cpp @@ -1,5 +1,5 @@ /* This file is part of Metaproxy. - Copyright (C) 2005-2009 Index Data + Copyright (C) 2005-2011 Index Data Metaproxy is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free @@ -17,11 +17,10 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.hpp" -#include "session.hpp" -#include "package.hpp" -#include "filter.hpp" +#include +#include #include "filter_load_balance.hpp" -#include "util.hpp" +#include #include @@ -76,11 +75,6 @@ namespace metaproxy_1 unsigned int deads; unsigned int cost() { unsigned int c = sessions + packages + deads; - //std::cout << "stats c:" << c - // << " s:" << sessions - // << " p:" << packages - // << " d:" << deads - // <<"\n"; return c; } }; @@ -158,6 +152,10 @@ void yf::LoadBalance::Impl::process(mp::Package &package) { std::string target; std::list::iterator ivh = vhosts.begin(); + + Package init_pkg(package.session(), package.origin()); + init_pkg.copy_filter(package); + unsigned int cost = std::numeric_limits::max(); { boost::mutex::scoped_lock scoped_lock(m_mutex); @@ -186,25 +184,26 @@ void yf::LoadBalance::Impl::process(mp::Package &package) if (target.length() == 0) break; // copying new target into init package - + yazpp_1::GDU init_gdu(base_req); Z_InitRequest *init_req = init_gdu.get()->u.z3950->u.initRequest; mp::util::set_vhost_otherinfo(&(init_req->otherInfo), odr_en, target, 1); - package.request() = init_gdu; + init_pkg.request() = init_gdu; // moving all package types - package.move(); + init_pkg.move(); // checking for closed back end packages - if (!package.session().is_closed()) + if (!init_pkg.session().is_closed()) { add_session(package.session().id(), target); + + package.response() = init_pkg.response(); return; } - yaz_log(YLOG_LOG, "Other round.."); } mp::odr odr; package.response() = odr.create_initResponse( @@ -292,10 +291,6 @@ void yf::LoadBalance::Impl::add_dead(unsigned long session_id) } } -//void yf::LoadBalance::Impl::clear_dead(unsigned long session_id){ -// std::cout << "clear_dead " << session_id << "\n"; -//}; - void yf::LoadBalance::Impl::add_package(unsigned long session_id) { std::string target = find_session_target(session_id); @@ -382,10 +377,6 @@ void yf::LoadBalance::Impl::remove_session(unsigned long session_id) if (itarg->second.sessions > 0) itarg->second.sessions -= 1; - // std:.cout << "remove_session " << session_id << " " << target - // << " s:" << itarg->second.sessions << "\n"; - - // clearing empty sessions and targets if (itarg->second.sessions == 0 && itarg->second.deads == 0) { m_target_stat.erase(itarg); @@ -416,8 +407,6 @@ unsigned int yf::LoadBalance::Impl::cost(std::string target) if (itarg != m_target_stat.end()) cost = itarg->second.cost(); } - - //std::cout << "cost " << target << " c:" << cost << "\n"; return cost; } @@ -432,8 +421,6 @@ unsigned int yf::LoadBalance::Impl::dead(std::string target) if (itarg != m_target_stat.end()) dead = itarg->second.deads; } - - //std::cout << "dead " << target << " d:" << dead << "\n"; return dead; }