From 5e030faf84086ab02059fcbcc3faed224bd57b95 Mon Sep 17 00:00:00 2001 From: stanleyk Date: Tue, 5 Feb 2013 21:11:03 +0000 Subject: Merge in OCI_Reliability_Enhancements branch. --- .../orbsvcs/Naming/FaultTolerant/FT_Round_Robin.h | 95 ++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 TAO/orbsvcs/orbsvcs/Naming/FaultTolerant/FT_Round_Robin.h (limited to 'TAO/orbsvcs/orbsvcs/Naming/FaultTolerant/FT_Round_Robin.h') diff --git a/TAO/orbsvcs/orbsvcs/Naming/FaultTolerant/FT_Round_Robin.h b/TAO/orbsvcs/orbsvcs/Naming/FaultTolerant/FT_Round_Robin.h new file mode 100644 index 00000000000..3708771bba8 --- /dev/null +++ b/TAO/orbsvcs/orbsvcs/Naming/FaultTolerant/FT_Round_Robin.h @@ -0,0 +1,95 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file FT_Round_Robin.h + * + * $Id$ + * + * @author Kevin Stanley + */ +//============================================================================= + + +#ifndef FT_ROUND_ROBIN_H +#define FT_ROUND_ROBIN_H + +#include /**/ "ace/pre.h" + +#include "ace/Null_Mutex.h" + +# if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +# endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "orbsvcs/Naming/FaultTolerant/FT_Location_Index_Map.h" + + +#include "orbsvcs/CosLoadBalancingS.h" +#include "ace/Vector_T.h" +#include "orbsvcs/Naming/FaultTolerant/ftnaming_export.h" + +class TAO_FT_Naming_Manager; + +TAO_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class TAO_LB_RoundRobin_Strategy + * + * @brief "Round Robin" load balancing strategy used by the + * TAO_FT_Naming_Service. + * + * This load balancing strategy is designed to select an object group + * member residing at the next location from an object group managed + * by a specific Naming Manager. It selects an object from the object + * group in the order in which they are stored. + */ +class TAO_FtNaming_Export TAO_FT_Round_Robin +{ +public: + + /// Constructor. + TAO_FT_Round_Robin (void); + + /// This function obtains the next object's location as it is bound + /// within the object group. + /// @param naming_manager The TAO_FT_Naming_Manager which houses the + /// object groups. + /// @param location The resulting location + /// @param object_group The object group from which the object is to + /// be selected + /// @return False on error. Returns true if a valid object can + /// be selected using the Round Robin load balancing strategy. + virtual bool next_location ( + PortableGroup::ObjectGroup_ptr object_group, + TAO_FT_Naming_Manager *naming_manager, + PortableGroup::Location& location); + + /// Destructor + virtual ~TAO_FT_Round_Robin (void); + +private: + + /// Lock used to ensure atomic access to state retained by this + /// class. + TAO_SYNCH_MUTEX lock_; + + /// Table that maps PortableGroup::ObjectGroupId to location + /// sequence index specific to a given object group. + /** + * The location sequence corresponds to the sequence containing the + * locations of the members of a given object group. The value + * stored in this map corresponds to the index of the next element + * in that sequence. For example, if the index stored in the map is + * 2, location[2] will be used when retrieving the object reference + * to be returned from the Strategy::next_member() method. + */ + TAO_FT_Location_Index_Map location_index_map_; + +}; + +TAO_END_VERSIONED_NAMESPACE_DECL + +#include /**/ "ace/post.h" + +#endif /* FT_ROUND_ROBIN_H */ -- cgit v1.2.1