diff options
author | stanleyk <stanleyk@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2013-02-18 22:59:03 +0000 |
---|---|---|
committer | stanleyk <stanleyk@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2013-02-18 22:59:03 +0000 |
commit | 76debafe81ddd5a8e701d15986289bdd5fd5c935 (patch) | |
tree | fd034f75bed5ff34d2b6687f047c7d87651fb726 /TAO/orbsvcs | |
parent | 46fa815edd399a93817b7bc620c1a120ca84d249 (diff) | |
download | ATCD-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')
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, |