클래스: Mongo::Server::ConnectionPool
- 상속:
-
객체
- 객체
- Mongo::Server::ConnectionPool
- 확장자:
- 전달 가능
- 다음을 포함합니다.
- 로깅 가능, 모니터링::게시 가능
- 다음에 정의됨:
- lib/ Mongo/ 서버/connection_pool.rb,
lib/ Mongo/ 서버/connection_pool/populator.rb,
lib/ Mongo/ 서버/connection_pool/generation_manager.rb
개요
서버 연결을 위한 연결 풀을 나타냅니다.
네임스페이스 아래에 정의됨
상수 요약 접기
- DEFAULT_MAX_SIZE =
연결 풀 의 기본값 최대 크기입니다.
20- DEFAULT_MIN_SIZE =
연결 풀 의 기본값 최소 크기입니다.
0- DEFAULT_MAX_CONNECTING =
특정 시점에 연결할 수 있는 기본값 최대 연결 수입니다.
2- DEFAULT_WAIT_TIMEOUT =
연결을 기다릴 기본값 시간 제한(초)입니다.
이 시간 제한은 인플로우 스레드가 백그라운드 스레드가 연결을 설정하기를 기다리는 동안 적용됩니다(따라서 할당된 시간 내에 연결, 핸드셰이크 및 인증해야 함).
현재 10 초로 설정되어 있습니다. 기본 연결 시간 제한 자체는 10 초이지만, 시간 제한을 크게 설정하면 역방향 프록시에서 요청 시간이 초과되면 애플리케이션에 문제가 발생할 수 있으므로 15 초를 초과하는 연결은 잠재적으로 위험할 수 있습니다.
10
Loggable에서 포함된 상수
인스턴스 속성 요약 접기
-
#creation_manager ⇒ 정수
읽기 전용
비공개
생성 대기열에서 현재 사용 중인 연결의 생성입니다.
- #max_connecting ⇒ 객체 읽기 전용 비공개
-
옵션 #개 ⇒ 해시
읽기 전용
옵션 풀 옵션입니다.
-
#채우기 _세마포어 ⇒ 객체
읽기 전용
조건 변수는 풀 크기가 변경되어 채우기를 깨울 때 브로드캐스트됩니다.
- #채우기 ⇒ 객체 읽기 전용 비공개
- #서버 ⇒ 객체 읽기 전용 비공개
모니터링::게시 가능에 포함된 속성
클래스 메서드 요약 접기
-
.finalize(available_connections, Pending_connections, _populator) ⇒ Proc
가비지 컬렉션을 위한 연결 풀을 마무리합니다.
인스턴스 메서드 요약 접기
-
#available_count ⇒ 정수
풀에서 사용 가능한 연결 수입니다.
-
#check_in(connection) ⇒ 객체
풀에 대한 연결을 다시 확인합니다.
-
#check_out(connection_global_id: nil, context: nil) ⇒ Mongo::Server::Connection
풀에서 연결을 확인합니다.
-
#check_out_pinned_connection(connection_global_id) ⇒ 연결 | nil
비공개
지정된 글로벌 ID를 가진 고정된 연결이 있는 경우 이미 체크아웃된 고정된 연결을 반환합니다.
-
#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(context = nil) ⇒ Float
연결을 사용할 수 있을 때까지 기다리는 시간(초)입니다.
-
#with_connection(connection_global_id: nil, context: 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
새 연결 풀을 만듭니다.
참고: 또한 이 풀에서 생성된 연결에 대한 옵션은 여기에 전달된 옵션에 포함되어야 하며, 풀에서 생성된 모든 연결에 전달됩니다.
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 168 169 170 171 172 173 174 175 176 177 |
# 파일 'lib/ Mongo/ 서버/connection_pool.rb', 줄 100 def 초기화(서버, = {}) 올리다 ArgumentError, '첫 번째 인수는 서버 인스턴스 여야 합니다.' 하지 않는 한 서버.is_a?(서버) = .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] 올리다 ArgumentError, "최소 크기 #{[:min_size]} 가 최대 크기 #{[:max_size]} } 를 초과할 수 없습니다. " end [:wait_timeout] ||= [:wait_queue_timeout] 만약 [:wait_queue_timeout] .삭제(:wait_queue_timeout) @server = 서버 @options = .동결 @generation_manager = 생성 관리자.신규(서버: 서버) @ready = 거짓 @closed = 거짓 # 이 풀이 소유한 연결은 다음 중 하나에 있어야 합니다. # 사용 가능한 연결 배열 ( 스택 으로 사용됨) # 또는 체크아웃된 연결 설정하다. @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 + # check_out_connections). @size_cv = mongo::조건 변수.신규(@ 락) # size_cv를 초과한 스레드 수를 나타냅니다. # 게이트이지만 보류 중인 연결에 추가할 연결을 획득하지 않았습니다. # 설정하다. @connection_requests = 0 # 두 번째 검사를 시행할 조건 변수 check_out: max_connecting. # 이 조건 변수는 대기 중인 # 연결이 감소합니다. @max_connecting_cv = mongo::조건 변수.신규(@ 락) @max_connecting = .가져오기(:max_connecting, DEFAULT_MAX_CONNECTING) ObjectSpace.describe_finalizer(self, self.클래스.마무리(@available_connections, @pending_connections, @populator)) publish_cmap_event( 모니터링::이벤트::Cmap::풀 생성.신규(@server.주소, , self) ) end |
인스턴스 속성 세부 정보
#creation_manager ⇒ 정수 (읽기 전용)
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
현재 대기열에서 사용 중인 연결의 생성 생성을 반환합니다.
233 234 235 |
# 파일 'lib/ Mongo/ 서버/connection_pool.rb', 줄 233 def generate_manager @generation_manager end |
#max_connecting ⇒ 객체 (읽기 전용)
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
342 343 344 |
# 파일 'lib/ Mongo/ 서버/connection_pool.rb', 줄 342 def max_connecting @max_connecting end |
#options ⇒ 해시 (읽기 전용)
반환값 options 풀 옵션입니다.
180 181 182 |
# 파일 'lib/ Mongo/ 서버/connection_pool.rb', 줄 180 def @options end |
#채우기 _세마포어 ⇒ 객체 (읽기 전용)
풀 크기가 변경되어 채우기를 깨울 때 조건 변수가 브로드캐스트됩니다.
57 58 59 |
# 파일 'lib/ Mongo/ 서버/connection_pool.rb', 줄 57 def 채우기 세마포어 @popule_semapher end |
#populator ⇒ 객체 (읽기 전용)
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
339 340 341 |
# 파일 'lib/ Mongo/ 서버/connection_pool.rb', 줄 339 def 채우기 @populator end |
#서버 ⇒ 객체 (읽기 전용)
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
183 184 185 |
# 파일 'lib/ Mongo/ 서버/connection_pool.rb', 줄 183 def 서버 @server end |
클래스 메서드 세부 정보
.finalize(available_connections, Pending_connections, _populator) ⇒ Proc
가비지 컬렉션을 위한 연결 풀을 마무리합니다.
847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 |
# 파일 'lib/ Mongo/ 서버/connection_pool.rb', 줄 847 def self.마무리(available_connections, 보류 중인_연결, _populator) proc do available_connections.각 do |연결| 연결.연결 해제!(이유: :pool_closed) end available_connections.지우기 보류 중인_연결.각 do |연결| 연결.연결 해제!(이유: :pool_closed) end 보류 중인_연결.지우기 # 종료자는 체크아웃된 연결을 닫지 않습니다. # 자체적으로 가비지를 수집해야 합니다. # 그러면 닫힙니다. end end |
인스턴스 메서드 세부 정보
#available_count ⇒ 정수
풀에서 사용 가능한 연결 수입니다.
291 292 293 294 295 296 297 |
# 파일 'lib/ Mongo/ 서버/connection_pool.rb', 줄 291 def available_count raise_if_closed! @ 락.동기화 do @available_connections.분량 end end |
#check_in(connection) ⇒ 객체
풀에 대한 연결을 다시 확인합니다.
연결이 이전에 이 풀에서 생성된 적이 있어야 합니다.
418 419 420 421 422 423 424 425 426 |
# 파일 'lib/ Mongo/ 서버/connection_pool.rb', 줄 418 def check_in(연결) check_invariants @ 락.동기화 do do_check_in(연결) end 보장 check_invariants end |
#check_out(connection_global_id: nil, context: nil) ⇒ Mongo::Server::Connection
풀에서 연결을 확인합니다.
풀에 활성 연결이 있는 경우 가장 최근에 사용된 연결이 반환됩니다. 그렇지 않고 연결 풀 크기가 최대 크기보다 작은 경우 새 연결을 만들고 반환합니다. 그렇지 않고 대기 시간 제한까지 기다렸다가 여전히 활성 연결이 없고 풀 크기가 최대인 경우 Timeout::Error를 발생시킵니다.
반환된 연결은 풀의 최대 크기에 포함됩니다. 호출자가 연결 사용을 마치면 check_in 메서드를 통해 연결을 다시 체크인해야 합니다.
366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 |
# 파일 'lib/ Mongo/ 서버/connection_pool.rb', 줄 366 def check_out(connection_global_id: nil, 컨텍스트: 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 연결 보장 check_invariants end |
#check_out_pinned_connection(connection_global_id) ⇒ 연결 | nil
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
지정된 글로벌 ID를 가진 고정된 연결이 있는 경우 이미 체크아웃된 고정된 연결을 반환합니다. 그렇지 않으면 nil을 반환합니다.
403 404 405 406 407 408 409 |
# 파일 'lib/ Mongo/ 서버/connection_pool.rb', 줄 403 def check_out_pinned_connection(connection_global_id) @ 락.동기화 do @checked_out_connections.감지 do |conn| conn.global_id == connection_global_id && conn.고정? end end end |
#clear(options = nil) ⇒ true
풀의 모든 유휴 연결을 닫고 현재 체크아웃된 연결이 풀에 다시 체크인될 때 닫히도록 예약합니다. 풀이 일시 중지되고 배경 에서 새 연결을 생성하지 않으며 준비됨으로 표시될 때까지 체크아웃 요청이 실패합니다.
538 539 540 541 542 543 544 545 546 |
# 파일 'lib/ Mongo/ 서버/connection_pool.rb', 줄 538 def 지우기( = nil) raise_if_closed! 만약 Lint.활성화? && !@server.알 수 없음? 올리다 오류::LintError, "{@ 서버.summary}서버 서버 풀을 지우려고 시도 하는 중" end do_clear() end |
#close(options = nil) ⇒ true
풀을 닫은 것으로 표시하고, 풀의 모든 유휴 연결을 닫으며, 현재 체크아웃된 연결이 풀에 다시 체크인될 때 닫히도록 예약합니다. 강제 옵션이 true이면 체크아웃된 연결도 닫힙니다. 풀이 닫힌 후 사용하려고 하면 Error::PoolClosedError가 발생합니다.
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 692 693 694 695 696 697 698 |
# 파일 'lib/ Mongo/ 서버/connection_pool.rb', 줄 660 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.브로드캐스트 @generation_manager.close_all_pipes end publish_cmap_event( 모니터링::이벤트::Cmap::풀 마감.신규(@server.주소, self) ) true end |
#close_idle_sockets ⇒ 객체
옵션이 설정된 경우 최대 유휴 시간보다 오랫동안 열려 있던 소켓을 닫습니다.
770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 |
# 파일 'lib/ Mongo/ 서버/connection_pool.rb', 줄 770 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 i += 1 end end end |
#닫았나요? ⇒ true | false
풀이 닫혔는지 여부입니다.
304 305 306 |
# 파일 'lib/ Mongo/ 서버/connection_pool.rb', 줄 304 def 닫힘? !!@closed end |
#연결 해제!(options = nil) ⇒ 객체
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
풀 연결을 해제합니다.
풀이 닫힌 경우 이 메서드는 아무 작업도 수행하지 않지만 clear 에서 PoolClosedError를 발생시키는 것을 제외하고 clear 가 수행하는 모든 작업을 수행합니다.
555 556 557 558 559 560 561 |
# 파일 'lib/ Mongo/ 서버/connection_pool.rb', 줄 555 def 연결 해제!( = nil) do_clear() 구출 오류::PoolClosedError # "연결 해제됨" 상태 는 닫힘과 일시 중지 사이입니다. # 풀 연결을 끊으려고 할 때 풀을 다음과 같이 허용합니다. # 이미 종료되었습니다. end |
#do_check_in(connection) ⇒ 객체
이미 잠금을 획득한 후 체크인을 실행합니다.
431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 |
# 파일 'lib/ Mongo/ 서버/connection_pool.rb', 줄 431 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) ⇒ 객체
563 564 565 566 567 568 569 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 606 |
# 파일 'lib/ Mongo/ 서버/connection_pool.rb', 줄 563 def do_clear( = nil) check_invariants service_id = && [:service_id] @ 락.동기화 do # 풀 지우기 이벤트를 내보내기 전에 세대를 충돌시켜야 합니다. @generation_manager.범프(service_id: service_id) close_available_connections(service_id) 하지 않는 한 && [:lazy] 만약 && [: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의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
잠금을 획득하지 않고 연결 풀을 일시 중지된 상태로 표시합니다.
511 512 513 514 515 516 517 518 519 |
# 파일 'lib/ Mongo/ 서버/connection_pool.rb', 줄 511 def do_pause 만약 Lint.활성화? && !@server.알 수 없음? 올리다 오류::LintError, " 알려진서버 #{@server.요약} 에대한 풀을 일시 중지하려고 시도 중" end 반환 하지 않는 한 @ready @ready = 거짓 end |
#검사 ⇒ string
풀에 대해 예쁜 인쇄된 string 검사를 받으세요.
708 709 710 711 712 713 714 715 716 717 718 719 |
# 파일 'lib/ Mongo/ 서버/connection_pool.rb', 줄 708 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
소켓이 풀에 체크인된 이후 유휴 상태로 유지될 수 있는 최대 시간(초)입니다(설정된 경우).
228 229 230 |
# 파일 'lib/ Mongo/ 서버/connection_pool.rb', 줄 228 def max_idle_time @max_idle_time ||= [:max_idle_time] end |
#max_size ⇒ Integer
연결 풀 의 최대 크기를 가져옵니다.
193 194 195 |
# 파일 'lib/ Mongo/ 서버/connection_pool.rb', 줄 193 def max_size @max_size ||= [:max_size] || [ DEFAULT_MAX_SIZE, min_size ].최대 end |
#min_size ⇒ Integer
연결 풀의 최소 크기를 가져옵니다.
202 203 204 |
# 파일 'lib/ Mongo/ 서버/connection_pool.rb', 줄 202 def min_size @min_size ||= [:min_size] || DEFAULT_MIN_SIZE end |
#pause ⇒ 객체
연결 풀을 일시 중지됨으로 표시합니다.
496 497 498 499 500 501 502 503 504 505 506 |
# 파일 'lib/ Mongo/ 서버/connection_pool.rb', 줄 496 def 일시 중지 raise_if_closed! check_invariants @ 락.동기화 do do_pause end 보장 check_invariants end |
#일시 중지되었나요? ⇒ true | false
연결 풀 닫히지 않았거나 준비되지 않은 경우 일시 중지됩니다.
246 247 248 249 250 251 252 |
# 파일 'lib/ Mongo/ 서버/connection_pool.rb', 줄 246 def 일시 중지되었나요? raise_if_closed! @ 락.동기화 do !@ready end end |
#채우기 ⇒ true | false
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
이 메서드는 세 가지 작업을 수행합니다.
- 풀의 크기가 min_size보다 작은 경우 풀에 연결을 생성하고 추가합니다. 이 프로세스 중에 소켓 관련 오류가 발생하면 한 번 재시도하고, 두 번째 오류 또는 소켓과 관련이 없는 오류가 발생하면 발생시킵니다.
- 연결 풀에서 오래된 연결을 제거합니다.
- 중단으로 표시된 연결을 중단합니다.
풀 채우기 백그라운드 스레드에서 사용합니다.
발생했거나 소켓과 관련되지 않은 오류
826 827 828 829 830 831 832 833 834 835 836 837 838 |
# 파일 'lib/ Mongo/ 서버/connection_pool.rb', 줄 826 def 채우기 반환 거짓 만약 닫힘? 시작 반환 create_and_add_connection 구출 오류::SocketError, 오류::SocketTimeoutError => e # 연결을 연결하는 동안 오류가 발생했습니다. # 이 첫 번째 오류를 무시하고 다시 시도하세요. log_warn("포플러가 #{주소}: #{ e.class}: #{ e} 에 대한연결을 연결하지 못했습니다. 다시 시도합니다.") end create_and_add_connection end |
#준비 됨 ⇒ 객체
연결을 생성하고 반환하도록 풀에 지시합니다.
609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 |
# 파일 'lib/ Mongo/ 서버/connection_pool.rb', 줄 609 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 |
#준비되었나요? ⇒ true | false
풀이 준비되었는지 여부입니다.
311 312 313 314 315 |
# 파일 'lib/ Mongo/ 서버/connection_pool.rb', 줄 311 def 준비됐나요? @ 락.동기화 do @ready end end |
#크기 ⇒ 정수
연결 풀의 크기입니다.
사용 가능한 연결과 체크 아웃된 연결이 포함됩니다.
261 262 263 264 265 266 267 |
# 파일 'lib/ Mongo/ 서버/connection_pool.rb', 줄 261 def size raise_if_closed! @ 락.동기화 do unsynchronized_size end end |
#stop_populator ⇒ 객체
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
백그라운드 채우기 스레드를 중지하고 생성된 연결 중 아직 연결되지 않은 연결을 모두 정리합니다.
테스트 목적으로 풀을 닫거나 bg 스레드를 종료할 때 사용됩니다. 후자의 경우, 풀을 사용하기 전에 이 메서드를 호출해야 check_out 메서드에 의해 인플로(in-flow)에서 보류 중인 연결의 연결이 생성되지 않았는지 확인할 수 있습니다.
798 799 800 801 802 803 804 805 806 807 808 |
# 파일 'lib/ Mongo/ 서버/connection_pool.rb', 줄 798 def stop_populator @populator.중지! @ 락.동기화 do # 채우기가 실행되는 동안 stop_populator가 호출되면 다음이 발생할 수 있습니다. # 연결 대기 중인 연결, 아직 연결되지 않은 연결 # available_connections로 이동되었거나 연결이 available_connections로 이동되었습니다. # 하지만 보류 중인_연결에서 삭제되지 않았습니다. 이러한 항목을 정리해야 합니다. clear_pending_connections end end |
#요약 ⇒ 객체
이 방법은 실험적이며 변경될 수 있습니다.
321 322 323 324 325 326 327 328 329 330 331 332 333 |
# 파일 'lib/ Mongo/ 서버/connection_pool.rb', 줄 321 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에 도달했는지 여부를 계산하는 데 사용됩니다.
282 283 284 |
# 파일 'lib/ Mongo/ 서버/connection_pool.rb', 줄 282 def available_connections @checked_out_connections.분량 + @pending_connections.분량 + @connection_requests end |
#wait_timeout(context = nil) ⇒ Float
연결을 사용할 수 있을 때까지 기다리는 시간(초)입니다.
214 215 216 217 218 219 220 |
# 파일 'lib/ Mongo/ 서버/connection_pool.rb', 줄 214 def wait_timeout(컨텍스트 = nil) 만약 컨텍스트&.나머지_시간 초과_초.nil? [:wait_timeout] || DEFAULT_WAIT_TIMEOUT other 컨텍스트&.나머지_시간 초과_초 end end |
#with_connection(connection_global_id: nil, context: nil) ⇒ 객체
체크인/체크아웃 로직을 처리하는 동안 차단을 연결에 양보합니다.
731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 |
# 파일 'lib/ Mongo/ 서버/connection_pool.rb', 줄 731 def with_connection(connection_global_id: nil, 컨텍스트: nil) raise_if_closed! # 특정 연결이 요청되었고 이미 체크아웃된 경우 # 및 고정됨(예: 트랜잭션 또는 로드 밸런싱 모드 의 커서 ), # check_out/check_in 주기를 거치지 않고 직접 재사용합니다. 만약 connection_global_id 연결 = @ 락.동기화 do @checked_out_connections.감지 do |conn| conn.global_id == connection_global_id && conn.고정? end end end 연결 ||= check_out( connection_global_id: connection_global_id, 컨텍스트: 컨텍스트 ) yield(연결) 구출 오류::SocketError, 오류::SocketTimeoutError, 오류::ConnectionPerished => e may_raise_pool_cleared!(연결, e) 보장 만약 연결 && !연결.고정? # 연결이 고정된 경우(세션 또는 커서 #이(가) 소유하고 있으며 나중에 고정을 해제할 때 체크인합니다). 또한 건너뛰기 # 차단 중에 연결이 이미 체크인된 경우 check-in # (예: 첫 번째 작업에서 오류가 발생한 후 Session#unpin을 통해). check_out = @ 락.동기화 do @checked_out_connections.포함?(연결) end check_in(연결) 만약 check_out end end |