summaryrefslogtreecommitdiff
path: root/ACE/TAO/orbsvcs/orbsvcs/CosLoadBalancing.idl
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/TAO/orbsvcs/orbsvcs/CosLoadBalancing.idl')
-rw-r--r--ACE/TAO/orbsvcs/orbsvcs/CosLoadBalancing.idl202
1 files changed, 202 insertions, 0 deletions
diff --git a/ACE/TAO/orbsvcs/orbsvcs/CosLoadBalancing.idl b/ACE/TAO/orbsvcs/orbsvcs/CosLoadBalancing.idl
new file mode 100644
index 00000000000..f2e468b850e
--- /dev/null
+++ b/ACE/TAO/orbsvcs/orbsvcs/CosLoadBalancing.idl
@@ -0,0 +1,202 @@
+// -*- IDL -*-
+
+//=============================================================================
+/**
+ * @file CosLoadBalancing.idl
+ *
+ * $Id$
+ *
+ * @author Object Management Group
+ */
+//=============================================================================
+
+
+#ifndef COSLOADBALANCING_IDL
+#define COSLOADBALANCING_IDL
+
+#include "PortableGroup.idl"
+#include "orb.idl"
+
+/**
+ * @class CosLoadBalancing
+ *
+ * @brief This module defines the interfaces and data types used in
+ * TAO's Load Balancing service.
+ * @par
+ * TAO's Load Balancer manages distribution of requests to replicas of
+ * a given Object in an effort to ensure that the applications/hosts
+ * pointed to by the Object reference are as equally loaded as
+ * possible, i.e. load balanced.
+ * @par
+ * The definition of 'load' is application specific, for example, some
+ * applications may choose to load balance access to multiple
+ * dedicated lines, or separate network interfaces, as well as more
+ * traditional load balancing metrics, such as CPU or power load.
+ */
+module CosLoadBalancing
+{
+ typeprefix CosLoadBalancing "tao.lb";
+
+ const IOP::ServiceId LOAD_MANAGED = 123456; // @todo TBA by OMG
+
+ typedef PortableGroup::Location Location;
+ typedef PortableGroup::Properties Properties;
+
+ // Types used for obtaining and/or reporting loads
+ typedef unsigned long LoadId;
+
+ // OMG defined LoadId constants.
+ const LoadId LoadAverage = 0;
+ const LoadId Disk = 1;
+ const LoadId Memory = 2;
+ const LoadId Network = 3;
+ const LoadId RequestsPerSecond = 4;
+
+ struct Load {
+ LoadId id;
+ float value;
+ };
+ typedef sequence<Load> LoadList;
+
+ exception MonitorAlreadyPresent {};
+ exception LocationNotFound {};
+ exception LoadAlertNotFound {};
+ exception LoadAlertAlreadyPresent {};
+ exception LoadAlertNotAdded {};
+
+ exception StrategyNotAdaptive {};
+
+ interface LoadManager;
+
+ interface Strategy
+ {
+ readonly attribute string name;
+
+ Properties get_properties ();
+
+ /// Report loads at given location to the LoadManager.
+ void push_loads (in PortableGroup::Location the_location,
+ in LoadList loads)
+ raises (StrategyNotAdaptive);
+
+ /// Get loads, if any, at the given location. Load balancing
+ /// strategies may use this method to query loads at specific
+ /// locations. Returned loads are the effective loads computed by
+ /// the Strategy, as opposed to the raw loads maintained by the
+ /// LoadManager.
+ LoadList get_loads (in LoadManager load_manager,
+ in PortableGroup::Location the_location)
+ raises (LocationNotFound);
+
+ /// Return the next member from the given object group which will
+ /// requests will be forward to.
+ Object next_member (in PortableGroup::ObjectGroup object_group,
+ in LoadManager load_manager)
+ raises (PortableGroup::ObjectGroupNotFound,
+ PortableGroup::MemberNotFound);
+
+ /// Ask the Strategy to analyze loads, and enable or disable alerts
+ /// at object group members residing at appropriate locations.
+ oneway void analyze_loads (in PortableGroup::ObjectGroup object_group,
+ in LoadManager load_manager);
+
+ // The loads at the given location should no longer be considered
+ // when performing load analysis.
+ // void location_removed (in PortableGroup::Location the_location)
+ // raises (LocationNotFound);
+ };
+
+ typedef Strategy CustomStrategy;
+
+ /// Property value for built-in load balancing Strategy.
+ struct StrategyInfo
+ {
+ string name;
+ Properties props;
+ };
+
+ interface LoadAlert
+ {
+ /// Forward requests back to the load manager via the object group
+ /// reference.
+ void enable_alert ();
+
+ /// Stop forwarding requests, and begin accepting them again.
+ void disable_alert ();
+ };
+
+ /// Interface that all load monitors must implement.
+ interface LoadMonitor
+ {
+ /// Retrieve the location at which the LoadMonitor resides.
+ readonly attribute Location the_location;
+
+ /// Retrieve the current load at the location LoadMonitor resides.
+ readonly attribute LoadList loads;
+ };
+
+ /// Specification of LoadManager Interface
+ interface LoadManager
+ : PortableGroup::PropertyManager,
+ PortableGroup::ObjectGroupManager,
+ PortableGroup::GenericFactory
+ {
+ /// For the PUSH load monitoring style.
+ void push_loads (in PortableGroup::Location the_location,
+ in LoadList loads);
+
+ /// Return the raw loads at the given location, as opposed to the
+ /// potentially different effective loads returned by the
+ /// Strategy::get_loads() method.
+ LoadList get_loads (in PortableGroup::Location the_location)
+ raises (LocationNotFound);
+
+ /// Inform member at given location of load alert condition.
+ void enable_alert (in PortableGroup::Location the_location)
+ raises (LoadAlertNotFound);
+
+ /// Inform member at given location that load alert condition has
+ /// passed.
+ void disable_alert (in PortableGroup::Location the_location)
+ raises (LoadAlertNotFound);
+
+ /// Register a LoadAlert object for the member at the given
+ /// location.
+ void register_load_alert (in PortableGroup::Location the_location,
+ in LoadAlert load_alert)
+ raises (LoadAlertAlreadyPresent,
+ LoadAlertNotAdded);
+
+ /// Retrieve the LoadAlert object for the member at the given
+ /// location.
+ LoadAlert get_load_alert (in PortableGroup::Location the_location)
+ raises (LoadAlertNotFound);
+
+ /// Remove (de-register) the LoadAlert object for the member at the
+ /// given location.
+ void remove_load_alert (in PortableGroup::Location the_location)
+ raises (LoadAlertNotFound);
+
+ // The following load monitor methods are only used for the PULL
+ // load monitoring style.
+
+ /// Register a LoadMonitor object for "pull" monitoring of the
+ /// given location.
+ void register_load_monitor (in PortableGroup::Location the_location,
+ in LoadMonitor load_monitor)
+ raises (MonitorAlreadyPresent);
+
+ /// Retrieve the LoadMonitor object for the given location.
+ LoadMonitor get_load_monitor (in PortableGroup::Location the_location)
+ raises (LocationNotFound);
+
+ /// Remove (de-register) the LoadMonitor object for the given
+ /// location.
+ void remove_load_monitor (in PortableGroup::Location the_location)
+ raises (LocationNotFound);
+
+ };
+
+};
+
+#endif /* COSLOADBALANCING_IDL */