クラス: Mongo::Cluster
- 継承:
-
オブジェクト
- オブジェクト
- Mongo::Cluster
- 次による拡張機能。
- 転送可能
- 次のことが含まれます。
- Mongo::ClusterTime::Consumer 、 Event::Subscriber 、 Loggable 、 Monitoring:: public
- 定義:
- build/ruby-Driver-v 2.19 /lib/mongo/cluster.rb 、
build/ruby-Driver-v 2.19 /lib/mongo/cluster/toになります。rb、
build/ruby-Driver-v 2.19 /lib/mongo/cluster/toになります。rb、
build/ruby-Driver-v 2.19 /lib/mongo/cluster/sam_flow.rb,
build/ruby-Driver-v 2 . 19 /lib/mongo/cluster/topquality/base.rb、
build/ruby-Driver-v 2 . 19 /lib/mongo/cluster/topquality/long.rb、
build/ruby-Driver-v 2 . 19 /lib/mongo/cluster/toplog/sharded.rb、
build/ruby-Driver-v 2 . 19 /lib/mongo/cluster/topquality/unknown.rb、
build/ruby-Driver-v 2 . 19 /lib/mongo/cluster/periotric_executor.rb、
build/ruby-Driver-v 2 . 19 /lib/mongo/cluster/readers/cursor_reader.rb、
build/ruby-Driver-v 2 . 19 /lib/mongo/cluster/readers/socket_reaper.rb、
build/ruby-Driver-v 2 . 19 /lib/mongo/cluster/topquality/load_ balance.rb、
build/ruby-Driver-v 2 . 19 /lib/mongo/cluster/topquality/no_replica_set_options.rb、
build/ruby-Driver-v 2 . 19 /lib/mongo/cluster/topquality/replica_set_no_primary.rb、
build/ruby-Driver-v 2 . 19 /lib/mongo/cluster/topquality/replica_set_with_primary.rb
Overview
Copyright © 2018-2020 MongoDB Inc.
Apache ライセンス バージョン2.0 ( ライセンス)に基づいて使用許諾されます。ライセンス に準拠している場合を除き、このファイルを使用することはできません。 ライセンスのコピーは次で取得できます:
http://www.apache.org/licenses/LICENSE-2.0
該当するルールによって要求されない限り、または書込み保証に同意された場合を除き、ライセンスに基づいて配布されるソフトウェアは、保証されない、または条件なし(明示的またはExpress的)の 条件に一致するものとして配布されます。 ライセンスの下の特定の言語を制御する権限と制限については、「 ライセンス 」を参照してください。
名前空間で定義済み
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'.freeze
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
論理セッション タイムアウト値(分単位)。
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
操作を送信できる次のプライマリ サーバーを取得します。
- プール(サーバー) ~ 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 = オブジェクト
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 の配列として受け取ります。
新しいクラスターをインスタンス化します。
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 271 272 273 274 275 276 277 278 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster.rb' の場合は120行 デフォルト 初期化(シード, モニタリング, = オプション::編集済み.新着情報) 場合 シード.nil? 発生 ArgumentError, シードは nil にできません 。 end = .dup 場合 [:monitoring_io] == false & & !.key?(:クリーンアップ) [:クリーンアップ] = false end @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 = ミューテックス.新着情報 セッション::SessionPool.create(自己) 場合 シード.空の場合 & & load_Balanced? 発生 ArgumentError, 「シードなしの負荷分散されたクラスターは禁止されています」 end # 開始トポロジーは、サーバーがない場合は常に不明です。 # https://github.com/mongodb/specions/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 ただし、 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 end deadline = start_mongotime + server_Selection_timeout # 各サーバーの最初のスキャンが完了するまで待機します。 # 下位互換性。 この SDAM ラウンド中にサーバーが検出された場合、 # これらのサーバーもクエリされるまで待機します # サーバー選択タイムアウト、または3秒最小値。 ループ 行う # SDAM の実行中にサーバー リストの読み取りが 試行されないようにします サーバー = @sam_flow_lock.同期 行う server_list.dup end 場合 サーバー.すべて? { |サーバー| サーバー.last_scan_mongotime & & サーバー.last_scan_mongotime >= start_mongotime } break end 場合 (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 end |
インスタンス属性の詳細
# app_metadata = Mongo::Server::AppMetadata (readonly)
接続ハンドシェイクに使用されるアプリケーション メタデータを返します。
317 318 319 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster.rb' の場合は317行 デフォルト @app_metadata end |
# trigger_app_metadata =オブジェクト(読み取り専用)
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
320 321 322 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster.rb' の場合は320行 デフォルト @monitor_app_metadata end |
#monitoring ⇒ Monitoring (readonly)
監視 監視を返します。
308 309 310 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster.rb' の場合は308行 デフォルト モニタリング @monitoring end |
オプション=ハッシュ(読み取り専用)
オプション ハッシュを返します。
305 306 307 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster.rb' の場合は305行 デフォルト @options end |
#push_monitor_app_metadata =オブジェクト(読み取り専用)
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
323 324 325 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster.rb' の場合は323行 デフォルト @push_monitor_app_metadata end |
シード 処理 = 配列=string <String>===========================
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
シード サーバーのアドレスを返します。 SDAM の結果としてクラスターが使用している現在のアドレスではなく、インスタンス化されたときにクラスターに指定されたアドレスが含まれます。
331 332 333 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster.rb' の場合は331行 デフォルト シード @シード end |
# server_Selection_schema は、オブジェクト(読み取り専用)
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
488 489 490 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster.rb' の場合は488行 デフォルト server_Selection_smahour @server_Selection_schema書込み end |
#session_Pool =オブジェクト(読み取り専用)
336 337 338 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster.rb' の場合は336行 デフォルト session_pool @session_pool end |
# srv_monitor =オブジェクト(読み取り専用)
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
358 359 360 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster.rb' の場合は358行 デフォルト srv_monitor @srv_monitor end |
#トポロジー=整数? (読み取り専用)
論理セッション タイムアウト値(分単位)。
311 312 313 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster.rb' の場合は311行 デフォルト トポロジー @topology end |
クラスメソッドの詳細
。 create (クライアント、モニタリング: nil)=クラスター
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
提供されたクライアント用のクラスターを作成し、クライアントの元のクラスターインスタンスを同じにしたくない場合に使用します。
295 296 297 298 299 300 301 302 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster.rb' の場合は295行 デフォルト 自己.create(クライアント, 監視: nil) クラスター = クラスター.新着情報( クライアント.クラスター.address.map(&:to_s), モニタリング || モニタリング.新着情報, クライアント., ) クライアント.instance_variable_set(:@cluster, クラスター) end |
インスタンス メソッドの詳細
# == (その他) === (その他) ==================================================================================
このサーバーのクラスターが別のオブジェクトと等しいかどうかを判断します。 構成ではなく、現在クラスター内のサーバーをチェックします。
738 739 740 741 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster.rb' の場合は738行 デフォルト ==(その他) return false ただし、 その他.is_a?(クラスター) address == その他.address & & == その他. end |
# add (host, add_options = nil) =サーバー
指定されたアドレスを持つクラスターにサーバーを追加します。 既存のサーバーが hello を実行し、構成されていないサーバーが含まれている可能性がある場合に、新しいサーバーを自動検出するのに役立ちます。
836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster.rb' の場合は836行 デフォルト add(ホスト, =nil) address = address.新着情報(ホスト, ) 場合 !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 場合 .nil? || [:mongos] != false サーバー.start_monitoring end サーバー end end |
#アドレス=配列 < Mongo::Address >
クラスター内のアドレス。
451 452 453 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster.rb' の場合は451行 デフォルト address server_list.map(&:address) end |
閉じる= nil
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
アプリケーションは Client#close を呼び出してから切断する必要があります。
クラスターを閉じます。
このメソッドを呼び出すのではなく、クラスターに接続します。 このメソッドは内部ドライバーのみに使用します。
クラスター内のすべてのサーバーを切断し、 プロセス内に適切な SDAM イベントを公開します。 SRV モニタリングがアクティブな場合は停止します。 クラスターを切断としてマークします。
閉じたクラスターは使用できなくなります。 クライアントが再接続されると、新しいクラスター インスタンスが作成されます。
506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster.rb' の場合は506行 デフォルト 閉じる @ State_change_lock.同期 行う ただし、 の接続 || 接続されていますか? return nil end 場合 [:クリーンアップ] != false session_pool.end_sessions @periodic_executor.停止します。 end @srv_monitor_lock.同期 行う 場合 @srv_monitor @srv_monitor.停止します。 end end @servers.各 行う |サーバー| 場合 サーバー.接続されていますか? サーバー.閉じる public_sdump_event( モニタリング::SERVER_CLOSED, モニタリング::イベント::ServerClosed.新着情報(サーバー.address, トポロジー) ) end end public_sdump_event( モニタリング::TOLOGY_CLOSED, モニタリング::イベント::トポロジーが閉じました.新着情報(トポロジー) ) @update_lock.同期 行う @connecting = @connected = false end end nil end |
#接続済みかどうか= true|false
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
クラスター オブジェクトがクラスターに接続されているかどうか。
424 425 426 427 428 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster.rb' の場合は424行 デフォルト 接続されていますか? @update_lock.同期 行う !!@connected end end |
接続する場合 = true|false
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
クラスター オブジェクトがクラスターに接続するプロセス内にあるかどうか。
412 413 414 415 416 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster.rb' の場合は412行 デフォルト の接続 @update_lock.同期 行う !!@connecting end end |
# Connected_server_if_connected (サーバー)= Object
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
944 945 946 947 948 949 950 951 952 953 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster.rb' の場合は944行 デフォルト Connected_server_if_connected(サーバー) 場合 サーバー.接続されていますか? サーバー.clear_description サーバー.切断します。 public_sdump_event( モニタリング::SERVER_CLOSED, モニタリング::イベント::ServerClosed.新着情報(サーバー.address, トポロジー) ) end end |
has_readable_server? (server_selector = nil) = true 、 false
提供された読み込み設定 (read preference) で読み取り可能なサーバーをクラスターが選択するかどうかを決定します。
755 756 757 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster.rb' の場合は755行 デフォルト has_readable_server?(server_selector = nil) トポロジー.has_readable_server?(自己, server_selector) end |
has_writeable_server? = true 、 false
クラスターで書込み可能なサーバーを選択するかどうかを判断します。
767 768 769 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster.rb' の場合は767行 デフォルト has_writeable_server? トポロジー.has_writeable_server?(自己) end |
#heartbeat_interval ⇒ Float
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
サーバーの更新間隔を取得します。 これは オプションによって定義されるか、デフォルトで10になります。
403 404 405 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster.rb' の場合は403行 デフォルト heartbeat_Interval [: heartbeat_frequency] || サーバー::モニター::DEFAULT_HEARTB_Interval end |
詳しくは、 を 検査しstring ます
検査で使用するために、より適した形式の string を取得します。
473 474 475 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster.rb' の場合は473行 デフォルト 検査する " 0は 、 end |
負荷分散 = true | false
クラスターが負荷分散されたトポロジーに含まれるように構成されているかどうかを返します。
345 346 347 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster.rb' の場合は345行 デフォルト load_Balanced? トポロジー.is_a?(トポロジー::LoadBalanced) end |
# max_read_retry =整数
max_read_retry は、クラスター インスタンスではなくクライアント インスタンスから取得する必要があります。最大読み取り再試行値ではクラスターがクライアント間で共有される可能性があるためです。
レガシー読み取り操作を使用する場合にクライアントが読み取り操作を再試行できる最大回数を取得します。
374 375 376 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster.rb' の場合は374行 デフォルト max_read_retry [:max_read_retry] || MAX_READ_RETRIES end |
次の_プライマリ(ping = nil、セッション = nil) = nil からMongo::Server
操作を送信できる次のプライマリ サーバーを取得します。
784 785 786 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster.rb' の場合は784行 デフォルト next_primary(ping = nil, セッション = nil) ServerSelector.プライマリ.[select_server](自己, nil, セッション) end |
プール(サーバー) ~ Server::ConnectionPool
サーバーの接続プールを取得します。
799 800 801 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster.rb' の場合は799行 デフォルト プール(サーバー) サーバー.プール end |
# read_retry_Interval =浮動小数点数
read_retry_Interval は、クラスター インスタンスではなくクライアント インスタンスから取得される必要があります。これは、読み取り再試行間隔の異なる値を持つクラスターがクライアント間で共有される可能性があるためです。
レガシー読み取り再試行を使用する場合の読み取り再試行の間隔を秒単位で取得します。
392 393 394 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster.rb' の場合は392行 デフォルト read_retry_Interval [:read_retry_Interval] || READ_RETRY_Interval end |
#再接続します。 = true
このメソッドを呼び出す代わりに、Client#reconnect を使用してクラスターに再接続します。 このメソッドでは、SDAM イベントは送信されません。
すべてのサーバーを再接続します。
550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster.rb' の場合は550行 デフォルト 再接続します。 @ State_change_lock.同期 行う @update_lock.同期 行う @connecting = true end スキャンします。 サーバー.各 行う |サーバー| サーバー.再接続します。 end @periodic_executor.再起動します。 @srv_monitor_lock.同期 行う 場合 @srv_monitor @srv_monitor.実行します。 end end @update_lock.同期 行う @connecting = false @connected = true end end end |
# delete (host,切断: true) =配列true | false
このメソッドの戻り値は、ドライバーの公開 API の一部ではありません。
指定されたアドレスのクラスターからサーバーが存在する場合は削除します。
885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster.rb' の場合は885行 デフォルト delete(ホスト, 切断: true) address = address.新着情報(ホスト) requested_servers = [] @update_lock.同期 行う @servers.delete_if 行う |サーバー| (サーバー.address == address).タップ 行う |削除| 場合 削除 requested_servers < サーバー end end end end 場合 切断 != false requested_servers.各 行う |サーバー| Connected_server_if_connected(サーバー) end end 場合 切断 != false requested_servers.any? else requested_servers end end |
# run_sdum_flow (previal_desc、update_desc、options = {}) =オブジェクト
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
クラスターで SDAM フローを実行します。
このメソッドは、モニタリング接続または非モニタリング接続でサーバーによって返された新しいサーバーの説明を処理するために呼び出され、また、(ネットワーク)エラーの結果として不明なサーバーをマークする場合に呼び出されます。
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 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster.rb' の場合は636行 デフォルト 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 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 end end start_stop_srv_monitor end # 一部の更新された説明(例: 説明が一致しない場合など)により、 説明が削除される処理中のサーバー # トポロジー。 このような状況が発生すると、サーバーの監視スレッドが 強制終了の数。 その結果、フロー呼び出し後のコードは実行されない可能性があります 特定のモニターインスタンスがあるため、一般的には次のようになります フロー呼び出しの過去のこのメソッド内の任意のコード。 # # ただし、このブロードキャスト呼び出しは、モニタリングが スレッドが強制終了された。サーバーは閉じられ、クライアントが存在しないはず # は現在それを待機している必要があるため、セカンダリにはシグナルがありません # では問題は発生しません。 ただし、 Updated_desc.不明な場合 server_Selection_smahour.ブロードキャスト end end |
#スキャン(sync = true) = true
同期スキャンと非同期スキャンの両方で、各モニター スレッドはスキャン間の最小間隔を維持します。つまり、このメソッドを呼び出しても、次の瞬間に特定のサーバーでスキャンが開始されない可能性があります。
クラスター内のすべての既知のサーバーのスキャンを強制します。
同期パラメータが true の場合(デフォルトの値)、このメソッドを呼び出したスレッドで同期的に実行されます。 クラスター内の各サーバーは順番にチェックされます。 クラスター内に多数のサーバーがある場合、または応答が遅い場合は、操作の実行が長時間になる可能性があります。
同期パラメータが false の場合、このメソッドはすべてのサーバー モニター スレッドに即座のスキャンを実行するように指示し、スキャン結果を待たずに返します。
595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster.rb' の場合は595行 デフォルト スキャンします。(同期=true) 場合 同期 server_list.各 行う |サーバー| 場合 サーバー.モニター サーバー.モニター.スキャンします。 else log_警告(「 クラスター は同期スキャンを要求して い ます が、サーバー は { サーバー } } に モニターがありません 」) end end else server_list.各 行う |サーバー| サーバー.scan_smahour.シグナル end end true end |
#servers ⇒ Array<Server>
操作を実行できるクラスターからサーバー候補のリストを取得します。
439 440 441 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster.rb' の場合は439行 デフォルト サーバー トポロジー.サーバー(server_list) end |
# server_list =オブジェクト
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
937 938 939 940 941 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster.rb' の場合は937行 デフォルト server_list @update_lock.同期 行う @servers.dup end end |
#set_server_list (server_address_strs) =オブジェクト
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
指定されたアドレス文字列のリスト内のアドレスにサーバーのリストを設定します。
このメソッドは、監視対象ホスト名の新しい DNS レコードを受信した SRV モニターによって呼び出されます。
渡されたサーバー アドレスのリストにないアドレスを持つクラスター内のサーバーを削除し、クラスター内にまだ存在しないアドレスのサーバーを追加します。
707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster.rb' の場合は707行 デフォルト set_server_list(server_address_strs) @sam_flow_lock.同期 行う # 新しいアドレスの 1 つが現在のサーバー リストにない場合、 # サーバー リストに追加する server_address_strs.各 行う |address_str| ただし、 server_list.any? { |サーバー| サーバー.address.シード == address_str } add(address_str) end end # サーバーのアドレスの 1 つが新しいアドレス リストにない場合は、 そのサーバーをサーバー リストから削除します。 server_list.各 行う |サーバー| ただし、 server_address_strs.any? { |address_str| サーバー.address.シード == address_str } delete(サーバー.address.シード) end end end end |
#のサマリー=オブジェクト
この方法は実験的なものであり、変更される可能性があります。
481 482 483 484 485 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster.rb' の場合は481行 デフォルト 概要 " #< クラスター" + "トポロジー= #{トポロジー. Summary } "+ " server=[ #{ servers_list . map ( & : Summary ) ] . join ( ' 、 ' ) } ]> " end |
#update_cluster_time(result) ⇒ Object
応答に含まれる最大クラスター時間を更新します。
813 814 815 816 817 818 819 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster.rb' の場合は813行 デフォルト update_cluster_time(結果) 場合 cluster_time_doc = 結果.cluster_time @cluster_time_lock.同期 行う advanced_cluster_time(cluster_time_doc) end end end |
#update_topology(new_topology) ⇒ Object
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster.rb' の場合は910行 デフォルト 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 =オブジェクト
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
ドライバーが接続されている配置でセッションがサポートされていない場合は、 Error::SessionsNotAvalable が発生します。
セッションのサポートは、配置内のサーバーがアップグレードまたはダウングレードされるなど、時間の経過とともに変化する可能性があります。 クライアントがどのサーバーにも接続されず、サーバー選択タイムアウト中にサーバーが見つからない場合、このメソッドは NoServerAvalable を発生させます。 このメソッドは操作実行フローから呼び出されます。NoServerAvalable が発生すると、操作全体が失敗します。これは、操作の実行がすべてのサーバーが使用可能になるまでサーバー選択がタイムアウトするまで待機したためです(サーバーのスーパーセット試行される操作に適しています)。
976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster.rb' の場合は976行 デフォルト validate_session_support をサポートします。 場合 トポロジー.is_a?(トポロジー::LoadBalanced) return end @ State_change_lock.同期 行う @sam_flow_lock.同期 行う 場合 トポロジー.data_bearing_servers? ただし、 トポロジー.logical_session_timeout resume_sessions_not_supported end end end end # 既知のデータを保持するサーバーはありません - を試行するためにサーバー選択を実行します。 少なくとも 1 つから応答を受け取り、正確な結果を返す セッションが現在サポートされているかどうかの#評価。 ServerSelector.得る(モード: :primary_preferred).[select_server](自己) @ State_change_lock.同期 行う @sam_flow_lock.同期 行う ただし、 トポロジー.logical_session_timeout resume_sessions_not_supported end end end end |