クラス: Mongo::Server::ConnectionPool
- 継承:
-
オブジェクト
- オブジェクト
- Mongo::Server::ConnectionPool
- 次による拡張機能。
- 転送可能
- 定義:
- build/ruby-Driver-v 2.19 /lib/mongo/server/ connection_Pool.rb 、
build/ruby-Driver-v 2.19 /lib/mongo/server/ connection_role/populator.rb,
build/ruby-Driver-v 2.19 /lib/mongo/server/接続_プール/生成_manager.rb
Overview
サーバー接続の接続プールを表します。
名前空間で定義済み
定数の概要の削減
- DEFAULT_MAX_SIZE =
接続プールのデフォルトの最大サイズ。
20.freeze
- DEFAULT_MIN_SIZE =
接続プールのデフォルトの最小サイズ。
0.freeze
- DEFAULT_WAIT_OUT_TIME =
接続を待機するためのデフォルトのタイムアウト(秒単位)。
このタイムアウトは、フロー スレッドがバックグラウンド スレッドが接続を確立するのを待機しているときに適用されます(割り当てられた時間内で接続、ハンドシェイク、認証を行う必要があります)。
現在は10秒に設定されています。 デフォルトの接続タイムアウトは単独で10秒ですが、大きなタイムアウトを設定するとアプリケーションがリバース プロキシによってタイムアウトされた場合に問題が発生する可能性があるため、 15秒を超えると 潜在的にリスク が発生します。
10.freeze
Loggableに含まれる定数
インスタンス属性の概要を折りたたむ
-
#generation_manager ⇒ Integer
readOnly
private
生成 現在キューによって使用されている接続の生成。
- # max_connecting =オブジェクト readOnly private
-
#options ⇒ Hash
readOnly
オプション プール オプション。
-
#poppy_smaインストール = オブジェクト
readOnly
プールのサイズが変更されたときの条件変数ブロードキャストは、ポインターを起動するために使用されます。
- は、 または オブジェクトを readOnly private
- #サーバー~ オブジェクト readOnly private
Monitoring::Publishable
クラスメソッドの概要を折りたたむ
-
。 finalize (利用可能_接続、保留中_接続、入力あり)============================================
ガベージ コレクションの接続プールを終了します。
インスタンス メソッドの概要を折りたたむ
-
# available_count = 整数
プール内の利用可能な接続の数。
-
# checkpoint_in (接続) = オブジェクト
プールへの接続を確認します。
-
# checkpoint_ global_id : nil) = Mongo::Server::Connection
プールから接続をチェックアウトします。
-
#クリア(オプション = nil) = true
プール内のすべてのアイドル接続を閉じ、現在チェックアウトされている接続がプールにチェックインされたときに閉じるようにスケジュールします。
-
# close (オプション = nil) = true
プールを閉じてマークし、プール内のすべてのアイドル接続を閉じ、現在チェックアウトされている接続がプールにチェックインされたときに閉じるようにスケジュールします。
-
close_idle_sockets =オブジェクト
オプションが設定されている場合は、最大アイドル時間よりも長時間開いているソケットを閉じます。
-
#閉じました= true | false
プールが閉じられているかどうか。
-
#切断します。 (options = nil) = オブジェクト
private
プールを切断します。
-
# do_check_in (接続) = オブジェクト
ロックをすでに取得した後にチェックインを実行します。
- # do_completed (options = nil) = オブジェクト
-
# do_ paused =オブジェクト
private
ロックを取得せずに接続プールを一時停止としてマークします。
-
#初期化(サーバー、オプション = {}) = ConnectionPool
コンストラクター
新しい接続プールを作成します。
-
詳しくは、 を 検査し ますstring
プールのpretty-printed string 検査を取得します。
-
#max_idle_time ⇒ Float | nil
プールにチェックインしてからソケットがアイドル状態を維持できる最大秒数(設定されている場合)。
-
#max_size ⇒ Integer
接続プールの最大サイズを取得します。
-
#min_size ⇒ Integer
接続プールの最小サイズを取得します。
-
#一時停止= オブジェクト
接続プールを一時停止としてマークします。
-
一時停止しましたか? = true | false
接続プールは、閉じられておらず、準備ができていない場合、一時停止されます。
-
#がtrue に設定されています。 false
private
このメソッドは 3 つの処理を行います: 1 。
-
やオブジェクト
接続を作成して返すようにプールに指示します。
-
#準備完了= true | false
プールが準備できているかどうか。
-
#size ⇒ Integer
接続プールのサイズ。
-
# stop_populator =オブジェクト
private
バックグラウンド 入力値を停止し、作成された接続のうちまだ接続されていない接続をクリーンアップします。
- #のサマリー= オブジェクト
-
次の接続を使用できません: 整数
private
プール内の利用できない接続の数。
-
#wait_timeout ⇒ Float
接続可能になるまで待機する時間(秒単位)。
-
# with_ connection ( connection_ global_id: nil) = オブジェクト
チェックイン/チェックアウト ロジックを処理しながら、接続にブロックを中断します。
から含まれるメソッド::public
#publish_cmap_event 、 #publish_event 、 #publish_sam_event
Loggableに含まれるメソッド
#log_debug, #log_error, #log_fatal, #log_info, #log_warn, #logger
コンストラクターの詳細
#初期化(サーバー、オプション = {}) = 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 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/server/ connection_Pool.rb', 行92 デフォルト 初期化(サーバー, = {}) ただし、 サーバー.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_size ] } は maxPool サイズ : { [ :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, " の最小 サイズ を 使用 でき ませ ん end 場合 [:wait_queue_timeout] [:wait_timeout] ||= [:wait_queue_timeout] end .削除(:wait_queue_timeout) @server = サーバー @options = .freeze @generation_manager = 生成管理.新着情報(サーバー: サーバー) @ready = false @closed = false # このプールによって所有される接続は、次のいずれかである必要があります: 利用可能な接続配列の数 (スタックとして使用されます) チェックアウトされた接続セット内の または 。 @available_ connections = available_ connections = [] @checked_out_ connections = セット.新着情報 @pending_ connections = セット.新着情報 @Interrupt_ connections = [] @available_ connections と へのアクセスを同期するために使用されるミューテックス # @checked_out_ connections プール オブジェクトはスレッドセーフであるため、 インスタンス変数を一般的に検索または変更するすべてのメソッド # はこのロックの下でその操作を行う必要があります。 @lock = ミューテックス.新着情報 バックグラウンド スレッドがいずれのサイズを維持するかを担当する プールを少なくとも min_size に設定する @populator = 人口.新着情報(自己, ) @popute_smahour = セマフォア.新着情報 checkpoint_out: max_Pool_size で最初のチェックを強制するための条件変数。 # この条件変数は、次の数の場合にシグナルを発する必要があります: 使用できない接続の数が減少します(pending + pending_ connections + 利用可能な_接続の数)。 @size_cv = mongo::条件変数.新着情報(@lock) これは、size_cv を超えたスレッド数を表します # ゲートを使用しているが、pending_ connection に追加する接続を取得していなかった # セット。 @ connection_requests = 0 checkpoint_out: max_connecting で 2 回目のチェックを強制するための条件変数。 # 条件変数は、保留中の 接続数が減少します。 @max_connecting_cv = mongo::条件変数.新着情報(@lock) @max_connecting = .fetch(:max_connecting, 2) ObjectSpace.refine_ finalizer(自己, 自己.クラス.finalize(@available_ connections, @pending_ connections, @populator)) public_cmap_event( モニタリング::イベント::Cmap::PoolCreated.新着情報(@server.address, , 自己) ) end |
インスタンス属性の詳細
# generate_manager =整数(readonly)
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
現在キューによって使用されている接続の生成を返します。
216 217 218 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/server/ connection_Pool.rb', 行216 デフォルト generate_manager @generation_manager end |
# max_connecting 詳しくは、オブジェクト(読み取り専用)
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
325 326 327 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/server/ connection_Pool.rb', 行325 デフォルト max_connecting @max_connecting end |
オプション=ハッシュ(読み取り専用)
オプション プール オプションを返します。
170 171 172 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/server/ connection_Pool.rb', 行170 デフォルト @options end |
# put_smahour :オブジェクト(読み取り専用)
プールのサイズが変更されたときに条件変数をブロードキャストしてポインターを起動
55 56 57 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/server/ connection_Pool.rb', 行55 デフォルト put_smahour @popute_smahour end |
およびオブジェクト(読み取り専用)
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
322 323 324 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/server/ connection_Pool.rb', 行322 デフォルト 人口 @populator end |
#サーバー=オブジェクト(読み取り専用)
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
173 174 175 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/server/ connection_Pool.rb', 行173 デフォルト サーバー @server end |
クラスメソッドの詳細
。 finalize (利用可能_接続、保留中_接続、入力あり) ============================================
ガベージ コレクションの接続プールを終了します。
787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/server/ connection_Pool.rb', 行787 デフォルト 自己.finalize(available_ connections, Pending_ connections, 人口) proc 行う available_ connections.各 行う |接続| 接続.切断します。(理由: :Pool_closed) end available_ connections.クリア Pending_ connections.各 行う |接続| 接続.切断します。(理由: :Pool_closed) end Pending_ connections.クリア # finalizer はチェックアウトした接続を閉じません。 #これらは独自にガベージ コレクションを使用する必要があります # と がある場合は、それらを閉じます。 end end |
インスタンス メソッドの詳細
# available_count =整数
プール内の利用可能な接続の数。
274 275 276 277 278 279 280 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/server/ connection_Pool.rb', 行274 デフォルト available_count accumulate_if_closed。 @lock.同期 行う @available_ connections.Length end end |
# checkpoint_in (接続) =オブジェクト
プールへの接続を確認します。
接続はこのプールによって過去に作成されている必要があります。
379 380 381 382 383 384 385 386 387 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/server/ connection_Pool.rb', 行379 デフォルト checkpoint_in(接続) checkpoint_invariant @lock.同期 行う do_check_in(接続) end 保証する checkpoint_invariant end |
# checkpoint_ global_id : nil) = Mongo::Server::Connection
プールから接続をチェックアウトします。
プール内にアクティブな接続がある場合は、最近使用した接続が返されます。 それ以外の場合、接続プールのサイズが最大サイズより小さい場合は、 は新しい接続を作成して返します。 それ以外の場合、アクティブな接続がまだなく、プールが最大サイズの場合は、 は待機タイムアウトまで待機し、 Timeout::Error を発生させます。
返された接続は、プールの最大サイズにカウントされます。 呼び出し元が接続の使用を終了したら、 checkpoint_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 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/server/ connection_Pool.rb', 行345 デフォルト checkpoint_out(connection_ global_id: nil) checkpoint_invariant public_cmap_event( モニタリング::イベント::Cmap::ConnectionCheckOutStarted.新着情報(@server.address) ) resume_if_Pool_closed の接続数。 resume_if_Pool_一時停止_ロック 接続 = return_and_connect_ connection(connection_ global_id) public_cmap_event( モニタリング::イベント::Cmap::ConnectionCheckedOut.新着情報(@server.address, 接続.id, 自己), ) 場合 Lint.有効か ただし、 接続.接続されていますか? 発生 エラー::LintError, " { アドレス } の接続プール は切断された接続 #{ 接続 . 生成 } をチェックアウトしました : #{ 接続 . ID } " end end 接続 保証する checkpoint_invariant end |
#クリア(オプション = nil) = true
プール内のすべてのアイドル接続を閉じ、現在チェックアウトされている接続がプールにチェックインされたときに閉じるようにスケジュールします。 プールは一時停止されると、バックグラウンドに新しい接続を作成せず、準備完了とマークされるまでチェックアウトリクエストは失敗します。
497 498 499 500 501 502 503 504 505 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/server/ connection_Pool.rb', 行497 デフォルト クリア( = nil) accumulate_if_closed。 場合 Lint.有効か & & !@server.不明な場合 発生 エラー::LintError, " 既知 のサーバー #{ @server . Summary } のプールをクリアしようとして いる とき end do_ clear() end |
# close (オプション = 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 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/server/ connection_Pool.rb', 行621 デフォルト 閉じる( = nil) return 場合 閉じましたか ||= {} stop_populator @lock.同期 行う まで @available_ connections.空の場合 接続 = @available_ connections.ポップ 接続.切断します。(理由: :Pool_closed) end 場合 [: 強制] まで @checked_out_ connections.空の場合 接続 = @checked_out_ connections.が(1).最初に 接続.切断します。(理由: :Pool_closed) @checked_out_ connections.削除(接続) end end ただし、 & & [:staty_ready] ロックを解放する前に、プールを閉じたものとしてマークするため、 # 接続の作成、チェックイン、チェックアウトはできません @closed = true @ready = false end @max_connecting_cv.ブロードキャスト @size_cv.ブロードキャスト end public_cmap_event( モニタリング::イベント::Cmap::PoolClosed.新着情報(@server.address, 自己) ) 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 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/server/ connection_Pool.rb', 行708 デフォルト close_idle_sockets return 場合 閉じましたか return ただし、 max_idle_time @lock.同期 行う i = 0 一方 i < @available_ connections.Length 接続 = @available_ connections[i] 場合 last_checkin = 接続.last_checkin 場合 (時間.になりました - last_checkin) > max_idle_time 接続.切断します。(理由: :idle) @available_ connections.delete_at(i) @popute_smahour.シグナル 次へ end end i += 1 end end end |
#閉じました= true | false
プールが閉じられているかどうか。
287 288 289 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/server/ connection_Pool.rb', 行287 デフォルト 閉じましたか !!@closed end |
#切断します。 (options = nil) =オブジェクト
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
プールを切断します。
プールが閉じられている場合を除き、このメソッドは何も実行しませんが、 clear
clear
は PoolClosedError を発生させます。
514 515 516 517 518 519 520 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/server/ connection_Pool.rb', 行514 デフォルト 切断します。( = nil) do_ clear() ヘルプ エラー::PoolClosedError # 「切断」 状態は閉じてから一時停止までの間です。 # プールを切断する際、プールが次の状態であることを許可します: はすでに終了しています。 end |
# do_check_in (接続) =オブジェクト
ロックをすでに取得した後にチェックインを実行します。
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 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/server/ connection_Pool.rb', 行392 デフォルト do_check_in(接続) 接続が中断されると、プールにチェックバックされます # と閉じた。 になる前に接続を使用していた操作 中断された場合はプールにチェックバックしようとします。 # はすでに閉じられ、プールから削除されているため、それを無視する必要があります。 return 場合 接続.閉じましたか & & 接続.中断された場合 ただし、 接続.connection_Pool == 自己 発生 ArgumentError, 「 この プール によって チェック アウト され なかっ た 接続 を チェックイン しよ う と し て いる とき end ただし、 @checked_out_ connections.include?(接続) 発生 ArgumentError, 「 現在、このプールによってチェックアウトされていない接続を チェック イン しよ う と し て いる とき end ただし、イベント ハンドラーが発生した場合、リソースはシグナル化されません。 # これは、接続が解放されるのを待機しているスレッドを意味します や プールが最大サイズの場合はタイムアウトする可能性があります。 このメソッドが完了した後に待機を開始するスレッド( # は例外です)。 @checked_out_ connections.削除(接続) @size_cv.シグナル public_cmap_event( モニタリング::イベント::Cmap::ConnectionCheckedIn.新着情報(@server.address, 接続.id, 自己) ) 場合 接続.中断された場合 接続.切断します。(理由: :stale) return end 場合 接続.error? 接続.切断します。(理由: :error) return end 場合 閉じましたか 接続.切断します。(理由: :Pool_closed) return end 場合 接続.閉じましたか # 接続が閉じました - 例として # ネットワークエラー。 ここでは他に何もする必要はありません。 @popute_smahour.シグナル elsif 接続.生成 != 生成(service_id: 接続.service_id) & & !接続.ピン留めされたかどうか #接続が固定としてマークされている場合、トランザクションによって使用されます または、負荷分散された設定における一連のカーソル操作。 # この場合、次まで接続を切断してはなりません: は、固定を解除します。 接続.切断します。(理由: :stale) @popute_smahour.シグナル else 接続.Record_checkin. @available_ connections < 接続 @max_connecting_cv.シグナル end end |
# do_completed (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 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/server/ connection_Pool.rb', 行522 デフォルト do_ clear( = nil) checkpoint_invariant service_id = & & [:service_id] @lock.同期 行う プール クリア イベントを発行する前に、生成をアップグレードする必要があります。 @generation_manager.は(service_id: service_id) ただし、 & & [:lasy] close_available_ connections(service_id) end 場合 & & [:中断_in_use_ connections] schedule_for_Interruption(@checked_out_ connections, service_id) schedule_for_Interruption(@pending_ connections, service_id) end 場合 @ready public_cmap_event( モニタリング::イベント::Cmap::PoolCleared.新着情報( @server.address, service_id: service_id, insert_in_use_ connections: &.[](:中断_in_use_ connections) ) ) サーバーが不明とマークされている場合のみ接続プールを一時停止します # それ以外の場合は、準備完了プールを使用して再試行できるようにします。 do_一時停止 場合 !@server.load_ balancer? & & @server.不明な場合 end #ここでブロードキャストすると、すべてのスレッドが最大値 を待機します 待機ループとエラーを解除するには、 を接続します。 @max_connecting_cv.ブロードキャスト #ここでブロードキャストすると、すべてのスレッドがプール サイズを待機します 待機ループとエラーを解除するための # 。 @size_cv.ブロードキャスト end # クリア後に「バックグラウンド スレッドをスケジュールする」。 これは責任を負います 古いスレッドをクリーンアップし、使用中の接続を中断するための #。 @popute_smahour.シグナル true 保証する checkpoint_invariant end |
# do_ paused =オブジェクト
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
ロックを取得せずに接続プールを一時停止としてマークします。
470 471 472 473 474 475 476 477 478 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/server/ connection_Pool.rb', 行470 デフォルト do_一時停止 場合 Lint.有効か & & !@server.不明な場合 発生 エラー::LintError, " 既知 のサーバー #{ @server . Summary } のプールを一時停止しようとして いる とき end return 場合 !@ready @ready = false end |
詳しくは、 を 検査しstring ます
プールのpretty-printed string 検査を取得します。
668 669 670 671 672 673 674 675 676 677 678 679 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/server/ connection_Pool.rb', 行668 デフォルト 検査する 場合 閉じましたか " #< Mongo::Server::ConnectionPool: 0 x #{ object_id } min_size= #{ min_size } max_size= #{ max_size } " + " wait_timeout= #{ wait_timeout }閉じた> " elsif !準備はできていますか? " #< Mongo::Server::ConnectionPool: 0 x #{ object_id } min_size= #{ min_size } max_size= #{ max_size } " + " wait_timeout= #{ wait_timeout } paused > " else " #< Mongo::Server::ConnectionPool: 0 x #{ 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 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/server/ connection_Pool.rb', 行211 デフォルト max_idle_time @max_idle_time ||= [:max_idle_time] end |
#max_size ⇒ Integer
接続プールの最大サイズを取得します。
183 184 185 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/server/ connection_Pool.rb', 行183 デフォルト max_size @max_size ||= [:max_size] || [DEFAULT_MAX_SIZE, min_size].最大 end |
#min_size ⇒ Integer
接続プールの最小サイズを取得します。
192 193 194 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/server/ connection_Pool.rb', 行192 デフォルト min_size @min_size ||= [:min_size] || DEFAULT_MIN_SIZE end |
#一時停止=オブジェクト
接続プールを一時停止としてマークします。
455 456 457 458 459 460 461 462 463 464 465 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/server/ connection_Pool.rb', 行455 デフォルト pause accumulate_if_closed。 checkpoint_invariant @lock.同期 行う do_一時停止 end 保証する checkpoint_invariant end |
一時停止しましたか? = true | false
接続プールは、閉じられておらず、準備ができていない場合、一時停止されます。
229 230 231 232 233 234 235 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/server/ connection_Pool.rb', 行229 デフォルト 一時停止しました accumulate_if_closed。 @lock.同期 行う !@ready end end |
#がtrueに設定されています。 false
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
このメソッドは 3 つの処理を行います。
-
プールのサイズが min_size を下回る場合は、プールへの接続を作成し、追加します。 このプロセス中にソケット関連のエラーが発生した場合は 1 回再試行し、2 番目のエラーやソケットに関連しないエラーが発生した場合は が発生します。
-
接続プールから古い接続を削除します。
-
中断対象としてマークされた接続を中断します。
プール 入力値のバックグラウンド スレッドによって使用されます。
、またはソケット関連以外のエラーが発生した
766 767 768 769 770 771 772 773 774 775 776 777 778 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/server/ connection_Pool.rb', 行766 デフォルト 入力する return false 場合 閉じましたか begin return create_and_add_ connection ヘルプ エラー::SocketError, エラー::SocketTimeoutError => e 接続の接続中にエラーが発生しました この最初のエラーを無視して、もう一度お試しください。 log_警告(" Atlas の接続に失敗しました 。 : #{ e . クラス } : # { { e } 。再試行し ます 。) end return 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 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/server/ connection_Pool.rb', 行570 デフォルト ready accumulate_if_closed。 # TODO: これを Ruby- 3174で追加します。 Lint. が有効な場合は? @server.connector 以外の場合は になりますか。 # エラー::LintError, "サーバー ためのプールを準備しようとしているとき 切断されている # end # end @lock.同期 行う return 場合 @ready @ready = true end CMAP 仕様では、 プール。 これを実装するには、イベント発行を次のように行う必要があります: サブスクライブが呼び出される代わりに同期されるキューを使用する triggerメソッドからの # をインラインで使用します。 MRI では、 を前提としています。 スレッドが実行する作業を停止したときに他のスレッドに中断する場合、次のようになります イベントは実際には常に で公開される可能性が高くなります。 が必要な注文数。 OS スレッドと完全に同時実行される JRuby # では、そのような保証は提供されません。 public_cmap_event( モニタリング::イベント::Cmap::PoolReady.新着情報(@server.address, , 自己) ) 場合 .fetch(:populator_io, true) 場合 @populator.実行中 @popute_smahour.シグナル else @populator.実行します。 end end end |
#準備完了= true | false
プールが準備できているかどうか。
294 295 296 297 298 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/server/ connection_Pool.rb', 行294 デフォルト 準備はできていますか? @lock.同期 行う @ready end end |
#size ⇒ Integer
接続プールのサイズ。
使用可能な接続とチェックアウトした接続を含みます。
244 245 246 247 248 249 250 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/server/ connection_Pool.rb', 行244 デフォルト サイズ accumulate_if_closed。 @lock.同期 行う unsynchronized_size end end |
# stop_populator =オブジェクト
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
バックグラウンド 入力値を停止し、作成された接続のうちまだ接続されていない接続をクリーンアップします。
プールを閉じるか、テスト目的で bg スレッドを終了するときに使用されます。 後者の場合、プールが使用される前にこのメソッドを呼び出す必要があります。pending_ connection 内の接続が checkpoint メソッドによってインフローして作成されないようにします。
738 739 740 741 742 743 744 745 746 747 748 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/server/ connection_Pool.rb', 行738 デフォルト stop_populator @populator.停止します。 @lock.同期 行う # が実行中に stop_populator が呼び出された場合、次が発生する可能性があります: 接続を待機している接続数、まだ接続されていない接続 が利用可能_接続に移動されたか、利用可能な接続に接続が移動されました # ただし、pending_ connection から削除されていません。 これらはクリーンアップする必要があります。 clear_pending_ connections end end |
#のサマリー=オブジェクト
この方法は実験的なものであり、変更される可能性があります。
304 305 306 307 308 309 310 311 312 313 314 315 316 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/server/ connection_Pool.rb', 行304 デフォルト 概要 @lock.同期 行う 状態 = 場合 閉じましたか ' を閉じた' elsif !@ready ' paused ' else ' ready ' end " #{ConnectionPool size= #{ unsynchronized_size } ( #{ min_size } - #{ max_size } )] " + " used= #{ @checked_out_ connections .Length } } avail = #{ @available_ connections .Length } } Pending = { @pending_ connections .Length } } #{ 状態 } > " end end |
次の接続を使用できません:整数
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
プール内の利用できない接続の数を返します。 max_Pool_size に達しているかどうかを計算するために使用されます。
265 266 267 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/server/ connection_Pool.rb', 行265 デフォルト disabled_ connections @checked_out_ connections.Length + @pending_ connections.Length + @ connection_requests end |
#wait_timeout ⇒ Float
接続可能になるまで待機する時間(秒単位)。
201 202 203 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/server/ connection_Pool.rb', 行201 デフォルト 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 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/server/ connection_Pool.rb', 行691 デフォルト with_ connection(connection_ global_id: nil) accumulate_if_closed。 接続 = checkpoint_out(connection_ global_id: connection_ global_id) ノードの数(接続) ヘルプ エラー::SocketError, エラー::SocketTimeoutError, エラー::ConnectionPershed => e があります。(接続, e) 保証する 場合 接続 checkpoint_in(接続) end end |