クラス: 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
- #srv_monitor ⇒ Object readOnly private
-
#トポロジー= 整数?
readOnly
論理セッション タイムアウト値(分単位)。
- # tracker ~ オブジェクト readOnly
Mongo::ClusterTime::Consumerから含まれる属性
Event::Subscriberに含まれる属性
クラスメソッドの概要を折りたたむ
-
。 create (クライアント、モニタリング: nil)= クラスター
private
提供されたクライアント用のクラスターを作成します 。これは、クライアントの元のクラスターインスタンスと同じであってはなりません。
インスタンス メソッドの概要を折りたたむ
-
== (その他) ===(その他) ======================================
このサーバーのクラスターが別のオブジェクトと等しいかどうかを判断します。
-
# 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
指定されたアドレス文字列のリスト内のアドレスにサーバーのリストを設定します。
- #のサマリー= オブジェクト
-
#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)
接続ハンドシェイクに使用されるアプリケーション メタデータを返します。
311 312 313 |
# ファイル 'lib/mongo/cluster.rb', 行 311 デフォルト @app_metadata end |
# trigger_app_metadata =オブジェクト(読み取り専用)
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
314 315 316 |
# ファイル 'lib/mongo/cluster.rb', 行 314 デフォルト @monitor_app_metadata end |
#monitoring ⇒ Monitoring (readonly)
監視 監視を返します。
300 301 302 |
# ファイル 'lib/mongo/cluster.rb', 行 300 デフォルト モニタリング @monitoring end |
オプション=ハッシュ(読み取り専用)
オプション ハッシュを返します。
297 298 299 |
# ファイル 'lib/mongo/cluster.rb', 行 297 デフォルト @options end |
#push_monitor_app_metadata =オブジェクト(読み取り専用)
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
317 318 319 |
# ファイル 'lib/mongo/cluster.rb', 行 317 デフォルト @push_monitor_app_metadata end |
シード 処理 = 配列=string <String>===========================
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
シード サーバーのアドレスを返します。 SDAM の結果としてクラスターが使用している現在のアドレスではなく、インスタンス化されたときにクラスターに指定されたアドレスが含まれます。
325 326 327 |
# ファイル 'lib/mongo/cluster.rb', 行 325 デフォルト シード @シード end |
# server_Selection_schema は、オブジェクト(読み取り専用)
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
482 483 484 |
# ファイル 'lib/mongo/cluster.rb', 行 482 デフォルト server_Selection_smahour @server_Selection_schema書込み end |
#session_Pool =オブジェクト(読み取り専用)
330 331 332 |
# ファイル 'lib/mongo/cluster.rb', 行 330 デフォルト session_pool @session_pool end |
# srv_monitor =オブジェクト(読み取り専用)
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
352 353 354 |
# ファイル 'lib/mongo/cluster.rb', 行 352 デフォルト srv_monitor @srv_monitor end |
#トポロジー=整数? (読み取り専用)
論理セッション タイムアウト値(分単位)。
305 306 307 |
# ファイル 'lib/mongo/cluster.rb', 行 305 デフォルト トポロジー @topology end |
# tracker ~ オブジェクト (読み取り専用)
302 303 304 |
# ファイル 'lib/mongo/cluster.rb', 行 302 デフォルト 追跡 @tracer end |
クラスメソッドの詳細
。 create (クライアント、モニタリング: nil)=クラスター
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
提供されたクライアント用のクラスターを作成します 。これは、クライアントの元のクラスターインスタンスと同じであってはなりません。
287 288 289 290 291 292 293 294 |
# ファイル 'lib/mongo/cluster.rb', 行 287 デフォルト 自己.create(クライアント, 監視: nil) クラスター = クラスター.新着情報( クライアント.クラスター.address.map(&:to_s), モニタリング || モニタリング.新着情報, クライアント. ) クライアント.instance_variable_set(:@cluster, クラスター) end |
インスタンス メソッドの詳細
# == (その他) === (その他) ==================================================================================
このサーバーのクラスターが別のオブジェクトと等しいかどうかを判断します。 構成ではなく、現在クラスター内のサーバーをチェックします。
721 722 723 724 725 |
# ファイル 'lib/mongo/cluster.rb', 行 721 デフォルト ==(その他) return false ただし、 その他.is_a?(クラスター) address == その他.address & & == その他. end |
# add (host, add_options = nil) =サーバー
指定されたアドレスを持つクラスターにサーバーを追加します。 既存のサーバーが hello を実行し、構成されていないサーバーが含まれている可能性がある場合に、新しいサーバーを自動検出するのに役立ちます。
827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 |
# ファイル 'lib/mongo/cluster.rb', 行 827 デフォルト 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 >
クラスター内のアドレス。
445 446 447 |
# ファイル 'lib/mongo/cluster.rb', 行 445 デフォルト address server_list.map(&:address) end |
閉じる= nil
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
アプリケーションは Client#close を呼び出してから切断する必要があります。
クラスターを閉じます。
このメソッドを呼び出すのではなく、クラスターに接続します。 このメソッドは内部ドライバーのみに使用します。
クラスター内のすべてのサーバーを切断し、 プロセス内に適切な SDAM イベントを公開します。 SRV モニタリングがアクティブな場合は停止します。 クラスターを切断としてマークします。
閉じたクラスターは使用できなくなります。 クライアントが再接続されると、新しいクラスター インスタンスが作成されます。
500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 |
# ファイル 'lib/mongo/cluster.rb', 行 500 デフォルト 閉じる @ 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 の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
クラスター オブジェクトがクラスターに接続されているかどうか。
418 419 420 421 422 |
# ファイル 'lib/mongo/cluster.rb', 行 418 デフォルト 接続されていますか? @update_lock.同期 行う !!@connected end end |
接続する場合 = true|false
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
クラスター オブジェクトがクラスターに接続するプロセス内にあるかどうか。
406 407 408 409 410 |
# ファイル 'lib/mongo/cluster.rb', 行 406 デフォルト の接続 @update_lock.同期 行う !!@connecting end end |
# Connected_server_if_connected (サーバー)= Object
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
931 932 933 934 935 936 937 938 939 940 |
# ファイル 'lib/mongo/cluster.rb', 行 931 デフォルト 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) で読み取り可能なサーバーをクラスターが選択するかどうかを決定します。
739 740 741 |
# ファイル 'lib/mongo/cluster.rb', 行 739 デフォルト has_readable_server?(server_selector = nil) トポロジー.has_readable_server?(自己, server_selector) end |
has_writeable_server? = true 、 false
クラスターで書込み可能なサーバーを選択するかどうかを判断します。
751 752 753 |
# ファイル 'lib/mongo/cluster.rb', 行 751 デフォルト has_writeable_server? トポロジー.has_writeable_server?(自己) end |
#heartbeat_interval ⇒ Float
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
サーバーの更新間隔を取得します。 これは オプションによって定義されるか、デフォルトで10になります。
397 398 399 |
# ファイル 'lib/mongo/cluster.rb', 行 397 デフォルト heartbeat_Interval [: heartbeat_frequency] || サーバー::モニター::DEFAULT_HEARTB_Interval end |
詳しくは、 を 検査しstring ます
検査で使用するために、より適した形式の string を取得します。
467 468 469 |
# ファイル 'lib/mongo/cluster.rb', 行 467 デフォルト 検査する " 0は 、 end |
負荷分散 = true | false
クラスターが負荷分散されたトポロジーに含まれるように構成されているかどうかを返します。
339 340 341 |
# ファイル 'lib/mongo/cluster.rb', 行 339 デフォルト load_Balanced? トポロジー.is_a?(トポロジー::LoadBalanced) end |
# max_read_retry =整数
max_read_retry は、クラスター インスタンスではなくクライアント インスタンスから取得する必要があります。最大読み取り再試行値ではクラスターがクライアント間で共有される可能性があるためです。
レガシー読み取り操作を使用する場合にクライアントが読み取り操作を再試行できる最大回数を取得します。
368 369 370 |
# ファイル 'lib/mongo/cluster.rb', 行 368 デフォルト max_read_retry [:max_read_retry] || MAX_READ_RETRIES end |
#次_ping(_ping = nil、セッション = nil、タイムアウト: nil) ⇒ Mongo::サーバー
操作を送信できる次のプライマリ サーバーを取得します。
770 771 772 773 774 775 776 777 |
# ファイル 'lib/mongo/cluster.rb', 行 770 デフォルト next_primary(ping = nil, セッション = nil, timeout: nil) ServerSelector.プライマリ.[select_server]( 自己, nil, セッション, timeout: タイムアウト ) end |
プール(サーバー) ~ Server::ConnectionPool
サーバーの接続プールを取得します。
790 791 792 |
# ファイル 'lib/mongo/cluster.rb', 行 790 デフォルト プール(サーバー) サーバー.プール end |
# read_retry_Interval =浮動小数点数
read_retry_Interval は、クラスター インスタンスではなくクライアント インスタンスから取得される必要があります。これは、読み取り再試行間隔の異なる値を持つクラスターがクライアント間で共有される可能性があるためです。
レガシー読み取り再試行を使用する場合の読み取り再試行の間隔を秒単位で取得します。
386 387 388 |
# ファイル 'lib/mongo/cluster.rb', 行 386 デフォルト read_retry_Interval [:read_retry_Interval] || READ_RETRY_Interval end |
#再接続します。 = true
このメソッドを呼び出す代わりに、Client#reconnect を使用してクラスターに再接続します。 このメソッドでは、SDAM イベントは送信されません。
すべてのサーバーを再接続します。
541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 |
# ファイル 'lib/mongo/cluster.rb', 行 541 デフォルト 再接続します。 @ 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の一部ではありません。
指定されたアドレスのクラスターからサーバーが存在する場合は削除します。
874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 |
# ファイル 'lib/mongo/cluster.rb', 行 874 デフォルト 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 フローを実行します。
このメソッドは、モニタリング接続または非モニタリング接続でサーバーによって返された新しいサーバーの説明を処理するために呼び出され、また、(ネットワーク)エラーの結果として不明なサーバーをマークする場合に呼び出されます。
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 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 |
# ファイル 'lib/mongo/cluster.rb', 行 625 デフォルト 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 の場合、このメソッドはすべてのサーバー モニター スレッドに即座のスキャンを実行するように指示し、スキャン結果を待たずに返します。
584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 |
# ファイル 'lib/mongo/cluster.rb', 行 584 デフォルト スキャンします。(同期 = true) 場合 同期 server_list.各 行う |サーバー| 場合 サーバー.モニター サーバー.モニター.スキャンします。 else log_警告(「 クラスター は同期スキャンを要求して い ます が、サーバー は { サーバー } } に モニターがありません 」) end end else server_list.各 行う |サーバー| サーバー.scan_smahour.シグナル end end true end |
#servers ⇒ Array<Server>
操作を実行できるクラスターからサーバー候補のリストを取得します。
433 434 435 |
# ファイル 'lib/mongo/cluster.rb', 行 433 デフォルト サーバー トポロジー.サーバー(server_list) end |
# server_list =オブジェクト
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
924 925 926 927 928 |
# ファイル 'lib/mongo/cluster.rb', 行 924 デフォルト server_list @update_lock.同期 行う @servers.dup end end |
#set_server_list (server_address_strs) =オブジェクト
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
指定されたアドレス文字列のリスト内のアドレスにサーバーのリストを設定します。
このメソッドは、監視対象ホスト名の新しい DNS レコードを受信した SRV モニターによって呼び出されます。
渡されたサーバー アドレスのリストにないアドレスを持つクラスター内のサーバーを削除し、クラスター内にまだ存在しないアドレスのサーバーを追加します。
692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 |
# ファイル 'lib/mongo/cluster.rb', 行 692 デフォルト 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 |
#のサマリー=オブジェクト
この方法は実験的なものであり、変更される可能性があります。
475 476 477 478 479 |
# ファイル 'lib/mongo/cluster.rb', 行 475 デフォルト 概要 '#<Cluster ' + "トポロジー= #{トポロジー. Summary } " + " server=[ #{ servers_list . map ( & : Summary ) ] . join ( ' 、 ' ) } ]> " end |
#update_cluster_time(result) ⇒ Object
応答に含まれる最大クラスター時間を更新します。
804 805 806 807 808 809 810 |
# ファイル 'lib/mongo/cluster.rb', 行 804 デフォルト 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 の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 |
# ファイル 'lib/mongo/cluster.rb', 行 897 デフォルト 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 が発生すると、操作全体が失敗します。これは、操作の実行がすべてのサーバーが使用可能になるまでサーバー選択がタイムアウトするまで待機したためです(サーバーのスーパーセット試行される操作に適しています)。
966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 |
# ファイル 'lib/mongo/cluster.rb', 行 966 デフォルト 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 |