クラス: Mongo::Cluster::SamFlow Private

継承:
オブジェクト
  • オブジェクト
すべて表示
次による拡張機能。
転送可能
定義:
build/ruby-Driver-v 2.19 /lib/mongo/cluster/sam_flow.rb

Overview

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

サーバーの説明が変更されたイベントの SDAM フローを処理します。

サーバーの説明、トポロジーの説明を更新し、SDAM イベントを公開します。

SAMFlow は、処理が必要なサーバーの説明が変更されたイベントごとに 1 回インスタンス化されることを目的としています。

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

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

コンストラクターの詳細

#初期化(クラスター、以前_desc、update_desc、wait: false) = SdumFlow

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

SdumFlow の新しいインスタンスを返します。



31
32
33
34
35
36
37
38
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster/sam_flow.rb', 行31

デフォルト 初期化(クラスター, 以前の_desc, Updated_desc, 次の操作を待機しました。 false)
  @cluster = クラスター
  @topology = クラスター.トポロジー
  @ initial_desc = @private_desc = 以前の_desc
  @update_desc = Updated_desc
  @servers_to_disconnect = []
  @waited = !!待機しました
end

インスタンス属性の詳細

#クラスター=オブジェクト(読み取り専用)

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



40
41
42
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster/sam_flow.rb', 行40

デフォルト クラスター
  @cluster
end

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

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



56
57
58
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster/sam_flow.rb', 行56

デフォルト initial_desc
  @ initial_desc
end

以前の_desc =オブジェクト(読み取り専用)

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



54
55
56
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster/sam_flow.rb', 行54

デフォルト 以前の_desc
  @private_desc
end

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

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

この属性に保存されるトポロジーは、単一の shard フロー全体で複数回変更される可能性があります(例: 不明 -> プライマリがない -> プライマリ付きの RS)。 トポロジー変更のイベントはフロー処理の最後に送信されるため、上記の例ではプライマリ イベントを含む不明な -> RS のみをアプリケーションに公開します。

次の値を返します。

  • Mongo::Cluster::Triggers 現在のトポロジー。



52
53
54
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster/sam_flow.rb', 行52

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

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

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



55
56
57
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster/sam_flow.rb', 行55

デフォルト Updated_desc
  @update_desc
end

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

# add_servers_from_desc (update_desc) =配列=サーバー>

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

注:

サーバーは監視されていない状態で追加されます。 モニタリングは後で開始する必要があります

指定された説明で参照されているすべてのサーバー(適切なプライマリからのものであると想定されています)のうち、クラスターにはまだ含まれていないすべてのサーバーをクラスターに追加します。

ください。

次の値を返します。

  • 配列 < Server >

    クラスターに実際に追加されたサーバー。 これは、モニタリングを開始する必要があるサーバーのセットです。



374
375
376
377
378
379
380
381
382
383
384
385
386
387
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster/sam_flow.rb', 行374

デフォルト add_servers_from_desc(Updated_desc)
  additional_servers = []
  %w(ホスト パッシブ性 アービタ). 行う |m|
    Updated_desc.送信(m). 行う |address_str|
      場合 サーバー = クラスター.add(address_str, モニター: false)
        additional_servers < サーバー
      end
    end
  end

  Verify_invariant

  additional_servers
end

#を待機しました =ブール値

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

次の値を返します。

  • ブール値


58
59
60
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster/sam_flow.rb', 行58

デフォルト 待機していましたか?
  @waited
end

が_unknown になりましたか。 =ブール値

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

このフローで処理された説明を処理するサーバーが以前は不明ではなく、現在は不明であるかどうかを返します。 特に、サーバーの接続プールをクリアするかどうかを決定するために使用されます。

次の値を返します。

  • ブール値


618
619
620
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster/sam_flow.rb', 行618

デフォルト created_unknown?
  Updated_desc.不明な場合 & & !initial_desc.不明な場合
end

# checkpoint_if_has_primary =オブジェクト

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

クラスターにプライマリがあるかどうかを確認し、ない場合はトポロジーを ReplicaSetNoPrimary に移行します。このメソッドを呼び出すときは、トポロジーは ReplicaSetWithPrimary である必要があります。



570
571
572
573
574
575
576
577
578
579
580
581
582
583
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster/sam_flow.rb', 行570

デフォルト checkpoint_if_has_primary
  ただし、 トポロジー.replica_set?
    発生 ArgumentError, " checkpoint_if_has_primary は、トポロジーがレプリカセットである場合にのみ呼び出される必要がありますが、 #{ トポロジー . クラス . name .sub / .*:: / ) です } } "
  end

  プライマリ = server_list.検出 行う |サーバー|
    #間違ったセット名を持つプライマリはプライマリではない
    サーバー.プライマリ? & & サーバー.説明.replica_set_name == トポロジー.replica_set_name
  end
  ただし、 プライマリ
    @topology = トポロジー::ReplicaSetNoPrimary.新着情報(
      トポロジー.options, トポロジー.モニタリング, 自己)
  end
end

commit_changes =オブジェクト

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

SDAM フロー処理中に実行された操作に基づいて、必要に応じて、 サーバー説明変更イベントを公開 、クラスター上のトポロジーを更新、トポロジー変更イベントを公開します。



494
495
496
497
498
499
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
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster/sam_flow.rb', 行494

デフォルト commit_changes
  アプリケーションから参照可能なイベントのシーケンスは、次のようになります。
  #
  # 1 。 処理しているサーバーの説明の変更。
  # 2 。 トポロジーの変更(存在する場合)。
  # 3 。 他のサーバーの説明が変更されている場合(存在する場合)。
  #
  #ここで注意が必要な点は、サーバーの説明の変更が
  # すべてが一緒に処理されることはありません。

  public_description_change_event
  start_Pool_if_data_bearing

  topic_changed_event_public = false
  場合 !トポロジー.と等しいか(クラスター.トポロジー) || @need_toplog_changed_event
    # トポロジーが変更されたイベントをもうすぐ公開する予定です。
    # トポロジー インスタンスを再作成して、サーバーの説明を取得する
    (更新までの更新数)。
    @topology = トポロジー.クラス.新着情報(トポロジー.options, トポロジー.モニタリング, クラスター)
    # SDAM イベントを送信
    クラスター.update_topology(トポロジー)
    topic_changed_event_public = true
    @need_toplog_changed_event = false
  end

  # サーバーの説明が変更された場合、トポロジーの説明が変更されたイベント
  前のトポロジーと次のトポロジーは次のとおりである必要があります:
  # 同じタイプ (ただし、トポロジー変更イベントを既に公開している場合を除く)
  場合 topic_changed_event_public
    return
  end

  場合 Updated_desc.不明な場合 & & 以前の_desc.不明な場合
    return
  end
  場合 Updated_desc.object_id == 以前の_desc.object_id
    return
  end

  ただし、 topic
    return
  end

  #ここでは、サーバーの説明が変更されています
  は、トポロジーの # ですが、トポロジー クラスは変更されていません。
  # トポロジーが変更されたイベントを公開し、トポロジーを再作成して
  # ではサーバー説明の新しいリストがそれに含まれます。
  @topology = トポロジー.クラス.新着情報(トポロジー.options, トポロジー.モニタリング, クラスター)
  # SDAM イベントを送信
  クラスター.update_topology(トポロジー)
end

#disconnect_servers =オブジェクト

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



546
547
548
549
550
551
552
553
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster/sam_flow.rb', 行546

デフォルト Disconnect_servers
  一方 サーバー = @servers_to_disconnect.シフト
    場合 サーバー.接続されていますか?
      # サーバーを閉じたイベントはすでに行われているため、公開しないでください
      サーバー.切断します。
    end
  end
end

# do_remove (address_str) =オブジェクト

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

指定されたサーバーをトポロジーから削除し、トポロジーが空のサーバー リストになった場合に警告を発します



421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster/sam_flow.rb', 行421

デフォルト do_remove(address_str)
  サーバー = クラスター.delete(address_str, 切断: false)
  サーバー. 行う |サーバー|
    # 説明をクリアして、サーバーが不明としてマークされます。
    サーバー.clear_description

    #ここでサーバーを終了したイベントを公開する必要がありますが、閉じることはできません
    # サーバーは、次のモニターを所有するサーバーである可能性があるためです:
    このフローが現在実行されているスレッド(つまり、閉じている場合)
    # サーバーはスレッドを終了し、SDAM 処理を残すことができます
    # 不完全。 したがって、クラスターからサーバーを削除する必要があります。
    イベントを公開するが、サーバー上で切断を呼び出すまで
    # すべての処理が完了したときの 終了。
    public_sdump_event(
      mongo::モニタリング::SERVER_CLOSED,
      mongo::モニタリング::イベント::ServerClosed.新着情報(サーバー.address, クラスター.トポロジー)
    )
  end
  @servers_to_disconnect += サーバー
  場合 server_list.空の場合
    log_警告(
      トポロジーにはサーバーがなくなりました。これは、クラスターやアプリケーションの構成に誤りがある可能性があります
    )
  end
end

# public_description_change_event =オブジェクト

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



447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster/sam_flow.rb', 行447

デフォルト public_description_change_event
  #このメソッドは、サーバーの説明が確実に変更された場合に呼び出される可能性があります
  # ただし、トポロジーが更新される 前に ください。 したがって、両方を確認します
  # サーバーの説明の変更と全体的なトポロジーの変更。 この場合
  # メソッドは、「変更をコミットする」の一環として SDAM フローの最後に呼び出されます
  ステップ、サーバー説明の変更はトポロジーに組み込まれます
  # の変更。
  ただし、 @server_description_changed || topic
    return
  end

  ここで更新された_descは、から受信した説明ではない可能性があります
  サーバー - 古いプライマリの場合、サーバーは自分自身を報告しました
  プライマリであるため、 は識別できませんが、ここで更新された_descは不明になります。

  不明 -> 不明なサーバー変更を通知しないように使用していました。
  # 技術的には、これらは有効な状態変更(または少なくとも次と有効な範囲)
  説明に ない 場合は、他のサーバー説明を変更します
  # は 意味的に 変更されましたが、イベントは引き続き公開されます)。
  # ドライバーの現在のバージョンが Unknown -> Unknown で通知
  # のトランザクション。

  # 更新された説明が次と同じである場合は、イベントをディスパッチしないでください
  前の説明を参照してください。 これにより、このメソッドは複数で呼び出せます
  イベントを公開する必要がある場合、フロー内で#回実行する必要があるとき、
  公開されていない変更があるかどうかを心配する#。
  場合 Updated_desc.object_id == 以前の_desc.object_id
    return
  end

  public_sdump_event(
    ::mongo::モニタリング::SERVER_DESCRIPTION_CHAGED,
    ::mongo::モニタリング::イベント::Server Description Changed.新着情報(
      Updated_desc.address,
      トポロジー,
      以前の_desc,
      Updated_desc,
      次の操作を待機しました。 待機していましたか?,
    )
  )
  @private_desc = Updated_desc
  @need_toplog_changed_event = true
end

や オブジェクト

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

トポロジーから処理中の説明を削除します。



414
415
416
417
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster/sam_flow.rb', 行414

デフォルト delete
  public_description_change_event
  do_remove(Updated_desc.address.to_s)
end

#remove_servers_not_in_desc(updated_desc) ⇒ Object

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

指定されたサーバーの説明に存在しないトポロジー(正常なプライマリから取得されている必要があるもの)からサーバーを削除します。



392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster/sam_flow.rb', 行392

デフォルト delete_servers_not_in_desc(Updated_desc)
  Updated_desc_address_strs = %w(ホスト パッシブ性 アービタ).map 行う |m|
    Updated_desc.送信(m)
  end.平面
  server_list. 行う |サーバー|
    ただし、 Updated_desc_address_strs.include?(address_str = サーバー.address.to_s)
      updated_host = Updated_desc.address.to_s
      場合 Updated_desc.me & & Updated_desc.me != updated_host
        updated_host += " ( #{ update_desc .me } } として自己識別され ます
      end
      log_警告(
         プライマリによって報告されたホストに存在しないため、 サーバー #{ address_str } を 削除 します +
        " #{ update_host } 。報告されたホストは次のとおりです: " +
        Updated_desc.ホスト.join(', ')
      )
      do_remove(address_str)
    end
  end
end

# server_description_changed =オブジェクト

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



93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
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
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster/sam_flow.rb', 行93

デフォルト server_description_changed
  @prevear_server_descriptions = server_list.map 行う |サーバー|
    [サーバー.address.to_s, サーバー.説明]
  end

  ただし、 update_server_descriptions
    #すべてのトランザクションには更新された_desc を持つそのサーバーが必要です
    プロセスはまだクラスター内に存在します(つまり、結果として削除されませんでした)
    別の応答を処理する数(潜在的には同時に実行される可能性があります)。
    # update_server_descriptions が false を返した場合、サーバーはありません
    処理している説明のトポロジー内の # がある場合は、停止します。
    return
  end

  ケース トポロジー
  次の場合: トポロジー::LoadBalanced
    @update_desc = ::mongo::サーバー::説明::ロードバランサー.新着情報(
      Updated_desc.address,
    )
    update_server_descriptions
  次の場合: トポロジー::Single
    場合 トポロジー.replica_set_name
      場合 Updated_desc.replica_set_name != トポロジー.replica_set_name
        log_警告(
          " Server # { update_desc . address .to_s } } に 間違っ た レプリカ セット 名 が あり ます " "
        )
        @update_desc = ::mongo::サーバー::説明.新着情報(Updated_desc.address,
          {}, Average_round_drop_time: Updated_desc.Average_round_drop_time)
        update_server_descriptions
      end
    end
  次の場合: トポロジー::不明
    場合 Updated_desc.スタンドアロン
      update_unknown_with_standard
    elsif Updated_desc.mongos?
      @topology = トポロジー::シャード.新着情報(トポロジー.options, トポロジー.モニタリング, 自己)
    elsif Updated_desc.プライマリ?
      @topology = トポロジー::ReplicaSetWithPrimary.新着情報(
        トポロジー.options.merge(replica_set_name: Updated_desc.replica_set_name),
        トポロジー.モニタリング, 自己)
      update_rs_from_primary
    elsif Updated_desc.セカンダリか || Updated_desc.アービタ || Updated_desc.その他の場合
      @topology = トポロジー::ReplicaSetNoPrimary.新着情報(
        トポロジー.options.merge(replica_set_name: Updated_desc.replica_set_name),
        トポロジー.モニタリング, 自己)
      update_rs_whenprimary
    end
  次の場合: トポロジー::シャード
    ただし、 Updated_desc.不明な場合 || Updated_desc.mongos?
      log_警告(
        「 間違っ た タイプ  #{ update_desc . server_type . to_s . upcase } } ) - が期待 さ れる シャード 」
      )
      delete
    end
  次の場合: トポロジー::ReplicaSetWithPrimary
    場合 Updated_desc.スタンドアロン || Updated_desc.mongos?
      log_警告(
        「 サーバー #{ update_desc . address .to_s } は間違ったタイプ( #{ update_desc . server_type . to_s . upcase } )であるため、削除します - はレプリカセット ノードを要求し ます "
      )
      delete
      checkpoint_if_has_primary
    elsif Updated_desc.プライマリ?
      update_rs_from_primary
    elsif Updated_desc.セカンダリか || Updated_desc.アービタ || Updated_desc.その他の場合
      update_rs_with_primary_from_member
    else
      checkpoint_if_has_primary
    end
  次の場合: トポロジー::ReplicaSetNoPrimary
    場合 Updated_desc.スタンドアロン || Updated_desc.mongos?
      log_警告(
        「 サーバー #{ update_desc . address .to_s } は間違ったタイプ( #{ update_desc . server_type . to_s . upcase } )であるため、削除します - はレプリカセット ノードを要求し ます "
      )
      delete
    elsif Updated_desc.プライマリ?
      ただし、ここではトポロジー型をプライマリ付きの RS に変更しますが、
      更新された_desc を処理しているときに、RS 名が
      は、既存の RS 名と一致しません。 この理由は
      では、update_desc の RS 名を に渡さないようにする必要があります。
      # トポロジー コンストラクターはこちら。
      # 処理中に、update_desc を持つサーバーを削除する場合があります
      処理しています(例: RS 名が再度一致する場合など)
      この場合、トポロジー タイプはプライマリのない RS に戻りGo 。
      Check_if_has_primary ステップの :
      @topology = トポロジー::ReplicaSetWithPrimary.新着情報(
        # update_desc の RS 名をここで渡しないでください
        トポロジー.options,
        トポロジー.モニタリング, 自己)
      update_rs_from_primary
    elsif Updated_desc.セカンダリか || Updated_desc.アービタ || Updated_desc.その他の場合
      update_rs_whenprimary
    end
  else
    発生 ArgumentError, "不明なトポロジー#{トポロジー.クラス} "
  end

  Verify_invariant
  commit_changes
  Disconnect_servers
end

ステイル_プライマリ? =ブール値

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

Updated_desc が古いプライマリ用かどうか。

次の値を返します。

  • ブール値


586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster/sam_flow.rb', 行586

デフォルト stale_primary?
  場合 Updated_desc.max_wire_version >= 17
    場合 Updated_desc.election_id.nil? & & !トポロジー.max_election_id.nil?
      return true
    end
    場合 Updated_desc.election_id & & トポロジー.max_election_id & & Updated_desc.election_id < トポロジー.max_election_id
      return true
    end
    場合 Updated_desc.election_id == トポロジー.max_election_id
      場合 Updated_desc.set_version.nil? & & !トポロジー.max_set_version.nil?
        return true
      end
      場合 Updated_desc.set_version & & トポロジー.max_set_version & & Updated_desc.set_version < トポロジー.max_set_version
        return true
      end
    end
  else
    場合 Updated_desc.election_id & & Updated_desc.set_version
      場合 トポロジー.max_set_version & & トポロジー.max_election_id & &
          (Updated_desc.set_version < トポロジー.max_set_version ||
              (Updated_desc.set_version == トポロジー.max_set_version & &
                  Updated_desc.election_id < トポロジー.max_election_id))
        return true
      end
    end
  end
  false
end

# start_Pool_if_data_bearing =オブジェクト

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

処理されているサーバーがデータを保持していると識別された場合、 はサーバーの接続プールを作成し、次の処理を開始できます:



557
558
559
560
561
562
563
564
565
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster/sam_flow.rb', 行557

デフォルト start_Pool_if_data_bearing
  return 場合 !Updated_desc.data_bearing?

  server_list. 行う |サーバー|
    場合 サーバー.address == @update_desc.address
      サーバー.プール
    end
  end
end

トポロジー_効果的に_変更されたかどうか=ブール値

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

SDAM フローを実行した結果としてトポロジーが意味的に変更されたかどうかを返します。

仕様では、各トポロジー内のトポロジー タイプとサーバーの説明が等しくなるまで、トポロジーの等価性を定義します。この定義は、トポロジー オブジェクトがサーバーの説明を保持せず、代わりにライブであるため、使用できません。 したがって、SDAM フローの先頭にサーバー説明の完全なリストを保存し、現在のリストと比較する必要があります。

次の値を返します。

  • ブール値


631
632
633
634
635
636
637
638
639
640
641
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster/sam_flow.rb', 行631

デフォルト topic
  ただし、 トポロジー.と等しいか(クラスター.トポロジー)
    return true
  end

  server_descriptions = server_list.map 行う |サーバー|
    [サーバー.address.to_s, サーバー.説明]
  end

  @prevear_server_descriptions != server_descriptions
end

#update_rs_from_primaryObject

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

プライマリのサーバー説明の情報を使用して、ReplicaSetWithPrimary である必要があるトポロジーを更新します。

このメソッドは、トポロジー タイプを ReplicaSetWithPrimary に変更しません。これは、このメソッドを呼び出す前に実行する必要があります。

説明が処理されているプライマリが古いと判断された場合、このメソッドはサーバーの説明とトポロジーのタイプを不明に変更します。



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
279
280
281
282
283
284
285
286
287
288
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster/sam_flow.rb', 行217

デフォルト update_rs_from_primary
  場合 トポロジー.replica_set_name.nil?
    @topology = トポロジー::ReplicaSetWithPrimary.新着情報(
      トポロジー.options.merge(replica_set_name: Updated_desc.replica_set_name),
      トポロジー.モニタリング, 自己)
  end

  場合 トポロジー.replica_set_name != Updated_desc.replica_set_name
    log_警告(
      " サーバー #{ Updated_desc . address . to_s } " があるため " を削除します。 +
      誤ったレプリカセット名 」 #{ update_desc .レプリカ_セット_名前}   +
      " 予想 さ れ ます " "
    )
    delete
    checkpoint_if_has_primary
    return
  end

  場合 stale_primary?
    @update_desc = ::mongo::サーバー::説明.新着情報(Updated_desc.address,
      {}, Average_round_drop_time: Updated_desc.Average_round_drop_time)
    update_server_descriptions
    checkpoint_if_has_primary
    return
  end

  場合 Updated_desc.max_wire_version >= 17
    @topology = トポロジー::ReplicaSetWithPrimary.新着情報(
      トポロジー.options.merge(
        max_ election_id: Updated_desc.election_id,
        max_set_version: Updated_desc.set_version
      ), トポロジー.モニタリング, 自己)
  else
    max_election_id = トポロジー.new_max_election_id(Updated_desc)
    max_set_version = トポロジー.new_max_set_version(Updated_desc)

    場合 max_election_id != トポロジー.max_election_id ||
      max_set_version != トポロジー.max_set_version
    次に
      @topology = トポロジー::ReplicaSetWithPrimary.新着情報(
        トポロジー.options.merge(
          max_ election_id: max_election_id,
          max_set_version: max_set_version
        ), トポロジー.モニタリング, 自己)
    end
  end

  #この時点で更新されたサーバー説明を受け入れました
  # と トポロジー(どちらもプライマリ)。 これらの変更をコミットする
  それぞれの SDAM イベントは の SDAM イベントの前に公開されます。
  次の # サーバーの追加や削除が必要です。
  public_description_change_event

  server_list. 行う |サーバー|
    場合 サーバー.address != Updated_desc.address
      場合 サーバー.プライマリ?
        サーバー.update_description(::mongo::サーバー::説明.新着情報(
          サーバー.address, {},
          Average_round_drop_time: サーバー.説明.Average_round_drop_time))
      end
    end
  end

  サーバー = add_servers_from_desc(Updated_desc)
  delete_servers_not_in_desc(Updated_desc)

  checkpoint_if_has_primary

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

#update_rs_with_primary_from_memberObject

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

非プライマリ メンバーから ReplicaSetWithPrimary トポロジーを更新します。



291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster/sam_flow.rb', 行291

デフォルト update_rs_with_primary_from_member
  場合 トポロジー.replica_set_name != Updated_desc.replica_set_name
    log_警告(
      " サーバー #{ Updated_desc . address . to_s } " があるため " を削除します。 +
      「 間違ったレプリカセット名( # { update_desc . レプリカ_セット _名前 } )、 +
      "現在のセット名は#{トポロジー. replica_set_name }です
    )
    delete
    checkpoint_if_has_primary
    return
  end

  場合 Updated_desc.me_mismatch?
    log_警告(
      "サーバー#{ Updated_desc . address . to_s }を削除すると、次の理由で" +
      「」 自体 が #{ update_desc .me } として報告され ました 。
    )
    delete
    checkpoint_if_has_primary
    return
  end

  has_primary = false
  server_list. 行う |サーバー|
    場合 サーバー.プライマリ?
      has_primary = true
      break
    end
  end

  ただし、 has_primary
    @topology = トポロジー::ReplicaSetNoPrimary.新着情報(
      トポロジー.options, トポロジー.モニタリング, 自己)
  end
end

# update_rs_when_primary =オブジェクト

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

非プライマリ メンバーから ReplicaSetNoPrimary トポロジーを更新します。



328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster/sam_flow.rb', 行328

デフォルト update_rs_whenprimary
  場合 トポロジー.replica_set_name.nil?
    @topology = トポロジー::ReplicaSetNoPrimary.新着情報(
      トポロジー.options.merge(replica_set_name: Updated_desc.replica_set_name),
      トポロジー.モニタリング, 自己)
  end

  場合 トポロジー.replica_set_name != Updated_desc.replica_set_name
    log_警告(
      " サーバー #{ Updated_desc . address . to_s } " があるため " を削除します。 +
      「 間違ったレプリカセット名( # { update_desc . レプリカ_セット _名前 } )、 +
      "現在のセット名は#{トポロジー. replica_set_name }です
    )
    delete
    return
  end

  public_description_change_event

  サーバー = add_servers_from_desc(Updated_desc)

  commit_changes

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

  場合 Updated_desc.me_mismatch?
    log_警告(
      "サーバー#{ Updated_desc . address . to_s }を削除すると、次の理由で" +
      「」 自体 が #{ update_desc .me } として報告され ました 。
    )
    delete
    return
  end
end

# update_server_descriptions = update_server_descriptions =オブジェクト

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

update_desc のアドレスと一致するアドレスを持つすべてのサーバーの説明を更新します。



66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster/sam_flow.rb', 行66

デフォルト update_server_descriptions
  server_list. 行う |サーバー|
    場合 サーバー.address == Updated_desc.address
      新しい説明のトポロジー バージョンが の場合、SDAM フローを実行する必要があります
      は、 の例に従って、現在のトポロジー バージョンと等しくなります。
      https://github.com/mongodb/specions/lob/ Master/source/server-discovery-and-monitoring/server-discovery-and-monitoring.rst#トポロジーの目的は何ですか。
      ただし、 Updated_desc.topology_version_gte?(サーバー.説明)
        return false
      end

      @server_description_changed = サーバー.説明 != Updated_desc

      # サーバーの説明を常に更新する 必要があるフィールドではないようにします
      は 説明の等価比較 に影響しますが、次の一部です。
      # の説明が更新されました。
      サーバー.update_description(Updated_desc)
      サーバー.update_last_scan

      #説明間で内容に差がない場合、次を行います
      # は引き続き sdum フローを実行する必要がありますが、フローに変更が生じない場合には
      トポロジーでは、イベントの送信を省略します。
      return true
    end
  end
  false
end

update_unknown_with_standard =オブジェクト

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

スタンドアロン サーバーが検出されると、不明から単一のトポロジー タイプに移行します。



196
197
198
199
200
201
202
203
204
205
206
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster/sam_flow.rb', 行196

デフォルト update_unknown_with_standard
  場合 シード.Length == 1
    @topology = トポロジー::Single.新着情報(
      トポロジー.options, トポロジー.モニタリング, 自己)
  else
    log_警告(
      「 スタンドアロンであり、複数のシードがあるため( # { シード . 長 さ } } ) 。 アドレス . を 削除します 」 。
    )
    delete
  end
end

Verify_invarians =オブジェクト

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



643
644
645
646
647
648
649
650
651
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/cluster/sam_flow.rb', 行643

デフォルト Verify_invariant
  場合 mongo::Lint.有効か
    場合 クラスター.トポロジー.単一か
      場合 クラスター.server_list.Length > 1
        発生 mongo::エラー::LintError, " 複数の サーバー で単一のトポロジーを作成しよう と し て いる とき
      end
    end
  end
end