summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwilson_d <wilson_d@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2003-11-04 15:57:39 +0000
committerwilson_d <wilson_d@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2003-11-04 15:57:39 +0000
commitb6bc9ebee8060e12604c61687cdde3c600a37903 (patch)
tree2ce33c80dee72ae5382719e0f17c60e9820b0f7e
parentce30d31756c03764227eb24f6479d578da7cdf78 (diff)
downloadATCD-oci_haft_branch.tar.gz
ChangeLogTag: Tue Nov 4 09:49:20 2003 Dale Wilson <wilson_d@ociweb.com>oci_haft_branch
-rw-r--r--TAO/ChangeLog69
-rw-r--r--TAO/orbsvcs/FT_ReplicationManager/FT_ReplicationManager.cpp47
-rw-r--r--TAO/orbsvcs/FT_ReplicationManager/FT_ReplicationManager.h4
-rw-r--r--TAO/orbsvcs/orbsvcs/FaultTolerance/FT_ServerRequest_Interceptor.cpp38
-rw-r--r--TAO/orbsvcs/orbsvcs/FaultTolerance/FT_ServerRequest_Interceptor.h2
-rw-r--r--TAO/orbsvcs/orbsvcs/PortableGroup.idl5
-rw-r--r--TAO/orbsvcs/orbsvcs/PortableGroup/PG_Object_Group.cpp50
-rw-r--r--TAO/orbsvcs/orbsvcs/PortableGroup/PG_Object_Group.h24
-rw-r--r--TAO/orbsvcs/tests/FT_App/FT_TestReplica_i.cpp13
-rw-r--r--TAO/orbsvcs/tests/FT_App/FT_TestReplica_i.h3
10 files changed, 191 insertions, 64 deletions
diff --git a/TAO/ChangeLog b/TAO/ChangeLog
index bc7f2a19796..6ca6bc1fd0d 100644
--- a/TAO/ChangeLog
+++ b/TAO/ChangeLog
@@ -1,27 +1,52 @@
+Tue Nov 4 09:49:20 2003 Dale Wilson <wilson_d@ociweb.com>
+
+ * orbsvcs/orbsvcs/PortableGroup.idl:
+ * orbsvcs/FT_ReplicationManager/FT_ReplicationManager.h:
+ * orbsvcs/FT_ReplicationManager/FT_ReplicationManager.cpp:
+ * orbsvcs/orbsvcs/FaultTolerance/FT_ServerRequest_Interceptor.h:
+ * orbsvcs/orbsvcs/FaultTolerance/FT_ServerRequest_Interceptor.cpp:
+ * orbsvcs/orbsvcs/PortableGroup/PG_Object_Group.h:
+ * orbsvcs/orbsvcs/PortableGroup/PG_Object_Group.cpp:
+ Modify the tao_update_object_group method to take an additional
+ argument: is_primary. This will be true in for the IOGR pushed
+ to the primary member and false for backup members.
+
+ * orbsvcs/tests/FT_App/FT_TestReplica_i.cpp:
+ * orbsvcs/tests/FT_App/FT_TestReplica_i.h:
+ "implement" modified tao_update_object_group method.
+ Change thrown exception in hopes of triggering transparent
+ reinvocation (no luck, yet.)
+
+ These changes were made in the oci_haft branch.
+
+
Mon Nov 3 17:29:58 2003 Boris Kolpackov <boris@dre.vanderbilt.edu>
- * orbsvcs/examples/FaultTolerance/Makefile:
- * orbsvcs/examples/FaultTolerance/RolyPoly/CrashPoint.cpp:
- * orbsvcs/examples/FaultTolerance/RolyPoly/CrashPoint.h:
- * orbsvcs/examples/FaultTolerance/RolyPoly/Log.h:
- * orbsvcs/examples/FaultTolerance/RolyPoly/LogACE_RB_Tree.h:
- * orbsvcs/examples/FaultTolerance/RolyPoly/LogStdMap.h:
- * orbsvcs/examples/FaultTolerance/RolyPoly/Makefile:
- * orbsvcs/examples/FaultTolerance/RolyPoly/ORB_Initializer.cpp:
- * orbsvcs/examples/FaultTolerance/RolyPoly/ORB_Initializer.h:
- * orbsvcs/examples/FaultTolerance/RolyPoly/README:
- * orbsvcs/examples/FaultTolerance/RolyPoly/ReplicaController.cpp:
- * orbsvcs/examples/FaultTolerance/RolyPoly/ReplicaController.h:
- * orbsvcs/examples/FaultTolerance/RolyPoly/RolyPoly.idl:
- * orbsvcs/examples/FaultTolerance/RolyPoly/RolyPoly_i.cpp:
- * orbsvcs/examples/FaultTolerance/RolyPoly/RolyPoly_i.h:
- * orbsvcs/examples/FaultTolerance/RolyPoly/StateUpdate.h:
- * orbsvcs/examples/FaultTolerance/RolyPoly/client.cpp:
- * orbsvcs/examples/FaultTolerance/RolyPoly/server.cpp:
-
- RolyPoly is a simple example that shows how to increase
- application reliability by using replication to tolerate
- faults. See README for details.
+ * orbsvcs/examples/FaultTolerance/Makefile:
+ * orbsvcs/examples/FaultTolerance/RolyPoly/CrashPoint.cpp:
+ * orbsvcs/examples/FaultTolerance/RolyPoly/CrashPoint.h:
+ * orbsvcs/examples/FaultTolerance/RolyPoly/Log.h:
+ * orbsvcs/examples/FaultTolerance/RolyPoly/LogACE_RB_Tree.h:
+ * orbsvcs/examples/FaultTolerance/RolyPoly/LogStdMap.h:
+ * orbsvcs/examples/FaultTolerance/RolyPoly/Makefile:
+ * orbsvcs/examples/FaultTolerance/RolyPoly/ORB_Initializer.cpp:
+ * orbsvcs/examples/FaultTolerance/RolyPoly/ORB_Initializer.h:
+ * orbsvcs/examples/FaultTolerance/RolyPoly/README:
+ * orbsvcs/examples/FaultTolerance/RolyPoly/ReplicaController.cpp:
+ * orbsvcs/examples/FaultTolerance/RolyPoly/ReplicaController.h:
+ * orbsvcs/examples/FaultTolerance/RolyPoly/RolyPoly.idl:
+ * orbsvcs/examples/FaultTolerance/RolyPoly/RolyPoly_i.cpp:
+ * orbsvcs/examples/FaultTolerance/RolyPoly/RolyPoly_i.h:
+ * orbsvcs/examples/FaultTolerance/RolyPoly/StateUpdate.h:
+ * orbsvcs/examples/FaultTolerance/RolyPoly/client.cpp:
+ * orbsvcs/examples/FaultTolerance/RolyPoly/server.cpp:
+
+ RolyPoly is a simple example that shows how to increase
+ application reliability by using replication to tolerate
+ faults. See README for details.
+
+ These changes were made in the oci_haft branch.
+
Mon Nov 3 16:09:59 2003 Dale Wilson <wilson_d@ociweb.com>
diff --git a/TAO/orbsvcs/FT_ReplicationManager/FT_ReplicationManager.cpp b/TAO/orbsvcs/FT_ReplicationManager/FT_ReplicationManager.cpp
index 1dbea34fbb5..c19324b7ac2 100644
--- a/TAO/orbsvcs/FT_ReplicationManager/FT_ReplicationManager.cpp
+++ b/TAO/orbsvcs/FT_ReplicationManager/FT_ReplicationManager.cpp
@@ -672,7 +672,7 @@ TAO::FT_ReplicationManager::set_primary_member (
TAO::PG_Object_Group * group;
if (this->object_group_map_.find_group (object_group, group))
{
-// group->set_primary (member ACE_ENV_ARG_PARAMETER);
+ group->set_primary_location (the_location ACE_ENV_ARG_PARAMETER);
ACE_CHECK_RETURN (CORBA::Object::_nil ());
// Set the new group reference
// and distribute it to all members
@@ -706,6 +706,48 @@ TAO::FT_ReplicationManager::create_member (
ACE_ENV_ARG_PARAMETER);
}
+#if 0 // debug code
+void TAO::FT_ReplicationManager::dump_membership (TAO_IOP::TAO_IOR_Manipulation_ptr iorm, const char * label, PortableGroup::ObjectGroup_ptr member) const
+{
+ FT::TagFTGroupTaggedComponent ft_tag_component;
+ TAO_FT_IOGR_Property prop (ft_tag_component);
+ if (iorm->is_primary_set(&prop, member))
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "%s: PRIMARY member.\n",
+ label
+ ));
+ }
+ else
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "%s: backup member.\n",
+ label
+ ));
+ }
+
+ PortableGroup::TagGroupTaggedComponent tag_component;
+ if (TAO::PG_Utils::get_tagged_component (member, tag_component))
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "%s: Group: ."
+ " version: %u\n",
+
+ label,
+ tag_component.object_group_ref_version
+ ));
+ }
+ else
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "%s: No group information found.\n",
+ label
+ ));
+ }
+}
+#endif // debug code
+
+
PortableGroup::ObjectGroup_ptr
TAO::FT_ReplicationManager::add_member (
@@ -762,6 +804,7 @@ TAO::FT_ReplicationManager::add_member (
));
}
ACE_CHECK_RETURN (PortableGroup::ObjectGroup::_nil());
+
merged = cleaned;
}
ACE_CHECK_RETURN (PortableGroup::ObjectGroup::_nil());
@@ -784,9 +827,11 @@ TAO::FT_ReplicationManager::add_member (
{
group->add_member (the_location, member ACE_ENV_ARG_PARAMETER);
ACE_CHECK_RETURN (CORBA::Object::_nil ());
+
// Set the new group reference
// and distribute it to all members
group->set_reference (merged, tag_component.object_group_ref_version, 1);
+
}
return merged._retn();
diff --git a/TAO/orbsvcs/FT_ReplicationManager/FT_ReplicationManager.h b/TAO/orbsvcs/FT_ReplicationManager/FT_ReplicationManager.h
index a3a22be2325..df87fb00e6a 100644
--- a/TAO/orbsvcs/FT_ReplicationManager/FT_ReplicationManager.h
+++ b/TAO/orbsvcs/FT_ReplicationManager/FT_ReplicationManager.h
@@ -431,6 +431,10 @@ namespace TAO
//@}
+ ////////////////
+ // Forbidden methods
+ FT_ReplicationManager (const FT_ReplicationManager & rhs);
+ FT_ReplicationManager & operator = (const FT_ReplicationManager & rhs);
///////////////
// Data Members
diff --git a/TAO/orbsvcs/orbsvcs/FaultTolerance/FT_ServerRequest_Interceptor.cpp b/TAO/orbsvcs/orbsvcs/FaultTolerance/FT_ServerRequest_Interceptor.cpp
index 70cf58ed390..beb006a4ca6 100644
--- a/TAO/orbsvcs/orbsvcs/FaultTolerance/FT_ServerRequest_Interceptor.cpp
+++ b/TAO/orbsvcs/orbsvcs/FaultTolerance/FT_ServerRequest_Interceptor.cpp
@@ -95,9 +95,6 @@ namespace TAO
if (ACE_OS::strcmp (op.in (),
PortableGroup::TAO_UPDATE_OBJECT_GROUP_METHOD_NAME) == 0)
{
- ACE_DEBUG ((LM_DEBUG,
- "FT_ServerRequestInterceptor updating IOGR.\n"
- ));
this->update_iogr (ri
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
@@ -175,7 +172,7 @@ namespace TAO
if (TAO_debug_level > 0)
{
ACE_DEBUG ((LM_DEBUG,
- "Forwarding request to new IOGR [%u | %u] \n",
+ "TAO-FT (%P|%t) - Forwarding request to new IOGR [%u | %u] \n",
ACE_static_cast( unsigned, fgvsc.object_group_ref_version ),
ACE_static_cast( unsigned, this->object_group_ref_version_)
));
@@ -192,7 +189,7 @@ namespace TAO
if (TAO_debug_level > 0)
{
ACE_DEBUG ((LM_DEBUG,
- "Request arrived at backup replica. Throwing TRANSIENT.[%u] \n",
+ "TAO-FT (%P|%t) - Request arrived at backup replica. Throwing TRANSIENT.[%u] \n",
ACE_static_cast( unsigned, this->object_group_ref_version_)
));
}
@@ -244,35 +241,32 @@ namespace TAO
ri->arguments (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
- if (param->length () != 2)
+ if (param->length () != 3)
ACE_THROW (CORBA::TRANSIENT ());
const char *str = 0;
+ this->is_primary_ = 0; // assume we're a backup member
- (*param)[0].argument >>= str;
- (*param)[1].argument >>= this->object_group_ref_version_;
+ (*param)[0].argument >>= str; // the stringified IOGR
+ (*param)[1].argument >>= this->object_group_ref_version_; // the version
+ (*param)[2].argument >>= CORBA::Any::to_boolean (this->is_primary_);// boolean is_primary
- CORBA::String_var obj (str);
+ if (TAO_debug_level > 0)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "TAO-FT (%P|%t) - FT_ServerRequestInterceptor updating IOGR to version %u %s.\n",
+ ACE_static_cast (unsigned, this->object_group_ref_version_),
+ (this->is_primary_ ? "Primary" : "Backup")
+ ));
+ }
+ CORBA::String_var obj (str);
this->iogr_ =
this->orb_->string_to_object (obj.in ()
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
- this->is_primary_ = 1; // assume we're primary
-#if 0 // @@ disabled 'cause I don't know "whoami"
- CORBA::Boolean primary_set = iorm_->is_primary_set (this->iogr_.in() ACE_ENV_ARG_PARAMETER);
- ACE_CHECK;
- if (primary_set)
- {
- CORBA::Object_var primary_obj = iorm_->get_primary (this->iogr_.in() ACE_ENV_ARG_PARAMETER);
- ACE_CHECK;
- this->is_primary_ = whoami->_is_equivalent (primary_obj.in() ACE_ENV_ARG_PARAMETER);
- ACE_CHECK;
- }
-#endif // 0
-
// @@ This exception is a hack to let the RM know that we have
// received and updated the IOGR. We will add a special minor code
// soon.
diff --git a/TAO/orbsvcs/orbsvcs/FaultTolerance/FT_ServerRequest_Interceptor.h b/TAO/orbsvcs/orbsvcs/FaultTolerance/FT_ServerRequest_Interceptor.h
index 7bf6a37b7c7..3c69275d1ea 100644
--- a/TAO/orbsvcs/orbsvcs/FaultTolerance/FT_ServerRequest_Interceptor.h
+++ b/TAO/orbsvcs/orbsvcs/FaultTolerance/FT_ServerRequest_Interceptor.h
@@ -121,7 +121,7 @@ namespace TAO
CORBA::ULong object_group_ref_version_;
- bool is_primary_;
+ CORBA::Boolean is_primary_;
CORBA::Object_var iogr_;
diff --git a/TAO/orbsvcs/orbsvcs/PortableGroup.idl b/TAO/orbsvcs/orbsvcs/PortableGroup.idl
index 40546e2eb23..92c0b22a278 100644
--- a/TAO/orbsvcs/orbsvcs/PortableGroup.idl
+++ b/TAO/orbsvcs/orbsvcs/PortableGroup.idl
@@ -300,7 +300,10 @@ module PortableGroup
* Pseudo used method to update IOGR in Object Group Members
* TAO specific. The CORBA spec. doesn't address the issue.
*/
- void tao_update_object_group (in string iogr, in PortableGroup::ObjectGroupRefVersion version);
+ void tao_update_object_group (
+ in string iogr,
+ in PortableGroup::ObjectGroupRefVersion version,
+ in boolean is_primary);
};
diff --git a/TAO/orbsvcs/orbsvcs/PortableGroup/PG_Object_Group.cpp b/TAO/orbsvcs/orbsvcs/PortableGroup/PG_Object_Group.cpp
index e336501de8e..ca84d3fa9ee 100644
--- a/TAO/orbsvcs/orbsvcs/PortableGroup/PG_Object_Group.cpp
+++ b/TAO/orbsvcs/orbsvcs/PortableGroup/PG_Object_Group.cpp
@@ -22,6 +22,7 @@ TAO::PG_Object_Group::MemberInfo::MemberInfo (
: member_ (CORBA::Object::_duplicate (member))
, location_ (location)
, factory_(PortableGroup::GenericFactory::_nil())
+ , is_primary_ (0)
{
}
@@ -34,6 +35,7 @@ TAO::PG_Object_Group::MemberInfo::MemberInfo (
, factory_ (PortableGroup::GenericFactory::_duplicate (factory))
, factory_id_ (factory_id)
, location_ (location)
+ , is_primary_ (0)
{
}
@@ -94,10 +96,10 @@ TAO::PG_Object_Group::~PG_Object_Group ()
}
-void dump_ior (const char * base, unsigned long version, const char * iogr)
+void dump_ior (const char * base, const char * ext, unsigned long version, const char * iogr)
{
char filename[1000];
- sprintf(filename, "%s_%lu.iogr", base, version );
+ sprintf(filename, "%s_%lu.%s", base, version, ext );
FILE * iorfile = fopen(filename, "w");
fwrite (iogr, 1, strlen(iogr), iorfile);
@@ -124,21 +126,29 @@ void TAO::PG_Object_Group::set_reference (
++it)
{
MemberInfo const * info = (*it).int_id_;
+ //
+ // Unchecked narrow means the member doesn't have to actually implement the TAO_UpdateObjectGroup interface
+ // PortableGroup::TAO_UpdateObjectGroup_var uog = PortableGroup::TAO_UpdateObjectGroup::_unchecked_narrow ( info->member_);
+ // but it doesn work: error message at replica is:
+ // TAO-FT (2996|976) - Wrong version information within the interceptor [1 | 0]
+ // TAO_Perfect_Hash_OpTable:find for operation 'tao_update_object_group' (length=23) failed
+ // back to using _narrow
PortableGroup::TAO_UpdateObjectGroup_var uog = PortableGroup::TAO_UpdateObjectGroup::_narrow ( info->member_);
if (! CORBA::is_nil (uog) )
{
ACE_TRY_NEW_ENV
{
ACE_DEBUG ((LM_DEBUG,
- "PG_Object_Group pushing IOGR to member: %s@%s.\n",
+ "PG (%P|%t) - Object_Group pushing IOGR to %s member: %s@%s.\n",
+ (info->is_primary_ ? "Primary" : "Backup"),
this->role_.c_str(),
ACE_static_cast(const char *, info->location_[0].id)
));
- dump_ior ("group", this->version_, this->IOGR_);
+ dump_ior ("group", "iogr", this->version_, this->IOGR_);
CORBA::String_var replica_ior = this->orb_->object_to_string(uog.in() ACE_ENV_ARG_PARAMETER);
- dump_ior ("replica", n_rep++, replica_ior);
+ dump_ior (info->location_[0].id, "ior", (this->version_ * 100) + n_rep++, replica_ior);
- uog->tao_update_object_group (this->IOGR_, this->version_);
+ uog->tao_update_object_group (this->IOGR_, this->version_, info->is_primary_);
}
ACE_CATCHANY
{
@@ -207,9 +217,33 @@ void TAO::PG_Object_Group::group_specific_factories (PortableGroup::FactoryInfos
}
-void TAO::PG_Object_Group::set_primary_location (PortableGroup::Location & location)
+void TAO::PG_Object_Group::set_primary_location (
+ const PortableGroup::Location & location
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((PortableGroup::MemberNotFound))
{
- this->primary_location_ = location;
+ MemberInfo * info;
+ if (this->members_.find (location, info) == 0)
+ {
+ int cleared = 0;
+ this->primary_location_ = location;
+ for (MemberMap_Iterator it = this->members_.begin();
+ !cleared && it != this->members_.end();
+ ++it)
+ {
+ cleared = (*it).int_id_->is_primary_;
+ (*it).int_id_->is_primary_ = 0;
+ }
+ info->is_primary_ = 1;
+ }
+ else
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "TAO-PG (%P|%t) - set_primary_location throwing MemberNotFound.\n"
+ ));
+ ACE_THROW (PortableGroup::MemberNotFound())
+ ACE_CHECK;
+ }
}
const PortableGroup::Location & TAO::PG_Object_Group::primary_location() const
diff --git a/TAO/orbsvcs/orbsvcs/PortableGroup/PG_Object_Group.h b/TAO/orbsvcs/orbsvcs/PortableGroup/PG_Object_Group.h
index 36675657c15..7ea7453869e 100644
--- a/TAO/orbsvcs/orbsvcs/PortableGroup/PG_Object_Group.h
+++ b/TAO/orbsvcs/orbsvcs/PortableGroup/PG_Object_Group.h
@@ -66,6 +66,11 @@ namespace TAO
/// Location where this member exists
PortableGroup::Location location_;
+
+ /// TRUE if this is primary member
+ CORBA::Boolean is_primary_;
+
+
///////////////
// Methods
@@ -150,10 +155,21 @@ namespace TAO
*/
void group_specific_factories (PortableGroup::FactoryInfos & result) const;
- // Note: primary location is a concept from FT CORBA.
- // It doesn't hurt other PortableGroup-based services to
- // have these two metods and the underlying member.
- void set_primary_location (PortableGroup::Location & primary_location_);
+ /**
+ * Set the member at "location" to be primary.
+ *
+ * Note: primary location is a concept from FT CORBA.
+ * It doesn't hurt other PortableGroup-based services to
+ * have these two methods and the underlying members.
+ */
+ void set_primary_location (
+ const PortableGroup::Location & location
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((PortableGroup::MemberNotFound));
+
+ /**
+ * get location of primary member
+ */
const PortableGroup::Location & primary_location() const;
/**
diff --git a/TAO/orbsvcs/tests/FT_App/FT_TestReplica_i.cpp b/TAO/orbsvcs/tests/FT_App/FT_TestReplica_i.cpp
index 4d678f5bfd9..5eccee9f5bb 100644
--- a/TAO/orbsvcs/tests/FT_App/FT_TestReplica_i.cpp
+++ b/TAO/orbsvcs/tests/FT_App/FT_TestReplica_i.cpp
@@ -65,11 +65,15 @@ namespace
}
}
+// NO_RESPONSE ->no reinvocation
+
+#define FAULT_CODE CORBA::TRANSIENT
+
// Macros to simplify suicide.
#define KEVORKIAN(value, method) \
if (this->death_pending_ == (FT_TEST::TestReplica::value)){ \
suicide (#value " in method " #method); \
- ACE_THROW (CORBA::NO_RESPONSE ( \
+ ACE_THROW (FAULT_CODE ( \
CORBA::SystemException::_tao_minor_code ( \
TAO_DEFAULT_MINOR_CODE, \
EFAULT), \
@@ -79,7 +83,7 @@ namespace
#define KEVORKIAN_DURING(method) \
if (this->death_pending_ == FT_TEST::TestReplica::BEFORE_REPLY ){\
suicide ("read-only method " #method); \
- ACE_THROW (CORBA::NO_RESPONSE ( \
+ ACE_THROW (FAULT_CODE ( \
CORBA::SystemException::_tao_minor_code ( \
TAO_DEFAULT_MINOR_CODE, \
EFAULT), \
@@ -108,7 +112,7 @@ FT_TestReplica_i::~FT_TestReplica_i ()
void FT_TestReplica_i::suicide(const char * note)
{
- std::cout << name_.c_str() << '@' << this->factory_->location() << '#' << this->factory_id_ << " Simulate fault: " << note << std::endl;
+ std::cout << name_.c_str() << '@' << this->factory_->location() << '#' << this->factory_id_ << " Simulate FAULT_CODE fault: " << note << std::endl;
// Tell the poa we aren't accepting future calls
this->poa_->deactivate_object (this->object_id_.in ()
@@ -294,7 +298,8 @@ void FT_TestReplica_i::set_state (const FT::State & s)
void FT_TestReplica_i::tao_update_object_group (
const char * iogr,
- PortableGroup::ObjectGroupRefVersion version
+ PortableGroup::ObjectGroupRefVersion version,
+ CORBA::Boolean is_primary
ACE_ENV_ARG_DECL
)
ACE_THROW_SPEC ((CORBA::SystemException))
diff --git a/TAO/orbsvcs/tests/FT_App/FT_TestReplica_i.h b/TAO/orbsvcs/tests/FT_App/FT_TestReplica_i.h
index 84ddcdb7869..06f3b16ca53 100644
--- a/TAO/orbsvcs/tests/FT_App/FT_TestReplica_i.h
+++ b/TAO/orbsvcs/tests/FT_App/FT_TestReplica_i.h
@@ -143,7 +143,8 @@ private:
virtual void tao_update_object_group (
const char * iogr,
- PortableGroup::ObjectGroupRefVersion version
+ PortableGroup::ObjectGroupRefVersion version,
+ CORBA::Boolean is_primary
ACE_ENV_ARG_DECL
)
ACE_THROW_SPEC ((CORBA::SystemException));