クラス: Mongo::Server::PendingConnection Private

継承:
ConnectionBase すべて表示
次による拡張機能。
転送可能
定義:
lib/mongo/ サーバー/pending_ connection.rb

Overview

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

このクラスは、ハンドシェイクおよび認証中に接続をカプセル化します。

以来

  • 2.0.0

定数の概要

ConnectionBaseから継承された定数

ConnectionBase::DEFAULT_MAX_BSON_OBJECT_SIZEConnectionBase::MAX_BSON_COMMAND_OVERHEADConnectionBase::REDIRECT_MAX_BSON_SIZE

Loggableに含まれる定数

ログ可能::PRFIX

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

ConnectionBaseから継承される属性

#description#options#server

Monitoring::Publishable

#monitoring

ConnectionCommonから継承される属性

#compressor, #pid

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

ConnectionBaseから継承されたメソッド

#app_metadata#dispatch#生成#service_id

から含まれるメソッド::public

#publish_cmap_event#publish_event#publish_sam_event

Loggableに含まれるメソッド

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

ConnectionCommonから継承されたメソッド

番号が接続されているかどうか#handsます。

コンストラクターの詳細

#初期化(ソケット、サーバー、モニタリング、オプション = {}) = PendingConnection

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

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

以来

  • 2.0.0



25
26
27
28
29
30
31
# ファイル 'lib/mongo/ サーバー/pending_ connection.rb' は、25 行

デフォルト 初期化(ソケット, サーバー, モニタリング, options = {})
  @socket = ソケット
  @options = options
  @server = サーバー
  @monitoring = モニタリング
  @id = options[:id]
end

インスタンス属性の詳細

ID整数(読み取り専用)

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

接続の ID を返します。 これは、この PendingConnection インスタンスが作成された通常の接続オブジェクトの ID と同じ ID です。

次の値を返します。

  • (整数)

    接続の ID。 これは、この PendingConnection インスタンスが作成された通常の接続オブジェクトの ID と同じ ID です。

以来

  • 2.0.0



36
37
38
# ファイル 'lib/mongo/ サーバー/pending_ connection.rb' は、36 行

デフォルト id
  @id
end

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

#handshake_and_authenticate =オブジェクト

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

次の値が発生します。

以来

  • 2.0.0



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
# ファイル 'lib/mongo/ サーバー/pending_ connection.rb' は、38 行

デフォルト response_and_authenticate.
  推測的_認証_ドキュメント = nil
  場合 options[:user] || options[:auth_mech]
    認証インスタンスを作成するには、次のメカニズムを指定する必要があります:
    # ではありますが、最終的に
    # が使用されます(これは返されるデータによって異なるため)
    ハンドシェイク、具体的にはサーバー バージョン)。
    #
    # ただし、推測的サーバーをサポートするのは4.4 + サーバーのみであることが
    # 認証。これらのサーバーは通常、
    # SCRAM-SHA- 256 。 ユーザー アカウントは4.4 + に作成されると予想されます。
    # サーバーでは通常、SCRAM-SHA- 256認証が許可されます。
    4.4より前のサーバーから移行した # ユーザー アカウントでは のみ許可される場合があります
    # SCRAM-SHA- 1 。 したがって、デフォルトで SCRAM-SHA- 256の使用は
    # は 認識可能であり、推測的認証仕様 によっても管理されます。
    #
    # メカニズムが指定されておらず、4.2 とやり取りしている場合
    サーバーは推測的認証ドキュメントを送信します。サーバーは
    # ではそれを無視し、明示的な使用して認証を行います
    # コマンドを使用します。
    #
    # メカニズムが指定されておらず、 4.4 + とやり取りしている場合
    # サーバーとユーザー アカウントでは SCRAM-SHA- 256が許可されていない場合、次のようにします
    の後に SCRAM-SHA- 1を使用して別のコマンドで認証を行います
    SCRAM メカニズムのネゴシエートを通過します。
    default_options = オプション::編集済み.新着情報(auth_mech: :SCRAM 256)
    推測的_認証_ユーザー = 認証::user.新着情報(default_options.merge(options))
    推測的_認証 = 認証.得る(推測的_認証_ユーザー, 自己)
    推測的_認証_ドキュメント = 推測的_認証.交信.推測的_認証_ドキュメント
  end

  結果 = handshake!(推測的_認証_ドキュメント: 推測的_認証_ドキュメント)

  場合 説明.不明な場合
    発生 エラー::internalDriverError,
          "ハンドシェイク成功後、接続の説明が不明になりません: #{ Description . explain } "
  end

  begin
    場合 推測的_認証_ドキュメント & & (推測的_認証_結果 = 結果['推測的認証'])
      ケース 推測的_認証_ユーザー.メカニズム
      次の場合: :mongodb_x 509
      #完了
      # 認証メカニズムはデフォルトでSCRAM 256 に設定されていますが、ユーザーが指定した場合
      SCRAM推測的認証ができる可能性があることを明示的に示します
      SCRAMでの#。
      次の場合: :SCRAM, :SCRAM 256
        認証します。(
          推測的_auth_client_nance: 推測的_認証.交信.client_nonce,
          推測的_認証_mech: 推測的_認証_ユーザー.メカニズム,
          推測的_認証_結果: 推測的_認証_結果
        )
      else
        発生 エラー::internalDriverError,
              「 メカニズム . メカニズム で は推測 的 認証 が予期せず成功し まし 
      end
    elsif !説明.アービタ
      認証します。
    end
  ヘルプ mongo::エラー, mongo::エラー::AuthError => e
    e.service_id = service_id
    発生
  end

  場合 説明.不明な場合
    発生 エラー::internalDriverError,
          "認証成功後は接続の説明を不明にできません: #{ Description . explain } "
  end

  return ただし、 サーバー.load_ balancer? & & !説明.mongos?

  発生 エラー::RedLoadBalancerTarget,
        負荷分散された操作には mongos を接続する必要がありますが、#{ アドレス.シード } のサーバーは自分自身を #{ 説明. server_type. to_s. tr('_' ' '
        }"
end