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

상속:
객체
  • 객체
모두 표시
확장자:
전달 가능
다음을 포함합니다.
BackgroundThread, Event::Publisher, Loggable
다음에 정의됨:
lib/ Mongo/ 서버/ 모니터.rb,
lib/ Mongo/ 서버/ 모니터/connection.rb,
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)

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

다음을 발생시킵니다.

  • (ArgumentError)

이후:

  • 2.0.0



76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# 파일 'lib/ Mongo/ 서버/ 모니터.rb', 76줄

def 초기화(서버, event_listeners, 모니터링, 옵션 = {})
  올리다 ArgumentError, "잘못된 모니터링 유형: #{모니터링.검사}" 하지 않는 한 모니터링.is_a?(모니터링)
  올리다 ArgumentError, '앱 메타데이터 는 필수 항목입니다. ' 하지 않는 한 옵션[:app_metadata]
  올리다 ArgumentError, '푸시 모니터 앱 메타데이터 는 필수' 하지 않는 한 옵션[:push_monitor_app_metadata]

  @server = 서버
  @event_listeners = event_listeners
  @monitoring = 모니터링
  @options = 옵션.동결
  @mutex = 뮤텍스.신규
  @s담_뮤텍스 = 뮤텍스.신규
  @next_earliest_scan = @next_wanted_scan = 시간.지금
  @update_mutex = 뮤텍스.신규
  # 폴링 연결이 @connection의 읽기 및 쓰기 (write)를 보호합니다.
  # 다른 스레드에서 취소됩니다. 서버 모니터링 사양에 따르면
  # cancelCheck 가상 코드입니다. 잠금은 복사하거나 잠시 동안만 유지됩니다.
  # 참조를 할당합니다. 차단 검사를 거치지 않습니다.
  @connection_lock = 뮤텍스.신규
end

인스턴스 속성 세부 정보

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

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

모니터링을 반환합니다.

반환합니다:

이후:

  • 2.0.0



127
128
129
# 파일 'lib/ Mongo/ 서버/ 모니터.rb', 127줄

def 모니터링
  @monitoring
end

#options해시 (읽기 전용)

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

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

반환합니다:

  • (해시)

    options 서버 옵션입니다.

이후:

  • 2.0.0



108
109
110
# 파일 'lib/ Mongo/ 서버/ 모니터.rb', 108줄

def 옵션
  @options
end

#서버서버 (읽기 전용)

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

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

반환합니다:

  • (MongoDB 서버)

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

이후:

  • 2.0.0



98
99
100
# 파일 'lib/ Mongo/ 서버/ 모니터.rb', 98줄

def 서버
  @server
end

인스턴스 메서드 세부 정보

#cancel_check!Object

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

진행 중인 검사를 취소하고 모니터링 연결을 닫습니다.

서버 모니터링 사양('hello 또는 레거시 hello 취소')에 따라 서버 네트워크 오류로 인해 알 수 없음으로 표시되면 호출됩니다. 스트리밍 푸시 모니터를 중지하고(대기 중인 hello 읽기 중단) 폴링 연결을 닫습니다. 따라서 다음 검사에서는 죽은 소켓을 통해 서버 유효성을 다시 검사하는 대신 새 연결을 설정해야 합니다.

이후:

  • 2.0.0



210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
# 파일 'lib/ Mongo/ 서버/ 모니터.rb', 210줄

def cancel_check!
  stop_push_monitor!

  # 연결 참조를 잠금 아래에 복사한 다음 중단하고 닫습니다.
  # 잠금 외부에 있습니다. 소켓을 닫으면 진행 중인 작업이 중단됩니다.
  # 모니터 스레드에서 읽습니다. 참조를 nil로 설정하면 다음
  # 다시 연결할 수 있는지 확인. 모니터 스레드는 새 ~ 의 유일한 기록자입니다.
  # 연결이므로 이 스레드가 지우는 것이 안전합니다.
  연결 = @connection_lock.동기화 do
    conn = @connection
    @connection = nil
    conn
  end
  연결&.연결 해제!
end

#connectionMongo::서버::모니터::Connection | nil

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

화상 중지 후 호출자가 오래된 참조를 검색하지 않도록 @connection_lock 아래에서 읽은 사용할 연결을 반환합니다. 지우기.

반환합니다:

  • (Mongo::서버::모니터::Connection | nil)

    호출자가 동시 취소_check!이 후에 오래된 참조를 절대로 관찰하지 않도록 @connection_lock 아래에서 읽을 연결 지우기.

이후:

  • 2.0.0



103
104
105
# 파일 'lib/ Mongo/ 서버/ 모니터.rb', 103줄

def 연결
  @connection_lock.동기화 { @connection }
end

#create_push_monitor!(topology_version, connection) ⇒ 객체

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

매개변수:

  • 연결 (Mongo::Server::Mongo::Connection)

    새로 설정된 모니터링 연결. 명시적으로 전달되어서(@connection에서 읽지 않음) 동시적인 cancel_check! 설정하고 PushMonitor를 빌드하는 사이에서 누락시킬 수 없습니다.

이후:

  • 2.0.0



175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
# 파일 'lib/ Mongo/ 서버/ 모니터.rb', 175줄

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

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

#do_work객체

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

서버 를 확인합니다.

이후:

  • 2.0.0



140
141
142
143
144
145
146
147
148
149
150
151
152
# 파일 'lib/ Mongo/ 서버/ 모니터.rb', 140줄

def do_work
  스캔!
  # @next_wanted_scan 은 푸시 모니터 에 의해 업데이트될 수 있습니다.
  # 그러나 종료 플래그를 확인하여 모니터 가
  # 스레드는 요청 시 종료됩니다.
  루프 do
    델타 = @next_wanted_scan - 시간.지금
    휴식 하지 않는 한 델타 > 0

    신호 = 서버.scan_semapher.wait(델타)
    휴식 만약 신호 || @stop_requested
  end
end

#heartbeat_intervalFloat

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

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

반환합니다:

  • (Float)

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

이후:

  • 2.0.0



113
114
115
# 파일 'lib/ Mongo/ 서버/ 모니터.rb', 113줄

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

#push_monitorServer::PushMonitor | nil

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

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

반환합니다:

이후:

  • 2.0.0



131
132
133
134
135
# 파일 'lib/ Mongo/ 서버/ 모니터.rb', 131줄

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

#재시작!스레드

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

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

예시:

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

monitor.restart!

반환합니다:

  • (Thread)

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

이후:

  • 2.1.0



308
309
310
311
312
313
314
# 파일 'lib/ Mongo/ 서버/ 모니터.rb', 308줄

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

#run_sdam_flow(result, awaited: false, scan_error: nil, rtt_only: false) ⇒ 객체

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

이후:

  • 2.0.0



268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
# 파일 'lib/ Mongo/ 서버/ 모니터.rb', 268줄

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

    # RTT만 측정(스트리밍 프로토콜 활성화)은 업데이트하지 않아야 합니다.
    # 토폴로지 또는 SDAM 이벤트를 게시합니다. 수집한 RTT는
    # 다음 스트리밍-헬로 설명에 포함됨
    # 공유 RTT 계산기. 아래 예정은 계속 실행되므로
    # 모니터는 계속해서 검사를 수행합니다.
    하지 않는 한 rtt_only
      new_description = 설명.신규(
        서버.주소,
        결과,
        평균 왕복 시간: 서버.round_trip_time_calculator.평균 왕복 시간,
        minimum_round_trip_time: 서버.round_trip_time_calculator.minimum_round_trip_time
      )
      서버.cluster.run_sdam_flow(서버.description, new_description, awaited: awaited, scan_error: scan_error)
    end

    서버.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



244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
# 파일 'lib/ Mongo/ 서버/ 모니터.rb', 244줄

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

    # 스트리밍 프로토콜이 활성화되면 PushMonitor가 됩니다.
    # 권한 있는 SDAM 소스이며 이 스캔은 RTT만 측정합니다.
    # 전용 연결. 서버 모니터링 사양에 따라 RTT
    # 명령은 이벤트를 게시하거나 토폴로지를 업데이트하지 않아야 합니다. 계산
    # do_scan 전에 이것을 수행하면 상태가 변경되고 다시 연결될 수 있습니다.
    rtt_only = rtt_measurement_only?

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

#그만해!true | false

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

반환합니다:

  • (true | false)

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

이후:

  • 2.0.0



160
161
162
163
164
165
166
167
168
169
# 파일 'lib/ Mongo/ 서버/ 모니터.rb', 160줄

def 중지!
  stop_push_monitor!

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

#stop_push_monitor!객체

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

이후:

  • 2.0.0



192
193
194
195
196
197
198
199
# 파일 'lib/ Mongo/ 서버/ 모니터.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



316
317
318
# 파일 'lib/ Mongo/ 서버/ 모니터.rb', 316줄

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