diff options
author | Phil Mesnier <mesnier_p@ociweb.com> | 2013-05-20 16:42:50 +0000 |
---|---|---|
committer | Phil Mesnier <mesnier_p@ociweb.com> | 2013-05-20 16:42:50 +0000 |
commit | 22683126a750940b3fbc249a2ea051177625686c (patch) | |
tree | 76caaf3f641b36ba11cdc91eece7fb8a873e9fce | |
parent | 7133bb93aa34285800a21ced999f0e30ec8f8872 (diff) | |
download | ATCD-22683126a750940b3fbc249a2ea051177625686c.tar.gz |
Mon May 20 16:41:51 UTC 2013 Phil Mesnier <mesnier_p@ociweb.com>
-rw-r--r-- | TAO/ChangeLog | 8 | ||||
-rw-r--r-- | TAO/orbsvcs/ImplRepo_Service/AsyncListManager.cpp | 2 | ||||
-rw-r--r-- | TAO/orbsvcs/ImplRepo_Service/LiveCheck.cpp | 56 | ||||
-rw-r--r-- | TAO/orbsvcs/ImplRepo_Service/LiveCheck.h | 16 |
4 files changed, 70 insertions, 12 deletions
diff --git a/TAO/ChangeLog b/TAO/ChangeLog index da0d6e6c3c8..a27c8f17fbc 100644 --- a/TAO/ChangeLog +++ b/TAO/ChangeLog @@ -1,3 +1,11 @@ +Mon May 20 16:41:51 UTC 2013 Phil Mesnier <mesnier_p@ociweb.com> + + * orbsvcs/ImplRepo_Service/AsyncListManager.cpp: + * orbsvcs/ImplRepo_Service/LiveCheck.h: + * orbsvcs/ImplRepo_Service/LiveCheck.cpp: + + Add and improve debugging output. + Mon May 20 13:52:00 UTC 2013 Simon Massey <simon dot massey at prismtech dot com> * orbsvcs/tests/miop/McastLocal/run_test.pl: diff --git a/TAO/orbsvcs/ImplRepo_Service/AsyncListManager.cpp b/TAO/orbsvcs/ImplRepo_Service/AsyncListManager.cpp index f57435ea440..ad4bf4347eb 100644 --- a/TAO/orbsvcs/ImplRepo_Service/AsyncListManager.cpp +++ b/TAO/orbsvcs/ImplRepo_Service/AsyncListManager.cpp @@ -283,7 +283,7 @@ ListLiveListener::~ListLiveListener (void) bool ListLiveListener::start (void) { - bool rtn = this->pinger_.add_listener (this); + bool rtn = this->pinger_.add_poll_listener (this); return rtn; } diff --git a/TAO/orbsvcs/ImplRepo_Service/LiveCheck.cpp b/TAO/orbsvcs/ImplRepo_Service/LiveCheck.cpp index 58bd7c99ae3..99dfdd7f6f9 100644 --- a/TAO/orbsvcs/ImplRepo_Service/LiveCheck.cpp +++ b/TAO/orbsvcs/ImplRepo_Service/LiveCheck.cpp @@ -55,6 +55,28 @@ LiveListener::_remove_ref (void) const int LiveEntry::reping_msec_[] = {10, 100, 500, 1000, 1000, 2000, 2000, 5000, 5000}; int LiveEntry::reping_limit_ = sizeof (LiveEntry::reping_msec_) / sizeof (int); +const ACE_TCHAR * +LiveEntry::status_name (LiveStatus s) +{ + switch (s) + { + case LS_UNKNOWN: + return ACE_TEXT ("UNKNOWN"); + case LS_PING_AWAY: + return ACE_TEXT ("PING_AWAY"); + case LS_DEAD: + return ACE_TEXT ("DEAD"); + case LS_ALIVE: + return ACE_TEXT ("ALIVE"); + case LS_TRANSIENT: + return ACE_TEXT ("TRANSIENT"); + case LS_LAST_TRANSIENT: + return ACE_TEXT ("LAST_TRANSIENT"); + case LS_TIMEDOUT: + return ACE_TEXT ("TIMEDOUT"); + } +} + void LiveEntry::set_reping_limit (int max) { @@ -194,8 +216,10 @@ LiveEntry::status (LiveStatus l) if (ImR_Locator_i::debug () > 2) { ORBSVCS_DEBUG ((LM_DEBUG, - ACE_TEXT ("(%P|%t) LiveEntry::status change, server = %C status = %d\n"), - this->server_.c_str(), this->liveliness_)); + ACE_TEXT ("(%P|%t) LiveEntry::status change, ") + ACE_TEXT ("server = %C status = %s\n"), + this->server_.c_str(), + status_name (this->liveliness_))); } this->owner_->schedule_ping (this); } @@ -222,8 +246,8 @@ LiveEntry::validate_ping (bool &want_reping, ACE_Time_Value& next) { ORBSVCS_DEBUG ((LM_DEBUG, ACE_TEXT ("(%P|%t) LiveEntry::validate_ping, status ") - ACE_TEXT ("= %d, listeners = %d server %C\n"), - this->liveliness_, this->listeners_.size (), + ACE_TEXT ("= %s, listeners = %d server %C\n"), + status_name (this->liveliness_), this->listeners_.size (), this->server_.c_str())); } return false; @@ -242,10 +266,10 @@ LiveEntry::validate_ping (bool &want_reping, ACE_Time_Value& next) { ORBSVCS_DEBUG ((LM_DEBUG, ACE_TEXT ("(%P|%t) LiveEntry::validate_ping, ") - ACE_TEXT ("status = %d, listeners = %d, ") + ACE_TEXT ("status = %s, listeners = %d, ") ACE_TEXT ("diff = %d,%d, msec = %d ") ACE_TEXT ("server %C\n"), - this->liveliness_, this->listeners_.size (), + status_name (this->liveliness_), this->listeners_.size (), diff.sec(), diff.usec(), msec, this->server_.c_str())); } @@ -315,11 +339,23 @@ LiveEntry::do_ping (PortableServer::POA_ptr poa) try { this->ref_->sendc_ping (cb.in()); + if (ImR_Locator_i::debug () > 3) + { + ORBSVCS_DEBUG ((LM_DEBUG, + ACE_TEXT ("(%P|%t) LiveEntry::do_ping, ") + ACE_TEXT ("sendc_ping returned OK\n"))); + } ACE_GUARD (TAO_SYNCH_MUTEX, mon, this->lock_); this->liveliness_ = LS_PING_AWAY; } - catch (CORBA::Exception &) + catch (CORBA::Exception &ex) { + if (ImR_Locator_i::debug () > 3) + { + ORBSVCS_DEBUG ((LM_DEBUG, + ACE_TEXT ("(%P|%t) LiveEntry::do_ping, ") + ACE_TEXT ("sendc_ping threw %C\n"), ex._name())); + } this->status (LS_DEAD); } } @@ -469,7 +505,7 @@ LiveCheck::handle_timeout (const ACE_Time_Value &, } else { - if (ImR_Locator_i::debug () > 5) + if (ImR_Locator_i::debug () > 4) { ORBSVCS_DEBUG ((LM_DEBUG, ACE_TEXT ("(%P|%t) LiveCheck::handle_timeout(%d)") @@ -509,8 +545,8 @@ LiveCheck::handle_timeout (const ACE_Time_Value &, { ORBSVCS_DEBUG ((LM_DEBUG, ACE_TEXT ("(%P|%t) LiveCheck::handle_timeout(%d),") - ACE_TEXT (" want reping, delay = %d,%d\n"), - token, delay.sec(), delay.usec())); + ACE_TEXT (" want reping(%d), delay = %d,%d\n"), + token, this->token_, delay.sec(), delay.usec())); } this->reactor()->schedule_timer (this, reinterpret_cast<void *>(this->token_), delay); } diff --git a/TAO/orbsvcs/ImplRepo_Service/LiveCheck.h b/TAO/orbsvcs/ImplRepo_Service/LiveCheck.h index da5195b9e79..005ae3a3005 100644 --- a/TAO/orbsvcs/ImplRepo_Service/LiveCheck.h +++ b/TAO/orbsvcs/ImplRepo_Service/LiveCheck.h @@ -26,6 +26,7 @@ #include "tao/Intrusive_Ref_Count_Handle_T.h" class LiveCheck; +class LiveEntry; //--------------------------------------------------------------------------- /* @@ -34,9 +35,11 @@ class LiveCheck; * @brief indication of the known condition of a target server * * LS_UNKNOWN - The server hasn't yet been pinged + * LS_PING_AWAY - A ping request has been issued, waiting for reply * LS_DEAD - The ping failed for reasons other than POA Activation * LS_ALIVE - The server positively acknowledged a ping * LS_TRANSIENT - The server connected, but acively raised a transient + * LS_LAST_TRANSIENT - The maximum number of retries is reached * LS_TIMEDOUT - The server connected, but never returned any result. */ enum LiveStatus { @@ -71,6 +74,12 @@ class Locator_Export LiveListener virtual ~LiveListener (void); + /// sets the initial status volue, set by entry during an add_listener call + void entry (const LiveEntry *entry); + + /// Query the status of the associated entry + LiveStatus status (void) const; + /// called by the asynch ping receiver when a reply or an exception /// is received. Returns true if finished listening virtual bool status_changed (LiveStatus status) = 0; @@ -81,9 +90,11 @@ class Locator_Export LiveListener LiveListener *_add_ref (void); void _remove_ref (void); - private: + protected: ACE_CString server_; + const LiveEntry *entry_; + private: int refcount_; TAO_SYNCH_MUTEX lock_; }; @@ -115,6 +126,9 @@ class Locator_Export LiveEntry void status (LiveStatus l); void reset_status (void); + /// the current state value as text + static const char *status_name (LiveStatus s); + void update_listeners (void); bool validate_ping (bool &want_reping, ACE_Time_Value &next); void do_ping (PortableServer::POA_ptr poa); |