summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/FT_ReplicationManager/FT_ReplicationManagerFaultAnalyzer.h
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/orbsvcs/FT_ReplicationManager/FT_ReplicationManagerFaultAnalyzer.h')
-rw-r--r--TAO/orbsvcs/FT_ReplicationManager/FT_ReplicationManagerFaultAnalyzer.h200
1 files changed, 200 insertions, 0 deletions
diff --git a/TAO/orbsvcs/FT_ReplicationManager/FT_ReplicationManagerFaultAnalyzer.h b/TAO/orbsvcs/FT_ReplicationManager/FT_ReplicationManagerFaultAnalyzer.h
new file mode 100644
index 00000000000..6b2e263ee85
--- /dev/null
+++ b/TAO/orbsvcs/FT_ReplicationManager/FT_ReplicationManagerFaultAnalyzer.h
@@ -0,0 +1,200 @@
+/* -*- C++ -*- */
+//=============================================================================
+/**
+ * @file FT_ReplicationManagerFaultAnalyzer.h
+ *
+ * $Id$
+ *
+ * This file is part of TAO's implementation of Fault Tolerant CORBA.
+ * This is the Replication Manager's implementation of a fault analyzer.
+ *
+ * @author Steve Totten <totten_s@ociweb.com>
+ */
+//=============================================================================
+
+
+#ifndef FT_REPLICATION_MANAGER_FAULT_ANALYZER_H_
+#define FT_REPLICATION_MANAGER_FAULT_ANALYZER_H_
+
+#include /**/ "ace/pre.h"
+#include <ace/ACE.h>
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+#pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "orbsvcs/FT_ReplicationManager/FT_DefaultFaultAnalyzer.h"
+#include "orbsvcs/FT_CORBAC.h"
+
+// Forward declarations.
+ACE_BEGIN_VERSIONED_NAMESPACE_DECL
+template <class T> class ACE_Unbounded_Set;
+template <class T> class ACE_Unbounded_Set_Iterator;
+ACE_END_VERSIONED_NAMESPACE_DECL
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+namespace TAO
+{
+
+ ///////////////////////
+ // Forward declarations
+ class FT_ReplicationManager;
+ struct FT_FaultEventDescriptor;
+
+ typedef ACE_Unbounded_Set<PortableGroup::Location> FT_Location_Set;
+
+ /**
+ * Replication Manager's fault analyzer.
+ *
+ */
+ class FT_ReplicationManagerFaultAnalyzer
+ : public ::TAO::FT_DefaultFaultAnalyzer
+ {
+
+ public:
+ /**
+ * Constructor.
+ * @param replication_manager Pointer to TAO::FT_ReplicationManager.
+ */
+ FT_ReplicationManagerFaultAnalyzer (
+ const TAO::FT_ReplicationManager * replication_manager);
+
+ /**
+ * Destructor.
+ */
+ virtual ~FT_ReplicationManagerFaultAnalyzer ();
+
+ public:
+
+ /**
+ * Validate event type to make sure it is one we can handle.
+ * @param event The structured fault event, as from the Fault Notifier.
+ * @return 0 if it is a valid event type, -1 otherwise.
+ */
+ virtual int validate_event_type (
+ const CosNotification::StructuredEvent & event);
+
+ /**
+ * Analyze a fault event.
+ * @param event The structured fault event, as from the Fault Notifier.
+ * @return 0 on success, -1 on failure.
+ */
+ virtual int analyze_fault_event (
+ const CosNotification::StructuredEvent & event);
+
+ ////////////////////
+ // Forbidden methods
+ private:
+ /// Default constructor.
+ FT_ReplicationManagerFaultAnalyzer ();
+
+ /// Copy constructor.
+ FT_ReplicationManagerFaultAnalyzer (
+ const FT_ReplicationManagerFaultAnalyzer & rhs);
+
+ /// Assignment operator.
+ FT_ReplicationManagerFaultAnalyzer & operator = (
+ const FT_ReplicationManagerFaultAnalyzer & rhs);
+
+ /////////////////////////
+ // Implementation methods
+ protected:
+
+ /// Helper functions for fault analysis.
+
+ // Extract the type id from a CORBA any.
+ int get_type_id (const CORBA::Any& val, PortableGroup::TypeId_out type_id);
+
+ // Extract the ObjectGroupId from a CORBA any.
+ int get_object_group_id (const CORBA::Any& val, PortableGroup::ObjectGroupId& id);
+
+ // Extract the PortableGroup::Location from a CORBA any.
+ int get_location (const CORBA::Any& val, PortableGroup::Location_out location);
+
+ // Get the MembershipStyle property.
+ int get_membership_style (
+ const PortableGroup::Properties & properties,
+ PortableGroup::MembershipStyleValue & membership_style);
+
+ // Get the ReplicationStyle property.
+ int get_replication_style (
+ const PortableGroup::Properties & properties,
+ FT::ReplicationStyleValue & replication_style);
+
+ // Get the MinimumNumberMembers property.
+ int get_minimum_number_members (
+ const PortableGroup::Properties & properties,
+ PortableGroup::MinimumNumberMembersValue & minimum_number_members);
+
+ // Get the InitialNumberMembers property.
+ int get_initial_number_members (
+ const PortableGroup::Properties & properties,
+ PortableGroup::InitialNumberMembersValue & initial_number_members);
+
+ // Get the Factories property.
+ int get_factories (
+ const PortableGroup::Properties & properties,
+ PortableGroup::FactoryInfos_out factories);
+
+ // Handle a single replica failure.
+ int single_replica_failure (
+ TAO::FT_FaultEventDescriptor & fault_event_desc);
+
+ // Handle a location failure.
+ int location_failure (
+ TAO::FT_FaultEventDescriptor & fault_event_desc);
+
+ // Handle a type at location failure.
+ int type_failure (
+ TAO::FT_FaultEventDescriptor & fault_event_desc);
+
+ // Is the replica at location the primary member of its ObjectGroup?
+ // Sets <object_is_primary> and returns 0 on success.
+ // Returns -1 on failure.
+ int is_primary_member (
+ const PortableGroup::ObjectGroup_ptr iogr,
+ const PortableGroup::Location & location,
+ int & object_is_primary);
+
+ /// remove a failed member from a group
+ int remove_failed_member (
+ PortableGroup::ObjectGroup_ptr iogr,
+ TAO::FT_FaultEventDescriptor & fault_event_desc,
+ PortableGroup::ObjectGroup_out new_iogr);
+
+
+ // Choose a new primary member for the ObjectGroup.
+ // Sets <new_iogr> and returns 0 on success.
+ // Returns -1 on failure.
+ int set_new_primary (
+ PortableGroup::ObjectGroup_ptr iogr,
+ TAO::FT_FaultEventDescriptor & fault_event_desc,
+ PortableGroup::ObjectGroup_out new_iogr);
+
+#if 0 // this is handled by the remove_member method
+ // While the number of members in the object group is less than
+ // the MinimumNumberMembers property, add new members.
+ // Sets <new_iogr> and returns 0 on success.
+ // Returns -1 on failure.
+ int add_members (
+ PortableGroup::ObjectGroup_ptr iogr,
+ TAO::FT_FaultEventDescriptor & fault_event_desc,
+ PortableGroup::ObjectGroup_out new_iogr);
+#endif
+
+ ///////////////
+ // Data Members
+ private:
+ FT_ReplicationManager * replication_manager_;
+
+ };
+
+} // namespace TAO
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#include /**/ "ace/post.h"
+
+#endif /* FT_REPLICATION_MANAGER_FAULT_ANALYZER_H_ */
+