클래스: Mongo::Server::PushMonitor Private
- 상속:
-
객체
- 객체
- Mongo::Server::PushMonitor
- 확장자:
- 전달 가능
- 다음을 포함합니다.
- 배경 스레드
- 다음에 정의됨:
- build/ruby-driver-v2.19/lib/mongo/server/push_monitor.rb,
build/ruby-driver-v2.19/lib/mongo/server/push_monitor/connection.rb
개요
이 클래스는 비공개 API의 일부입니다. 이 클래스는 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
서버 푸시 헬로 요청을 활용하는 모니터입니다.
모니터가 4.4+ 서버와 핸드셰이크하면 푸시 모니터 인스턴스가 생성됩니다. 이후 푸시모니터는 서버 푸시 헬로(예: awaited & exhaust hello)를 사용하여 서버로부터 토폴로지 변경 사항을 최대한 빨리 수신할 수 있습니다. 모니터는 여전히 서버를 모니터링하여 왕복 시간을 계산하고 애플리케이션의 요청에 따라 즉시 검사를 수행합니다.
네임스페이스 아래에 정의됨
클래스: 연결
상수 요약
Loggable에서 포함된 상수
인스턴스 속성 요약 접기
-
#monitor ⇒ Server
읽기 전용
비공개
모니터링 중인 서버 입니다.
-
#모니터링 ⇒ 모니터링
읽기 전용
비공개
모니터링 모니터링.
-
옵션 #개 ⇒ 해시
읽기 전용
비공개
푸시 모니터 옵션.
-
#topology_version ⇒ TopologyVersion
읽기 전용
비공개
가장 최근에 받은 토폴로지 버전입니다.
인스턴스 메서드 요약 접기
- #check ⇒ 객체 비공개
- #do_work ⇒ 객체 비공개
-
#initialize(monitor, topology_version, monitoring, **options) ⇒ PushMonitor
생성자
비공개
푸시모니터의 새 인스턴스 입니다.
- #read_response ⇒ 객체 비공개
- #시작합니다! ⇒ 객체 비공개
- #그만해! ⇒ 객체 비공개
- #to_s ⇒ 객체 비공개
- #write_check_command ⇒ 객체 비공개
BackgroundThread에 포함된 메서드
Loggable에 포함된 메서드
#log_debug, #log_error, #log_fatal, #log_info, #log_warn, #logger
생성자 세부 정보
#initialize(모니터, topology_version, 모니터링, **options) ⇒ 푸시모니터
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
푸시모니터의 새 인스턴스를 반환합니다.
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/server/push_monitor.rb', 줄 35 def 초기화(모니터, topology_version, 모니터링, **) 만약 topology_version.nil? 올리다 ArgumentError, '토폴로지 버전을 제공해야 하지만' end 하지 않는 한 [:app_metadata] 올리다 ArgumentError, '앱 메타데이터 는 필수 항목입니다. ' end 하지 않는 한 [:check_document] 올리다 ArgumentError, '문서가 필수 항목인지 확인하세요.' end @app_metadata = [:app_metadata] @check_document = [:check_document] 모니터 = 모니터 @topology_version = topology_version @monitoring = 모니터링 @options = @ 락 = 뮤텍스.신규 end |
인스턴스 속성 세부 정보
#모니터 ⇒ 서버 (읽기 전용)
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
모니터링 중인 서버를 반환합니다.
55 56 57 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/server/push_monitor.rb', 줄 55 def 모니터 모니터 end |
#모니터링 ⇒ 모니터링 (읽기 전용)
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
모니터링을 반환합니다.
61 62 63 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/server/push_monitor.rb', 줄 61 def 모니터링 @monitoring end |
#options ⇒ 해시 (읽기 전용)
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
푸시 모니터 옵션을 반환합니다.
64 65 66 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/server/push_monitor.rb', 줄 64 def @options end |
#topology_version ⇒ TopologyVersion (읽기 전용)
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
가장 최근에 받은 토폴로지 버전을 반환합니다.
58 59 60 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/server/push_monitor.rb', 줄 58 def topology_version @topology_version end |
인스턴스 메서드 세부 정보
#check ⇒ 객체
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/server/push_monitor.rb', 줄 137 def 확인 @ 락.동기화 do 만약 @connection && @connection.PID != 프로세스.PID log_warn(" PID 변경 감지 - mongo 클라이언트가 다시 연결되었어야 함 (이전 PID #{@connection.PID}, 새 PID #{프로세스.PID}") @connection.연결 해제! @connection = nil end end @ 락.동기화 do 하지 않는 한 @connection @server_pushing = 거짓 연결 = 푸시 모니터::연결.신규(서버.주소, ) 연결.연결! @connection = 연결 end end resp_msg = 시작 하지 않는 한 @server_pushing write_check_command end read_response 구출 mongo::오류 @ 락.동기화 do @connection.연결 해제! @connection = nil end 올리다 end @server_pushing = resp_msg.flags.포함?(:more_to_com) 결과 = 작업::결과.신규(resp_msg) 결과.유효성을 검사합니다! 결과.문서.first end |
#do_work ⇒ 객체
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/server/push_monitor.rb', 줄 94 def do_work @ 락.동기화 do 반환 만약 @stop_requested end 결과 = 모니터링.publish_heartbeat(서버, awaited: true) do 확인 end new_description = 모니터.run_sdam_flow(결과, awaited: true) # hello가 실패 점 으로 인해 실패하면 응답은 다음을 수행하지 않습니다. # 토폴로지 버전을 포함합니다. 이 경우 기존 데이터를 유지해야 합니다. # 토폴로지 버전을 업데이트하여 모니터링 을 재개할 수 있습니다. # 사양은 이 경우를 직접 해결하는 것처럼 보이지는 않지만 # https://github.com/mongodb/specations/lob/master/source/server-discovery-and-monitoring/server-monitoring.rst#streaming-ismaster # topologyVersion은 성공적인 # hello 응답. 만약 new_description.topology_version @topology_version = new_description.topology_version end 구출 IOError, SocketError, SystemCallError, mongo::오류 => exc stop_requested = @ 락.동기화 { @stop_requested } 만약 stop_requested # 예외를 무시합니다(RUBY-2771 참조). 반환 end msg = "#{서버.주소}에서 awaited hello를 실행 오류가 발생했습니다. " Utils.경고_bg_Exception(msg, exc, 로거: [:logger], log_prefix: [:log_prefix], bg_error_backtrace: [:bg_error_backtrace], ) # 연결 요청이 실패하면 푸시 모니터링을 중지합니다. # 서버가 죽은 경우 두 개의 연결을 원하지 않습니다. # 동시에 연결을 시도하지도 못했습니다. 중지! # 모니터 에서 즉시 확인을 요청하여 다음 계정으로 복원합니다. 서버 가 실제로 활성 상태인 경우 # 가능한 한 빨리 처리합니다. 서버.scan_semapher.신호 end |
#read_response ⇒ 객체
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
184 185 186 187 188 189 190 191 192 193 194 195 196 197 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/server/push_monitor.rb', 줄 184 def read_response 만약 타임아웃 = [:connect_timeout] 만약 타임아웃 < 0 올리다 mongo::SocketTimeoutError, "음수 시간 제한으로 읽기 요청: #{}" elsif 타임아웃 > 0 타임아웃 += [:하트비트_빈도] || 모니터::DEFAULT_HEARTBEAT_INTERVAL end end # 타임아웃을 두 번 설정하다 했습니다: 한 번은 적용되는 read_socket에 전달됩니다. # 각 개별 읽기 작업에 대해 수행하고 다시 전체 읽기에 대해 수행합니다. 시간 초과.타임아웃(타임아웃, 오류::SocketTimeoutError, "#{timeout} 초후에 대기 중인 hello 응답을 읽지못했습니다. ") do @ 락.동기화 { @connection }.read_response(socket_timeout: 타임아웃) end end |
#시작합니다! ⇒ 객체
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
69 70 71 72 73 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/server/push_monitor.rb', 줄 69 def 시작! @ 락.동기화 do super end end |
#그만해! ⇒ 객체
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/server/push_monitor.rb', 줄 75 def 중지! @ 락.동기화 do @stop_requested = true 만약 @connection # 진행 중인 모든 소진된 hello 읽기를 중단합니다. # 연결을 끊습니다. @connection.send(:socket).닫기 구출 nil end end super.탭 do @ 락.동기화 do 만약 @connection @connection.연결 해제! @connection = nil end end end end |
#to_s ⇒ 객체
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
199 200 201 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/server/push_monitor.rb', 줄 199 def to_s "#<#{self.class.name}:#{object_id} #{서버.주소}>" end |
#write_check_command ⇒ 객체
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
173 174 175 176 177 178 179 180 181 182 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/server/push_monitor.rb', 줄 173 def write_check_command 문서 = @check_document.merge( topologyVersion: topology_version.to_doc, maxAwaitTimeMS: 모니터.heartbeat_interval * 1000, ) 명령 = protocol::메시지.신규( [:exhaust_allowed], {}, 문서.merge({'$db' => Database::ADMIN}) ) @ 락.동기화 { @connection }.write_bytes(명령.직렬화.to_s) end |