클래스: Mongo::Server::Mongo Private
- 상속:
-
객체
- 객체
- Mongo::Server::Mongo
- 확장자:
- 전달 가능
- 다음을 포함합니다.
- BackgroundThread, Event::Publisher, Loggable
- 다음에 정의됨:
- lib/ Mongo/ 서버/ 모니터.rb,
lib/ Mongo/ 서버/ 모니터/connection.rb,
lib/ Mongo/ 서버/ 모니터/app_metadata.rb
개요
이 클래스는 비공개 API의 일부입니다. 이 클래스는 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
서버의 상태를 최신 상태로 유지하기 위해 hello 명령을 통해 서버 주기적으로 폴링하는 작업을 담당합니다.
운전자 가 수행하는 다른 작업을 방해하지 않도록 모두 배경 스레드에서 작동합니다.
네임스페이스 아래에 정의됨
클래스: AppMetadata, 연결
상수 요약 접기
- DEFAULT_HEARTBEAT_INTERVAL =
이 상수는 비공개 API의 일부입니다. 이 상수는 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
서버 상태 새로고침의 기본 간격은 10 초입니다.
10- MIN_SCAN_INTERVAL =
이 상수는 비공개 API의 일부입니다. 이 상수는 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
강제 서버 스캔 사이의 최소 시간입니다. SDAM 사양의 minHeartbeatFrequeencyMS입니다.
0.5- RTT_WEIGHT_FACTOR =
이 상수는 비공개 API의 일부입니다. 이 상수는 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
더 이상 사용되지 않습니다.버전 3.0 에서 제거될 예정입니다.
평균 이동 왕복 시간을 계산하기 위한 가중치 계수(알파)입니다.
0.2
Loggable에서 포함된 상수
인스턴스 속성 요약 접기
-
#모니터링 ⇒ 모니터링
읽기 전용
비공개
모니터링 모니터링.
-
옵션 #개 ⇒ 해시
읽기 전용
비공개
옵션 서버 옵션입니다.
-
#server ⇒ Server
읽기 전용
비공개
MongoDB Server 이 모니터가 모니터링 중인 서버입니다.
Event::Publisher에 포함된 속성
인스턴스 메서드 요약 접기
-
#cancel_check! ⇒ Object
비공개
진행 중인 검사를 취소하고 모니터링 연결을 닫습니다.
-
#connection ⇒ Mongo::서버::모니터::Connection | nil
비공개
호출자가 동시 취소_check!이 후에 오래된 참조를 절대로 관찰하지 않도록 @connection_lock 아래에서 읽을 연결 지우기.
- #create_push_monitor!(topology_version, connection) ⇒ 객체 비공개
-
#do_work ⇒ 객체
비공개
서버 를 확인합니다.
-
#heartbeat_interval ⇒ Float
비공개
정기적인 서버 확인 사이의 간격입니다.
-
#initialize(서버, event_listeners, 모니터링, options = {}) ⇒ Monitor
생성자
비공개
새 서버 모니터 를 만듭니다.
-
#push_monitor ⇒ Server::PushMonitor | nil
비공개
푸시 모니터(사용 중인 경우).
-
#재시작! ⇒ 스레드
비공개
현재 스레드가 활성 상태가 아닌 한 서버 모니터 를 다시 시작합니다.
- #run_sdam_flow(result, awaited: false, scan_error: nil, rtt_only: false) ⇒ 객체 비공개
-
#스캔! ⇒ 설명
비공개
스로틀링이 있는 서버 를 확인하고 서버의 설명과 평균 왕복 시간을 업데이트 .
-
#그만해! ⇒ true | false
배경 스레드를 중지하고 합리적인 시간 동안 종료될 때까지 기다립니다.
- #stop_push_monitor! ⇒ 객체 비공개
- #to_s ⇒ 객체 비공개
BackgroundThread에 포함된 메서드
Loggable에 포함된 메서드
#log_debug, #log_error, #log_fatal, #log_info, #log_warn, #logger
Event::Publisher에 포함된 메서드
생성자 세부 정보
#initialize(서버, event_listeners, 모니터링, options = {}) ⇒ Monitor
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
모니터는 서버 외부에서 직접 인스턴스화해서는 안 됩니다.
새 서버 모니터 를 만듭니다.
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의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
모니터링을 반환합니다.
127 128 129 |
# 파일 'lib/ Mongo/ 서버/ 모니터.rb', 127줄 def 모니터링 @monitoring end |
#options ⇒ 해시 (읽기 전용)
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
반환 옵션 서버 옵션입니다.
108 109 110 |
# 파일 'lib/ Mongo/ 서버/ 모니터.rb', 108줄 def @options end |
#서버 ⇒ 서버 (읽기 전용)
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
서버 이 모니터 가 모니터링 중인 서버 를 반환합니다.
98 99 100 |
# 파일 'lib/ Mongo/ 서버/ 모니터.rb', 98줄 def 서버 @server end |
인스턴스 메서드 세부 정보
#cancel_check! ⇒ Object
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
진행 중인 검사를 취소하고 모니터링 연결을 닫습니다.
서버 모니터링 사양('hello 또는 레거시 hello 취소')에 따라 서버 네트워크 오류로 인해 알 수 없음으로 표시되면 호출됩니다. 스트리밍 푸시 모니터를 중지하고(대기 중인 hello 읽기 중단) 폴링 연결을 닫습니다. 따라서 다음 검사에서는 죽은 소켓을 통해 서버 유효성을 다시 검사하는 대신 새 연결을 설정해야 합니다.
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 |
#connection ⇒ Mongo::서버::모니터::Connection | nil
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
화상 중지 후 호출자가 오래된 참조를 검색하지 않도록 @connection_lock 아래에서 읽은 사용할 연결을 반환합니다. 지우기.
103 104 105 |
# 파일 'lib/ Mongo/ 서버/ 모니터.rb', 103줄 def 연결 @connection_lock.동기화 { @connection } end |
#create_push_monitor!(topology_version, connection) ⇒ 객체
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
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의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
서버 를 확인합니다.
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_interval ⇒ Float
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
정기적인 서버 확인 사이의 간격입니다.
113 114 115 |
# 파일 'lib/ Mongo/ 서버/ 모니터.rb', 113줄 def heartbeat_interval [: heartbeat_interval] || DEFAULT_HEARTBEAT_INTERVAL end |
#push_monitor ⇒ Server::PushMonitor | nil
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
푸시 모니터를 사용 중인 경우 푸시 모니터 를 반환합니다.
131 132 133 134 135 |
# 파일 'lib/ Mongo/ 서버/ 모니터.rb', 131줄 def push_monitor @update_mutex.동기화 do @push_monitor end end |
#재시작! ⇒ 스레드
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
현재 스레드가 활성 상태가 아닌 한 서버 모니터 를 다시 시작합니다.
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의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
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를 실행하고 결과적으로 서버 설명을 업데이트하는 등의 검사를 수행합니다.
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
배경 스레드를 중지하고 합리적인 시간 동안 종료될 때까지 기다립니다.
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의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
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의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
316 317 318 |
# 파일 'lib/ Mongo/ 서버/ 모니터.rb', 316줄 def to_s "#<#{self.class.name}:#{object_id} #{서버.주소}>" end |