#include <Transport_Queueing_Strategies.h>
Inheritance diagram for TAO::Eager_Transport_Queueing_Strategy:
Public Member Functions | |
virtual bool | must_queue (bool queue_empty) const |
Return true if a message must be queued. | |
virtual bool | buffering_constraints_reached (TAO_Stub *stub, size_t msg_count, size_t total_bytes, bool &must_flush, const ACE_Time_Value ¤t_deadline, bool &set_timer, ACE_Time_Value &new_deadline) const |
Return true if it is time to start. | |
Private Member Functions | |
bool | timer_check (const TAO::BufferingConstraint &buffering_constraint, const ACE_Time_Value ¤t_deadline, bool &set_timer, ACE_Time_Value &new_deadline) const |
ACE_Time_Value | time_conversion (const TimeBase::TimeT &time) const |
Convert from standard CORBA time units to seconds/microseconds. |
|
Return true if it is time to start.
Implements TAO::Transport_Queueing_Strategy. Definition at line 81 of file Transport_Queueing_Strategies.cpp. References TAO::BufferingConstraintPolicy::_narrow(), ACE_BIT_ENABLED, ACE_CATCHANY, ACE_ENDTRY, ACE_ENV_ARG_PARAMETER, ACE_TRY_CHECK, ACE_TRY_NEW_ENV, TAO::BufferingConstraintPolicy_var, TAO_Buffering_Constraint_Policy::get_buffering_constraint(), TAO_Stub::get_cached_policy(), TAO_Objref_Var_T< T >::in(), TAO::BufferingConstraint::message_bytes, TAO::BufferingConstraint::message_count, TAO::BufferingConstraint::mode, CORBA::Policy_var, TAO_CACHED_POLICY_BUFFERING_CONSTRAINT, and timer_check().
00089 { 00090 must_flush = false; 00091 set_timer = false; 00092 00093 TAO_Buffering_Constraint_Policy *buffering_constraint_policy = 0; 00094 00095 ACE_TRY_NEW_ENV 00096 { 00097 CORBA::Policy_var bcp_policy = 00098 stub->get_cached_policy (TAO_CACHED_POLICY_BUFFERING_CONSTRAINT 00099 ACE_ENV_ARG_PARAMETER); 00100 ACE_TRY_CHECK; 00101 00102 TAO::BufferingConstraintPolicy_var bcp = 00103 TAO::BufferingConstraintPolicy::_narrow (bcp_policy.in () 00104 ACE_ENV_ARG_PARAMETER); 00105 ACE_TRY_CHECK; 00106 00107 buffering_constraint_policy = 00108 dynamic_cast<TAO_Buffering_Constraint_Policy *> (bcp.in ()); 00109 00110 if (buffering_constraint_policy == 0) 00111 { 00112 return true; 00113 } 00114 } 00115 ACE_CATCHANY 00116 { 00117 return true; 00118 } 00119 ACE_ENDTRY; 00120 00121 TAO::BufferingConstraint buffering_constraint; 00122 buffering_constraint_policy->get_buffering_constraint (buffering_constraint); 00123 00124 if (buffering_constraint.mode == TAO::BUFFER_FLUSH) 00125 { 00126 must_flush = true; 00127 return true; 00128 } 00129 00130 bool constraints_reached = false; 00131 00132 if (ACE_BIT_ENABLED (buffering_constraint.mode, 00133 TAO::BUFFER_MESSAGE_COUNT) 00134 && msg_count >= buffering_constraint.message_count) 00135 { 00136 constraints_reached = true; 00137 } 00138 00139 if (ACE_BIT_ENABLED (buffering_constraint.mode, 00140 TAO::BUFFER_MESSAGE_BYTES) 00141 && total_bytes >= buffering_constraint.message_bytes) 00142 { 00143 constraints_reached = true; 00144 } 00145 00146 if (this->timer_check (buffering_constraint, 00147 current_deadline, 00148 set_timer, 00149 new_deadline)) 00150 { 00151 constraints_reached = true; 00152 } 00153 00154 return constraints_reached; 00155 } |
|
Return true if a message must be queued.
Implements TAO::Transport_Queueing_Strategy. Reimplemented in TAO::Delayed_Transport_Queueing_Strategy. Definition at line 75 of file Transport_Queueing_Strategies.cpp.
00076 { 00077 return true; 00078 } |
|
Convert from standard CORBA time units to seconds/microseconds.
Definition at line 209 of file Transport_Queueing_Strategies.cpp. References ACE_Time_Value, ACE_U64_TO_U32, and TimeBase::TimeT. Referenced by timer_check().
00211 { 00212 TimeBase::TimeT seconds = time / 10000000u; 00213 TimeBase::TimeT microseconds = (time % 10000000u) / 10; 00214 return ACE_Time_Value (ACE_U64_TO_U32 (seconds), 00215 ACE_U64_TO_U32 (microseconds)); 00216 } |
|
Definition at line 158 of file Transport_Queueing_Strategies.cpp. References ACE_BIT_ENABLED, ACE_DEBUG, ACE_OS::gettimeofday(), LM_DEBUG, TAO::BufferingConstraint::mode, ACE_Time_Value::msec(), TAO_debug_level, time_conversion(), and TAO::BufferingConstraint::timeout. Referenced by buffering_constraints_reached().
00163 { 00164 set_timer = false; 00165 00166 if (!ACE_BIT_ENABLED (buffering_constraint.mode, 00167 TAO::BUFFER_TIMEOUT)) 00168 { 00169 return false; 00170 } 00171 00172 // Compute the next deadline... 00173 ACE_Time_Value now = ACE_OS::gettimeofday (); 00174 ACE_Time_Value timeout = 00175 this->time_conversion (buffering_constraint.timeout); 00176 new_deadline = now + timeout; 00177 00178 // Check if the new deadline is more stringent, or if the deadline 00179 // has expired and thus must be reset anyway. 00180 if (current_deadline > new_deadline 00181 || current_deadline < now) 00182 { 00183 set_timer = true; 00184 } 00185 00186 // ... if there is no deadline we don't want to schedule output (the 00187 // deadline will be set because set_timer is set to 1 in that case). 00188 // If there is a deadline but but it has not been reached, we 00189 // don't want to schedule any output either... 00190 if (current_deadline == ACE_Time_Value::zero 00191 || current_deadline >= now) 00192 { 00193 return false; 00194 } 00195 00196 if (TAO_debug_level > 6) 00197 { 00198 ACE_DEBUG ((LM_DEBUG, 00199 "TAO (%P|%t) - TAO_Eager_Buffering_Sync_Strategy::timer_check, " 00200 "Now = %u, Current = %u, New = %u\n", 00201 now.msec (), current_deadline.msec (), 00202 new_deadline.msec ())); 00203 } 00204 00205 return true; 00206 } |