クラス: Mongo::Cluster

継承:
オブジェクト
  • オブジェクト
すべて表示
次による拡張機能。
転送可能
次のことが含まれます。
Mongo::ClusterTime::ConsumerEvent::SubscriberLoggableMonitoring:: 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: トポロジー クラス: CursorReaperperiodExecutorSdumpFlowSocketReaper

定数の概要の削減

MAX_READ_RETRIES =

レガシー読み取りのデフォルトの再試行回数。

以来

  • 2.1.1

1
MAX_WRITE_RETRIES =

レガシー書込みの再試行回数

以来

  • 2.4.2

1
READ_RETRY_InterVAL =

レガシー読み取り再試行を使用する場合のデフォルトの読み取り再試行間隔(秒単位)。

以来

  • 2.1.1

5
IDLE_WRITE_PERIOD_SECONDS =

アイドル状態のプライマリが oplog に何も操作を書込まない頻度。

以来

  • 2.4.0

10
CLUSTER_TIME =
非推奨。

mongos サーバーからの応答内のクラスター時間キー。

以来

  • 2.5.0

'clusterTime'.freeze

Loggableに含まれる定数

ログ可能::PRFIX

インスタンス属性の概要を折りたたむ

Mongo::ClusterTime::Consumerから含まれる属性

#cluster_time

Event::Subscriberに含まれる属性

#event_listeners

クラスメソッドの概要を折りたたむ

インスタンス メソッドの概要を折りたたむ

Mongo::ClusterTime::Consumerに含まれるメソッド

#advanced_cluster_time

Loggableに含まれるメソッド

#log_debug, #log_error, #log_fatal, #log_info, #log_warn, #logger

Event::Subscriberに含まれるメソッド

#subscribe_to

から含まれるメソッド::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 の配列として受け取ります。

新しいクラスターをインスタンス化します。

例:

クラスターをインスタンス化します。

Mongo::Cluster.new(["127.0.0.1:27017"], monitoring)

パラメーター:

  • シード <String>配列未満

    構成されたサーバーのアドレス

  • モニタリング 監視

    の監視。

  • options ハッシュ (デフォルトはオプション::Redact.new

    オプション。 クライアント コンストラクターはオプションをクラスター コンストラクターに転送しますが、クラスターはクライアントによって認識されたオプションのサブセットのみを認識します。

オプション ハッシュ( options ):

  • :direct_ connection true | false

    トポロジー検出をバイパスして、指定されたシードに直接接続するかどうか。 シードは 1 つだけ提供する必要があります。

  • :connect 記号

    非推奨 - このオプションの代わりに :direct_ connection オプションを使用してください。 使用する接続方法。 これにより、クラスターは自動検出ではなく、指定された方法で動作するように強制されます。 :direct、:replica_set、:sharded のいずれか

  • :replica_set 記号

    接続するレプリカセットの名前。 このレプリカセットに含まれないサーバーは無視されます。

  • :scan true | false

    コンストラクター内のすべてのシードをスキャンするかどうか。 ドライバー バージョン2 .x のデフォルトでは、次のようになります。ドライバー バージョン3 .x は コンストラクター内のシードをスキャンしません。 このオプションを false に設定して、新しい動作にオプトインします。 注:このオプションを nil に設定すると、ドライバー バージョン2 .x のコンストラクターのシードスキャンが有効になります。 ドライバー バージョン3 .x はこのオプションを認識しますが、無視し、コンストラクター内のシードをスキャンしません。

  • :monitoring_io true | false

    内部ドライバーのみを使用します。 このクラスターまたはその下のサーバーによって SDAM 関連の I/O が実行されないようにするには、 false に設定します。 注: このオプションを false に設定すると、クラスターが非機能になります。 SDAM 状態移行を手動で呼び出すテストでの使用を目的としています。

  • :クリーンアップ true | false

    内部ドライバーのみを使用します。 クラスターが切断されたときにサーバー セッションをクリーンアップするために endSessions コマンドがサーバーに送信されないように false に設定され、定期実行プログラムが起動されないようにするには に設定します。 :monitoring_io が false の場合、 :クリーンアップ も自動的に false になります。

  • : heartbeat_frequency 浮動小数

    サーバー モニターが hello 経由で説明を更新する間隔(秒単位)。

  • :resolve_options ハッシュ

    内部ドライバーのみを使用します。 SRV lookup 用の Resolve::DNS コンストラクターに渡すオプション。

  • :server_api ハッシュ

    リクエストされたサーバー API バージョン。 このハッシュには、以下の項目を含めることができます。

    • :version - string

    • :strict - ブール値

    • :deprecation_errors - ブール値

以来

  • 2.0.0



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行

デフォルト 初期化(シード, モニタリング, options = オプション::編集済み.新着情報)
  場合 シード.nil?
    発生 ArgumentError, シードは nil にできません
  end

  options = options.dup
  場合 options[:monitoring_io] == false & & !options.key?(:クリーンアップ)
    options[:クリーンアップ] = false
  end
  @options = 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 = トポロジー.初期(自己, モニタリング, options)
  状態変更ロックは 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 = トポロジー::不明.新着情報(options, モニタリング, 自己)

  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

  場合 options[:monitoring_io] == false
    # サーバーがないため、定期的な実行プログラムの構築を省略
    # クラスターにコマンドを送信できず、
    # クリーンアップする必要があるものである必要があります。
    #
    # 個々のサーバーとレガシーの単一ラウンドの監視を省略します
    メイン スレッド上の SDAM の番号:
    SDAM 応答の数。
    @connecting = @connected = false
    return
  end

  # 監視スレッドを開始する前に インスタンス変数を更新します。
  @connecting = false
  @connected = true

  場合 options[:クリーンアップ] != false
    @cursor_reader = CursorReaper.新着情報(自己)
    @socket_reader = SocketReaper.新着情報(自己)
    @periodic_executor = PeriodicExecutor.新着情報([
      @cursor_reader, @socket_reader,
    ], options)

    @periodic_executor.実行します。
  end

  ただし、 load_Balanced?
    # モニタリングを開始する前に開始時間を記録する必要があります
    start_mongotime = Utils.MongoDB_time

    サーバー. 行う |サーバー|
      サーバー.start_monitoring
    end

    場合 options[:scan] != false
      server_Selection_timeout = options[: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)

接続ハンドシェイクに使用されるアプリケーション メタデータを返します。

次の値を返します。

以来

  • 2.4.0



317
318
319
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster.rb' の場合は317行

デフォルト 
  @app_metadata
end

# trigger_app_metadata =オブジェクト(読み取り専用)

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

以来

  • 2.0.0



320
321
322
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster.rb' の場合は320行

デフォルト 
  @monitor_app_metadata
end

#monitoringMonitoring (readonly)

監視 監視を返します。

次の値を返します。

  • 監視

    監視 監視。

以来

  • 2.0.0



308
309
310
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster.rb' の場合は308行

デフォルト モニタリング
  @monitoring
end

オプション=ハッシュ(読み取り専用)

オプション ハッシュを返します。

次の値を返します。

  • ハッシュ

    オプションは ハッシュです。

以来

  • 2.0.0



305
306
307
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster.rb' の場合は305行

デフォルト options
  @options
end

#push_monitor_app_metadata =オブジェクト(読み取り専用)

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

以来

  • 2.0.0



323
324
325
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster.rb' の場合は323行

デフォルト 
  @push_monitor_app_metadata
end

シード 処理 = 配列=string <String>===========================

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

シード サーバーのアドレスを返します。 SDAM の結果としてクラスターが使用している現在のアドレスではなく、インスタンス化されたときにクラスターに指定されたアドレスが含まれます。

次の値を返します。

  • <String>配列未満

    シード サーバーのアドレス。 SDAM の結果としてクラスターが使用している現在のアドレスではなく、インスタンス化されたときにクラスターに指定されたアドレスが含まれます。

以来

  • 2.7.0



331
332
333
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster.rb' の場合は331行

デフォルト シード
  @シード
end

# server_Selection_schema は、オブジェクト(読み取り専用)

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

以来

  • 2.0.0



488
489
490
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster.rb' の場合は488行

デフォルト server_Selection_smahour
  @server_Selection_schema書込み
end

#session_Pool =オブジェクト(読み取り専用)

以来

  • 2.5.1



336
337
338
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster.rb' の場合は336行

デフォルト session_pool
  @session_pool
end

# srv_monitor =オブジェクト(読み取り専用)

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

以来

  • 2.0.0



358
359
360
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster.rb' の場合は358行

デフォルト srv_monitor
  @srv_monitor
end

#トポロジー=整数? (読み取り専用)

論理セッション タイムアウト値(分単位)。

例:

論理セッション タイムアウトを分単位で取得します。

cluster.logical_session_timeout

次の値を返します。

  • (Integer, nil)

    論理セッション タイムアウト。

以来

  • 2.5.0



311
312
313
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster.rb' の場合は311行

デフォルト トポロジー
  @topology
end

クラスメソッドの詳細

create (クライアント、モニタリング: nil)=クラスター

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

提供されたクライアント用のクラスターを作成し、クライアントの元のクラスターインスタンスを同じにしたくない場合に使用します。

例:

クライアントのクラスターを作成します。

Cluster.create(client)

パラメーター:

  • クライアント クライアント

    作成するクライアント。

  • の監視。 (Monitoring | nil)

    新しいクラスターで使用する監視インスタンス。 nil の場合、モニタリングの新しいインスタンスが作成されます。

次の値を返します。

以来

  • 2.0.0



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),
    モニタリング || モニタリング.新着情報,
    クライアント.cluster_options,
  )
  クライアント.instance_variable_set(:@cluster, クラスター)
end

インスタンス メソッドの詳細

# == (その他) === (その他) ==================================================================================

このサーバーのクラスターが別のオブジェクトと等しいかどうかを判断します。 構成ではなく、現在クラスター内のサーバーをチェックします。

例:

クラスターはオブジェクトと等しくなりますか。

cluster == other

パラメーター:

  • その他 オブジェクト

    比較するオブジェクト。

次の値を返します。

  • truefalse

    オブジェクトが等しい場合。

以来

  • 2.0.0



738
739
740
741
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster.rb' の場合は738行

デフォルト ==(その他)
  return false ただし、 その他.is_a?(クラスター)
  address == その他.address & & options == その他.options
end

# add (host, add_options = nil) =サーバー

指定されたアドレスを持つクラスターにサーバーを追加します。 既存のサーバーが hello を実行し、構成されていないサーバーが含まれている可能性がある場合に、新しいサーバーを自動検出するのに役立ちます。

例:

アドレスのサーバーをクラスターに追加します。

cluster.add('127.0.0.1:27018')

パラメーター:

  • ホスト ( string )

    追加するサーバーのアドレス。

  • options ハッシュ

    カスタマイズ可能なオプションのセット

次の値を返します。

  • サーバー

    新しく追加されたサーバー(まだ存在しない場合)。

以来

  • 2.0.0



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(ホスト, add_options=nil)
  address = address.新着情報(ホスト, options)
  場合 !address.include?(address)
    ops = options.merge(モニター: false)
    監視スレッドを開始していない場合は、次も必要ありません
    プールの入力スレッドを 開始します。
    ops.mergeします。(MongoDB_io: false) ただし、 options.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
    場合 add_options.nil? || add_options[:mongos] != false
      サーバー.start_monitoring
    end
    サーバー
  end
end

#アドレス=配列 < Mongo::Address >

クラスター内のアドレス。

例:

クラスター内のアドレスを取得します。

cluster.addresses

次の値を返します。

以来

  • 2.0.6



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 モニタリングがアクティブな場合は停止します。 クラスターを切断としてマークします。

閉じたクラスターは使用できなくなります。 クライアントが再接続されると、新しいクラスター インスタンスが作成されます。

次の値を返します。

  • (nil)

    常に nil です。

以来

  • 2.0.0



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
    場合 options[:クリーンアップ] != 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 の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

クラスター オブジェクトがクラスターに接続されているかどうか。

次の値を返します。

  • true|false

    クラスターが接続されているかどうか。

以来

  • 2.7.0



424
425
426
427
428
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster.rb' の場合は424行

デフォルト 接続されていますか?
  @update_lock.同期 行う
    !!@connected
  end
end

接続する場合 = true|false

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

クラスター オブジェクトがクラスターに接続するプロセス内にあるかどうか。

次の値を返します。

  • true|false

    クラスターが接続しているかどうか。

以来

  • 2.0.0



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 の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

以来

  • 2.0.0



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) = truefalse

提供された読み込み設定 (read preference) で読み取り可能なサーバーをクラスターが選択するかどうかを決定します。

例:

読み取り可能なサーバーは存在するか?

topology.has_readable_server?(server_selector)

パラメーター:

  • server_selector ServerSelector (デフォルトはnil

    サーバー セレクター。

次の値を返します。

  • truefalse

    読み取り可能なサーバーが存在する場合。

以来

  • 2.4.0



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? = truefalse

クラスターで書込み可能なサーバーを選択するかどうかを判断します。

例:

書込み可能なサーバーは存在するか?

topology.has_writable_server?

次の値を返します。

  • truefalse

    書込み可能なサーバーが存在する場合。

以来

  • 2.4.0



767
768
769
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster.rb' の場合は767行

デフォルト has_writeable_server?
  トポロジー.has_writeable_server?(自己)
end

#heartbeat_intervalFloat

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

サーバーの更新間隔を取得します。 これは オプションによって定義されるか、デフォルトで10になります。

次の値を返します。

  • 浮動小数

    ハートビートの間隔(秒単位)。

以来

  • 2.10.0



403
404
405
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster.rb' の場合は403行

デフォルト heartbeat_Interval
  options[: heartbeat_frequency] || サーバー::モニター::DEFAULT_HEARTB_Interval
end

詳しくは、 を 検査しstring ます

検査で使用するために、より適した形式の string を取得します。

例:

クラスターを調べます。

cluster.inspect

次の値を返します。

  • ( string )

    クラスターの検査。

以来

  • 2.0.0



473
474
475
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster.rb' の場合は473行

デフォルト 検査する
  " 0は
end

負荷分散 = true | false

クラスターが負荷分散されたトポロジーに含まれるように構成されているかどうかを返します。

次の値を返します。

  • true | false

    トポロジーが負荷分散されているかどうか。

以来

  • 2.0.0



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 は、クラスター インスタンスではなくクライアント インスタンスから取得する必要があります。最大読み取り再試行値ではクラスターがクライアント間で共有される可能性があるためです。

レガシー読み取り操作を使用する場合にクライアントが読み取り操作を再試行できる最大回数を取得します。

例:

最大読み取り再試行回数を取得します。

cluster.max_read_retries

次の値を返します。

  • (整数)

    最大再試行回数。

以来

  • 2.1.1



374
375
376
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster.rb' の場合は374行

デフォルト max_read_retry
  options[:max_read_retry] || MAX_READ_RETRIES
end

次の_プライマリ(ping = nil、セッション = nil) = nil からMongo::Server

操作を送信できる次のプライマリ サーバーを取得します。

例:

次のプライマリ サーバーを取得します。

cluster.next_primary

パラメーター:

  • ping truefalse (デフォルトはnil

    選択する前にサーバーをpingするかどうか。 非推奨となり無視されます。

  • セッション (Session | nil) (デフォルトはnil

    mongos の固定を考慮する任意のセッション。

次の値を返します。

以来

  • 2.0.0



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

非推奨。

サーバーの接続プールを取得します。

例:

接続プールを取得します。

cluster.pool(server)

パラメーター:

次の値を返します。

以来

  • 2.2.0



799
800
801
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster.rb' の場合は799行

デフォルト プール(サーバー)
  サーバー.プール
end

# read_retry_Interval =浮動小数点数

非推奨。
注:

read_retry_Interval は、クラスター インスタンスではなくクライアント インスタンスから取得される必要があります。これは、読み取り再試行間隔の異なる値を持つクラスターがクライアント間で共有される可能性があるためです。

レガシー読み取り再試行を使用する場合の読み取り再試行の間隔を秒単位で取得します。

例:

読み取りの再試行間隔を取得します。

cluster.read_retry_interval

次の値を返します。

  • 浮動小数

    の間隔。

以来

  • 2.1.1



392
393
394
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster.rb' の場合は392行

デフォルト read_retry_Interval
  options[:read_retry_Interval] || READ_RETRY_Interval
end

#再接続します。 = true

非推奨。

このメソッドを呼び出す代わりに、Client#reconnect を使用してクラスターに再接続します。 このメソッドでは、SDAM イベントは送信されません。

すべてのサーバーを再接続します。

例:

クラスターのサーバーを再接続します。

cluster.reconnect!

次の値を返します。

  • ( true )

    常に true

以来

  • 2.1.0



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 の一部ではありません。

指定されたアドレスのクラスターからサーバーが存在する場合は削除します。

例:

クラスターからサーバーを削除します。

server.remove('127.0.0.1:27017')

パラメーター:

  • ホスト ( string )

    ホスト/ポートまたはソケット アドレス。

  • 切断 true | false (デフォルトはtrue

    削除されるサーバーの接続を切断するかどうか。 内部ドライバーのみを使用します。

次の値を返します。

  • 配列 < Server > | true | false

    Connector が false 以外の値( nil を含む)の場合、 はサーバーが削除されたかどうかを返します。 切断が false の場合、 は削除されたサーバーの配列を返します(この場合は 呼び出し元で切断する必要があります)。

以来

  • 2.0.0



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 フローを実行します。

このメソッドは、モニタリング接続または非モニタリング接続でサーバーによって返された新しいサーバーの説明を処理するために呼び出され、また、(ネットワーク)エラーの結果として不明なサーバーをマークする場合に呼び出されます。

パラメーター:

  • 以前の_desc Server:: Description

    前のサーバーの説明。

  • Updated_desc Server:: Description

    説明が変更されました。

  • options ハッシュ (デフォルトは{}です)

    オプション。

オプション ハッシュ( options ):

  • :keep_ connection_Pool true | false

    通常、新しいサーバーの説明が不明な場合、それぞれのサーバーの接続プールがクリアされます。 既存の接続プールを維持するには、このオプションを true に設定します( 4.2 + サーバーでマスター エラーを処理する場合に必要)。

  • :waited true | false

    更新された説明が待機した hello の処理の結果であったかどうか。

  • :service_id オブジェクト

    指定されたサービス ID のみの状態を変更します。

  • :scan_error Mongo::Error | nil

    スキャン中にエラーが発生しました。エラーが発生しなかった場合は nil 。

以来

  • 2.0.0



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, options = {})
  場合 load_Balanced?
    場合 Updated_desc.config.空の場合
      ただし、 options[:keep_ connection_Pool]
        server_list. 行う |サーバー|
          TODO サービス ID は Updated_desc から取得される必要がありますか。
          # をアサートすることもできます
          # options[:service_id] == Updated_desc.service_id
          err = options[:scan_error]
          割り込み = err & & (err.is_a?(エラー::SocketError) || err.is_a?(エラー::SocketTimeoutError))
          サーバー.クリア_接続_プール(service_id: options[:service_id], insert_in_use_ connections: 割り込み)
        end
      end
    end
    return
  end

  @sam_flow_lock.同期 行う
    フロー = SdumFlow.新着情報(自己, 以前の_desc, Updated_desc,
      次の操作を待機しました。 options[:waited])
    フロー.server_description_changed

    #SDAM フローは更新された説明を変更する可能性があります - 最終的に取得する
    サーバーが使用可能な場合は、ブロードキャストを目的とした # バージョン
    Updated_desc = フロー.Updated_desc

    ただし、 options[:keep_ connection_Pool]
      場合 フロー.created_unknown?
        server_list. 行う |サーバー|
          場合 サーバー.address == Updated_desc.address
            err = options[: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 の場合、このメソッドはすべてのサーバー モニター スレッドに即座のスキャンを実行するように指示し、スキャン結果を待たずに返します。

例:

クラスターのフル スキャンを強制します。

cluster.scan!

次の値を返します。

  • ( true )

    常に true

以来

  • 2.0.0



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

#serversArray<Server>

操作を実行できるクラスターからサーバー候補のリストを取得します。

例:

操作のサーバー候補を取得します。

cluster.servers

次の値を返します。

  • 配列 < Server >

    候補サーバー。

以来

  • 2.0.0



439
440
441
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster.rb' の場合は439行

デフォルト サーバー
  トポロジー.サーバー(server_list)
end

# server_list =オブジェクト

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

以来

  • 2.0.0



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 モニターによって呼び出されます。

渡されたサーバー アドレスのリストにないアドレスを持つクラスター内のサーバーを削除し、クラスター内にまだ存在しないアドレスのサーバーを追加します。

パラメーター:

  • server_address_strs <String>配列未満

    クラスター サーバーを同期するサーバー アドレスのリスト。

以来

  • 2.0.0



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

#のサマリー=オブジェクト

注:

この方法は実験的なものであり、変更される可能性があります。

以来

  • 2.7.0



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

応答に含まれる最大クラスター時間を更新します。

例:

クラスター時間を更新します。

cluster.update_cluster_time(result)

パラメーター:

  • 結果 操作 :: 結果

    クラスター時間を含む操作結果。

次の値を返します。

  • オブジェクト

    クラスター時間。

以来

  • 2.5.0



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 の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

以来

  • 2.0.0



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 が発生すると、操作全体が失敗します。これは、操作の実行がすべてのサーバーが使用可能になるまでサーバー選択がタイムアウトするまで待機したためです(サーバーのスーパーセット試行される操作に適しています)。

次の値が発生します。

  • Error::SessionsNotAvalable

    ドライバーが接続している配置がセッションをサポートしていない場合。

  • Error::NoServerAvalable

    クライアントがどのサーバーにも接続されておらず、サーバー選択タイムアウト中にサーバーが見つからない場合。

以来

  • 2.0.0



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