클래스: Mongo::Server::Mongo Private

상속:
객체
  • 객체
모두 표시
확장자:
전달 가능
다음을 포함합니다.
BackgroundThread, Event::Publisher, Loggable
다음에 정의됨:
빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/ 모니터.rb,
빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/ 모니터/connection.rb,
빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/ 모니터/app_metadata.rb

개요

이 클래스는 비공개 API의 일부입니다. 이 클래스는 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

서버의 상태를 최신 상태로 유지하기 위해 hello 명령을 통해 서버 를 주기적으로 폴링하는 작업을 담당합니다.

운전자 가 수행하는 다른 작업을 방해하지 않도록 모두 배경 스레드에서 작동합니다.

이후:

  • 2.0.0

네임스페이스 아래에 정의됨

클래스: AppMetadata, 연결

상수 요약 접기

DEFAULT_HEARTBEAT_INTERVAL =

이 상수는 비공개 API의 일부입니다. 이 상수는 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

서버 상태 새로고침의 기본 간격은 10 초입니다.

이후:

  • 2.0.0

10.동결
MIN_SCAN_INTERVAL =

이 상수는 비공개 API의 일부입니다. 이 상수는 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

강제 서버 스캔 사이의 최소 시간입니다. SDAM 사양의 minHeartbeatFrequeencyMS입니다.

이후:

  • 2.0.0

0.5.동결
RTT_WEIGHT_FACTOR =

이 상수는 비공개 API의 일부입니다. 이 상수는 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

더 이상 사용되지 않습니다.

버전 3.0 에서 제거될 예정입니다.

평균 이동 왕복 시간을 계산하기 위한 가중치 계수(알파)입니다.

이후:

  • 2.0.0

0.2.동결

Loggable에서 포함된 상수

Loggable::prefix

인스턴스 속성 요약 접기

Event::Publisher에 포함된 속성

#event_listeners

인스턴스 메서드 요약 접기

BackgroundThread에 포함된 메서드

# 실행!, # 실행?

Loggable에 포함된 메서드

#log_debug, #log_error, #log_fatal, #log_info, #log_warn, #logger

Event::Publisher에 포함된 메서드

#publish

생성자 세부 정보

#initialize(서버, event_listeners, 모니터링, options = {}) ⇒ Monitor

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

참고:

모니터는 서버 외부에서 직접 인스턴스화해서는 안 됩니다.

새 서버 모니터 를 만듭니다.

예시:

서버 모니터 를 만듭니다.

Mongo::Server::Monitor.new(address, listeners, monitoring)

매개변수:

옵션 해시(options):

  • :connect_timeout (Float)

    모니터링 연결을 설정할 때 사용할 제한 시간(초)입니다.

  • : heartbeat_interval (Float)

    정기적인 서버 확인 사이의 간격입니다.

  • :logger (로거)

    사용할 사용자 지정 로거입니다.

  • :monitor_app_metadata (Mongo::Server::Mongo::AppMetadata)

    정기적인 연결 모니터링 에 사용할 메타데이터 입니다.

  • :push_monitor_app_metadata (Mongo::Server::Mongo::AppMetadata)

    푸시 모니터의 연결에 사용할 메타데이터 입니다.

  • :socket_timeout (Float)

    모니터링 연결에서 작업을 실행할 시간 제한(초)입니다.

이후:

  • 2.0.0



78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# 파일 'build/ruby-driver-v2.19/lib/mongo/server/monitor.rb', 줄 78

def 초기화(서버, event_listeners, 모니터링, 옵션 = {})
  하지 않는 한 모니터링.is_a?(모니터링)
    올리다 ArgumentError, "잘못된 모니터링 유형: #{모니터링.검사}"
  end
  하지 않는 한 옵션[:app_metadata]
    올리다 ArgumentError, '앱 메타데이터 는 필수 항목입니다. '
  end
  하지 않는 한 옵션[:push_monitor_app_metadata]
    올리다 ArgumentError, '푸시 모니터 앱 메타데이터 는 필수'
  end
  @server = 서버
  @event_listeners = event_listeners
  @monitoring = 모니터링
  @options = 옵션.동결
  @mutex = 뮤텍스.신규
  @s담_뮤텍스 = 뮤텍스.신규
  @next_earliest_scan = @next_wanted_scan = 시간.지금
  @update_mutex = 뮤텍스.신규
end

인스턴스 속성 세부 정보

#connectionMongo::Server::Monitor::Connection (읽기 전용)

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

사용할 연결을 반환합니다.

반환합니다:

이후:

  • 2.0.0



103
104
105
# 파일 'build/ruby-driver-v2.19/lib/mongo/server/monitor.rb', 줄 103

def 연결
  @connection
end

#모니터링모니터링 (읽기 전용)

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

모니터링을 반환합니다.

반환합니다:

이후:

  • 2.0.0



125
126
127
# 파일 'build/ruby-driver-v2.19/lib/mongo/server/monitor.rb', 줄 125

def 모니터링
  @monitoring
end

#options해시 (읽기 전용)

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

반환 옵션 서버 옵션입니다.

반환합니다:

  • (해시)

    options 서버 옵션입니다.

이후:

  • 2.0.0



106
107
108
# 파일 'build/ruby-driver-v2.19/lib/mongo/server/monitor.rb', 줄 106

def 옵션
  @options
end

#서버서버 (읽기 전용)

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

서버 이 모니터 가 모니터링 중인 서버 를 반환합니다.

반환합니다:

  • (MongoDB 서버)

    서버 이 모니터 가 모니터링 서버 입니다.

이후:

  • 2.0.0



100
101
102
# 파일 'build/ruby-driver-v2.19/lib/mongo/server/monitor.rb', 줄 100

def 서버
  @server
end

인스턴스 메서드 세부 정보

#create_push_monitor!(topology_version) ⇒ 객체

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

이후:

  • 2.0.0



173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
# 파일 'build/ruby-driver-v2.19/lib/mongo/server/monitor.rb', 줄 173

def create_push_monitor!(topology_version)
  @update_mutex.동기화 do
    만약 @push_monitor && !@push_monitor.실행?
      @push_monitor = nil
    end

    @push_monitor ||= 푸시 모니터.신규(
      self,
      topology_version,
      모니터링,
      **Utils.shallow_symbolize_keys(옵션.merge(
        socket_timeout: heartbeat_interval + 연결.socket_timeout,
        app_metadata: 옵션[:push_monitor_app_metadata],
        check_document: @connection.check_document
      )),
    )
  end
end

#do_work객체

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

서버 를 확인합니다.

이후:

  • 2.0.0



138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
# 파일 'build/ruby-driver-v2.19/lib/mongo/server/monitor.rb', 줄 138

def do_work
  스캔!
  # @next_wanted_scan 은 푸시 모니터 에 의해 업데이트될 수 있습니다.
  # 그러나 종료 플래그를 확인하여 모니터 가
  # 스레드는 요청 시 종료됩니다.
  루프 do
    델타 = @next_wanted_scan - 시간.지금
    만약 델타 > 0
      신호 = 서버.scan_semapher.wait(델타)
      만약 신호 || @stop_requested
        휴식
      end
    other
      휴식
    end
  end
end

#heartbeat_intervalFloat

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

정기적인 서버 확인 사이의 간격입니다.

반환합니다:

  • (Float)

    하트비트 간격(초)입니다.

이후:

  • 2.0.0



111
112
113
# 파일 'build/ruby-driver-v2.19/lib/mongo/server/monitor.rb', 줄 111

def heartbeat_interval
  옵션[: heartbeat_interval] || DEFAULT_HEARTBEAT_INTERVAL
end

#push_monitorServer::PushMonitor | nil

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

푸시 모니터를 사용 중인 경우 푸시 모니터 를 반환합니다.

반환합니다:

이후:

  • 2.0.0



129
130
131
132
133
# 파일 'build/ruby-driver-v2.19/lib/mongo/server/monitor.rb', 줄 129

def push_monitor
  @update_mutex.동기화 do
    @push_monitor
  end
end

#재시작!스레드

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

현재 스레드가 활성 상태가 아닌 한 서버 모니터 를 다시 시작합니다.

예시:

모니터 를 다시 시작합니다.

monitor.restart!

반환합니다:

  • (Thread)

    모니터 가 실행되는 스레드입니다.

이후:

  • 2.1.0



267
268
269
270
271
272
273
# 파일 'build/ruby-driver-v2.19/lib/mongo/server/monitor.rb', 줄 267

def 다시 시작!
  만약 @thread && @thread.alive?
    @thread
  other
    실행!
  end
end

#run_sdam_flow(result, awaited: false, scan_error: nil) ⇒ Object

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

이후:

  • 2.0.0



236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
# 파일 'build/ruby-driver-v2.19/lib/mongo/server/monitor.rb', 줄 236

def run_sdam_flow(결과, awaited: 거짓, scan_error: nil)
  @s담_뮤텍스.동기화 do
    old_description = 서버.description

    new_description = 설명.신규(서버.주소, 결과,
      평균 왕복 시간: 서버.round_trip_time_averager.평균 왕복 시간
    )

    서버.cluster.run_sdam_flow(서버.description, new_description, awaited: awaited, scan_error: scan_error)

    서버.description. do |new_description|
      하지 않는 한 awaited
        만약 new_description.알 수 없음? && !old_description.알 수 없음?
          @next_earliest_scan = @next_wanted_scan = 시간.지금
        other
          @next_earliest_scan = 시간.지금 + MIN_SCAN_INTERVAL
          @next_wanted_scan = 시간.지금 + heartbeat_interval
        end
      end
    end
  end
end

#스캔!설명

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

참고:

시스템 시계가 뒤로 이동하면 이 메서드는 매우 오랜 시간 동안 절전 모드로 전환될 수 있습니다.

참고:

이 메서드의 반환 값은 더 이상 사용되지 않습니다. 버전 3.0.0 에서는 이 메서드에 반환 값이 없습니다.

스로틀링이 있는 서버 를 확인하고 서버의 설명과 평균 왕복 시간을 업데이트 합니다.

서버를 확인한 지 MIN_SCAN_INTERVAL초 미만인 경우 마지막 확인 후 MIN_SCAN_INTERVAL초가 경과할 때까지 절전 모드로 전환합니다. 그런 다음 모니터링 중인 서버에서 hello를 실행하고 결과적으로 서버 설명을 업데이트하는 등의 검사를 수행합니다.

반환합니다:

  • (설명)

    업데이트된 설명입니다.

이후:

  • 2.0.0



219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
# 파일 'build/ruby-driver-v2.19/lib/mongo/server/monitor.rb', 줄 219

def 스캔!
  # 일반적으로 배경 스레드가 이 메서드를 호출합니다.
  # 하지만 스캔을 호출하는 것도 가능합니다! 모니터 에 직접 표시합니다.
  # 한 번에 하나의 스캔만 수행할 수 있습니다.
  @mutex.동기화 do
    throttle_scan_ Frequency!

    시작
      결과 = do_scan
    구출 => e
      run_sdam_flow({}, scan_error: e)
    other
      run_sdam_flow(결과)
    end
  end
end

#그만해!true | false

배경 스레드를 중지하고 합리적인 시간 동안 종료될 때까지 기다립니다.

반환합니다:

  • (true | false)

    스레드가 종료되었는지 여부입니다.

이후:

  • 2.0.0



162
163
164
165
166
167
168
169
170
171
# 파일 'build/ruby-driver-v2.19/lib/mongo/server/monitor.rb', 줄 162

def 중지!
  stop_push_monitor!

  # 슈퍼의 반환 값을 전달합니다.
  super. do
    # 중요: 연결 해제는 백그라운드 스레드 이후에 발생해야 합니다.
    # 종료됩니다.
    연결&.연결 해제!
  end
end

#stop_push_monitor!객체

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

이후:

  • 2.0.0



192
193
194
195
196
197
198
199
# 파일 'build/ruby-driver-v2.19/lib/mongo/server/monitor.rb', 줄 192

def stop_push_monitor!
  @update_mutex.동기화 do
    만약 @push_monitor
      @push_monitor.중지!
      @push_monitor = nil
    end
  end
end

#to_s객체

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

이후:

  • 2.0.0



275
276
277
# 파일 'build/ruby-driver-v2.19/lib/mongo/server/monitor.rb', 줄 275

def to_s
  "#<#{self.class.name}:#{object_id} #{서버.주소}>"
end