summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs
diff options
context:
space:
mode:
authorstanleyk <stanleyk@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2013-02-18 22:59:03 +0000
committerstanleyk <stanleyk@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2013-02-18 22:59:03 +0000
commit76debafe81ddd5a8e701d15986289bdd5fd5c935 (patch)
treefd034f75bed5ff34d2b6687f047c7d87651fb726 /TAO/orbsvcs
parent46fa815edd399a93817b7bc620c1a120ca84d249 (diff)
downloadATCD-76debafe81ddd5a8e701d15986289bdd5fd5c935.tar.gz
Added checks for file status in FT_Storable abstraction. Updated object group creation to prevent adding same object group multiple times.
Diffstat (limited to 'TAO/orbsvcs')
-rw-r--r--TAO/orbsvcs/orbsvcs/Naming/FaultTolerant/FT_Naming_Manager.cpp10
-rw-r--r--TAO/orbsvcs/orbsvcs/Naming/Storable_Naming_Context.cpp4
-rw-r--r--TAO/orbsvcs/orbsvcs/Naming/Storable_Naming_Context.h2
-rw-r--r--TAO/orbsvcs/orbsvcs/PortableGroup/PG_Group_List_Store.cpp5
-rw-r--r--TAO/orbsvcs/orbsvcs/PortableGroup/PG_Object_Group_Storable.cpp5
-rw-r--r--TAO/orbsvcs/tests/FT_Naming/FaultTolerant/LB_server.cpp42
-rw-r--r--TAO/orbsvcs/tests/FT_Naming/FaultTolerant/LB_server.h8
-rwxr-xr-xTAO/orbsvcs/tests/FT_Naming/FaultTolerant/run_failover_test.pl3
-rw-r--r--TAO/orbsvcs/tests/FT_Naming/FaultTolerant/server.cpp18
9 files changed, 83 insertions, 14 deletions
diff --git a/TAO/orbsvcs/orbsvcs/Naming/FaultTolerant/FT_Naming_Manager.cpp b/TAO/orbsvcs/orbsvcs/Naming/FaultTolerant/FT_Naming_Manager.cpp
index 96eb494c816..c83526acd57 100644
--- a/TAO/orbsvcs/orbsvcs/Naming/FaultTolerant/FT_Naming_Manager.cpp
+++ b/TAO/orbsvcs/orbsvcs/Naming/FaultTolerant/FT_Naming_Manager.cpp
@@ -91,7 +91,15 @@ TAO_FT_Naming_Manager::create_object_group (
::FT_Naming::LoadBalancingStrategyValue lb_strategy,
const ::PortableGroup::Criteria & the_criteria)
{
- // The when creating the object group, it starts as a generic
+ // Make sure the object group does not already exist.
+ TAO::PG_Object_Group* group;
+ if (this->group_factory_.find_group_with_name (group_name,
+ group))
+ {
+ throw PortableGroup::ObjectNotCreated ();
+ }
+
+ // When creating the object group, it starts as a generic
// CORBA Object. It will become the type of the first added
// member.
const char * type_id = "IDL:omg.org:CORBA/Object:1.0";
diff --git a/TAO/orbsvcs/orbsvcs/Naming/Storable_Naming_Context.cpp b/TAO/orbsvcs/orbsvcs/Naming/Storable_Naming_Context.cpp
index cdd9b95802a..65c5dbd7fef 100644
--- a/TAO/orbsvcs/orbsvcs/Naming/Storable_Naming_Context.cpp
+++ b/TAO/orbsvcs/orbsvcs/Naming/Storable_Naming_Context.cpp
@@ -325,7 +325,7 @@ File_Open_Lock_and_Check::get_object_last_changed ()
return context_->last_changed_;
}
-void
+int
TAO_Storable_Naming_Context::
File_Open_Lock_and_Check::load_from_stream ()
{
@@ -344,7 +344,7 @@ File_Open_Lock_and_Check::load_from_stream ()
}
// and build a new one from disk
- context_->load_map (this->peer());
+ return context_->load_map (this->peer());
}
bool
diff --git a/TAO/orbsvcs/orbsvcs/Naming/Storable_Naming_Context.h b/TAO/orbsvcs/orbsvcs/Naming/Storable_Naming_Context.h
index 9d28d4d4c31..85a60cb9beb 100644
--- a/TAO/orbsvcs/orbsvcs/Naming/Storable_Naming_Context.h
+++ b/TAO/orbsvcs/orbsvcs/Naming/Storable_Naming_Context.h
@@ -457,7 +457,7 @@ protected:
/// file.
virtual time_t get_object_last_changed ();
- virtual void load_from_stream ();
+ virtual int load_from_stream ();
virtual bool is_loaded_from_stream ();
diff --git a/TAO/orbsvcs/orbsvcs/PortableGroup/PG_Group_List_Store.cpp b/TAO/orbsvcs/orbsvcs/PortableGroup/PG_Group_List_Store.cpp
index 36ba5831674..53b2438088b 100644
--- a/TAO/orbsvcs/orbsvcs/PortableGroup/PG_Group_List_Store.cpp
+++ b/TAO/orbsvcs/orbsvcs/PortableGroup/PG_Group_List_Store.cpp
@@ -39,7 +39,7 @@ namespace TAO
virtual void mark_object_current ();
- virtual void load_from_stream ();
+ virtual int load_from_stream ();
virtual bool is_loaded_from_stream ();
@@ -99,12 +99,13 @@ TAO::PG_Group_List_Store_File_Guard::mark_object_current ()
this->set_object_last_changed (fl_->last_changed ());
}
-void
+int
TAO::PG_Group_List_Store_File_Guard::load_from_stream ()
{
list_store_.read (this->peer ());
list_store_.loaded_from_stream_ = true;
this->peer ().rewind ();
+ return this->peer ().good ();
}
bool
diff --git a/TAO/orbsvcs/orbsvcs/PortableGroup/PG_Object_Group_Storable.cpp b/TAO/orbsvcs/orbsvcs/PortableGroup/PG_Object_Group_Storable.cpp
index 946ecae9632..92f7f741467 100644
--- a/TAO/orbsvcs/orbsvcs/PortableGroup/PG_Object_Group_Storable.cpp
+++ b/TAO/orbsvcs/orbsvcs/PortableGroup/PG_Object_Group_Storable.cpp
@@ -56,7 +56,7 @@ namespace TAO
/// file to which it was persisted.
virtual void mark_object_current ();
- virtual void load_from_stream ();
+ virtual int load_from_stream ();
virtual bool is_loaded_from_stream ();
@@ -119,11 +119,12 @@ TAO::Object_Group_File_Guard::mark_object_current ()
TAO::Storable_File_Guard::mark_object_current ();
}
-void
+int
TAO::Object_Group_File_Guard::load_from_stream ()
{
object_group_.read (this->peer ());
object_group_.loaded_from_stream_ = true;
+ return this->peer ().good ();
}
bool
diff --git a/TAO/orbsvcs/tests/FT_Naming/FaultTolerant/LB_server.cpp b/TAO/orbsvcs/tests/FT_Naming/FaultTolerant/LB_server.cpp
index db73625f6b3..436135bc2d8 100644
--- a/TAO/orbsvcs/tests/FT_Naming/FaultTolerant/LB_server.cpp
+++ b/TAO/orbsvcs/tests/FT_Naming/FaultTolerant/LB_server.cpp
@@ -152,7 +152,7 @@ LB_server::start_orb_and_poa (void)
}
int
-LB_server::create_object_group (void)
+LB_server::create_object_group (const char *group_name)
{
try
{
@@ -173,8 +173,11 @@ LB_server::create_object_group (void)
PortableGroup::MEMB_APP_CTRL;
mem_style.val <<= msv;
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_TEXT ("(%P|%t) LB_server - creating the object group\n")));
+
this->object_group_ = this->naming_manager_->create_object_group (
- "BasicGroup",
+ group_name,
FT_Naming::ROUND_ROBIN,
criteria);
@@ -183,6 +186,13 @@ LB_server::create_object_group (void)
this->write_ior_to_file (ior.in ());
}
+ catch (const PortableGroup::ObjectNotCreated&)
+ {
+ this->object_group_ = this->naming_manager_->get_object_group_ref_from_name (group_name);
+ ACE_DEBUG ((LM_DEBUG,
+ "(%P|%t) LB_server - object group already exists\n"));
+ return 1;
+ }
catch (const CORBA::Exception& ex)
{
ex._tao_print_exception (
@@ -211,6 +221,11 @@ LB_server::register_servant (Basic *servant, const char *loc)
location,
basic.in ());
}
+ catch (const PortableGroup::ObjectNotAdded& )
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "(%P|%t) Member was already added previously.\n"));
+ }
catch (const CORBA::Exception& ex)
{
ex._tao_print_exception (
@@ -221,6 +236,29 @@ LB_server::register_servant (Basic *servant, const char *loc)
return 0;
}
+int
+LB_server::remove_servant (const char *loc)
+{
+ PortableGroup::Location location (1);
+ location.length (1);
+
+ location[0].id = CORBA::string_dup (loc);
+
+ try {
+ this->naming_manager_->remove_member (this->object_group_.in (),
+ location);
+ }
+ catch (const CORBA::Exception& ex)
+ {
+ ex._tao_print_exception (
+ ACE_TEXT ("Exception raised while removing servant"));
+ return -1;
+ }
+
+ return 0;
+
+}
+
TAO_Naming_Client&
LB_server::name_svc ()
{
diff --git a/TAO/orbsvcs/tests/FT_Naming/FaultTolerant/LB_server.h b/TAO/orbsvcs/tests/FT_Naming/FaultTolerant/LB_server.h
index d6df78c52f8..cbf06349701 100644
--- a/TAO/orbsvcs/tests/FT_Naming/FaultTolerant/LB_server.h
+++ b/TAO/orbsvcs/tests/FT_Naming/FaultTolerant/LB_server.h
@@ -51,11 +51,17 @@ public:
int init (int argc, ACE_TCHAR **argv);
/// Create the Object Group using the Load Manager Reference.
- int create_object_group (void);
+ /// Returns 0 on successful creation. Returns 1 if object
+ /// group already exists. Returns -1 if object group cannot
+ /// be created for some reason.
+ int create_object_group (const char *group_name);
/// register the servants with the object group.
int register_servant (Basic *servant, const char *loc);
+ /// remove a servant from the object group.
+ int remove_servant (const char *loc);
+
/// obtain the name service facade
TAO_Naming_Client& name_svc ();
diff --git a/TAO/orbsvcs/tests/FT_Naming/FaultTolerant/run_failover_test.pl b/TAO/orbsvcs/tests/FT_Naming/FaultTolerant/run_failover_test.pl
index c76c2cb7f19..9df036e82bb 100755
--- a/TAO/orbsvcs/tests/FT_Naming/FaultTolerant/run_failover_test.pl
+++ b/TAO/orbsvcs/tests/FT_Naming/FaultTolerant/run_failover_test.pl
@@ -325,6 +325,9 @@ sub failover_test()
my $client_prog = "$startdir/client";
+ print STDERR "$tao_ft_naming $ns1_args\n";
+ print STDERR "$tao_ft_naming $ns2_args\n";
+
$NS1 = $server->CreateProcess ($tao_ft_naming, $ns1_args);
$NS2 = $server->CreateProcess ($tao_ft_naming, $ns2_args);
$CL = $client->CreateProcess ($client_prog, $client_args);
diff --git a/TAO/orbsvcs/tests/FT_Naming/FaultTolerant/server.cpp b/TAO/orbsvcs/tests/FT_Naming/FaultTolerant/server.cpp
index f1a0642ed33..ce6a9198bd2 100644
--- a/TAO/orbsvcs/tests/FT_Naming/FaultTolerant/server.cpp
+++ b/TAO/orbsvcs/tests/FT_Naming/FaultTolerant/server.cpp
@@ -8,6 +8,7 @@ ACE_TMAIN(int argc, ACE_TCHAR *argv[])
{
try
{
+ const char *group_name = "BasicGroup";
const char *location1 = "location1";
const char *location2 = "location2";
const char *location3 = "location3";
@@ -20,9 +21,14 @@ ACE_TMAIN(int argc, ACE_TCHAR *argv[])
if (lb_server.start_orb_and_poa () != 0)
return 1;
- if (lb_server.create_object_group () != 0)
- return 1;
-
+ // Either the object group was created or it existed
+ // previously.
+ if (lb_server.create_object_group (group_name) == -1)
+ {
+ ACE_ERROR ((LM_ERROR,
+ "(%P|%t) server - Unable to create the object group\n"));
+ return 1;
+ }
CosNaming::Name name (1);
name.length (1);
name[0].id = CORBA::string_dup ("basic_name");
@@ -102,6 +108,12 @@ ACE_TMAIN(int argc, ACE_TCHAR *argv[])
return 1;
}
+ // Remove one of the servants.
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_TEXT ("(%P|%t) server - removing servant at location6\n")));
+ if (lb_server.remove_servant (location6) == -1)
+ return 1;
+
lb_server.orb ()->run ();
ACE_DEBUG ((LM_DEBUG,