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

継承:
ConnectionBase すべて表示
次による拡張機能。
転送可能
定義:
build/ruby-Driver-v 2.19 /lib/mongo/server/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



27
28
29
30
31
32
33
# File 'build/ruby-driver-v2.19/lib/mongo/server/pending_connection.rb', 行27

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

インスタンス属性の詳細

ID整数(読み取り専用)

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

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

次の値を返します。

  • (整数)

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

以来

  • 2.0.0



38
39
40
# File 'build/ruby-driver-v2.19/lib/mongo/server/pending_connection.rb', 行38

デフォルト id
  @id
end

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

#handshake_and_authenticate =オブジェクト

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

以来

  • 2.0.0



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
# File 'build/ruby-driver-v2.19/lib/mongo/server/pending_connection.rb', 行40

デフォルト 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の使用は
    # は 認識可能であり、推測的認証仕様 によっても管理されます。
    # メカニズムが指定されておらず、 3.0 + とやり取りしている場合
    サーバーは推測的認証ドキュメントを送信します。サーバーは
    # ではそれを無視し、明示的な使用して認証を行います
    後で メカニズムを CR にデフォルト設定した後の# コマンドです。
    # メカニズムが指定されておらず、 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
    場合 推測的_認証_ドキュメント & & (推測的_認証_結果 = 結果['推測的認証'])
      ただし、 説明.機能.SCRAM_sha_ 1 _enabled?
        発生 エラー::InvalidServerAuthResponse, 推測的認証は3.0より前のサーバーで成功しました
      end
      ケース 推測的_認証_ユーザー.メカニズム
      次の場合: :mongodb_x 509
        #完了
      # 認証メカニズムはデフォルトでSCRAM 256 に設定されていますが、ユーザーが指定した場合
      SCRAM推測的認証ができる可能性があることを明示的に示します
      SCRAMでの#。
      次の場合: :SCRAM, :SCRAM 256
        認証します。(
          推測的_auth_client_nance: 推測的_認証.交信.client_nonce,
          推測的_認証_mech: 推測的_認証_ユーザー.メカニズム,
          推測的_認証_結果: 推測的_認証_結果,
        )
      else
        発生 エラー::internalDriverError, 「 メカニズム . メカニズム で は推測 的 認証 が予期せず成功し まし 
      end
    elsif !説明.アービタ
      認証します。
    end
  ヘルプ mongo::エラー, mongo::エラー::AuthError => 除外
    除外.service_id = service_id
    発生
  end

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

  場合 サーバー.load_ balancer? & & !説明.mongos?
    発生 エラー::RedLoadBalancerTarget, 負荷分散され操作には mongos を接続する必要がありますが、 #{アドレス.シード}のサーバーは自分自身を#{ Description . server_type . to_s . gsub  ' _ ' として報告しました。 ' } } "
  end
end