クラス: Mongo::Protocol::Msg Private

継承:
メッセージ すべて表示
次のことが含まれます。
Monitoring::Event::Secure
定義:
lib/mongo/protocol/msg.rb

Overview

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

MongoDB ワイヤプロトコル MSG メッセージ(OP_MSG)は、双方向ワイヤプロトコル命令コードです。

以来

  • 2.5.0

名前空間で定義済み

クラス: セクション 1

定数の概要の削減

DATABASE_IDENTIFIER =

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

コマンドを実行するデータベース名の識別子。

以来

  • 2.5.0

'$db'
InterNAL_KEY =

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

ドライバーがコマンドに追加するキー。 これらは、ログの記録を改善するためにハッシュの末尾に移動されます。

以来

  • 2.5.0

セット.新着情報(%w[$clusterTime $db lsid 署名 txnNumber]).freeze

Monitoring::Event::Secureに含まれる制約

モニタリング::Event::Secure::REDACTED_COMMANDS

メッセージから継承された定数

Mongo::Protocol::Message::BATCH_SIZE 、 Mongo::Protocol::Message::COLLECTION 、 Mongo::Protocol ::Message::LITIT 、 Mongo:: Protocol::Message::MAX_MESSAGE_SIZE 、 Mongo::Protocol::メッセージ::ORDER 、 Mongo::Protocol::Message::Q

シリアライザーに含まれる定数

シリアライザー::HEADER_PACK、シリアライザー::int32_PACK、シリアライザー::INT64_PACK、シリアライザー::NULL、シリアライザー::ゼロ

インスタンス属性の概要

メッセージから継承された属性

#request_id

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

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

#compression_allowed? 、 # 編集済み、 # 区別

メッセージから継承されたメソッド

#==, deserialize, #deserialize_array, #deserialize_フィールド, deserialize_header, フィールド, #フィールド, フィールド, #hash, #maybe_inflate, #serialize_フィールド, #set_request_id

IDに含まれるメソッド

次が含まれます:

コンストラクターの詳細

#初期化(フラグ、オプション、main_document、 * シーケンス)= msg

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

新しい OP_MSG プロトコル メッセージを作成します

例:

OP_MSG ワイヤプロトコル メッセージの作成

Msg.new([:more_to_come], {}, { hello: 1 },
        { type: 1, payload: { identifier: 'documents', sequence: [..] } })

パラメーター:

  • flags (配列未満

    フラグ ビット。 現在サポートされている値は、: more_to_com と :checksum_current です。

  • options (ハッシュ) —

    オプション。

  • main_document ( BSON::Document 、 Hash ) —

    ペイロード型0セクションになるドキュメント。 OP_MSG 仕様で定義されているため、グローバル引数を含めることができます。

  • シーケンス (Protocol::Msg::Section1) —

    0 個以上のペイロード型1セクション。

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

  • validation_keys ( true 、 false ) —

    キーが有効なドキュメント キーであるかどうかを検証する必要があるかどうか(つまり、 $ で始まらない、ドットを含まない)。 このオプションは非推奨であり、使用されません。 バージョン3.0で削除されます。

以来

  • 2.5.0



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
# ファイル 'lib/mongo/プロトコル/msg.rb', 行 62

デフォルト 初期化(flags, options, main_document, *シーケンス)
  場合 flags
    flags.各 行う |flag|
      発生 ArgumentError, "不明なフラグ: #{フラグ. analyze } " ただし、 KNOWN_フラグメント.key?(flag)
    end
  end
  @flags = flags || []
  @options = options
  ただし、 main_document.is_a?(ハッシュ)
    発生 ArgumentError, " メインドキュメントはハッシュである必要があり、次の 条件を満たす 必要 が あり ます :
  end

  @main_document = main_document
  シーケンス.each_with_index 行う |セクション, index|
    ただし、 セクション.is_a?(セクション 1)
      発生 ArgumentError, 「 すべてのシーケンスは セクション1 インスタンスである必要があり 、インデックス #{ インデックス } } で 次のドキュメントを取得しまし た :
    end
  end
  @Sequences = シーケンス
  @sections = [
    { type: 0, ペイロード: @main_document }
  ] + @Sequences.map 行う |セクション|
    { type: 1, ペイロード: {
      identifier: セクション.identifier,
      シーケンス: セクション.ドキュメント.map 行う |doc|
        CacheHash.新着情報(doc)
      end,
    } }
  end
  @request_id = nil
  スーパー
end

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

# bulk_write? =ブール値

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

注:

このメソッドは、クライアント側の暗号化機能をサポートするために記述されています。 このメソッドを他の機能または動作のサービスで使用することは推奨されません。

このメッセージが一括書込みを表すかどうか。 A bulk write is an insert, update, or delete operation that encompasses multiple operations of the same type.

次の値を返します。

  • (ブール値) —

    このメッセージが一括書込みを表すかどうか。

以来

  • 2.5.0



253
254
255
256
257
258
259
260
261
262
263
# ファイル 'lib/mongo/プロトコル/msg.rb', 行 253

デフォルト bulk_write?
  inserts = @main_document['documents']
  updates = @main_document['updates']
  deletes = @main_document['deletes']

  num_inserts = (inserts & & inserts.Length) || 0
  num_updates = (updates & & updates.Length) || 0
  num_deletes = (deletes & & deletes.Length) || 0

  num_inserts > 1 || num_updates > 1 || num_deletes > 1
end

ドキュメント数:オブジェクト

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

以来

  • 2.5.0



192
193
194
# ファイル 'lib/mongo/プロトコル/msg.rb', 行 192

デフォルト ドキュメント
  [ @main_document ]
end

fix_ after_deserialization =オブジェクト

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

逆シリアル化により @sections インスタンス変数がドキュメントのリストに設定された後、インスタンス変数が逆に入力されます。

TODO は、このメソッドが不要になるように逆直列化を修正します。

次の値が発生します。

  • (NotImplementedError)

以来

  • 2.5.0



179
180
181
182
183
184
185
186
187
188
189
190
# ファイル 'lib/mongo/プロトコル/msg.rb', 行 179

デフォルト fix_ after_deserialization
  発生 NotImplementedError, 「逆直列化後、@sections は初期化されている必要があります」 場合 @sections.nil?

  場合 @sections.Length != 1
    発生 NotImplementedError,
          「 逆直列化ではセクションが 1 つだけ生成された必要がありますが、 #{ section.Length } } セクション は生成さ れ ました 」
  end

  @main_document = @sections.最初に
  @Sequences = []
  @sections = [ { type: 0, ペイロード: @main_document } ]
end

# may_add_server_api (server_api) =オブジェクト

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

以来

  • 2.5.0



265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
# ファイル 'lib/mongo/プロトコル/msg.rb', 行 265

デフォルト Max_add_server_api(server_api)
  競合 = {}
  %i[apiVersion apiStrict apiDeprecationErrors].各 行う |キー|
    競合[キー] = @main_document[キー] 場合 @main_document.key?(キー)
    競合[キー] = @main_document[キー.to_s] 場合 @main_document.key?(キー.to_s)
  end
  ただし、 競合.空の場合
    発生 エラー::ServerApiConflict,
          "クライアントは :server_api オプションで構成されていますが、この操作により次の競合パラメーターが発生しました。 #{ conflicts . explain } "
  end

  main_document = @main_document.merge(
    Utils.transform_server_api(server_api)
  )
  Msg.新着情報(@flags, @options, main_document, *@Sequences)
end

#Many_compress (コンプレッサー、 zlib_compression_level = nil)= nil)================================

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

送信されるコマンドで圧縮が許可されている場合は、メッセージを圧縮します。 それ以外の場合は、 は自分自身を返します。

パラメーター:

  • compressor ( string 、 Symbol ) —

    使用するコンプレッサー。

  • zlib_compression_level (整数) (デフォルトはnil ) —

    使用する zlib 圧縮レベル。

次の値を返します。

  • (メッセージ) —

    このメッセージを圧縮できるかどうかに応じて、 プロトコル::圧縮されたメッセージ または 自己処理 メッセージが表示されます。

以来

  • 2.5.0



169
170
171
# ファイル 'lib/mongo/プロトコル/msg.rb', 行 169

デフォルト Max_compress(compressor, zlib_compression_level = nil)
  compress_if_allow(コマンド.キー.最初に, compressor, zlib_compression_level)
end

#maybe_decrypt(context) ⇒ Mongo::Protocol::Msg

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

このメッセージは libmongocrypt で復号化します。 メッセージは、指定されたクライアントが存在し、そのクライアントに自動暗号化オプションが指定され、このメッセージが復号化の対象となる場合にのみ復号化されます。 メッセージは、libmongocrypt によって許可リストされているコマンドのタイプのいずれかを表し、ローカルまたはリモートのJSON schemaによって暗号化する必要があるデータが含まれている場合は、メッセージを復号化する資格があります。

パラメーター:

次の値を返します。

  • (Mongo::Protocol::Msg) —

    復号化されたメッセージ、または復号化が不可能または必要な場合は元のメッセージ。

以来

  • 2.5.0



232
233
234
235
236
237
238
239
240
# ファイル 'lib/mongo/プロトコル/msg.rb', 行 232

デフォルト Max_decrypt(context)
  場合 context.解読
    cmd = merge_sections
    enc_cmd = context.解読(cmd)
    Msg.新着情報(@flags, @options, enc_cmd)
  else
    自己
  end
end

#Many_encrypt (_接続、コンテキスト) → Mongo::Protocol::Msg

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

このメッセージは libmongocrypt で暗号化してください。 メッセージは、指定されたクライアントが存在し、そのクライアントに自動暗号化オプションが指定され、クライアントが自動暗号化をバイパスするように指示されておらず、 mongocryptd がこのメッセージを暗号化に適していると判断した場合にのみ暗号化されます。 メッセージは、libmongocrypt によって許可リストされているコマンドのタイプのいずれかを表し、ローカルまたはリモートのJSON schemaによって暗号化するために必要なデータが含まれている場合は、暗号化の対象となります。

パラメーター:

次の値を返します。

  • (Mongo::Protocol::Msg) —

    暗号化されたメッセージ、または暗号化が可能または必要でなかった場合は元のメッセージ。

以来

  • 2.5.0



208
209
210
211
212
213
214
215
216
217
218
219
# ファイル 'lib/mongo/プロトコル/msg.rb', 行 208

デフォルト Max_encrypt(_ connection, context)
  場合 context.暗号化
    db_name = @main_document[DATABASE_IDENTIFIER]
    cmd = merge_sections
    enc_cmd = context.暗号化(db_name, cmd)
    enc_cmd['$db'] = cmd['$db'] 場合 cmd.key?('$db') & & !enc_cmd.key?('$db')

    Msg.新着情報(@flags, @options, enc_cmd)
  else
    自己
  end
end

# number_returned =整数

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

サーバーから返されたドキュメントの数を返します。

MSg インスタンスはサーバー応答の である必要があり、応答によってアクティブなカーソル(新しく作成されたカーソルまたは getMore によって反復が継続されているカーソル)が返される必要があります。

次の値を返します。

  • (整数) —

    返されたドキュメントの数。

次の値が発生します。

  • (NotImplementedError)

以来

  • 2.5.0



289
290
291
292
293
294
295
# ファイル 'lib/mongo/プロトコル/msg.rb', 行 289

デフォルト number_returned
  場合 (doc = ドキュメント.最初に) & & (cursor = doc['cursor']) & & (バッチする = cursor[' firstBatch '] || cursor[' nextBatch '])
    return バッチする.Length
  end

  発生 NotImplementedError, ' number_returned は カーソル応答に対してのみ定義されます '
end

ペイロード= BSON::Document

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

モニタリングのイベント ペイロードを返します。

例:

イベントのペイロードを返します。

message.payload

次の値を返します。

  • ( BSON::Document ) —

    イベントのペイロード。

以来

  • 2.5.0



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
# ファイル 'lib/mongo/プロトコル/msg.rb', 行 115

デフォルト ペイロード
  ログの記録を改善するためにメインドキュメント内のキーの順序を変更します - を参照してください
  https://JIRA.mongodb.org/browse/RUBY-{0 1591 。
  # 並べ替えがない場合でも、ペイロードは正確な数ではないことに注意してください
  # がネットワーク経由で送信された内容に一致するため、コマンドは次で使用されます:
  公開されたイベントは、次の複数のセクションのキーを組み合わせます:
  ネットワーク経由で送信されたペイロードの数。
  ordered_command = {}
  skipped_command = {}
  コマンド.各 行う |k, v|
    場合 InterNAL_KEYS.ノードは?(k.to_s)
      skipped_command[k] = v
    else
      ordered_command[k] = v
    end
  end
  ordered_command.update(skipped_command)

  BSON::ドキュメント.新着情報(
    command_name: ordered_command.キー.最初に.to_s,
    database_name: @main_document[DATABASE_IDENTIFIER],
    コマンド: ordered_command,
    request_id: request_id,
    応答: @main_document
  )
end

応答可能かどうか= true 、 false

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

メッセージがデータベースからの応答を要求しているかどうか。

例:

そのメッセージには応答が必要か。

message.replyable?

次の値を返します。

  • ( true 、 false ) —

    メッセージが応答を要求している場合。

以来

  • 2.5.0



103
104
105
# ファイル 'lib/mongo/プロトコル/msg.rb', 行 103

デフォルト 応答可能かどうか
  @replyable ||= !flags.include?(: more_to_comment)
end

#シリアル化(バッファ = BSON::Byteバッファ.new, max_bson_size = nil、bson_overhead = nil)= BSON:: Byteバッファリング

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

ネットワーク上で送信できるバイトにメッセージを直列化します。

パラメーター:

  • バッファ ( BSON::Byteバッファ) (デフォルトはBSON::Byteバッファ.new ) —

    メッセージを挿入する場所。

  • max_bson_size (整数) (デフォルトはnil ) —

    最大BSONオブジェクト サイズ。

次の値を返します。

  • ( BSON::Byteバッファ) —

    シリアル化されたメッセージを含むバッファ。

以来

  • 2.5.0



150
151
152
153
154
155
156
# ファイル 'lib/mongo/プロトコル/msg.rb', 行 150

デフォルト 直列化(バッファ = BSON::Byteバッファ.新着情報, max_bson_size = nil, bson_overhead = nil)
  validate_document_size(max_bson_size)

  スーパー
  add_check_sum(バッファ)
  バッファ
end