클래스: Mongo::Cluster
- 상속:
-
객체
- 객체
- Mongo::Cluster
- 확장자:
- 전달 가능
- 다음에 정의됨:
- build/ruby-driver-v2.19/lib/mongo/cluster.rb,
build/ruby-driver-v2.19/lib/mongo/cluster/topology.rb,
build/ruby-driver-v2.19/lib/mongo/cluster/topology.rb,
build/ruby-driver-v2.19/lib/mongo/cluster/sdam_flow.rb,
빌드/루비 드라이버-v2.19/lib/mongo/cluster/topology/base.rb,
빌드/루비 드라이버-v2.19/lib/mongo/cluster/topology/single.rb,
빌드/루비 드라이버-v2.19/lib/mongo/cluster/topology/sharded.rb,
빌드/루비 드라이버-v2.19/lib/mongo/cluster/topology/unknown.rb,
빌드/루비 드라이버-v2.19/lib/mongo/cluster/periodic_executor.rb,
build/ Ruby-driver-v2.19/lib/mongo/cluster/reapers/cursor_reaper.rb,
빌드/루비 드라이버-v2.19/lib/mongo/cluster/reapers/socket_reaper.rb,
빌드/루비 드라이버-v2.19/lib/mongo/cluster/topology/load_balancing.rb,
빌드/루비 드라이버-v2.19/lib/mongo/cluster/topology/no_replica_set_options.rb,
빌드/루비 드라이버-v2.19/lib/mongo/cluster/topology/replica_set_no_primary.rb,
빌드/루비 드라이버-v2.19/lib/mongo/cluster/topology/replica_set_with_primary.rb
개요
Copyright © 2018-2020 MongoDB Inc.
Apache 라이선스, 버전 2.0 ('라이선스')에 따라 라이선스가 부여됩니다. 라이선스를 준수하지 않는 한 이 파일을 사용할 수 없습니다. 다음에서 라이선스 사본을 얻을 수 있습니다.
http://www.apache.org/licenses/LICENSE-2.0
해당 법률에서 요구하거나 문서로 동의하지 않는 한, 라이선스에 따라 배포되는 소프트웨어는 명시적이든 Express 이든 어떤 종류의 보증이나 조건 없이 "있는 그대로" 배포됩니다. 라이선스에 따른 권한 및 제한 사항을 적용하는 특정 언어는 라이선스를 참조하세요.
네임스페이스 아래에 정의됨
모듈: 토폴로지 클래스: CursorReaper, PeriodicExecutor, SdamFlow, SocketReaper
상수 요약 접기
- MAX_READ_RETRIES =
레거시 읽기 재시도의 기본 횟수입니다.
1
- MAX_WRITE_RETRIES =
레거시 쓰기 재시도의 기본 횟수입니다.
1
- READ_RETRY_INTERVAL =
레거시 읽기 재시도를 사용할 때의 기본 읽기 재시도 간격(초)입니다.
5
- IDLE_WRITE_PERIOD_SECONDS =
유휴 프라이머리가 oplog에 no-op을 기록하는 빈도입니다.
10
- CLUSTER_TIME =
더 이상 사용되지 않습니다.
mongos 서버의 응답에 포함된 클러스터 시간 키입니다.
'clusterTime'.동결
Loggable에서 포함된 상수
인스턴스 속성 요약 접기
-
#app_metadata ⇒ Mongo::Server::AppMetadata
읽기 전용
연결 핸드셰이크에 사용되는 애플리케이션 메타데이터입니다.
- #monitor_app_metadata ⇒ 객체 읽기 전용 비공개
-
#모니터링 ⇒ 모니터링
읽기 전용
모니터링 모니터링.
-
옵션 #개 ⇒ 해시
읽기 전용
옵션 해시입니다.
- #push_monitor_app_metadata ⇒ 객체 읽기 전용 비공개
-
#시드 ⇒ Array<String>
읽기 전용
비공개
시드 서버의 주소입니다.
- #서버_선택_세마포어 ⇒ 객체 읽기 전용 비공개
- #session_pool ⇒ 객체 읽기 전용
- #srv_monitor ⇒ 객체 읽기 전용 비공개
-
#topology ⇒ 정수?
읽기 전용
논리적 세션 시간 초과 값(분)입니다.
Mongo::ClusterTime::Consumer에 포함된 속성
Event::Subscriber에 포함된 속성
클래스 메서드 요약 접기
-
.create(클라이언트, 모니터링: nil) ⇒ 클러스터
비공개
클라이언트의 원래 클러스터 인스턴스가 동일하지 않도록 하는 데 사용할 수 있도록 제공된 클라이언트에 대한 클러스터를 생성합니다.
인스턴스 메서드 요약 접기
-
#==(기타) ⇒ true, false
이 서버 클러스터가 다른 객체와 동일한지 확인합니다.
-
#add(host, add_options = nil) ⇒ MongoDB Server
제공된 주소를 사용하여 클러스터에 서버를 추가합니다.
-
주소 # ⇒ Array<Mongo::Address>
클러스터의 주소입니다.
-
#close ⇒ nil
비공개
클러스터를 닫습니다.
-
#연결되었나요? ⇒ true|false
비공개
클러스터 객체 가 클러스터 에 연결되어 있는지 여부입니다.
-
#연결 중이세요? ⇒ true|false
비공개
클러스터 객체가 해당 클러스터에 연결 중인 상태인지 여부입니다.
- #disable_server_if_connected(서버) ⇒ 객체 비공개
-
#has_readable_server?(server_selector = nil) ⇒ true, false
클러스터 가 제공된 읽기 설정 (read preference) 에 대해 읽기 가능 서버 를 선택할지 결정합니다.
-
#has_writeable_server? ⇒ 참, 거짓
클러스터가 쓰기 가능한 서버를 선택할지 결정합니다.
-
#heartbeat_interval ⇒ Float
비공개
서버의 새로 고침 간격을 가져옵니다.
-
#initialize(seed, 모니터링, options = Options::Redacted.new) ⇒ 클러스터
생성자
비공개
새 클러스터를 인스턴스화합니다.
-
#검사 ⇒ string
검사에 사용할 수 있도록 더 멋진 형식의 string 을 가져옵니다.
-
#load_balancing? ⇒ true | false
클러스터 가 로드 밸런싱된 토폴로지 에 구성되었는지 여부를 반환합니다.
- #max_read_retries ⇒ 정수 사용 중단 더 이상 사용되지 않습니다.
-
#Next_primary(ping = nil, 세션 = nil) ⇒ Mongo::Server
작업을 보낼 수 있는 다음 프라이머리 서버 를 가져옵니다.
- #풀(서버) ⇒ Server::ConnectionPool 사용 중단 더 이상 사용되지 않습니다.
- #read_retry_interval ⇒ Float 사용 중단 더 이상 사용되지 않습니다.
-
#다시 연결하세요! ⇒ true
사용 중단
더 이상 사용되지 않습니다.
이 메서드를 호출하는 대신 Client#reconnect를 사용하여 클러스터에 다시 연결합니다. 이 메서드는 SDAM 이벤트를 전송하지 않습니다.
-
#제거(호스트, 연결 해제: true) ⇒ Array<Server> | true | false
제공된 주소에 해당하는 서버가 있는 경우 클러스터에서 제거합니다.
-
#run_sdam_flow(previous_desc, updated_desc, options = {}) ⇒ 객체
비공개
클러스터에서 SDAM 흐름을 실행합니다.
-
#스캔!(동기화 = true) ⇒ true
클러스터의 알려진 모든 서버를 강제로 스캔합니다.
-
#서버 ⇒ 배열<Server>
클러스터에서 작업을 실행할 수 있는 서버 후보 목록을 가져옵니다.
- #server_list ⇒ 객체 비공개
-
#set_server_list(server_address_strs) ⇒ 객체
비공개
서버 목록을 제공된 주소 문자열 목록의 주소로 설정합니다.
- #요약 ⇒ 객체
-
#update_cluster_time(result) ⇒ 객체
응답에 표시되는 최대 클러스터 시간을 업데이트합니다.
- #update_topology(new_topology) ⇒ Object 비공개
-
#validate_session_support! ⇒ 객체
비공개
운전자 가 연결된 배포서버 가 세션을 지원 하지 않는 경우 Error::SessionsNotAvailable이 발생합니다.
Mongo::ClusterTime::Consumer에 포함된 메서드
Loggable에 포함된 메서드
#log_debug, #log_error, #log_fatal, #log_info, #log_warn, #logger
Event::Subscriber에 포함된 메서드
Monitoring::Publishable에 포함된 메서드
#publish_cmap_event, #publish_event, #publish_s담_event
생성자 세부 정보
#initialize(seed, monitoring, options = Options::Redacted.new) ⇒ 클러스터
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
클러스터는 클라이언트 외부에서 직접 인스턴스화해서는 안 됩니다.
mongodb+srv:// URI에 연결할 때 클라이언트 는 해당 URI를 서버 목록으로 확장하고 해당 목록을 클러스터 생성자에 전달합니다. 독립형 mongod 에 연결할 때 Cluster 생성자는 해당 주소 를 하나의 string 배열 로 수신합니다.
새 클러스터를 인스턴스화합니다.
120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 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 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', 줄 120 def 초기화(시드, 모니터링, = 옵션::편집됨.신규) 만약 시드.nil? 올리다 ArgumentError, 'seeds는 nil일 수 없습니다.' end = .dup 만약 [:monitoring_io] == 거짓 && !.키?(:cleanup) [:cleanup] = 거짓 end @options = .동결 # @update_lock은 @servers, @connecting, @connected, @topology 및 # @sessions_supported. 일반적으로 다음 값이 없는 인스턴스 변수는 잠금을 위해 # 지정된 잠금은 업데이트 잠금에서만 수정해야 합니다. # 토폴로지 변경은 다음이 아닌 @update_lock에 의해 잠깁니다. # @sdam_flow_lock. @update_lock = 뮤텍스.신규 @servers = [] @monitoring = 모니터링 @event_listeners = 이벤트::리스너.신규 @app_metadata = 서버::AppMetadata.신규(@options.merge(목적: : 애플리케이션)) @monitor_app_metadata = 서버::모니터::AppMetadata.신규(@options.merge(목적: :monitor)) @push_monitor_app_metadata = 서버::모니터::AppMetadata.신규(@options.merge(목적: :push_monitor)) @cluster_time_lock = 뮤텍스.신규 @cluster_time = nil @srv_monitor_lock = 뮤텍스.신규 @srv_monitor = nil @server_selection_semapher = 세마포어.신규 @topology = 토폴로지.이니셜(self, 모니터링, ) # 상태 변경 락 은 s담 흐름 락 과 유사하지만 다음과 같이 설계되었습니다. # 클러스터 소비자가 시작한 상태 변경을 직렬화합니다. # (예 클러스터를 연결하거나 연결 해제하는 애플리케이션), # 예: 애플리케이션 이 연결 해제-연결-연결 해제를 빠르게 호출하는 경우 # 클러스터를 일관성 없는 상태로 만들지 않습니다. # 드라이버에서 내부적으로 수행하는 모니터링 업데이트는 다음 작업을 수행하지 않습니다. # 상태 변경 잠금. @state_change_lock = 뮤텍스.신규 # @sdam_flow_lock은 s담 흐름만 다룹니다. 참고로 적용되지 않습니다. # to @ 토폴로지 교체는 @update_lock에서 수행됩니다. @sdam_flow_lock = 뮤텍스.신규 Session::SessionPool.create(self) 만약 시드.비어 있나요? && load_balancing? 올리다 ArgumentError, '시드가 없는 부하 분산 클러스터는 금지되어 있습니다. ' end # 시작 토폴로지는 서버가 없으면 항상 알 수 없습니다. # https://github.com/mongodb/specations/pull/388 opening_topology = 토폴로지::알 수 없음.신규(, 모니터링, self) publish_sdam_event( 모니터링::TOPOLOGY_OPENING, 모니터링::이벤트::토폴로지 열기.신규(opening_topology) ) @seeds = 시드 = 시드.uniq 서버 = 시드.map do |시드| # MongoDB Server 열기 이벤트는 토폴로지 변경 이벤트 후에 전송되어야 합니다. # 따라서 토폴로지 변경 전에 별도의 서버 추가를 수행합니다. # 이벤트가 게시되면 시작부터 서버 모니터링까지 # 나중에 완료. 추가(시드, 모니터: 거짓) end 만약 시드.size >= 1 # 토폴로지를 다시 생성하여 현재 서버 목록을 가져옵니다. recreate_topology(토폴로지, opening_topology) end 만약 load_balancing? # 사양에 따라 특정 SDAM 이벤트를 생성해야 합니다. # 로드 밸런싱 토폴로지에 있는 경우. # 이러한 이벤트는 # 드라이버의 SDAM 구현뿐만 아니라 # 드라이버의 로드 밸런서 구현. # 이는 필수 상용구일 뿐입니다. # # 이 호출은 monitoring_io 검사 위에 수행되어야 합니다. # 나머지 생성자가 단락되기 때문입니다. fabrate_lb_s담_events_and_set_server_type end 만약 [:monitoring_io] == 거짓 # 서버가 없기 때문에 주기적인 실행기 구성을 생략합니다. # 클러스터에 명령을 보낼 수 없으며, # 정리해야 하는 모든 것. # # 개별 서버 및 레거시 단일 라운드 모니터링 생략 모의 테스트와 경쟁할 메인 스레드의 SDAM 수 # SDAM 응답. @connecting = @connected = 거짓 반환 end # 스레드 모니터링을 시작하기 전에 인스턴스 변수를 업데이트합니다. @connecting = 거짓 @connected = true 만약 [:cleanup] != 거짓 @cursor_reaper = CursorReaper.신규(self) @socket_reaper = SocketReaper.신규(self) @periodic_executor = 주기적 실행기.신규([ @cursor_reaper, @socket_reaper, ], ) @periodic_executor.실행! end 하지 않는 한 load_balancing? # 모니터링을 시작하기 전에 시작 시간을 기록해야 합니다. start_monotime = Utils.단조적 시간 서버.각 do |서버| 서버.start_monitoring end 만약 [:scan] != 거짓 server_selection_timeout = [:server_selection_timeout] || ServerSelector::SERVER_SELECTION_TIMEOUT # 서버 선택 시간 제한은 특히 다음과 같은 경우 매우 짧을 수 있습니다. # 테스트, 클라이언트가 다음 전에 동기 스캔을 기다리는 경우 # 서버 선택을 시작합니다. 서버 로 스캔 선택 시간 제한 # 그런 다음 로컬 서버도 처리하기 전에 스캔을 중단합니다. # 따라서 여기에서 스캔하는 데 최소 3 초의 시간을 허용합니다. 만약 server_selection_timeout < 3 server_selection_timeout = 3 end 마감일 = start_monotime + server_selection_timeout # 각 서버의 첫 번째 스캔이 완료될 때까지 기다립니다. # 이전 버전과의 호환성. # 이 SDAM 라운드 중에 서버가 발견되면 # 이러한 서버도 쿼리될 때까지 기다리는 등 # 서버 선택 시간 초과 또는 최소 3 초입니다. 루프 do # SDAM이 실행되는 동안 서버 목록을 읽으려고 시도하지 않도록 합니다. 서버 = @sdam_flow_lock.동기화 do server_list.dup end 만약 서버.모두? { |서버| 서버.last_scan_monotime && 서버.last_scan_monotime >= start_monotime } 휴식 end 만약 (time_remaining = 마감일 - Utils.단조적 시간) <= 0 휴식 end log_debug("최대 #{'%.2f' 스캔할 서버의 % time_remaining} 초: #{요약}") # 세마포어가 우리 사이에 신호를 받았을 수 있으므로 # 위의 서버 목록과 아래의 대기 호출, 우리는 # 남은 전체 시간 동안 대기 - 최대 0.5 초 동안 기다린 다음 # 상태 를 다시 확인합니다. 시작 server_selection_semapher.wait([time_remaining, 0.5].min) 구출 ::시간 초과::오류 # 아무것도 end end end start_stop_srv_monitor end end |
인스턴스 속성 세부 정보
#app_metadata ⇒ Mongo::Server::AppMetadata (읽기 전용)
연결 핸드셰이크에 사용되는 애플리케이션 메타데이터를 반환합니다.
317 318 319 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', 줄 317 def @app_metadata end |
#monitor_app_metadata ⇒ 객체 (읽기 전용)
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
320 321 322 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', 줄 320 def @monitor_app_metadata end |
#모니터링 ⇒ 모니터링 (읽기 전용)
모니터링을 반환합니다.
308 309 310 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', 줄 308 def 모니터링 @monitoring end |
#options ⇒ 해시 (읽기 전용)
옵션 해시를 반환합니다.
305 306 307 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', 줄 305 def @options end |
#push_monitor_app_metadata ⇒ 객체 (읽기 전용)
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
323 324 325 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', 줄 323 def @push_monitor_app_metadata end |
#시드 ⇒ Array<String> (읽기 전용)
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
시드 서버의 주소를 반환합니다. 클러스터가 SDAM의 결과로 사용 중인 현재 주소가 아니라 인스턴스화될 때 클러스터에 제공된 주소를 포함합니다.
331 332 333 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', 줄 331 def 시드 @seeds end |
#서버_선택_세마포어 ⇒ 객체 (읽기 전용)
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
488 489 490 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', 줄 488 def server_selection_semapher @server_selection_semapher end |
#session_pool ⇒ 객체 (읽기 전용)
336 337 338 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', 줄 336 def session_pool @session_pool end |
#srv_monitor ⇒ 객체 (읽기 전용)
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
358 359 360 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', 줄 358 def srv_monitor @srv_monitor end |
#topology ⇒ 정수? (읽기 전용)
논리적 세션 시간 초과 값(분)입니다.
311 312 313 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', 줄 311 def 토폴로지 @topology end |
클래스 메서드 세부 정보
.create(클라이언트, 모니터링: nil) ⇒ 클러스터
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
클라이언트의 원래 클러스터 인스턴스가 동일하지 않도록 하는 데 사용할 수 있도록 제공된 클라이언트에 대한 클러스터를 생성합니다.
295 296 297 298 299 300 301 302 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', 줄 295 def self.create(고객, 모니터링: nil) cluster = 클러스터.신규( 고객.cluster.주소.map(&:to_s), 모니터링 || 모니터링.신규, 고객., ) 고객.instance_variable_set(:@cluster, cluster) end |
인스턴스 메서드 세부 정보
#==(기타) ⇒ true, false
이 서버 클러스터 가 다른 객체 와 동일한지 확인합니다. 구성된 서버가 아닌 현재 클러스터 에 있는 서버를 확인합니다.
738 739 740 741 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', 줄 738 def ==(기타) 반환 거짓 하지 않는 한 기타.is_a?(클러스터) 주소 == 기타.주소 && == 기타. end |
#add(host, add_options = nil) ⇒ MongoDB Server
제공된 주소를 사용하여 클러스터에 서버를 추가합니다. 기존 서버가 hello를 실행하고 잠재적으로 구성되지 않은 서버가 포함된 경우 새 서버를 자동으로 검색하는 데 유용합니다.
836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', 줄 836 def 추가(호스트, =nil) 주소 = 주소.신규(호스트, ) 만약 !주소.포함?(주소) opts = .merge(모니터: 거짓) # 모니터링 스레드를 시작하지 않는 경우, # 풀의 채우기 스레드를 시작합니다. opts.병합!(populator_io: 거짓) 하지 않는 한 .가져오기(:monitoring_io, true) # 부하가 분산된 토폴로지에서는 모든 서버가 다음과 같아야 합니다. # 로드 밸런서 (load_balancer: true가 옵션에 지정됨) # 하지만 이 옵션은 # 서버가 알 수 없는 서버로 시작된 척하는 사양 # 로드 밸런서 에 서버 설명 변경 이벤트 게시 하나. 이 서버에 대한 실제 올바른 설명이 설정됩니다. # fabrication_lb_sdam_events_and_set_server_type 메서드를 사용합니다. 서버 = 서버.신규(주소, self, @monitoring, event_listeners, opts) @update_lock.동기화 do # 서버가 @servers에 있는지 다시 확인해야 합니다. # 이전 수표는 잠금 상태가 아닙니다. # 여기서는 업데이트 잠금 상태이므로 server_list를 호출할 수 없습니다. 반환 만약 @servers.map(&:address).포함?(주소) @servers.push(서버) end 만약 .nil? || [:monitor] != 거짓 서버.start_monitoring end 서버 end end |
주소 # ⇒ Array<Mongo::Address>
클러스터의 주소입니다.
451 452 453 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', 줄 451 def 주소 server_list.map(&:address) end |
#close ⇒ nil
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
애플리케이션은 Client#close를 호출하여 연결을 해제해야 합니다.
클러스터를 닫습니다.
이 메서드를 호출하는 대신 클러스터를 호출합니다. 이 메서드는 내부 드라이버 전용입니다.
클러스터의 모든 서버 연결을 해제하고 프로세스에서 적절한 SDAM 이벤트를 게시합니다. SRV 모니터링이 활성화된 경우 중지합니다. 클러스터의 연결이 끊어진 것으로 표시합니다.
비공개 클러스터는 더 이상 사용할 수 없습니다. 클라이언트가 다시 연결되면 새 클러스터 인스턴스가 생성됩니다.
506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', 줄 506 def 닫기 @state_change_lock.동기화 do 하지 않는 한 연결 중? || 연결됨? 반환 nil end 만약 [:cleanup] != 거짓 session_pool.end_sessions @periodic_executor.중지! end @srv_monitor_lock.동기화 do 만약 @srv_monitor @srv_monitor.중지! end end @servers.각 do |서버| 만약 서버.연결됨? 서버.닫기 publish_sdam_event( 모니터링::SERVER_CLOSED, 모니터링::이벤트::ServerClosed.신규(서버.주소, 토폴로지) ) end end publish_sdam_event( 모니터링::TOPOLOGY_CLOSED, 모니터링::이벤트::토폴로지 닫힘.신규(토폴로지) ) @update_lock.동기화 do @connecting = @connected = 거짓 end end nil end |
#연결되었나요? ⇒ true|false
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
클러스터 객체 가 클러스터 에 연결되어 있는지 여부입니다.
424 425 426 427 428 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', 줄 424 def 연결됨? @update_lock.동기화 do !!@connected end end |
#연결 중이세요? ⇒ true|false
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
클러스터 객체가 해당 클러스터에 연결 중인 상태인지 여부입니다.
412 413 414 415 416 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', 줄 412 def 연결 중? @update_lock.동기화 do !!@connecting end end |
#disable_server_if_connected(서버) ⇒ 객체
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
944 945 946 947 948 949 950 951 952 953 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', 줄 944 def connect_server_if_connected(서버) 만약 서버.연결됨? 서버.clear_description 서버.연결 해제! publish_sdam_event( 모니터링::SERVER_CLOSED, 모니터링::이벤트::ServerClosed.신규(서버.주소, 토폴로지) ) end end |
#has_readable_server?(server_selector = nil) ⇒ true, false
클러스터 가 제공된 읽기 설정 (read preference) 에 대해 읽기 가능 서버 를 선택할지 결정합니다.
755 756 757 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', 줄 755 def has_readable_server?(server_selector = nil) 토폴로지.has_readable_server?(self, server_selector) end |
#has_writeable_server? ⇒ true, false
클러스터가 쓰기 가능한 서버를 선택할지 결정합니다.
767 768 769 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', 줄 767 def has_writeable_server? 토폴로지.has_writeable_server?(self) end |
#heartbeat_interval ⇒ Float
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
서버 의 새로 고침 간격을 가져옵니다. 이는 옵션을 통해 정의되거나 기본값 은 10 입니다.
403 404 405 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', 줄 403 def heartbeat_interval [:하트비트_빈도] || 서버::모니터::DEFAULT_HEARTBEAT_INTERVAL end |
#검사 ⇒ string
검사에 사용할 수 있도록 더 멋진 형식의 string 을 가져옵니다.
473 474 475 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', 줄 473 def 검사 "#<Mongo::Cluster:0x#{object_id} 서버=#{서버} 토폴로지=#{토폴로지.요약}>" end |
#load_balancing? ⇒ true | false
클러스터 가 로드 밸런싱된 토폴로지 에 구성되었는지 여부를 반환합니다.
345 346 347 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', 줄 345 def load_balancing? 토폴로지.is_a?(토폴로지::로드 밸런싱) end |
#max_read_retries ⇒ 정수
max_read_retries는 클러스터 인스턴스 가 아닌 클라이언트 인스턴스 에서 검색해야 하며, 이는 클러스터가 최대 읽기 재시도 횟수에 대해 서로 다른 값을 가진 클라이언트 간에 공유될 수 있기 때문입니다.
레거시 읽기 재시도를 사용할 때 클라이언트 가 읽기 작업을 재시도할 수 있는 최대 횟수를 가져옵니다.
374 375 376 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', 줄 374 def max_read_retries [:max_read_retries] || MAX_READ_RETRIES end |
#Next_primary(ping = nil, 세션 = nil) ⇒ Mongo::Server
작업을 보낼 수 있는 다음 프라이머리 서버 를 가져옵니다.
784 785 786 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', 줄 784 def Next_primary(ping = nil, Session = nil) ServerSelector.기본.select_server(self, nil, Session) end |
#풀(서버) ⇒ Server::ConnectionPool
서버의 연결 풀을 가져옵니다.
799 800 801 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', 줄 799 def 풀(서버) 서버.풀 end |
#read_retry_interval ⇒ Float
read_retry_interval은 클러스터 인스턴스가 아닌 클라이언트 인스턴스에서 검색해야 하는데, 이는 읽기 재시도 간격에 대해 서로 다른 값을 가진 클라이언트 간에 클러스터를 공유할 수 있기 때문입니다.
레거시 읽기 재시도를 사용할 때 읽기를 재시도하는 간격(초)을 가져옵니다.
392 393 394 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', 줄 392 def read_retry_interval [:read_retry_interval] || READ_RETRY_INTERVAL end |
#다시 연결하세요! ⇒ true
이 메서드를 호출하는 대신 Client#reconnect를 사용하여 클러스터에 다시 연결합니다. 이 메서드는 SDAM 이벤트를 전송하지 않습니다.
모든 서버를 다시 연결합니다.
550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', 줄 550 def 다시 연결합니다! @state_change_lock.동기화 do @update_lock.동기화 do @connecting = true end 스캔! 서버.각 do |서버| 서버.다시 연결합니다! end @periodic_executor.다시 시작! @srv_monitor_lock.동기화 do 만약 @srv_monitor @srv_monitor.실행! end end @update_lock.동기화 do @connecting = 거짓 @connected = true end end end |
#제거(호스팅하다, 연결 해제: true) ⇒ Array<Server> | true | false
이 메서드의 반환 값은 드라이버의 공개 API에 포함되어 있지 않습니다.
제공된 주소에 해당하는 서버가 있는 경우 클러스터에서 제거합니다.
885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', 줄 885 def 제거(호스트, 연결 해제: true) 주소 = 주소.신규(호스트) Removed_servers = [] @update_lock.동기화 do @servers.delete_if do |서버| (서버.주소 == 주소).탭 do |삭제| 만약 삭제 Removed_servers << 서버 end end end end 만약 연결 해제 != 거짓 Removed_servers.각 do |서버| connect_server_if_connected(서버) end end 만약 연결 해제 != 거짓 Removed_servers.어떤? other Removed_servers end end |
#run_sdam_flow(previous_desc, updated_desc, options = {}) ⇒ 객체
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
클러스터에서 SDAM 흐름을 실행합니다.
이 메서드는 모니터링 또는 비모니터링 연결에서 서버가 반환한 새 서버 설명을 처리하기 위해 호출할 수 있으며, (네트워크) 오류의 결과로 서버를 알 수 없음으로 표시할 때 드라이버에 의해 호출될 수 있습니다.
636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', 줄 636 def run_sdam_flow(이전_설명, updated_desc, = {}) 만약 load_balancing? 만약 updated_desc.config.비어 있나요? 하지 않는 한 [:keep_connection_pool] server_list.각 do |서버| # TODO는 updated_desc에서 서비스 ID를 제거해야 하나요? # 다음과 같이 단언할 수도 있습니다. # options[:service_id] == updated_desc.service_id 오류 = [:scan_error] 인터럽트 = 오류 && (오류.is_a?(오류::SocketError) || 오류.is_a?(오류::SocketTimeoutError)) 서버.clear_connection_pool(service_id: [:service_id], interrupt_in_use_connections: 인터럽트) end end end 반환 end @sdam_flow_lock.동기화 do flow = S담플로우.신규(self, 이전_설명, updated_desc, awaited: [:awaited]) flow.server_description_changed # SDAM 흐름은 업데이트된 설명을 변경할 수 있습니다. 서버를 사용할 수 있는 경우 # 브로드캐스트 목적의 버전 updated_desc = flow.updated_desc 하지 않는 한 [:keep_connection_pool] 만약 flow.created_unknown? server_list.각 do |서버| 만약 서버.주소 == updated_desc.주소 오류 = [:scan_error] 인터럽트 = 오류 && (오류.is_a?(오류::SocketError) || 오류.is_a?(오류::SocketTimeoutError)) 서버.clear_connection_pool(interrupt_in_use_connections: 인터럽트) end end end end start_stop_srv_monitor end # 일부 업데이트된 설명(예: 일치하지 않는 설명)으로 인해 설명을 처리 중인 # 서버가 제거되고 있습니다. # 토폴로지. 이 경우 서버의 모니터링 스레드는 # 죽었습니다. 결과적으로 흐름 호출 이후의 코드는 실행되지 않을 수 있습니다. # 특정 모니터 인스턴스 이므로 일반적으로 다음이 없어야 합니다. # 플로우 호출 이후 이 메서드의 모든 코드입니다. # # 그러나 이 브로드캐스트 호출은 모니터링이 # 스레드가 종료되었습니다. # 현재 대기 중이어야 하므로 세마포어에 신호를 보내지 않습니다. # 문제를 일으키지 않아야 합니다. 하지 않는 한 updated_desc.알 수 없음? server_selection_semapher.브로드캐스트 end end |
#스캔!(sync = true) ⇒ true
동기 및 비동기 스캔 모두에서 각 모니터 스레드는 스캔 사이의 최소 간격을 유지하므로 이 메서드를 호출해도 다음 순간에 특정 서버에서 스캔이 시작되지 않을 수 있습니다.
클러스터의 알려진 모든 서버를 강제로 스캔합니다.
기본값인 sync 매개변수가 true인 경우, 이 메서드를 호출한 스레드에서 스캔이 동기적으로 수행됩니다. 클러스터의 각 서버는 순차적으로 검사됩니다. 클러스터에 서버가 많거나 응답 속도가 느린 경우 작업이 오래 실행될 수 있습니다.
동기화 매개 변수가 false이면 이 메서드는 모든 서버 모니터 스레드에 즉시 스캔을 수행하도록 지시하고 스캔 결과를 기다리지 않고 반환됩니다.
595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', 줄 595 def 스캔!(동기화=true) 만약 동기화 server_list.각 do |서버| 만약 서버.모니터 서버.모니터.스캔! other log_warn("클러스터 #{요약}에서 동기 스캔이 요청 되었지만 서버 #{서버} 에 모니터가 없습니다. ") end end other server_list.각 do |서버| 서버.scan_semapher.신호 end end true end |
#서버 ⇒ 배열<MongoDB 서버>
클러스터에서 작업을 실행할 수 있는 서버 후보 목록을 가져옵니다.
439 440 441 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', 줄 439 def 서버 토폴로지.서버(server_list) end |
#server_list ⇒ 객체
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
937 938 939 940 941 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', 줄 937 def server_list @update_lock.동기화 do @servers.dup end end |
#set_server_list(server_address_strs) ⇒ 객체
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
서버 목록을 제공된 주소 문자열 목록의 주소로 설정합니다.
이 메서드는 모니터링되는 호스트 이름에 대한 새 DNS 레코드를 수신한 후 SRV 모니터에 의해 호출됩니다.
전달된 서버 주소 목록에 주소가 없는 클러스터의 서버를 제거하고 인수에 아직 클러스터에 없는 주소에 대한 서버를 추가합니다.
707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', 줄 707 def set_server_list(server_address_strs) @sdam_flow_lock.동기화 do # 새 주소 중 하나가 현재 서버 목록에 없는 경우, # 서버 목록에 추가합니다. server_address_strs.각 do |주소_str| 하지 않는 한 server_list.어떤? { |서버| 서버.주소.시드 == 주소_str } 추가(주소_str) end end # 서버 주소 중 하나가 새 주소 목록에 없는 경우, # 서버 목록에서 해당 서버를 제거합니다. server_list.각 do |서버| 하지 않는 한 server_address_strs.어떤? { |주소_str| 서버.주소.시드 == 주소_str } 제거(서버.주소.시드) end end end end |
#요약 ⇒ 객체
이 방법은 실험적이며 변경될 수 있습니다.
481 482 483 484 485 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', 줄 481 def 요약 "#<Cluster " + "topology=#{topology.요약} "+ "server=[#{server_list.map(&:summary).join(',')}]>" end |
#update_cluster_time(result) ⇒ 객체
응답에 표시되는 최대 클러스터 시간을 업데이트합니다.
813 814 815 816 817 818 819 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', 줄 813 def update_cluster_time(결과) 만약 cluster_time_doc = 결과.cluster_time @cluster_time_lock.동기화 do advanced_cluster_time(cluster_time_doc) end end end |
#update_topology(new_topology) ⇒ 객체
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', 줄 910 def update_topology(new_topology) old_topology = nil @update_lock.동기화 do old_topology = 토폴로지 @topology = new_topology end # 새 토폴로지에 데이터 보유 서버가 있는 경우 다음 여부를 확실히 알 수 있습니다. # 세션이 지원됩니다 - 캐시된 값을 업데이트 하세요. # 새 토폴로지 에 데이터 보유 서버가 없는 경우 이전 값을 그대로 둡니다. # 있는 그대로의 세션_지원되나요? 메서드가 서버 선택을 수행합니다. # 세션 지원 을 정확하게 결정하려고 시도합니다. # 마지막으로 알려진 값입니다. 만약 토폴로지.data_bearing_servers? 세션_지원 = !!토폴로지.logical_session_timeout @update_lock.동기화 do @sessions_supported = 세션_지원 end end publish_sdam_event( 모니터링::TOPOLOGY_CHANGED, 모니터링::이벤트::토폴로지 변경됨.신규(old_topology, 토폴로지) ) end |
#validate_session_support! ⇒ 객체
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
운전자 가 연결된 배포서버 가 세션을 지원 하지 않는 경우 Error::SessionsNotAvailable이 발생합니다.
세션 지원은 시간이 지남에 따라 변경될 수 있습니다(예: 배포서버의 업그레이드 또는 다운그레이드). 클라이언트가 서버에 연결되어 있지 않고 서버 선택 시간 초과 기간 동안 서버를 찾지 못하면 이 메서드는 NoServerAvailable을 발생시킵니다. 이 메서드는 작업 실행 흐름에서 호출되며, NoServerAvailable을 발생시키면 해당 예외와 함께 전체 작업이 실패하게 됩니다. 시도 중인 작업에 적합함)이(가) 구체화되지 않았습니다.
976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 |
# 파일 'build/ruby-driver-v2.19/lib/mongo/cluster.rb', 줄 976 def validate_session_support! 만약 토폴로지.is_a?(토폴로지::로드 밸런싱) 반환 end @state_change_lock.동기화 do @sdam_flow_lock.동기화 do 만약 토폴로지.data_bearing_servers? 하지 않는 한 토폴로지.logical_session_timeout raise_sessions_not_supported end end end end # 알려진 데이터 보유 서버 없음 - 서버 선택을 수행하여 다음을 시도합니다. # 그 중 하나 이상으로부터 응답을 받아 정확한 값을 반환합니다. # 세션이 현재 지원되는지 여부를 평가합니다. ServerSelector.get(모드: :primary_preferred).select_server(self) @state_change_lock.동기화 do @sdam_flow_lock.동기화 do 하지 않는 한 토폴로지.logical_session_timeout raise_sessions_not_supported end end end end |