class Mongo::Server::RoundTripTimeAverager
@api private
Constants
- RTT_WEIGHT_FACTOR
The weighting factor (alpha) for calculating the average moving round trip time.
Attributes
average_round_trip_time[R]
last_round_trip_time[R]
Public Class Methods
new()
click to toggle source
# File lib/mongo/server/round_trip_time_averager.rb, line 28 def initialize @last_round_trip_time = nil @average_round_trip_time = nil end
Public Instance Methods
measure() { || ... }
click to toggle source
# File lib/mongo/server/round_trip_time_averager.rb, line 36 def measure start = Utils.monotonic_time begin rv = yield rescue Error::SocketError, Error::SocketTimeoutError # If we encountered a network error, the round-trip is not # complete and thus RTT for it does not make sense. raise rescue Error, Error::AuthError => exc # For other errors, RTT is valid. end last_round_trip_time = Utils.monotonic_time - start # If hello fails, we need to return the last round trip time # because it is used in the heartbeat failed SDAM event, # but we must not update the round trip time recorded in the server. unless exc @last_round_trip_time = last_round_trip_time update_average_round_trip_time end if exc raise exc else rv end end
Private Instance Methods
update_average_round_trip_time()
click to toggle source
This method is separate for testing purposes.
# File lib/mongo/server/round_trip_time_averager.rb, line 67 def update_average_round_trip_time @average_round_trip_time = if average_round_trip_time RTT_WEIGHT_FACTOR * last_round_trip_time + (1 - RTT_WEIGHT_FACTOR) * average_round_trip_time else last_round_trip_time end end