クラス: Mongo::Cluster
- 継承:
-
オブジェクト
- オブジェクト
- Mongo::Cluster
- 次による拡張機能。
- 転送可能
- 次のことが含まれます。
- Mongo::ClusterTime::Consumer 、 Event::Subscriber 、 Loggable 、 Monitoring:: public
- 定義:
- lib/mongo/cluster.rb
、lib/mongo/cluster/トポロジー.rb、lib/mongo/cluster/トポロジー.rb、lib/mongo/cluster/sam_flow.rb、lib/mongo/cluster/トポロジー/base.rb、 lib/mongo/cluster/トポロジー/
Single.rb、lib/mongo/cluster/トポロジー/sharded.rb、lib/mongo/cluster/トポロジー/unknown.rb、lib/mongo/cluster/periodic_executor.rb、lib/mongo/
cluster/readers/cursor_reaper.rb、lib/mongo/cluster/readers/socket_reaper.rb、lib/mongo/cluster/トポロジー/load_
balance.rb、lib/mongo/cluster/トポロジー/no_replica_set_options.rb、lib/mongo/cluster/トポロジー/replica_set_no_primary.rb、lib/mongo/cluster/トポロジー/replica_set_with_primary.rb
Overview
コピーライト(C)2018-2020 MongoDB Inc.
Apacheライセンス バージョン 2.0(「ライセンス」)に基づいて使用許諾されます。ライセンス にコンプライアンス場合を除き、このファイルを使用することはできません。ライセンスのコピーは次で取得できます:
http://www.apache.org/licenses/LICENSE-2.0
該当するルールによって要求されない限り、または書込み保証に同意された場合を除き、ライセンスの下で**分散された**ソフトウェアは、表現または暗黙的に任意の種類の保証または条件なしで、「AS IS」ベースで**分散された**ます。ライセンスの下の特定の言語を制御する権限と制限については、「 ライセンス 」を参照してください。
名前空間で定義済み
Modules: トポロジー クラス: CursorReaper 、 periodExecutor 、 SdumpFlow 、 SocketReaper
定数の概要の削減
- MAX_READ_RETRIES =
レガシー読み取りのデフォルトの再試行回数。
1- MAX_WRITE_RETRIES =
レガシー書込みの再試行回数
1- READ_RETRY_InterVAL =
レガシー読み取り再試行を使用する場合のデフォルトの読み取り再試行間隔(秒単位)。
5- IDLE_WRITE_PERIOD_SECONDS =
アイドル状態のプライマリが oplog に何も操作を書込まない頻度。
10- CLUSTER_TIME =
非推奨。
mongos サーバーからの応答内のクラスター時間キー。
'clusterTime'
Loggableに含まれる定数
インスタンス属性の概要を折りたたむ
-
#app_metadata ⇒ Mongo::Server::AppMetadata
readOnly
接続ハンドシェイクに使用されるアプリケーション メタデータ。
- #monitor_app_metadata ⇒ Object readOnly private
-
#monitoring ⇒ Monitoring
readOnly
監視 監視。
-
#options ⇒ Hash
readOnly
オプションは ハッシュです。
- #push_monitor_app_metadata ⇒ Object readOnly private
-
シード 処理 = <String>配列=string=string=================================
readOnly
private
シード サーバーのアドレス。
- # server_Selection_schema は [ ]オブジェクト readOnly private
- #session_Pool =オブジェクト readOnly private
- #srv_monitor ⇒ Object readOnly private
-
#トポロジー= 整数?
readOnly
論理セッション タイムアウト値(分単位)。
- # tracker ~ オブジェクト readOnly
Mongo::ClusterTime::Consumerから含まれる属性
Event::Subscriberに含まれる属性
インスタンス メソッドの概要を折りたたむ
-
== (その他) ===(その他) ======================================
このサーバーのクラスターが別のオブジェクトと等しいかどうかを判断します。
-
# add (host, add_options = nil) = サーバー
指定されたアドレスを持つクラスターにサーバーを追加します。
-
アドレス → 配列<Mongo::Address>
クラスター内のアドレス。
-
閉じる= nil
private
クラスターを閉じます。
-
#接続済みかどうか= true|false
private
クラスター オブジェクトがクラスターに接続されているかどうか。
-
接続する場合 = true|false
private
クラスター オブジェクトがクラスターに接続するプロセス内にあるかどうか。
- # Connected_server_if_connected (サーバー)= Object private
-
has_readable_server? (server_selector = nil) = true、false
提供された読み込み設定 (read preference) で読み取り可能なサーバーをクラスターが選択するかどうかを決定します。
-
has_writeable_server? = true、false
クラスターで書込み可能なサーバーを選択するかどうかを判断します。
-
#heartbeat_interval ⇒ Float
private
サーバーの更新間隔を取得します。
-
#初期化(シード、モニタリング、オプション = Options::Redact.new) クラスター
コンストラクター
private
新しいクラスターをインスタンス化します。
-
詳しくは、 を 検査し ますstring
検査で使用するために、より適した形式の string を取得します。
-
負荷分散= true | false
クラスターが負荷分散されたトポロジーに含まれるように構成されているかどうかを返します。
- # max_read_retry =整数 非推奨 非推奨。
-
#次_プライマリ (_ping = nil、セッション = nil、タイムアウト: nil) = Mongo::サーバー
操作を送信できる次のプライマリ サーバーを取得します。
- プール(サーバー) ~ Server::ConnectionPool 非推奨 非推奨。
- # read_retry_Interval =浮動小数点数 非推奨 非推奨。
-
#再接続します。 = true
非推奨
非推奨。
このメソッドを呼び出す代わりに、Client#reconnect を使用してクラスターに再接続します。 このメソッドでは、SDAM イベントは送信されません。
-
#remove (ホスト、切断: true)詳細:<Server> true | false
指定されたアドレスのクラスターからサーバーが存在する場合は削除します。
-
# run_sdum_flow (previal_desc、update_desc、options = {}) = オブジェクト
private
クラスターで SDAM フローを実行します。
-
#スキャン(sync = true) = true
クラスター内のすべての既知のサーバーのスキャンを強制します。
-
サーバー =サーバー= 配列 <Server>
操作を実行できるクラスターからサーバー候補のリストを取得します。
- # server_list =オブジェクト private
-
#set_server_list (server_address_strs) = オブジェクト
private
指定されたアドレス文字列のリスト内のアドレスにサーバーのリストを設定します。
- #のサマリー= オブジェクト
-
#trigger_periodic_executor! ⇒ オブジェクト
private
クラスターの定期実行を直ちに実行します。
-
#update_cluster_time(result) ⇒ Object
応答に含まれる最大クラスター時間を更新します。
- #update_topology(new_topology) ⇒ Object private
-
# validate_session_support (timeout: nil) = オブジェクト
private
ドライバーが接続されている配置でセッションがサポートされていない場合は、 Error::SessionsNotAvalable が発生します。
Mongo::ClusterTime::Consumerに含まれるメソッド
Loggableに含まれるメソッド
#log_debug, #log_error, #log_fatal, #log_info, #log_warn, #logger
Event::Subscriberに含まれるメソッド
から含まれるメソッド::public
#publish_cmap_event 、 #publish_event 、 #publish_sam_event
コンストラクターの詳細
#初期化(シード、モニタリング、オプション = Options::Redact.new) クラスター
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
クラスターは、クライアントの外部で直接インスタンス化しないでください。
When connecting to a mongodb+srv:// URI, the client expands such a URI into a list of servers and passes that list to the Cluster constructor. スタンドアロンの mongod に接続すると、Cluster コンストラクターは対応するアドレスを 1 つの string の配列として受け取ります。
新しいクラスターをインスタンス化します。
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 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 |
# ファイル 'lib/mongo/cluster.rb', 行 118 デフォルト 初期化(シード, モニタリング, = オプション::編集済み.新着情報) 発生 ArgumentError, シードは nil にできません 。 場合 シード.nil? = .dup [:クリーンアップ] = false 場合 [:monitoring_io] == false & & !.key?(:クリーンアップ) @tracer = .削除(:tracer) @options = .freeze #@update_lock は、@servers、@connecting、@connected、@toplog 、および # @sessions_supported 通常、 を持たない インスタンス変数は ロックに指定された#は、更新ロック下でのみ変更する必要があります。 #トポロジーの変更は ではなく @update_lock によってロックされていることに注意してください # @sdum_flow_lock @update_lock = ミューテックス.新着情報 @servers = [] @monitoring = モニタリング @event_listenners = イベント::リスナー.新着情報 @app_metadata = サーバー::AppMetadata.新着情報(@options.merge(目的: :application)) @monitor_app_metadata = サーバー::モニター::AppMetadata.新着情報(@options.merge(目的: :mongos)) @push_monitor_app_metadata = サーバー::モニター::AppMetadata.新着情報(@options.merge(目的: :push_monitor)) @cluster_time_lock = ミューテックス.新着情報 @cluster_time = nil @srv_monitor_lock = ミューテックス.新着情報 @srv_monitor = nil @server_Selection_schema書込み = セマフォア.新着情報 @topology = トポロジー.初期(自己, モニタリング, ) 状態変更ロックは s 次のフロー ロックと似ていますが、設計されています クラスターの利用者によって開始された状態の変更を直列化するための # #(例: クラスターを接続または切断するアプリケーションなど) や切断-接続-切断を迅速に呼び出すアプリケーションの場合など # では、クラスターは不整合な状態になることはありません。 # ドライバーが内部で実行する更新を監視するには、 # 状態変更ロック。 @ State_change_lock = ミューテックス.新着情報 # @sdum_flow_lock は s 次のフローのみをカバーします。 該当しないことに注意してください # から @update_lock で実行される @toplog の置換。 @sam_flow_lock = ミューテックス.新着情報 @session_pool = セッション::SessionPool.新着情報(自己) 発生 ArgumentError, 「シードなしの負荷分散されたクラスターは禁止されています」 場合 シード.空の場合 & & load_Balanced? # 開始トポロジーは、サーバーがない場合は常に不明です。 # https://github.com/mongodb/specifications/pull/388 open_to logical = トポロジー::不明.新着情報(, モニタリング, 自己) public_sdump_event( モニタリング::TOLOGY_OPENING, モニタリング::イベント::トポロジー開始.新着情報(open_to logical) ) @シード = シード = シード.一意 サーバー = シード.map 行う |シード| # サーバー オープン イベントは、トポロジー変更イベントの後に送信する必要があります。 #したがって、トポロジーの変更前にここで実行される個別のサーバー追加 イベントが公開され、サーバーが起動してサーバーが監視されるようになりました # は後で実行されます。 add(シード, モニター: false) end 場合 シード.サイズ >= 1 # トポロジーを再作成して、現在のサーバー リストを含める レプリカ_トポロジー(トポロジー, open_to logical) end 関係あります 場合 load_Balanced? # 特定の SDAM イベントを生成するには、 仕様によって必要です。 負荷分散されたトポロジーの場合は #。 # これらのイベントは次の観点からあまり意味がありません: ドライバーの SDAM 実装、および の観点から見ると # ドライバーのロード バランサー実装。 # 必要なボタンだけを使用する必要があります。 # #この呼び出しは MongoDB_io チェックなしで実行する必要があることに注意してください は、コンストラクターの残りの部分を短縮するためです。 Factory_ld_sdum_events_and_set_server_type end 場合 [:monitoring_io] == false # サーバーがないため、定期的な実行プログラムの構築を省略 # クラスターにコマンドを送信できず、 # クリーンアップする必要があるものである必要があります。 # # 個々のサーバーとレガシーの単一ラウンドの監視を省略します メイン スレッド上の SDAM の番号: SDAM 応答の数。 @connecting = @connected = false return end # 監視スレッドを開始する前に インスタンス変数を更新します。 @connecting = false @connected = true 場合 [:クリーンアップ] != false @cursor_reader = CursorReaper.新着情報(自己) @socket_reader = SocketReaper.新着情報(自己) @periodic_executor = PeriodicExecutor.新着情報([ @cursor_reader, @socket_reader, ], ) @periodic_executor.実行します。 end return 場合 load_Balanced? # モニタリングを開始する前に開始時間を記録する必要があります start_mongotime = Utils.MongoDB_time サーバー.各 行う |サーバー| サーバー.start_monitoring end 場合 [:scan] != false server_Selection_timeout = [:server_Selection_timeout] || ServerSelector::SERVER_SELECTion_TIMEOUT # サーバー選択タイムアウトは、特に次の場合に非常に短くなる可能性があります クライアントが同期スキャンを待機する前に、 # 開始サーバーの選択。 スキャンをサーバー選択時間に制限する # は、ローカル サーバーを処理する前にスキャンを中止します。 したがって、ここでのスキャンには少なくとも3秒を許可します。 server_Selection_timeout = 3 場合 server_Selection_timeout < 3 deadline = start_mongotime + server_Selection_timeout # 各サーバーの最初のスキャンが完了するまで待機します。 # 下位互換性。 この SDAM ラウンド中にサーバーが検出された場合、 # これらのサーバーもクエリされるまで待機します # サーバー選択タイムアウト、または3秒最小値。 ループ 行う # SDAM の実行中にサーバー リストの読み取りが 試行されないようにします サーバー = @sam_flow_lock.同期 行う server_list.dup end break 場合 サーバー.すべて? { |サーバー| サーバー.last_scan_mongotime & & サーバー.last_scan_mongotime >= start_mongotime } 場合 (time_remaining = deadline - Utils.MongoDB_time) <= 0 break end log_debug("まで待機しています: { % 。 2 f ` サーバーがスキャンされるまでの% time_remaining }秒: #{ Overview } } ") # : チェックアウトの間にセカンダリがシグナルを発した可能性があるため 上のサーバー リストと以下の待機呼び出しでは、次は行わないでください: # 残り時間全体を待機します - 最大0.5秒まで待機し、その後 # 状態を再確認する。 begin server_Selection_smahour.待機する([ time_remaining, 0.5 ].min) ヘルプ ::タイムアウト::エラー # 何もない end end end start_stop_srv_monitor end |
インスタンス属性の詳細
# app_metadata = Mongo::Server::AppMetadata (readonly)
接続ハンドシェイクに使用されるアプリケーション メタデータを返します。
287 288 289 |
# ファイル 'lib/mongo/cluster.rb', 行 287 デフォルト @app_metadata end |
# trigger_app_metadata =オブジェクト(読み取り専用)
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
290 291 292 |
# ファイル 'lib/mongo/cluster.rb', 行 290 デフォルト @monitor_app_metadata end |
#monitoring ⇒ Monitoring (readonly)
監視 監視を返します。
276 277 278 |
# ファイル 'lib/mongo/cluster.rb', 行 276 デフォルト モニタリング @monitoring end |
オプション=ハッシュ(読み取り専用)
オプション ハッシュを返します。
273 274 275 |
# ファイル 'lib/mongo/cluster.rb', 行 273 デフォルト @options end |
#push_monitor_app_metadata =オブジェクト(読み取り専用)
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
293 294 295 |
# ファイル 'lib/mongo/cluster.rb', 行 293 デフォルト @push_monitor_app_metadata end |
シード 処理 = 配列=string <String>===========================
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
シード サーバーのアドレスを返します。 SDAM の結果としてクラスターが使用している現在のアドレスではなく、インスタンス化されたときにクラスターに指定されたアドレスが含まれます。
301 302 303 |
# ファイル 'lib/mongo/cluster.rb', 行 301 デフォルト シード @シード end |
# server_Selection_schema は、オブジェクト(読み取り専用)
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
456 457 458 |
# ファイル 'lib/mongo/cluster.rb', 行 456 デフォルト server_Selection_smahour @server_Selection_schema書込み end |
#session_Pool =オブジェクト(読み取り専用)
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
304 305 306 |
# ファイル 'lib/mongo/cluster.rb', 行 304 デフォルト session_pool @session_pool end |
# srv_monitor =オブジェクト(読み取り専用)
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
326 327 328 |
# ファイル 'lib/mongo/cluster.rb', 行 326 デフォルト srv_monitor @srv_monitor end |
#トポロジー=整数? (読み取り専用)
論理セッション タイムアウト値(分単位)。
281 282 283 |
# ファイル 'lib/mongo/cluster.rb', 行 281 デフォルト トポロジー @topology end |
# tracker ~ オブジェクト (読み取り専用)
278 279 280 |
# ファイル 'lib/mongo/cluster.rb', 行 278 デフォルト 追跡 @tracer end |
インスタンス メソッドの詳細
# == (その他) === (その他) ==================================================================================
このサーバーのクラスターが別のオブジェクトと等しいかどうかを判断します。 構成ではなく、現在クラスター内のサーバーをチェックします。
695 696 697 698 699 |
# ファイル 'lib/mongo/cluster.rb', 行 695 デフォルト ==(その他) return false ただし、 その他.is_a?(クラスター) address == その他.address & & == その他. end |
# add (host, add_options = nil) =サーバー
指定されたアドレスを持つクラスターにサーバーを追加します。 既存のサーバーが hello を実行し、構成されていないサーバーが含まれている可能性がある場合に、新しいサーバーを自動検出するのに役立ちます。
801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 |
# ファイル 'lib/mongo/cluster.rb', 行 801 デフォルト add(ホスト, = nil) address = address.新着情報(ホスト, ) return 場合 address.include?(address) ops = .merge(モニター: false) # モニタリングスレッドを開始していない場合は、次も必要ありません プールの入力スレッドを 開始します。 ops.mergeします。(MongoDB_io: false) ただし、 .fetch(:monitoring_io, true) 負荷分散されたトポロジーでは、すべてのサーバーは次である必要があることに注意してください: # ロードバランサー(オプションで load_ balancer: true が指定されている) # ただし、必要なため、このオプションはここでは設定されていません 起動したサーバーが不明なサーバーとして起動したようにするには、 を指定します # と は、サーバー説明変更イベントをロード バランサーに公開します # 1 このサーバーの実際に正しい説明が設定されます および_set_server_type メソッドによって呼び出される可能性があります。 サーバー = サーバー.新着情報(address, 自己, @monitoring, event_listenners, ops) @update_lock.同期 行う # サーバーが @servers に存在するかどうかを再確認する必要があるためです。 : 以前のチェックはロック状態ではありませんでした。 ここでは更新ロックが適用されているため、server_list を呼び出すことができません。 return 場合 @servers.map(&:address).include?(address) @servers.プッシュ(サーバー) end サーバー.start_monitoring 場合 .nil? || [:mongos] != false サーバー end |
#アドレス=配列 < Mongo::Address >
クラスター内のアドレス。
419 420 421 |
# ファイル 'lib/mongo/cluster.rb', 行 419 デフォルト address server_list.map(&:address) end |
閉じる= nil
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
アプリケーションは Client#close を呼び出してから切断する必要があります。
クラスターを閉じます。
このメソッドを呼び出すのではなく、クラスターに接続します。 このメソッドは内部ドライバーのみに使用します。
クラスター内のすべてのサーバーを切断し、 プロセス内に適切な SDAM イベントを公開します。 SRV モニタリングがアクティブな場合は停止します。 クラスターを切断としてマークします。
閉じたクラスターは使用できなくなります。 クライアントが再接続されると、新しいクラスター インスタンスが作成されます。
474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 |
# ファイル 'lib/mongo/cluster.rb', 行 474 デフォルト 閉じる @ State_change_lock.同期 行う return nil ただし、 の接続 || 接続されていますか? 場合 [:クリーンアップ] != false session_pool.end_sessions @periodic_executor.停止します。 end @srv_monitor_lock.同期 行う @srv_monitor.停止します。 場合 @srv_monitor end @servers.各 行う |サーバー| 次へ ただし、 サーバー.接続されていますか? サーバー.閉じる public_sdump_event( モニタリング::SERVER_CLOSED, モニタリング::イベント::ServerClosed.新着情報(サーバー.address, トポロジー) ) end public_sdump_event( モニタリング::TOLOGY_CLOSED, モニタリング::イベント::トポロジーが閉じました.新着情報(トポロジー) ) @update_lock.同期 行う @connecting = @connected = false end end nil end |
#接続済みかどうか= true|false
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
クラスター オブジェクトがクラスターに接続されているかどうか。
392 393 394 395 396 |
# ファイル 'lib/mongo/cluster.rb', 行 392 デフォルト 接続されていますか? @update_lock.同期 行う !!@connected end end |
接続する場合 = true|false
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
クラスター オブジェクトがクラスターに接続するプロセス内にあるかどうか。
380 381 382 383 384 |
# ファイル 'lib/mongo/cluster.rb', 行 380 デフォルト の接続 @update_lock.同期 行う !!@connecting end end |
# Connected_server_if_connected (サーバー)= Object
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
905 906 907 908 909 910 911 912 913 914 |
# ファイル 'lib/mongo/cluster.rb', 行 905 デフォルト Connected_server_if_connected(サーバー) return ただし、 サーバー.接続されていますか? サーバー.clear_description サーバー.切断します。 public_sdump_event( モニタリング::SERVER_CLOSED, モニタリング::イベント::ServerClosed.新着情報(サーバー.address, トポロジー) ) end |
has_readable_server? (server_selector = nil) = true 、 false
提供された読み込み設定 (read preference) で読み取り可能なサーバーをクラスターが選択するかどうかを決定します。
713 714 715 |
# ファイル 'lib/mongo/cluster.rb', 行 713 デフォルト has_readable_server?(server_selector = nil) トポロジー.has_readable_server?(自己, server_selector) end |
has_writeable_server? = true 、 false
クラスターで書込み可能なサーバーを選択するかどうかを判断します。
725 726 727 |
# ファイル 'lib/mongo/cluster.rb', 行 725 デフォルト has_writeable_server? トポロジー.has_writeable_server?(自己) end |
#heartbeat_interval ⇒ Float
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
サーバーの更新間隔を取得します。 これは オプションによって定義されるか、デフォルトで10になります。
371 372 373 |
# ファイル 'lib/mongo/cluster.rb', 行 371 デフォルト heartbeat_Interval [: heartbeat_frequency] || サーバー::モニター::DEFAULT_HEARTB_Interval end |
詳しくは、 を 検査しstring ます
検査で使用するために、より適した形式の string を取得します。
441 442 443 |
# ファイル 'lib/mongo/cluster.rb', 行 441 デフォルト 検査する " 0は 、 end |
負荷分散 = true | false
クラスターが負荷分散されたトポロジーに含まれるように構成されているかどうかを返します。
313 314 315 |
# ファイル 'lib/mongo/cluster.rb', 行 313 デフォルト load_Balanced? トポロジー.is_a?(トポロジー::LoadBalanced) end |
# max_read_retry =整数
max_read_retry は、クラスター インスタンスではなくクライアント インスタンスから取得する必要があります。最大読み取り再試行値ではクラスターがクライアント間で共有される可能性があるためです。
レガシー読み取り操作を使用する場合にクライアントが読み取り操作を再試行できる最大回数を取得します。
342 343 344 |
# ファイル 'lib/mongo/cluster.rb', 行 342 デフォルト max_read_retry [:max_read_retry] || MAX_READ_RETRIES end |
#次_ping(_ping = nil、セッション = nil、タイムアウト: nil) ⇒ Mongo::サーバー
操作を送信できる次のプライマリ サーバーを取得します。
744 745 746 747 748 749 750 751 |
# ファイル 'lib/mongo/cluster.rb', 行 744 デフォルト next_primary(ping = nil, セッション = nil, timeout: nil) ServerSelector.プライマリ.[select_server]( 自己, nil, セッション, timeout: タイムアウト ) end |
プール(サーバー) ~ Server::ConnectionPool
サーバーの接続プールを取得します。
764 765 766 |
# ファイル 'lib/mongo/cluster.rb', 行 764 デフォルト プール(サーバー) サーバー.プール end |
# read_retry_Interval =浮動小数点数
read_retry_Interval は、クラスター インスタンスではなくクライアント インスタンスから取得される必要があります。これは、読み取り再試行間隔の異なる値を持つクラスターがクライアント間で共有される可能性があるためです。
レガシー読み取り再試行を使用する場合の読み取り再試行の間隔を秒単位で取得します。
360 361 362 |
# ファイル 'lib/mongo/cluster.rb', 行 360 デフォルト read_retry_Interval [:read_retry_Interval] || READ_RETRY_Interval end |
#再接続します。 = true
このメソッドを呼び出す代わりに、Client#reconnect を使用してクラスターに再接続します。 このメソッドでは、SDAM イベントは送信されません。
すべてのサーバーを再接続します。
515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 |
# ファイル 'lib/mongo/cluster.rb', 行 515 デフォルト 再接続します。 @ State_change_lock.同期 行う @update_lock.同期 行う @connecting = true end スキャンします。 サーバー.各 行う |サーバー| サーバー.再接続します。 end @periodic_executor.再起動します。 @srv_monitor_lock.同期 行う @srv_monitor.実行します。 場合 @srv_monitor end @update_lock.同期 行う @connecting = false @connected = true end end end |
# delete (host,切断: true) =配列true | false
このメソッドの戻り値は、ドライバーの公開APIの一部ではありません。
指定されたアドレスのクラスターからサーバーが存在する場合は削除します。
848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 |
# ファイル 'lib/mongo/cluster.rb', 行 848 デフォルト delete(ホスト, 切断: true) address = address.新着情報(ホスト) requested_servers = [] @update_lock.同期 行う @servers.delete_if 行う |サーバー| (サーバー.address == address).タップ 行う |削除| requested_servers < サーバー 場合 削除 end end end 場合 切断 != false requested_servers.各 行う |サーバー| Connected_server_if_connected(サーバー) end end 場合 切断 == false requested_servers else requested_servers.any? end end |
# run_sdum_flow (previal_desc、update_desc、options = {}) =オブジェクト
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
クラスターで SDAM フローを実行します。
このメソッドは、モニタリング接続または非モニタリング接続でサーバーによって返された新しいサーバーの説明を処理するために呼び出され、また、(ネットワーク)エラーの結果として不明なサーバーをマークする場合に呼び出されます。
599 600 601 602 603 604 605 606 607 608 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 645 646 647 648 649 650 |
# ファイル 'lib/mongo/cluster.rb', 行 599 デフォルト run_sam_flow(以前の_desc, Updated_desc, = {}) 場合 load_Balanced? 場合 Updated_desc.config.空の場合 & & ![:keep_ connection_Pool] server_list.各 行う |サーバー| # TODO: サービス ID は Updated_desc から取得される必要がありますか。 # をアサートすることもできます # options[:service_id] == Updated_desc.service_id err = [:scan_error] 割り込み = err & & (err.is_a?(エラー::SocketError) || err.is_a?(エラー::SocketTimeoutError)) サーバー.クリア_接続_プール(service_id: [:service_id], insert_in_use_ connections: 割り込み) end end return end @sam_flow_lock.同期 行う フロー = SdumFlow.新着情報(自己, 以前の_desc, Updated_desc, 次の操作を待機しました。 [:waited]) フロー.server_description_changed #SDAM フローは更新された説明を変更する可能性があります - 最終的に取得する サーバーが使用可能な場合は、ブロードキャストを目的とした # バージョン Updated_desc = フロー.Updated_desc 場合 ![:keep_ connection_Pool] & & フロー.created_unknown? server_list.各 行う |サーバー| 次へ ただし、 サーバー.address == Updated_desc.address err = [:scan_error] 割り込み = err & & (err.is_a?(エラー::SocketError) || err.is_a?(エラー::SocketTimeoutError)) サーバー.クリア_接続_プール(insert_in_use_ connections: 割り込み) end end start_stop_srv_monitor end # 一部の更新された説明(例: 説明が一致しない場合など)により、 説明が削除される処理中のサーバー # トポロジー。 このような状況が発生すると、サーバーの監視スレッドが 強制終了の数。 その結果、フロー呼び出し後のコードは実行されない可能性があります 特定のモニターインスタンスがあるため、一般的には次のようになります フロー呼び出しの過去のこのメソッド内の任意のコード。 # # ただし、このブロードキャスト呼び出しは、モニタリングが スレッドが強制終了された。サーバーは閉じられ、クライアントが存在しないはず # は現在それを待機している必要があるため、セカンダリにはシグナルがありません # では問題は発生しません。 return 場合 Updated_desc.不明な場合 server_Selection_smahour.ブロードキャスト end |
#スキャン(sync = true) = true
同期スキャンと非同期スキャンの両方で、各モニター スレッドはスキャン間の最小間隔を維持します。つまり、このメソッドを呼び出しても、次の瞬間に特定のサーバーでスキャンが開始されない可能性があります。
クラスター内のすべての既知のサーバーのスキャンを強制します。
同期パラメータが true の場合(デフォルトの値)、このメソッドを呼び出したスレッドで同期的に実行されます。 クラスター内の各サーバーは順番にチェックされます。 クラスター内に多数のサーバーがある場合、または応答が遅い場合は、操作の実行が長時間になる可能性があります。
同期パラメータが false の場合、このメソッドはすべてのサーバー モニター スレッドに即座のスキャンを実行するように指示し、スキャン結果を待たずに返します。
558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 |
# ファイル 'lib/mongo/cluster.rb', 行 558 デフォルト スキャンします。(同期 = true) 場合 同期 server_list.各 行う |サーバー| 場合 サーバー.モニター サーバー.モニター.スキャンします。 else log_警告(「 クラスター は同期スキャンを要求して い ます が、サーバー は { サーバー } } に モニターがありません 」) end end else server_list.各 行う |サーバー| サーバー.scan_smahour.シグナル end end true end |
#servers ⇒ Array<Server>
操作を実行できるクラスターからサーバー候補のリストを取得します。
407 408 409 |
# ファイル 'lib/mongo/cluster.rb', 行 407 デフォルト サーバー トポロジー.サーバー(server_list) end |
# server_list =オブジェクト
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
898 899 900 901 902 |
# ファイル 'lib/mongo/cluster.rb', 行 898 デフォルト server_list @update_lock.同期 行う @servers.dup end end |
#set_server_list (server_address_strs) =オブジェクト
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
指定されたアドレス文字列のリスト内のアドレスにサーバーのリストを設定します。
このメソッドは、監視対象ホスト名の新しい DNS レコードを受信した SRV モニターによって呼び出されます。
渡されたサーバー アドレスのリストにないアドレスを持つクラスター内のサーバーを削除し、クラスター内にまだ存在しないアドレスのサーバーを追加します。
666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 |
# ファイル 'lib/mongo/cluster.rb', 行 666 デフォルト set_server_list(server_address_strs) @sam_flow_lock.同期 行う # 新しいアドレスの 1 つが現在のサーバー リストにない場合、 # サーバー リストに追加する server_address_strs.各 行う |address_str| add(address_str) ただし、 server_list.any? { |サーバー| サーバー.address.シード == address_str } end # サーバーのアドレスの 1 つが新しいアドレス リストにない場合は、 そのサーバーをサーバー リストから削除します。 server_list.各 行う |サーバー| ただし、 server_address_strs.any? { |address_str| サーバー.address.シード == address_str } delete(サーバー.address.シード) end end end end |
#のサマリー=オブジェクト
この方法は実験的なものであり、変更される可能性があります。
449 450 451 452 453 |
# ファイル 'lib/mongo/cluster.rb', 行 449 デフォルト 概要 '#<Cluster ' + "トポロジー= #{トポロジー. Summary } " + " server=[ #{ servers_list . map ( & : Summary ) ] . join ( ' 、 ' ) } ]> " end |
#trigger_periodic_executor! ⇒ オブジェクト
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
クラスターの定期実行エキスキュータを直ちに実行します。クラスターに定期実行エキスキュータがない場合、このメソッドは何も実行しません。
964 965 966 967 968 |
# ファイル 'lib/mongo/cluster.rb', 行 964 デフォルト trigger_periodic_executor! return ただし、 @periodic_executor @periodic_executor.実行する end |
#update_cluster_time(result) ⇒ Object
応答に含まれる最大クラスター時間を更新します。
778 779 780 781 782 783 784 |
# ファイル 'lib/mongo/cluster.rb', 行 778 デフォルト update_cluster_time(結果) return ただし、 (cluster_time_doc = 結果.cluster_time) @cluster_time_lock.同期 行う advanced_cluster_time(cluster_time_doc) end end |
#update_topology(new_topology) ⇒ Object
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 |
# ファイル 'lib/mongo/cluster.rb', 行 871 デフォルト update_topology(new_to logical) old_top logical = nil @update_lock.同期 行う old_top logical = トポロジー @topology = new_to logical end # 新しいトポロジーがデータを保持するサーバーがある場合、かどうかが確認できます # セッションがサポートされています - キャッシュされた値を更新します。 #新しいトポロジーにデータを保持するサーバーがない場合は、古い値を維持します 」と「 Sessions_supported 」。 メソッドはサーバー選択を実行します : セッションのサポートを正確に決定しようとしている間に、 最後の既知の値。 場合 トポロジー.data_bearing_servers? errors_supported = !!トポロジー.logical_session_timeout @update_lock.同期 行う @sessions_supported = errors_supported end end public_sdump_event( モニタリング::TOLOGY_CHANED, モニタリング::イベント::トポロジーが変更された.新着情報(old_top logical, トポロジー) ) end |
# validate_session_support (timeout: nil) = オブジェクト
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
ドライバーが接続されている配置でセッションがサポートされていない場合は、 Error::SessionsNotAvalable が発生します。
セッションのサポートは、配置内のサーバーがアップグレードまたはダウングレードされる例、時間の経過とともに変化する可能性があります。クライアントがどのサーバーにも接続されず、サーバー選択タイムアウト中にサーバーが見つからない場合、このメソッドは NoServerAvalable を発生させます。このメソッドは操作実行フローから呼び出されます。NoServerAvalable が発生すると、操作全体が失敗します。これは、操作の実行がすべてのサーバーが使用可能になるまでサーバー選択がタイムアウトするまで待機したためです(サーバーのスーパーセット試行される操作に適しています)。
940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 |
# ファイル 'lib/mongo/cluster.rb', 行 940 デフォルト validate_session_support をサポートします。(timeout: nil) return 場合 トポロジー.is_a?(トポロジー::LoadBalanced) @ State_change_lock.同期 行う @sam_flow_lock.同期 行う resume_sessions_not_supported 場合 トポロジー.data_bearing_servers? & & !トポロジー.logical_session_timeout end end # 既知のデータを保持するサーバーはありません - を試行するためにサーバー選択を実行します。 少なくとも 1 つから応答を受け取り、正確な結果を返す セッションが現在サポートされているかどうかの#評価。 ServerSelector.得る(モード: :primary_preferred).[select_server](自己, timeout: タイムアウト) @ State_change_lock.同期 行う @sam_flow_lock.同期 行う resume_sessions_not_supported ただし、 トポロジー.logical_session_timeout end end end |