summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs
diff options
context:
space:
mode:
authorOssama Othman <ossama-othman@users.noreply.github.com>2002-08-15 04:22:28 +0000
committerOssama Othman <ossama-othman@users.noreply.github.com>2002-08-15 04:22:28 +0000
commitd0c3cd1774b74ee52865b969e9bcd3933bbbd4d5 (patch)
tree7df13daa839e91631afd2e1be7c1b396b245ca77 /TAO/orbsvcs
parentf608b9e543998bbd293193df2331978a95c31007 (diff)
downloadATCD-d0c3cd1774b74ee52865b969e9bcd3933bbbd4d5.tar.gz
ChangeLogTag:Wed Aug 14 21:22:29 2002 Ossama Othman <ossama@uci.edu>
Diffstat (limited to 'TAO/orbsvcs')
-rw-r--r--TAO/orbsvcs/orbsvcs/LoadBalancing/LB_Component.h2
-rw-r--r--TAO/orbsvcs/orbsvcs/LoadBalancing/LB_LoadManager.cpp69
-rw-r--r--TAO/orbsvcs/orbsvcs/LoadBalancing/LB_LoadManager.h6
-rw-r--r--TAO/orbsvcs/orbsvcs/LoadBalancing/LB_MemberLocator.cpp44
-rw-r--r--TAO/orbsvcs/orbsvcs/LoadBalancing/LB_Random.cpp8
-rw-r--r--TAO/orbsvcs/orbsvcs/PortableGroup/PG_ObjectGroupManager.cpp2
-rw-r--r--TAO/orbsvcs/orbsvcs/PortableGroup/PG_PropertyManager.cpp3
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);