summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwilson_d <wilson_d@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2003-11-03 22:17:17 +0000
committerwilson_d <wilson_d@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2003-11-03 22:17:17 +0000
commitc21ce7ba886610f3e1d93eefe201bb4e13dfe513 (patch)
tree0ff11163ec66253865429e40d6144f3c8eba2c51
parent52a596e86ef0fafe76783f2ac975606b6ca3f583 (diff)
downloadATCD-c21ce7ba886610f3e1d93eefe201bb4e13dfe513.tar.gz
ChangeLogTag: Mon Nov 3 16:09:59 2003 Dale Wilson <wilson_d@ociweb.com>
-rw-r--r--TAO/ChangeLog9
-rw-r--r--TAO/orbsvcs/orbsvcs/FaultTolerance/FT_ServerRequest_Interceptor.cpp86
-rw-r--r--TAO/orbsvcs/orbsvcs/FaultTolerance/FT_ServerRequest_Interceptor.h5
3 files changed, 74 insertions, 26 deletions
diff --git a/TAO/ChangeLog b/TAO/ChangeLog
index bdbfde06c10..28809abfb51 100644
--- a/TAO/ChangeLog
+++ b/TAO/ChangeLog
@@ -1,3 +1,12 @@
+Mon Nov 3 16:09:59 2003 Dale Wilson <wilson_d@ociweb.com>
+
+ * orbsvcs/orbsvcs/FaultTolerance/FT_ServerRequest_Interceptor.h:
+ * orbsvcs/orbsvcs/FaultTolerance/FT_ServerRequest_Interceptor.cpp:
+ Don't check IOGR on tao_update_object_group.
+ Find IORManipulator in prep. for fixing is_primary_.
+
+ These changes were made in the oci_haft branch.
+
Mon Nov 3 10:17:06 2003 Dale Wilson <wilson_d@ociweb.com>
* orbsvcs/FT_ReplicationManager/FT_ReplicationManager.cpp:
diff --git a/TAO/orbsvcs/orbsvcs/FaultTolerance/FT_ServerRequest_Interceptor.cpp b/TAO/orbsvcs/orbsvcs/FaultTolerance/FT_ServerRequest_Interceptor.cpp
index a46d10d98ac..70cf58ed390 100644
--- a/TAO/orbsvcs/orbsvcs/FaultTolerance/FT_ServerRequest_Interceptor.cpp
+++ b/TAO/orbsvcs/orbsvcs/FaultTolerance/FT_ServerRequest_Interceptor.cpp
@@ -51,9 +51,20 @@ namespace TAO
ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
- this->check_iogr_version (sc.in ()
+ ////////////////////////////////////////////////
+ // Don't check IOGR version on the pseudo method
+ // that pushes a new IOGR
+ CORBA::String_var op =
+ ri->operation (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ if (ACE_OS::strcmp (op.in (),
+ PortableGroup::TAO_UPDATE_OBJECT_GROUP_METHOD_NAME) != 0)
+ {
+ this->check_iogr_version (sc.in ()
ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
+ ACE_TRY_CHECK;
+ }
}
ACE_CATCH (CORBA::BAD_PARAM, ex)
{
@@ -82,7 +93,7 @@ namespace TAO
ACE_CHECK;
if (ACE_OS::strcmp (op.in (),
- "tao_update_object_group") == 0)
+ PortableGroup::TAO_UPDATE_OBJECT_GROUP_METHOD_NAME) == 0)
{
ACE_DEBUG ((LM_DEBUG,
"FT_ServerRequestInterceptor updating IOGR.\n"
@@ -145,28 +156,30 @@ namespace TAO
ACE_THROW (CORBA::BAD_PARAM (CORBA::OMGVMCID | 28,
CORBA::COMPLETED_NO));
-
if (fgvsc.object_group_ref_version >
this->object_group_ref_version_)
{
- // @@ Dale, could you please make this a warning. Add TAO_debug_level
- // around this.
- // Further pass in a operation name to this method and make a check here.
- ACE_ERROR ((LM_ERROR,
- "TAO-FT (%P|%t) - Wrong version information "
- "within the interceptor [%u | %u] \n",
- ACE_static_cast( unsigned, fgvsc.object_group_ref_version ),
- ACE_static_cast( unsigned, this->object_group_ref_version_)
- ));
+ if (TAO_debug_level > 0)
+ {
+ ACE_ERROR ((LM_ERROR,
+ "TAO-FT (%P|%t) - Wrong version information "
+ "within the interceptor [%u | %u] \n",
+ ACE_static_cast( unsigned, fgvsc.object_group_ref_version ),
+ ACE_static_cast( unsigned, this->object_group_ref_version_)
+ ));
+ }
}
else if (fgvsc.object_group_ref_version <
this->object_group_ref_version_)
{
- ACE_DEBUG ((LM_DEBUG,
- "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_)
- ));
+ if (TAO_debug_level > 0)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "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_)
+ ));
+ }
// Notice that this is a permanent forward.
ACE_THROW (PortableInterceptor::ForwardRequest (
this->iogr_,
@@ -176,12 +189,13 @@ namespace TAO
this->object_group_ref_version_) &&
!this->is_primary_)
{
-
- ACE_DEBUG ((LM_DEBUG,
- "Request arrived at backup replica. Throwing TRANSIENT.[%u] \n",
- ACE_static_cast( unsigned, this->object_group_ref_version_)
- ));
-
+ if (TAO_debug_level > 0)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "Request arrived at backup replica. Throwing TRANSIENT.[%u] \n",
+ ACE_static_cast( unsigned, this->object_group_ref_version_)
+ ));
+ }
ACE_THROW (CORBA::TRANSIENT (
CORBA::SystemException::_tao_minor_code (
TAO_DEFAULT_MINOR_CODE,
@@ -215,6 +229,15 @@ namespace TAO
orb_id.in ()
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
+
+ // Get an object reference for the ORB's IORManipulation object.
+ CORBA::Object_var iorm_obj = this->orb_->resolve_initial_references (
+ TAO_OBJID_IORMANIPULATION ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+ this->iorm_ = TAO_IOP::TAO_IOR_Manipulation::_narrow (
+ iorm_obj.in () ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+
}
Dynamic::ParameterList_var param =
@@ -224,10 +247,8 @@ namespace TAO
if (param->length () != 2)
ACE_THROW (CORBA::TRANSIENT ());
-
const char *str = 0;
-
(*param)[0].argument >>= str;
(*param)[1].argument >>= this->object_group_ref_version_;
@@ -239,6 +260,19 @@ namespace TAO
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 4d734c8710c..7bf6a37b7c7 100644
--- a/TAO/orbsvcs/orbsvcs/FaultTolerance/FT_ServerRequest_Interceptor.h
+++ b/TAO/orbsvcs/orbsvcs/FaultTolerance/FT_ServerRequest_Interceptor.h
@@ -24,6 +24,7 @@
#include "tao/LocalObject.h"
#include "tao/PortableInterceptorC.h"
#include "tao/ORB.h"
+#include <tao/IORManipulation/IORC.h>
#if defined(_MSC_VER)
#if (_MSC_VER >= 1200)
@@ -125,6 +126,10 @@ namespace TAO
CORBA::Object_var iogr_;
CORBA::ORB_var orb_;
+
+ // The ORB's IORManipulation object
+ TAO_IOP::TAO_IOR_Manipulation_var iorm_;
+
};
}