클래스: Mongo::Server::ConnectionPool
- 상속:
-
객체
- 객체
- Mongo::Server::ConnectionPool
- 확장자:
- 전달 가능
- 다음을 포함합니다.
- 로깅 가능, 모니터링::게시 가능
- 다음에 정의됨:
- build/ruby-driver-v2.19/lib/mongo/server/connection_pool.rb,
build/ruby-driver-v2.19/lib/mongo/server/connection_pool/populator.rb,
build/ruby-driver-v2.19/lib/mongo/server/connection_pool/generation_manager.rb
개요
서버 연결을 위한 연결 풀을 나타냅니다.
네임스페이스 아래에 정의됨
상수 요약 접기
- DEFAULT_MAX_SIZE =
연결 풀 의 기본값 최대 크기입니다.
20.동결
- DEFAULT_MIN_SIZE =
연결 풀 의 기본값 최소 크기입니다.
0.동결
- DEFAULT_WAIT_TIMEOUT =
연결을 기다릴 기본값 시간 제한(초)입니다.
이 시간 제한은 인플로우 스레드가 백그라운드 스레드가 연결을 설정하기를 기다리는 동안 적용됩니다(따라서 할당된 시간 내에 연결, 핸드셰이크 및 인증해야 함).
현재 10 초로 설정되어 있습니다. 기본 연결 시간 제한 자체는 10 초이지만, 시간 제한을 크게 설정하면 역방향 프록시에서 요청 시간이 초과되면 애플리케이션에 문제가 발생할 수 있으므로 15 초를 초과하는 연결은 잠재적으로 위험할 수 있습니다.
10.동결
Loggable에서 포함된 상수
인스턴스 속성 요약 접기
-
#creation_manager ⇒ 정수
읽기 전용
비공개
생성 대기열에서 현재 사용 중인 연결의 생성입니다.
- #max_connecting ⇒ 객체 읽기 전용 비공개
-
옵션 #개 ⇒ 해시
읽기 전용
옵션 풀 옵션입니다.
-
#채우기 _세마포어 ⇒ 객체
읽기 전용
조건 변수는 풀 크기가 변경되어 채우기를 깨울 때 브로드캐스트됩니다.
- #채우기 ⇒ 객체 읽기 전용 비공개
- #서버 ⇒ 객체 읽기 전용 비공개
모니터링::게시 가능에 포함된 속성
클래스 메서드 요약 접기
-
.finalize(사용 가능한_연결, 보류 중인_연결, 채우기) ⇒ Proc
가비지 컬렉션을 위한 연결 풀을 마무리합니다.
인스턴스 메서드 요약 접기
-
#available_count ⇒ 정수
풀에서 사용 가능한 연결 수입니다.
-
#check_in(connection) ⇒ 객체
풀에 대한 연결을 다시 확인합니다.
-
#check_out(connection_global_id: nil) ⇒ Mongo::Server::Connection
풀에서 연결을 확인합니다.
-
#clear(options = nil) ⇒ true
풀의 모든 유휴 연결을 닫고 현재 체크아웃된 연결이 풀에 다시 체크인될 때 닫히도록 예약합니다.
-
#close(options = nil) ⇒ true
풀을 닫은 것으로 표시하고, 풀의 모든 유휴 연결을 닫으며, 현재 체크아웃된 연결이 풀에 다시 체크인될 때 닫히도록 예약합니다.
-
#close_idle_sockets ⇒ 객체
옵션이 설정된 경우 최대 유휴 시간보다 오랫동안 열려 있던 소켓을 닫습니다.
-
#닫았나요? ⇒ true | false
풀이 닫혔는지 여부입니다.
-
#연결 해제!(options = nil) ⇒ 객체
비공개
풀 연결을 해제합니다.
-
#do_check_in(connection) ⇒ 객체
이미 잠금을 획득한 후 체크인을 실행합니다.
- #do_clear(options = nil) ⇒ 객체
-
#do_pause ⇒ 객체
비공개
잠금을 획득하지 않고 연결 풀을 일시 중지된 상태로 표시합니다.
-
#initialize(server, options = {}) ⇒ ConnectionPool
생성자
새 연결 풀을 만듭니다.
-
#검사 ⇒ string
풀에 대해 예쁜 인쇄된 string 검사를 받으세요.
-
#max_idle_time ⇒ Float | nil
소켓이 풀에 체크인된 이후 유휴 상태로 유지될 수 있는 최대 시간(초)입니다(설정된 경우).
-
#max_size ⇒ 정수
연결 풀 의 최대 크기를 가져옵니다.
-
#min_size ⇒ 정수
연결 풀의 최소 크기를 가져옵니다.
-
#pause ⇒ 객체
연결 풀을 일시 중지됨으로 표시합니다.
-
#일시 중지되었나요? ⇒ true | false
연결 풀 닫히지 않았거나 준비되지 않은 경우 일시 중지됩니다.
-
#채우기 ⇒ true | false
비공개
이 메서드는 1 세 가지 작업을 수행합니다.
-
#준비 됨 ⇒ 객체
연결을 생성하고 반환하도록 풀에 지시합니다.
-
#준비되었나요? ⇒ true | false
풀이 준비되었는지 여부입니다.
-
#size ⇒ Integer
연결 풀의 크기입니다.
-
#stop_populator ⇒ 객체
비공개
백그라운드 채우기 스레드를 중지하고 생성된 연결 중 아직 연결되지 않은 연결을 모두 정리합니다.
- #요약 ⇒ 객체
-
#available_connections ⇒ 정수
비공개
풀에서 사용할 수 없는 연결의 수입니다.
-
#wait_timeout ⇒ Float
연결을 사용할 수 있을 때까지 기다리는 시간(초)입니다.
-
#with_connection(connection_global_id: nil) ⇒ 객체
체크인/체크아웃 로직을 처리하는 동안 차단을 연결에 양보합니다.
Monitoring::Publishable에 포함된 메서드
#publish_cmap_event, #publish_event, #publish_s담_event
Loggable에 포함된 메서드
#log_debug, #log_error, #log_fatal, #log_info, #log_warn, #logger
생성자 세부 정보
#initialize(서버, options = {}) ⇒ ConnectionPool
새 연결 풀을 만듭니다.
참고: 또한 이 풀에서 생성한 연결에 대한 옵션은 다음과 같아야 합니다.
be included in the options passed here, and they will be forwarded to
any connections created by the pool.
92 93 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 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 |
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 92 def 초기화(서버, = {}) 하지 않는 한 서버.is_a?(서버) 올리다 ArgumentError, '첫 번째 인수는 서버 인스턴스 여야 합니다.' end = .dup 만약 [:min_size] && [:min_pool_size] && [:min_size] != [:min_pool_size] 올리다 ArgumentError, "최소 크기 #{[:min_size]} 가 최소 풀 크기 #{[:min_pool_size]}와 동일하지 않습니다. end 만약 [:max_size] && [:max_pool_size] && [:max_size] != [:max_pool_size] 올리다 ArgumentError, "최대 크기 #{[:max_size]} 가 최대 풀 크기 #{[:max_pool_size]}와 동일하지 않습니다. " end 만약 [:wait_timeout] && [:wait_queue_timeout] && [:wait_timeout] != [:wait_queue_timeout] 올리다 ArgumentError, "대기 시간 제한#{[:wait_timeout]} 은 대기열 제한 시간#{[:wait_queue_timeout]} 과 동일하지 않습니다 . end [:min_size] ||= [:min_pool_size] .삭제(:min_pool_size) [:max_size] ||= [:max_pool_size] .삭제(:max_pool_size) 만약 [:min_size] && [:max_size] && ([:max_size] != 0 && [:min_size] > [:max_size]) then 올리다 ArgumentError, "최소 크기 #{[:min_size]} 가 최대 크기 #{[:max_size]} } 를 초과할 수 없습니다. " end 만약 [:wait_queue_timeout] [:wait_timeout] ||= [:wait_queue_timeout] end .삭제(:wait_queue_timeout) @server = 서버 @options = .동결 @generation_manager = 생성 관리자.신규(서버: 서버) @ready = 거짓 @closed = 거짓 # 이 풀이 소유한 연결은 다음 중 하나에 있어야 합니다. # 사용 가능한 연결 배열 ( 스택 으로 사용됨) # 또는 체크아웃된 연결 설정하다. @available_connections = available_connections = [] @checked_out_connections = 세트.신규 @pending_connections = 세트.신규 @interrupt_connections = [] # @available_connections에 대한 액세스를 동기화하는 데 사용되는 뮤텍스 및 # @checked_out_connections. 풀 객체 는 스레드로부터 안전하므로 # 일반적으로 인스턴스 변수를 조회 하거나 수정하는 모든 메서드 # 이 잠금 상태에서 수행해야 합니다. @ 락 = 뮤텍스.신규 # 백그라운드 스레드는 다음의 크기를 유지 관리합니다. # 풀을 최소 min_size로 설정 @populator = 인구.신규(self, ) @popule_semapher = 세마포어.신규 # 첫 번째 체크인 check_out: max_pool_size를 시행하다 조건 변수입니다. # 이 조건 변수는 다음과 같은 경우 신호를 보내야 합니다. # 사용할 수 없는 연결이 감소합니다(pending + Pending_connections + # available_connections). @size_cv = mongo::조건 변수.신규(@ 락) # size_cv를 초과한 스레드 수를 나타냅니다. # 게이트이지만 보류 중인 연결에 추가할 연결을 획득하지 않았습니다. # 설정하다. @connection_requests = 0 # 두 번째 검사를 시행할 조건 변수 check_out: max_connecting. # i 조건 변수는 대기 중인 # 연결이 감소합니다. @max_connecting_cv = mongo::조건 변수.신규(@ 락) @max_connecting = .가져오기(:max_connecting, 2) ObjectSpace.describe_finalizer(self, self.클래스.마무리(@available_connections, @pending_connections, @populator)) publish_cmap_event( 모니터링::이벤트::Cmap::풀 생성.신규(@server.주소, , self) ) end |
인스턴스 속성 세부 정보
#creation_manager ⇒ 정수 (읽기 전용)
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
현재 대기열에서 사용 중인 연결의 생성 생성을 반환합니다.
216 217 218 |
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 216 def generate_manager @generation_manager end |
#max_connecting ⇒ 객체 (읽기 전용)
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
325 326 327 |
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 325 def max_connecting @max_connecting end |
#options ⇒ 해시 (읽기 전용)
반환값 options 풀 옵션입니다.
170 171 172 |
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 170 def @options end |
#채우기 _세마포어 ⇒ 객체 (읽기 전용)
풀 크기가 변경되어 채우기를 깨울 때 조건 변수가 브로드캐스트됩니다.
55 56 57 |
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 55 def 채우기 세마포어 @popule_semapher end |
#populator ⇒ 객체 (읽기 전용)
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
322 323 324 |
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 322 def 채우기 @populator end |
#서버 ⇒ 객체 (읽기 전용)
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
173 174 175 |
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 173 def 서버 @server end |
클래스 메서드 세부 정보
.finalize(사용 가능한_연결, 보류 중인_연결, 채우기) ⇒ Proc
가비지 컬렉션을 위한 연결 풀을 마무리합니다.
787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 |
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 787 def self.마무리(available_connections, 보류 중인_연결, 채우기) proc do available_connections.각 do |연결| 연결.연결 해제!(이유: :pool_closed) end available_connections.지우기 보류 중인_연결.각 do |연결| 연결.연결 해제!(이유: :pool_closed) end 보류 중인_연결.지우기 # 종료자는 체크아웃된 연결을 닫지 않습니다. # 자체적으로 가비지를 수집해야 합니다. # 그러면 닫힙니다. end end |
인스턴스 메서드 세부 정보
#available_count ⇒ 정수
풀에서 사용 가능한 연결 수입니다.
274 275 276 277 278 279 280 |
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 274 def available_count raise_if_closed! @ 락.동기화 do @available_connections.분량 end end |
#check_in(connection) ⇒ 객체
풀에 대한 연결을 다시 확인합니다.
연결이 이전에 이 풀에서 생성된 적이 있어야 합니다.
379 380 381 382 383 384 385 386 387 |
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 379 def check_in(연결) check_invariants @ 락.동기화 do do_check_in(연결) end 보장 check_invariants end |
#check_out(connection_global_id: nil) ⇒ Mongo::Server::Connection
풀에서 연결을 확인합니다.
풀에 활성 연결이 있는 경우 가장 최근에 사용된 연결이 반환됩니다. 그렇지 않고 연결 풀 크기가 최대 크기보다 작은 경우 새 연결을 만들고 반환합니다. 그렇지 않고 대기 시간 제한까지 기다렸다가 여전히 활성 연결이 없고 풀 크기가 최대인 경우 Timeout::Error를 발생시킵니다.
반환된 연결은 풀의 최대 크기에 포함됩니다. 호출자가 연결 사용을 마치면 check_in 메서드를 통해 연결을 다시 체크인해야 합니다.
345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 |
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 345 def check_out(connection_global_id: nil) check_invariants publish_cmap_event( 모니터링::이벤트::Cmap::connectionCheckOutStarted 이벤트.신규(@server.주소) ) raise_if_pool_closed! raise_if_pool_paused_locked! 연결 = recover_and_connect_connection(connection_global_id) publish_cmap_event( 모니터링::이벤트::Cmap::connectionCheckedOut.신규(@server.주소, 연결.id, self), ) 만약 Lint.활성화? 하지 않는 한 연결.연결됨? 올리다 오류::LintError, "#{주소} 에 대한연결 풀이 연결 이 끊긴 연결 #{연결.생성} } 을 체크아웃했습니다:#{연결.ID}" end end 연결 보장 check_invariants end |
#clear(options = nil) ⇒ true
풀의 모든 유휴 연결을 닫고 현재 체크아웃된 연결이 풀에 다시 체크인될 때 닫히도록 예약합니다. 풀이 일시 중지되고 배경 에서 새 연결을 생성하지 않으며 준비됨으로 표시될 때까지 체크아웃 요청이 실패합니다.
497 498 499 500 501 502 503 504 505 |
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 497 def 지우기( = nil) raise_if_closed! 만약 Lint.활성화? && !@server.알 수 없음? 올리다 오류::LintError, "{@ 서버.summary}서버 서버 풀을 지우려고 시도 하는 중" end do_clear() end |
#close(options = nil) ⇒ true
풀을 닫은 것으로 표시하고, 풀의 모든 유휴 연결을 닫으며, 현재 체크아웃된 연결이 풀에 다시 체크인될 때 닫히도록 예약합니다. 강제 옵션이 true이면 체크아웃된 연결도 닫힙니다. 풀이 닫힌 후 사용하려고 하면 Error::PoolClosedError가 발생합니다.
621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 |
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 621 def 닫기( = nil) 반환 만약 닫힘? ||= {} stop_populator @ 락.동기화 do 까지 @available_connections.비어 있나요? 연결 = @available_connections.팝 연결.연결 해제!(이유: :pool_closed) end 만약 [:force] 까지 @checked_out_connections.비어 있나요? 연결 = @checked_out_connections.가져(1).first 연결.연결 해제!(이유: :pool_closed) @checked_out_connections.삭제(연결) end end 하지 않는 한 && [:Stay_ready] # 락 을 해제하기 전에 풀을 닫힌 상태로 표시합니다. # 연결을 만들거나, 체크인하거나, 체크아웃할 수 없습니다. @closed = true @ready = 거짓 end @max_connecting_cv.브로드캐스트 @size_cv.브로드캐스트 end publish_cmap_event( 모니터링::이벤트::Cmap::풀 마감.신규(@server.주소, self) ) true end |
#close_idle_sockets ⇒ 객체
최대 유휴 시간보다 오래 열려 있던 소켓을 닫습니다.
if the option is set.
708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 |
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 708 def close_idle_sockets 반환 만약 닫힘? 반환 하지 않는 한 max_idle_time @ 락.동기화 do i = 0 동안 i < @available_connections.분량 연결 = @available_connections[i] 만약 last_checkin = 연결.last_checkin 만약 (시간.지금 - last_checkin) > max_idle_time 연결.연결 해제!(이유: :idle) @available_connections.delete_at(i) @popule_semapher.신호 다음 end end i += 1 end end end |
#닫았나요? ⇒ true | false
풀이 닫혔는지 여부입니다.
287 288 289 |
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 287 def 닫힘? !!@closed end |
#연결 해제!(options = nil) ⇒ 객체
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
풀 연결을 해제합니다.
풀이 닫힌 경우 이 메서드는 아무 작업도 수행하지 않지만 clear
에서 PoolClosedError를 발생시키는 것을 제외하고 clear
가 수행하는 모든 작업을 수행합니다.
514 515 516 517 518 519 520 |
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 514 def 연결 해제!( = nil) do_clear() 구출 오류::PoolClosedError # "연결 해제됨" 상태 는 닫힘과 일시 중지 사이입니다. # 풀 연결을 끊으려고 할 때 풀을 다음과 같이 허용합니다. # 이미 종료되었습니다. end |
#do_check_in(connection) ⇒ 객체
이미 잠금을 획득한 후 체크인을 실행합니다.
392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 |
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 392 def do_check_in(연결) # 연결이 중단되면 풀에 다시 확인됩니다. # 닫습니다. 이전에 연결을 사용하고 있던 작업은 다음과 같습니다. # interrupted는 풀에 다시 체크인하려고 시도합니다. # 이미 닫혀 풀에서 제거되었으므로 무시해야 합니다. 반환 만약 연결.닫힘? && 연결.중단? 하지 않는 한 연결.connection_pool == self 올리다 ArgumentError, "이 풀에서 체크아웃되지 않은 연결을 체크인하려고 합니다: #{연결} 풀에서 체크아웃됨 #{연결.연결풀} (#{자기})" end 하지 않는 한 @checked_out_connections.포함?(연결) 올리다 ArgumentError, "현재 이 풀에서 체크아웃되지 않은 연결을 체크인하려고 합니다: #{connection} (for #{self})" end # 참고: 이벤트 핸들러가 발생하면 리소스 에 신호가 전달되지 않습니다. # 이는 연결이 해제되기를 기다리는 스레드가 다음과 같은 경우를 의미합니다. # 풀이 최대 크기일 때 시간이 초과될 수 있습니다. # 이 메서드가 완료된 후 대기를 시작하는 스레드( # 예외)는 괜찮습니다. @checked_out_connections.삭제(연결) @size_cv.신호 publish_cmap_event( 모니터링::이벤트::Cmap::connectionCheckedIn.신규(@server.주소, 연결.id, self) ) 만약 연결.중단? 연결.연결 해제!(이유: :stale) 반환 end 만약 연결.오류? 연결.연결 해제!(이유: :error) 반환 end 만약 닫힘? 연결.연결 해제!(이유: :pool_closed) 반환 end 만약 연결.닫힘? # 연결이 예시 습니다. # 네트워크 오류입니다. 여기서는 다른 작업을 수행할 필요가 없습니다. @popule_semapher.신호 elsif 연결.생성 != 생성(service_id: 연결.service_id) && !연결.고정? # 연결이 고정됨으로 표시되면 트랜잭션 에서 사용됩니다. 로드 밸런싱 설정에서 # 또는 일련의 커서 작업. # 이 경우 연결이 끊어지면 안 됩니다. # 고정 해제되었습니다. 연결.연결 해제!(이유: :stale) @popule_semapher.신호 other 연결.record_checkin! @available_connections << 연결 @max_connecting_cv.신호 end end |
#do_clear(options = nil) ⇒ 객체
522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 |
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 522 def do_clear( = nil) check_invariants service_id = && [:service_id] @ 락.동기화 do # 풀 지우기 이벤트를 내보내기 전에 세대를 충돌시켜야 합니다. @generation_manager.범프(service_id: service_id) 하지 않는 한 && [:lazy] close_available_connections(service_id) end 만약 && [:interrupt_in_use_connections] Schedule_for_interruption(@checked_out_connections, service_id) Schedule_for_interruption(@pending_connections, service_id) end 만약 @ready publish_cmap_event( 모니터링::이벤트::Cmap::풀 지우기.신규( @server.주소, service_id: service_id, interrupt_in_use_connections: &.[](:interrupt_in_use_connections) ) ) # 서버가 알 수 없음으로 표시된 경우에만 연결 풀을 일시 중지합니다. # 그렇지 않으면 준비된 풀로 재시도를 허용합니다. do_pause 만약 !@server.load_balancer? && @server.알 수 없음? end # 여기에서 브로드캐스트하여 모든 스레드가 최대 # 대기 루프를 벗어나기 위해 연결하는 중 오류가 발생했습니다. @max_connecting_cv.브로드캐스트 # 모든 스레드가 풀 크기에서 대기하도록 하려면 여기에서 브로드캐스트합니다. # 대기 루프와 오류에서 벗어나기 위해. @size_cv.브로드캐스트 end # "백그라운드 스레드 예약" 후 삭제. 이것은 책임이 있습니다. # 오래된 스레드를 정리하고 사용 중인 연결을 중단합니다. @popule_semapher.신호 true 보장 check_invariants end |
#do_pause ⇒ 객체
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
잠금을 획득하지 않고 연결 풀을 일시 중지된 상태로 표시합니다.
470 471 472 473 474 475 476 477 478 |
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 470 def do_pause 만약 Lint.활성화? && !@server.알 수 없음? 올리다 오류::LintError, " 알려진서버 #{@server.요약} 에대한 풀을 일시 중지하려고 시도 중" end 반환 만약 !@ready @ready = 거짓 end |
#검사 ⇒ string
풀에 대해 예쁜 인쇄된 string 검사를 받으세요.
668 669 670 671 672 673 674 675 676 677 678 679 |
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 668 def 검사 만약 닫힘? "#<Mongo::Server::ConnectionPool:0x#{object_id} min_size=#{min_size} max_size=#{max_size} " + "wait_timeout=#{wait_timeout} closed>" elsif !준비됐나요? "#<Mongo::Server::ConnectionPool:0x#{object_id} min_size=#{min_size} max_size=#{max_size} " + "wait_timeout=#{wait_timeout} paused>" other "#<Mongo::Server::ConnectionPool:0x#{object_id} min_size=#{min_size} max_size=#{max_size} " + "wait_timeout=#{wait_timeout} current_size=#{size} available=#{available_count}>" end end |
#max_idle_time ⇒ Float | nil
소켓이 풀에 체크인된 이후 유휴 상태로 유지될 수 있는 최대 시간(초)입니다(설정된 경우).
211 212 213 |
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 211 def max_idle_time @max_idle_time ||= [:max_idle_time] end |
#max_size ⇒ Integer
연결 풀 의 최대 크기를 가져옵니다.
183 184 185 |
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 183 def max_size @max_size ||= [:max_size] || [DEFAULT_MAX_SIZE, min_size].최대 end |
#min_size ⇒ Integer
연결 풀의 최소 크기를 가져옵니다.
192 193 194 |
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 192 def min_size @min_size ||= [:min_size] || DEFAULT_MIN_SIZE end |
#pause ⇒ 객체
연결 풀을 일시 중지됨으로 표시합니다.
455 456 457 458 459 460 461 462 463 464 465 |
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 455 def 일시 중지 raise_if_closed! check_invariants @ 락.동기화 do do_pause end 보장 check_invariants end |
#일시 중지되었나요? ⇒ true | false
연결 풀 닫히지 않았거나 준비되지 않은 경우 일시 중지됩니다.
229 230 231 232 233 234 235 |
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 229 def 일시 중지되었나요? raise_if_closed! @ 락.동기화 do !@ready end end |
#채우기 ⇒ true | false
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
이 메서드는 세 가지 작업을 수행합니다.
-
풀의 크기가 min_size보다 작은 경우 풀에 연결을 생성하고 추가합니다. 이 프로세스 중에 소켓 관련 오류가 발생하면 한 번 재시도하고, 두 번째 오류 또는 소켓과 관련이 없는 오류가 발생하면 발생시킵니다.
-
연결 풀에서 오래된 연결을 제거합니다.
-
중단으로 표시된 연결을 중단합니다.
풀 채우기 백그라운드 스레드에서 사용합니다.
발생했거나 소켓과 관련되지 않은 오류
766 767 768 769 770 771 772 773 774 775 776 777 778 |
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 766 def 채우기 반환 거짓 만약 닫힘? 시작 반환 create_and_add_connection 구출 오류::SocketError, 오류::SocketTimeoutError => e # 연결을 연결하는 동안 오류가 발생했습니다. # 이 첫 번째 오류를 무시하고 다시 시도하세요. log_warn("포플러가 #{주소}: #{ e.class}: #{ e} 에 대한연결을 연결하지 못했습니다. 다시 시도합니다.") end 반환 create_and_add_connection end |
#준비 됨 ⇒ 객체
연결을 생성하고 반환하도록 풀에 지시합니다.
570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 |
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 570 def 준비됨 raise_if_closed! # TODO: RUBY-3174 에 다시 추가합니다. # if Lint.enabled? # when @ 서버.connected? # 제기 오류::LintError, "#{@ 서버 .summary} 서버 에 대한 풀을 준비하는 중입니다. 연결이 끊어졌습니다." # end # end @ 락.동기화 do 반환 만약 @ready @ready = true end # CMAP 사양은 다음에 대한 CMAP 이벤트의 직렬화를 요구합니다. # 풀. 이를 구현하려면 이벤트 게시를 다음으로 수행해야 합니다. # 구독자가 호출되는 대신 동기화되는 대기열 # 이와 같은 trigger 메서드에서 인라인으로 가져옵니다. 자기공명영상(MRI)에서 다음과 같이 가정합니다. # 스레드가 할 일이 없어지면 다른 스레드에게 양보합니다. # 이벤트가 실제로 항상 다음 위치에 게시될 가능성이 높습니다. #개의 필수 순서입니다. JRuby는 OS 스레드와 진정한 동시성을 제공하며, # 이러한 보장을 제공하지 않습니다. publish_cmap_event( 모니터링::이벤트::Cmap::풀 준비.신규(@server.주소, , self) ) 만약 .가져오기(:populator_io, true) 만약 @populator.실행? @popule_semapher.신호 other @populator.실행! end end end |
#준비되었나요? ⇒ true | false
풀이 준비되었는지 여부입니다.
294 295 296 297 298 |
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 294 def 준비됐나요? @ 락.동기화 do @ready end end |
#크기 ⇒ 정수
연결 풀의 크기입니다.
사용 가능한 연결과 체크 아웃된 연결이 포함됩니다.
244 245 246 247 248 249 250 |
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 244 def size raise_if_closed! @ 락.동기화 do unsynchronized_size end end |
#stop_populator ⇒ 객체
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
백그라운드 채우기 스레드를 중지하고 생성된 연결 중 아직 연결되지 않은 연결을 모두 정리합니다.
테스트 목적으로 풀을 닫거나 bg 스레드를 종료할 때 사용됩니다. 후자의 경우, 풀을 사용하기 전에 이 메서드를 호출해야 check_out 메서드에 의해 인플로(in-flow)에서 보류 중인 연결의 연결이 생성되지 않았는지 확인할 수 있습니다.
738 739 740 741 742 743 744 745 746 747 748 |
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 738 def stop_populator @populator.중지! @ 락.동기화 do # 채우기가 실행되는 동안 stop_populator가 호출되면 다음이 발생할 수 있습니다. # 연결 대기 중인 연결, 아직 연결되지 않은 연결 # available_connections로 이동되었거나 연결이 available_connections로 이동되었습니다. # 하지만 보류 중인_연결에서 삭제되지 않았습니다. 이러한 항목을 정리해야 합니다. clear_pending_connections end end |
#요약 ⇒ 객체
이 방법은 실험적이며 변경될 수 있습니다.
304 305 306 307 308 309 310 311 312 313 314 315 316 |
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 304 def 요약 @ 락.동기화 do 상태 = 만약 닫힘? 'closed' elsif !@ready 'paused' other '준비' end "#<ConnectionPool size=#{unsynchronized_size} (#{min_size}-#{max_size}) " + "used=#{@checked_out_connections.length}available =#{@available_connections.length} 보류 중=#{@pending_connections.length} #{state}>" end end |
#available_connections ⇒ 정수
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
풀에서 사용할 수 없는 연결 수를 반환합니다. max_pool_size에 도달했는지 여부를 계산하는 데 사용됩니다.
265 266 267 |
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 265 def available_connections @checked_out_connections.분량 + @pending_connections.분량 + @connection_requests end |
#wait_timeout ⇒ Float
연결을 사용할 수 있을 때까지 기다리는 시간(초)입니다.
201 202 203 |
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 201 def wait_timeout @wait_timeout ||= [:wait_timeout] || DEFAULT_WAIT_TIMEOUT end |
#with_connection(connection_global_id: nil) ⇒ 객체
체크인/체크아웃 로직을 처리하는 동안 차단을 연결에 양보합니다.
691 692 693 694 695 696 697 698 699 700 701 702 |
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/ 서버/connection_pool.rb', 줄 691 def with_connection(connection_global_id: nil) raise_if_closed! 연결 = check_out(connection_global_id: connection_global_id) yield(연결) 구출 오류::SocketError, 오류::SocketTimeoutError, 오류::ConnectionPerished => e may_raise_pool_cleared!(연결, e) 보장 만약 연결 check_in(연결) end end |