クラス: Mongo::Cluster

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

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 バージョン。 このハッシュには、以下の項目を含めることができます。

    • :バージョン -- string
    • :strict --ブール値
    • :deprecation_errors --ブール値

次の値が発生します。

  • (ArgumentError)

以来

  • 2.0.0



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

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

  options = options.dup
  options[:クリーンアップ] = false 場合 options[:monitoring_io] == false & & !options.key?(:クリーンアップ)
  @tracer = options.削除(:tracer)
  @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 = ミューテックス.新着情報
  @session_pool = セッション::SessionPool.新着情報(自己)

  発生 ArgumentError, シードなしの負荷分散されたクラスターは禁止されています 場合 シード.空の場合 & & load_Balanced?

  # 開始トポロジーは、サーバーがない場合は常に不明です。
  # https://github.com/mongodb/specifications/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

  return 場合 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
    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)

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

次の値を返します。

以来

  • 2.4.0



311
312
313
# ファイル 'lib/mongo/cluster.rb', 行 311

デフォルト 
  @app_metadata
end

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

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

以来

  • 2.0.0



314
315
316
# ファイル 'lib/mongo/cluster.rb', 行 314

デフォルト 
  @monitor_app_metadata
end

#monitoringMonitoring (readonly)

監視 監視を返します。

次の値を返します。

  • 監視

    監視 監視。

以来

  • 2.0.0



300
301
302
# ファイル 'lib/mongo/cluster.rb', 行 300

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

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

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

次の値を返します。

  • ハッシュ

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

以来

  • 2.0.0



297
298
299
# ファイル 'lib/mongo/cluster.rb', 行 297

デフォルト options
  @options
end

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

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

以来

  • 2.0.0



317
318
319
# ファイル 'lib/mongo/cluster.rb', 行 317

デフォルト 
  @push_monitor_app_metadata
end

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

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

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

次の値を返します。

  • <String>配列未満

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

以来

  • 2.7.0



325
326
327
# ファイル 'lib/mongo/cluster.rb', 行 325

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

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

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

以来

  • 2.0.0



482
483
484
# ファイル 'lib/mongo/cluster.rb', 行 482

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

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

以来

  • 2.5.1



330
331
332
# ファイル 'lib/mongo/cluster.rb', 行 330

デフォルト session_pool
  @session_pool
end

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

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

以来

  • 2.0.0



352
353
354
# ファイル 'lib/mongo/cluster.rb', 行 352

デフォルト srv_monitor
  @srv_monitor
end

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

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

例:

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

cluster.logical_session_timeout

次の値を返します。

  • (Integer, nil)

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

以来

  • 2.5.0



305
306
307
# ファイル 'lib/mongo/cluster.rb', 行 305

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

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

以来

  • 2.0.0



302
303
304
# ファイル 'lib/mongo/cluster.rb', 行 302

デフォルト 追跡
  @tracer
end

クラスメソッドの詳細

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

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

提供されたクライアント用のクラスターを作成します 。これは、クライアントの元のクラスターインスタンスと同じであってはなりません。

例:

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

Cluster.create(client)

パラメーター:

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

    作成するクライアント。

  • の監視。 (Monitoring | nil)

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

次の値を返します。

以来

  • 2.0.0



287
288
289
290
291
292
293
294
# ファイル 'lib/mongo/cluster.rb', 行 287

デフォルト 自己.create(クライアント, 監視: nil)
  クラスター = クラスター.新着情報(
    クライアント.クラスター.address.map(&:to_s),
    モニタリング || モニタリング.新着情報,
    クライアント.cluster_options
  )
  クライアント.instance_variable_set(:@cluster, クラスター)
end

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

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

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

例:

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

cluster == other

パラメーター:

  • その他 オブジェクト

    比較するオブジェクト。

次の値を返します。

  • truefalse

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

以来

  • 2.0.0



721
722
723
724
725
# ファイル 'lib/mongo/cluster.rb', 行 721

デフォルト ==(その他)
  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



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(ホスト, add_options = nil)
  address = address.新着情報(ホスト, options)
  return 場合 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
  サーバー.start_monitoring 場合 add_options.nil? || add_options[:mongos] != false
  サーバー
end

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

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

例:

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

cluster.addresses

次の値を返します。

以来

  • 2.0.6



445
446
447
# ファイル 'lib/mongo/cluster.rb', 行 445

デフォルト address
  server_list.map(&:address)
end

閉じる= nil

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

注:

アプリケーションは Client#close を呼び出してから切断する必要があります。

クラスターを閉じます。

このメソッドを呼び出すのではなく、クラスターに接続します。 このメソッドは内部ドライバーのみに使用します。

クラスター内のすべてのサーバーを切断し、 プロセス内に適切な SDAM イベントを公開します。 SRV モニタリングがアクティブな場合は停止します。 クラスターを切断としてマークします。

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

次の値を返します。

  • (nil)

    常に nil です。

以来

  • 2.0.0



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 ただし、 の接続 || 接続されていますか?

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

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

次の値を返します。

  • true|false

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

以来

  • 2.7.0



418
419
420
421
422
# ファイル 'lib/mongo/cluster.rb', 行 418

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

接続する場合 = true|false

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

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

次の値を返します。

  • true|false

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

以来

  • 2.0.0



406
407
408
409
410
# ファイル 'lib/mongo/cluster.rb', 行 406

デフォルト の接続
  @update_lock.同期 行う
    !!@connecting
  end
end

# Connected_server_if_connected (サーバー)= Object

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

以来

  • 2.0.0



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

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

例:

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

topology.has_readable_server?(server_selector)

パラメーター:

  • server_selector ServerSelector (デフォルトはnil

    サーバー セレクター。

次の値を返します。

  • truefalse

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

以来

  • 2.4.0



739
740
741
# ファイル 'lib/mongo/cluster.rb', 行 739

デフォルト has_readable_server?(server_selector = nil)
  トポロジー.has_readable_server?(自己, server_selector)
end

has_writeable_server? = truefalse

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

例:

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

topology.has_writable_server?

次の値を返します。

  • truefalse

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

以来

  • 2.4.0



751
752
753
# ファイル 'lib/mongo/cluster.rb', 行 751

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

#heartbeat_intervalFloat

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

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

次の値を返します。

  • 浮動小数

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

以来

  • 2.10.0



397
398
399
# ファイル 'lib/mongo/cluster.rb', 行 397

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

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

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

例:

クラスターを調べます。

cluster.inspect

次の値を返します。

  • ( string )

    クラスターの検査。

以来

  • 2.0.0



467
468
469
# ファイル 'lib/mongo/cluster.rb', 行 467

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

負荷分散 = true | false

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

次の値を返します。

  • true | false

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

以来

  • 2.0.0



339
340
341
# ファイル 'lib/mongo/cluster.rb', 行 339

デフォルト load_Balanced?
  トポロジー.is_a?(トポロジー::LoadBalanced)
end

# max_read_retry =整数

非推奨。
注:

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

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

例:

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

cluster.max_read_retries

次の値を返します。

  • (整数)

    最大再試行回数。

以来

  • 2.1.1



368
369
370
# ファイル 'lib/mongo/cluster.rb', 行 368

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

#次_ping(_ping = nil、セッション = nil、タイムアウト: nil) ⇒ Mongo::サーバー

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

例:

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

cluster.next_primary

パラメーター:

  • ping truefalse

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

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

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

  • :timeout (Float | nil)

    操作のタイムアウト(秒)(存在する場合)。

次の値を返します。

以来

  • 2.0.0



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

非推奨。

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

例:

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

cluster.pool(server)

パラメーター:

次の値を返します。

以来

  • 2.2.0



790
791
792
# ファイル 'lib/mongo/cluster.rb', 行 790

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

# read_retry_Interval =浮動小数点数

非推奨。
注:

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

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

例:

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

cluster.read_retry_interval

次の値を返します。

  • 浮動小数

    の間隔。

以来

  • 2.1.1



386
387
388
# ファイル 'lib/mongo/cluster.rb', 行 386

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

#再接続します。 = true

非推奨。

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

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

例:

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

cluster.reconnect!

次の値を返します。

  • ( true )

    常に true

以来

  • 2.1.0



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

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

例:

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

server.remove('127.0.0.1:27017')

パラメーター:

  • ホスト ( string )

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

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

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

次の値を返します。

  • 配列 < Server > | true | false

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

以来

  • 2.0.0



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

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

パラメーター:

  • 以前の_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



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, 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
    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

    start_stop_srv_monitor
  end

  # 一部の更新された説明(例: 説明が一致しない場合など)により、
  説明が削除される処理中のサーバー
  # トポロジー。 このような状況が発生すると、サーバーの監視スレッドが
  強制終了の数。 その結果、フロー呼び出し後のコードは実行されない可能性があります
  特定のモニターインスタンスがあるため、一般的には次のようになります
  フロー呼び出しの過去のこのメソッド内の任意のコード。
  #
  # ただし、このブロードキャスト呼び出しは、モニタリングが
  スレッドが強制終了された。サーバーは閉じられ、クライアントが存在しないはず
  # は現在それを待機している必要があるため、セカンダリにはシグナルがありません
  # では問題は発生しません。
  return 場合 Updated_desc.不明な場合

  server_Selection_smahour.ブロードキャスト
end

#スキャン(sync = true) = true

注:

同期スキャンと非同期スキャンの両方で、各モニター スレッドはスキャン間の最小間隔を維持します。つまり、このメソッドを呼び出しても、次の瞬間に特定のサーバーでスキャンが開始されない可能性があります。

クラスター内のすべての既知のサーバーのスキャンを強制します。

同期パラメータが true の場合(デフォルトの値)、このメソッドを呼び出したスレッドで同期的に実行されます。 クラスター内の各サーバーは順番にチェックされます。 クラスター内に多数のサーバーがある場合、または応答が遅い場合は、操作の実行が長時間になる可能性があります。

同期パラメータが false の場合、このメソッドはすべてのサーバー モニター スレッドに即座のスキャンを実行するように指示し、スキャン結果を待たずに返します。

例:

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

cluster.scan!

次の値を返します。

  • ( true )

    常に true

以来

  • 2.0.0



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

#serversArray<Server>

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

例:

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

cluster.servers

次の値を返します。

  • 配列 < Server >

    候補サーバー。

以来

  • 2.0.0



433
434
435
# ファイル 'lib/mongo/cluster.rb', 行 433

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

# server_list =オブジェクト

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

以来

  • 2.0.0



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

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

パラメーター:

  • server_address_strs <String>配列未満

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

以来

  • 2.0.0



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

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

注:

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

以来

  • 2.7.0



475
476
477
478
479
# ファイル 'lib/mongo/cluster.rb', 行 475

デフォルト 概要
  '#<Cluster ' +
    "トポロジー= #{トポロジー. Summary } " +
    " server=[ #{ servers_list . map  & : Summary  ] . join  '  '  } ]> "
end

#update_cluster_time(result) ⇒ Object

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

例:

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

cluster.update_cluster_time(result)

パラメーター:

  • 結果 操作 :: 結果

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

次の値を返します。

  • オブジェクト

    クラスター時間。

以来

  • 2.5.0



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

以来

  • 2.0.0



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

パラメーター:

  • :timeout (Float | nil)

    検証のタイムアウト。 検証プロセスにはサーバーの選択が含まれるため、

次の値が発生します。

  • Error::SessionsNotAvalable

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

  • Error::NoServerAvalable

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

以来

  • 2.0.0



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