diff options
author | Ossama Othman <ossama-othman@users.noreply.github.com> | 2002-08-15 04:22:28 +0000 |
---|---|---|
committer | Ossama Othman <ossama-othman@users.noreply.github.com> | 2002-08-15 04:22:28 +0000 |
commit | d0c3cd1774b74ee52865b969e9bcd3933bbbd4d5 (patch) | |
tree | 7df13daa839e91631afd2e1be7c1b396b245ca77 /TAO/orbsvcs | |
parent | f608b9e543998bbd293193df2331978a95c31007 (diff) | |
download | ATCD-d0c3cd1774b74ee52865b969e9bcd3933bbbd4d5.tar.gz |
ChangeLogTag:Wed Aug 14 21:22:29 2002 Ossama Othman <ossama@uci.edu>
Diffstat (limited to 'TAO/orbsvcs')
7 files changed, 84 insertions, 50 deletions
diff --git a/TAO/orbsvcs/orbsvcs/LoadBalancing/LB_Component.h b/TAO/orbsvcs/orbsvcs/LoadBalancing/LB_Component.h index 264147d77dd..fba947f2314 100644 --- a/TAO/orbsvcs/orbsvcs/LoadBalancing/LB_Component.h +++ b/TAO/orbsvcs/orbsvcs/LoadBalancing/LB_Component.h @@ -58,7 +58,7 @@ protected: ACE_STATIC_SVC_DECLARE_EXPORT (TAO_LoadBalancing, TAO_LB_Component) -ACE_STATIC_SVC_REQUIRE (TAO_LB_Component) + //ACE_STATIC_SVC_REQUIRE (TAO_LB_Component) ACE_FACTORY_DECLARE (TAO_LoadBalancing, TAO_LB_Component) diff --git a/TAO/orbsvcs/orbsvcs/LoadBalancing/LB_LoadManager.cpp b/TAO/orbsvcs/orbsvcs/LoadBalancing/LB_LoadManager.cpp index 615f947bf7e..c4dce64c2e1 100644 --- a/TAO/orbsvcs/orbsvcs/LoadBalancing/LB_LoadManager.cpp +++ b/TAO/orbsvcs/orbsvcs/LoadBalancing/LB_LoadManager.cpp @@ -724,7 +724,9 @@ TAO_LB_LoadManager::next_member (const PortableServer::ObjectId & oid // Prefer custom load balancing strategies over built-in ones. PortableGroup::Value value; CosLoadBalancing::Strategy_var balancing_strategy; - const char * built_in; // Name of built-in Strategy + CosLoadBalancing::StrategyInfo * built_in; // Built-in Strategy + // information. + if ((TAO_PG::get_property_value (this->custom_balancing_strategy_name_, properties.in (), value) @@ -740,7 +742,10 @@ TAO_LB_LoadManager::next_member (const PortableServer::ObjectId & oid value) && (value >>= built_in)) { - balancing_strategy = this->built_in_strategy (built_in); + balancing_strategy = this->built_in_strategy (built_in + ACE_ENV_ARG_PARAMETER); + ACE_CHECK_RETURN (CORBA::Object::_nil ()); + if (!CORBA::is_nil (balancing_strategy.in ())) { return balancing_strategy->next_member (object_group.in (), @@ -909,15 +914,20 @@ TAO_LB_LoadManager::init (ACE_Reactor * reactor, } CosLoadBalancing::Strategy_ptr -TAO_LB_LoadManager::built_in_strategy (const char * strategy) +TAO_LB_LoadManager::built_in_strategy (CosLoadBalancing::StrategyInfo * info + ACE_ENV_ARG_DECL) { - ACE_ASSERT (strategy != 0); + ACE_ASSERT (info != 0); + + const char * name = info->name.in (); + const PortableGroup::Properties & props = info->props; - CosLoadBalancing::Strategy_ptr s; + CosLoadBalancing::Strategy_ptr strategy = + CosLoadBalancing::Strategy::_nil (); // @todo We should probably shove this code into a factory. - if (ACE_OS::strcmp ("RoundRobin", strategy) == 0) + if (ACE_OS::strcmp ("RoundRobin", name) == 0) { // Double-checked locking if (this->round_robin_ == 0) @@ -929,16 +939,17 @@ TAO_LB_LoadManager::built_in_strategy (const char * strategy) if (this->round_robin_ == 0) { - ACE_NEW_RETURN (this->round_robin_, - TAO_LB_RoundRobin, - CosLoadBalancing::Strategy::_nil ()); + ACE_NEW_THROW_EX (this->round_robin_, + TAO_LB_RoundRobin, + CORBA::NO_MEMORY ()); + ACE_CHECK_RETURN (CosLoadBalancing::Strategy::_nil ()); } } - s = this->round_robin_; + strategy = this->round_robin_; } - else if (ACE_OS::strcmp ("Random", strategy) == 0) + else if (ACE_OS::strcmp ("Random", name) == 0) { // Double-checked locking if (this->random_ == 0) @@ -950,35 +961,23 @@ TAO_LB_LoadManager::built_in_strategy (const char * strategy) if (this->random_ == 0) { - ACE_NEW_RETURN (this->random_, - TAO_LB_Random, - CosLoadBalancing::Strategy::_nil ()); + ACE_NEW_THROW_EX (this->random_, + TAO_LB_Random, + CORBA::NO_MEMORY ()); + ACE_CHECK_RETURN (CosLoadBalancing::Strategy::_nil ()); } } - s = this->random_; + strategy = this->random_; } - else if (ACE_OS::strcmp ("LeastLoaded", strategy) == 0) + else if (ACE_OS::strcmp ("LeastLoaded", name) == 0) { - // Double-checked locking - if (this->least_loaded_ == 0) - { - ACE_GUARD_RETURN (TAO_SYNCH_MUTEX, - guard, - this->lock_, - 0); - - if (this->least_loaded_ == 0) - { - // Use default "LeastLoaded" properties. - ACE_NEW_RETURN (this->least_loaded_, - TAO_LB_LeastLoaded, - CosLoadBalancing::Strategy::_nil ()); - } - } + this->init_least_loaded (props + ACE_ENV_ARG_PARAMETER); + ACE_CHECK_RETURN (CosLoadBalancing::Strategy::_nil ()); - s = this->least_loaded_; + strategy = this->least_loaded_; } else @@ -994,9 +993,9 @@ TAO_LB_LoadManager::built_in_strategy (const char * strategy) return CosLoadBalancing::Strategy::_nil (); } - ACE_ASSERT (!CORBA::is_nil (s)); + ACE_ASSERT (!CORBA::is_nil (strategy)); - return CosLoadBalancing::Strategy::_duplicate (s); + return CosLoadBalancing::Strategy::_duplicate (strategy); } void diff --git a/TAO/orbsvcs/orbsvcs/LoadBalancing/LB_LoadManager.h b/TAO/orbsvcs/orbsvcs/LoadBalancing/LB_LoadManager.h index 21f7ce14634..280e15ccf33 100644 --- a/TAO/orbsvcs/orbsvcs/LoadBalancing/LB_LoadManager.h +++ b/TAO/orbsvcs/orbsvcs/LoadBalancing/LB_LoadManager.h @@ -394,7 +394,9 @@ private: /// Return a reference to the built-in load balancing strategy named /// "strategy." - CosLoadBalancing::Strategy_ptr built_in_strategy (const char * strategy); + CosLoadBalancing::Strategy_ptr built_in_strategy ( + CosLoadBalancing::StrategyInfo * info + ACE_ENV_ARG_DECL); /// Check validity of Strategy or CustomStrategy property. /** @@ -408,7 +410,7 @@ private: /// Initialize the built-in LeastLoaded Strategy with the given /// LeastLoaded properties. void init_least_loaded (const PortableGroup::Properties & props - ACE_ENV_ARG_DECL); + ACE_ENV_ARG_DECL); /// Utility method to extract a CORBA::Float value from the given /// property. diff --git a/TAO/orbsvcs/orbsvcs/LoadBalancing/LB_MemberLocator.cpp b/TAO/orbsvcs/orbsvcs/LoadBalancing/LB_MemberLocator.cpp index 7012d1ab668..afefe3e43a1 100644 --- a/TAO/orbsvcs/orbsvcs/LoadBalancing/LB_MemberLocator.cpp +++ b/TAO/orbsvcs/orbsvcs/LoadBalancing/LB_MemberLocator.cpp @@ -1,10 +1,14 @@ #include "LB_MemberLocator.h" #include "LB_LoadManager.h" +#include "tao/debug.h" + + ACE_RCSID (LoadBalancing, LB_MemberLocator, "$Id$") + TAO_LB_MemberLocator::TAO_LB_MemberLocator ( TAO_LB_LoadManager * lm) : load_manager_ (lm) @@ -22,18 +26,38 @@ TAO_LB_MemberLocator::preinvoke ( ACE_THROW_SPEC ((CORBA::SystemException, PortableServer::ForwardRequest)) { - CORBA::Object_var member = - this->load_manager_->next_member (oid - ACE_ENV_ARG_PARAMETER); - ACE_CHECK_RETURN (0); + ACE_TRY + { + CORBA::Object_var member = + this->load_manager_->next_member (oid + ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + +// ACE_DEBUG ((LM_DEBUG, "%N:%l\n")); -// ACE_DEBUG ((LM_DEBUG, -// "FORWARDED\n")); +// ACE_DEBUG ((LM_DEBUG, +// "FORWARDED\n")); + ACE_ASSERT (!CORBA::is_nil (member.in ())); + // Throw a forward exception to force the client to redirect its + // requests to the member chosen by the LoadBalancer. + //ACE_TRY_THROW (PortableServer::ForwardRequest (member.in ())); + } + ACE_CATCH (PortableGroup::ObjectGroupNotFound, ex) + { + if (TAO_debug_level > 0) + ACE_PRINT_EXCEPTION (ex, + "LoadManager::next_member()"); + } + ACE_CATCH (PortableGroup::MemberNotFound, ex) + { + if (TAO_debug_level > 0) + ACE_PRINT_EXCEPTION (ex, + "LoadManager::next_member()"); + } + ACE_ENDTRY; + ACE_CHECK_RETURN (0); - // Throw a forward exception to force the client to redirect its - // requests to the member chosen by the LoadBalancer. - ACE_THROW_RETURN (PortableServer::ForwardRequest (member.in ()), - 0); + ACE_THROW_RETURN (CORBA::OBJECT_NOT_EXIST (), 0); } void diff --git a/TAO/orbsvcs/orbsvcs/LoadBalancing/LB_Random.cpp b/TAO/orbsvcs/orbsvcs/LoadBalancing/LB_Random.cpp index 9038bcced34..a92d67f67c2 100644 --- a/TAO/orbsvcs/orbsvcs/LoadBalancing/LB_Random.cpp +++ b/TAO/orbsvcs/orbsvcs/LoadBalancing/LB_Random.cpp @@ -87,6 +87,14 @@ TAO_LB_Random::next_member ( ACE_ASSERT (i < len); +// ACE_DEBUG ((LM_DEBUG, +// "** Len = %u\n" +// "Location # %u\n" +// "Loc Name = %s\n", +// len, +// i, +// locations[i][0].id.in ())); + return load_manager->get_member_ref (object_group, locations[i] ACE_ENV_ARG_PARAMETER); diff --git a/TAO/orbsvcs/orbsvcs/PortableGroup/PG_ObjectGroupManager.cpp b/TAO/orbsvcs/orbsvcs/PortableGroup/PG_ObjectGroupManager.cpp index ef535a4805e..933c997f489 100644 --- a/TAO/orbsvcs/orbsvcs/PortableGroup/PG_ObjectGroupManager.cpp +++ b/TAO/orbsvcs/orbsvcs/PortableGroup/PG_ObjectGroupManager.cpp @@ -354,7 +354,7 @@ TAO_PG_ObjectGroupManager::create_object_group ( guard, this->lock_, 0); - + if (this->object_group_map_.bind (oid, group_entry) != 0) ACE_THROW_RETURN (PortableGroup::ObjectNotCreated (), PortableGroup::ObjectGroup::_nil ()); diff --git a/TAO/orbsvcs/orbsvcs/PortableGroup/PG_PropertyManager.cpp b/TAO/orbsvcs/orbsvcs/PortableGroup/PG_PropertyManager.cpp index 92ffa21365c..67997d65266 100644 --- a/TAO/orbsvcs/orbsvcs/PortableGroup/PG_PropertyManager.cpp +++ b/TAO/orbsvcs/orbsvcs/PortableGroup/PG_PropertyManager.cpp @@ -304,7 +304,8 @@ TAO_PG_PropertyManager::get_properties ( *tmp_properties = this->default_properties_; // Override default properties with type-specific properties. - TAO_PG::override_properties (*type_properties, *tmp_properties); + if (type_properties != 0) + TAO_PG::override_properties (*type_properties, *tmp_properties); // Now override with the dynamic (object group) properties. TAO_PG::override_properties (dynamic_properties.in (), *tmp_properties); |