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

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

Overview

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

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

OP_MSG は MongoDB 3.6 (maxWireVersion >= 6 )以降でのみ使用できます。

以来

  • 2.5.0

名前空間で定義済み

クラス: セクション 1

定数の概要の削減

DATABASE_IDENTIFIER =

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

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

以来

  • 2.5.0

'$db'.freeze
InterNAL_KEY =

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

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

以来

  • 2.5.0

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

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

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

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

Mongo::Protocol::Message::BATCH_SIZEMongo::Protocol::Message::COLLECTIONMongo::Protocol ::Message::LITIT 、 Mongo:: Protocol::Message::MAX_MESSAGE_SIZEMongo::Protocol::メッセージ::ORDERMongo::Protocol::Message::Q

インスタンス属性の概要

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

#request_id

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

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

#compression_allowed?# 編集済み# 区別

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

# ===========================================================================

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::DocumentHash

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

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

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

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

  • validation_keys truefalse

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

以来

  • 2.5.0



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
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/protocol/msg.rb', 行66

デフォルト 初期化(flags, options, main_document, *シーケンス)
  場合 flags
    flags. 行う |flag|
      ただし、 KNOWN_フラグメント.key?(flag)
        発生 ArgumentError, "不明なフラグ: #{フラグ. analyze } "
      end
    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



272
273
274
275
276
277
278
279
280
281
282
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/protocol/msg.rb', 行272

デフォルト 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



196
197
198
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/protocol/msg.rb', 行196

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

fix_ after_deserialization =オブジェクト

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

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

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

以来

  • 2.5.0



184
185
186
187
188
189
190
191
192
193
194
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/protocol/msg.rb', 行184

デフォルト fix_ after_deserialization
  場合 @sections.nil?
    発生 NotImplementedError, 逆直列化後、@sections は初期化されている必要があります。」
  end
  場合 @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



284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/protocol/msg.rb', 行284

デフォルト Max_add_server_api(server_api)
  競合 = {}
  %i(apiVersion apiStrict apiDeprecationErrors). 行う |キー|
    場合 @main_document.key?(キー)
      競合[キー] = @main_document[キー]
    end
    場合 @main_document.key?(キー.to_s)
      競合[キー] = @main_document[キー.to_s]
    end
  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 ( stringSymbol )

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

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

    使用する zlib 圧縮レベル。

次の値を返します。

  • メッセージ

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

以来

  • 2.5.0



174
175
176
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/protocol/msg.rb', 行174

デフォルト 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



251
252
253
254
255
256
257
258
259
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/protocol/msg.rb', 行251

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

#maybe_encrypt(connection, context) ⇒ Mongo::Protocol::Msg

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

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

パラメーター:

次の値を返します。

  • (Mongo::Protocol::Msg)

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

以来

  • 2.5.0



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
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/protocol/msg.rb', 行214

デフォルト Max_encrypt(接続, context)
  # TODO が圧縮が後で実行されることを確認します。つまり、このメソッドが実行されたときに
  # メッセージは圧縮されていません。
  場合 context.暗号化
    場合 接続.説明.max_wire_version < 8
      発生 エラー::CryptError.新着情報(
        "より古い MongoDB サーバーに対して暗号化を実行することはできませ +
        " 4.2 ( 8未満のワイヤバージョン)。現在サーバーに接続しています +
        "で最大ワイヤバージョン#{ connection . Description . max_wire_version } } " +
        自動暗号化には、最小で4.2の MongoDB バージョンが必要です) "
      )
    end

    db_name = @main_document[DATABASE_IDENTIFIER]
    cmd = merge_sections
    enc_cmd = context.暗号化.暗号化(db_name, cmd)
    場合 cmd.key?('$db') & & !enc_cmd.key?('$db')
      enc_cmd['$db'] = cmd['$db']
    end

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

# number_returned =整数

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

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

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

次の値を返します。

  • (整数)

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

次の値が発生します。

  • (NotImplementedError)

以来

  • 2.5.0



311
312
313
314
315
316
317
318
319
320
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/protocol/msg.rb', 行311

デフォルト number_returned
  場合 doc = ドキュメント.最初に
    場合 cursor = doc['cursor']
      場合 バッチする = cursor[' firstBatch '] || cursor[' nextBatch ']
        return バッチする.Length
      end
    end
  end
  発生 NotImplementedError, " number_returned は カーソルの応答に対してのみ定義されます"
end

ペイロード= BSON::Document

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

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

例:

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

message.payload

次の値を返します。

  • BSON::Document

    イベントのペイロード。

以来

  • 2.5.0



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
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/protocol/msg.rb', 行120

デフォルト ペイロード
  ログの記録を改善するためにメインドキュメント内のキーの順序を変更します - を参照してください
  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

応答可能かどうか= truefalse

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

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

例:

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

message.replyable?

次の値を返します。

  • truefalse

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

以来

  • 2.5.0



108
109
110
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/protocol/msg.rb', 行108

デフォルト 応答可能かどうか
  @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



155
156
157
158
159
160
161
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/protocol/msg.rb', 行155

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

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