123456789_123456789_123456789_123456789_123456789_

Class: Mongo::Server::RoundTripTimeCalculator Private

Do not use. This class is for internal use only.
Relationships & Source Files
Inherits: Object
Defined in: lib/mongo/server/round_trip_time_calculator.rb

Overview

Since:

  • 2.0.0

Constant Summary

Class Method Summary

Instance Attribute Summary

Instance Method Summary

Instance Attribute Details

#average_round_trip_time (readonly)

Since:

  • 2.0.0

[ GitHub ]

  
# File 'lib/mongo/server/round_trip_time_calculator.rb', line 40

attr_reader :last_round_trip_time, :average_round_trip_time, :minimum_round_trip_time

#last_round_trip_time (readonly)

Since:

  • 2.0.0

[ GitHub ]

  
# File 'lib/mongo/server/round_trip_time_calculator.rb', line 40

attr_reader :last_round_trip_time, :average_round_trip_time, :minimum_round_trip_time

#minimum_round_trip_time (readonly)

Since:

  • 2.0.0

[ GitHub ]

  
# File 'lib/mongo/server/round_trip_time_calculator.rb', line 40

attr_reader :last_round_trip_time, :average_round_trip_time, :minimum_round_trip_time

Instance Method Details

#measure

Since:

  • 2.0.0

[ GitHub ]

  
# File 'lib/mongo/server/round_trip_time_calculator.rb', line 42

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 => e
    # For other errors, RTT is valid.
  end
  last_rtt = 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 e
    @last_round_trip_time = last_rtt
    @lock.synchronize do
      update_average_round_trip_time
      update_minimum_round_trip_time
    end
  end

  raise e if e

  rv
end

#update_average_round_trip_time

Since:

  • 2.0.0

[ GitHub ]

  
# File 'lib/mongo/server/round_trip_time_calculator.rb', line 71

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

#update_minimum_round_trip_time

Since:

  • 2.0.0

[ GitHub ]

  
# File 'lib/mongo/server/round_trip_time_calculator.rb', line 79

def update_minimum_round_trip_time
  @rtts.push(last_round_trip_time) unless last_round_trip_time.nil?
  @minimum_round_trip_time = 0 and return if @rtts.size < MIN_SAMPLES

  @rtts.shift if @rtts.size > RTT_SAMPLES_FOR_MINIMUM
  @minimum_round_trip_time = @rtts.compact.min
end