クラス: Mongo::Protocol::Msg Private
- 次のことが含まれます。
- Monitoring::Event::Secure
- 定義:
- lib/mongo/protocol/msg.rb
Overview
このクラスは、プライベート API の一部です。 このクラスは将来削除または変更される可能性があるため、可能な限り使用しないでください。
MongoDB ワイヤプロトコル MSG メッセージ(OP_MSG)は、双方向ワイヤプロトコル命令コードです。
名前空間で定義済み
クラス: セクション 1
定数の概要の削減
- DATABASE_IDENTIFIER =
この定数は、プライベート API の一部です。 この定数は将来削除または変更される可能性があるため、可能な限り使用しないでください。
コマンドを実行するデータベース名の識別子。
'$db'- InterNAL_KEY =
この定数は、プライベート API の一部です。 この定数は将来削除または変更される可能性があるため、可能な限り使用しないでください。
ドライバーがコマンドに追加するキー。 これらは、ログの記録を改善するためにハッシュの末尾に移動されます。
セット.新着情報(%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、シリアライザー::ゼロ
インスタンス属性の概要
メッセージから継承された属性
インスタンス メソッドの概要を折りたたむ
-
# bulk_write? = ブール値
private
このメッセージが一括書込みを表すかどうか。
- ドキュメント数: オブジェクト private
-
fix_ after_deserialization =オブジェクト
private
逆シリアル化により @sections インスタンス変数がドキュメントのリストに設定された後、インスタンス変数が逆に入力されます。
-
#初期化(フラグ、オプション、main_document、 * シーケンス)=msg
コンストラクター
private
新しい OP_MSG プロトコル メッセージを作成します。
- # may_add_server_api (server_api) = オブジェクト private
-
#Many_compress (コンプレッサー、zlib_compression_level = nil)= nil)================================
private
送信されるコマンドで圧縮が許可されている場合は、メッセージを圧縮します。
-
#maybe_decrypt(context) ⇒ Mongo::Protocol::Msg
private
このメッセージは libmongocrypt で復号化します。
-
#maybe_encrypt(connection, context) ⇒ Mongo::Protocol::Msg
private
このメッセージは libmongocrypt で暗号化してください。
-
# number_returned =整数
private
サーバーから返されたドキュメントの数を返します。
-
ペイロード= BSON::Document
private
モニタリングのイベント ペイロードを返します。
-
応答可能かどうか= true、false
private
メッセージがデータベースからの応答を要求しているかどうか。
-
#シリアル化(バッファ = BSON::Byteバッファ.new, max_bson_size = nil、bson_overhead = nil)= BSON::Byteバッファリング
private
ネットワーク上で送信できるバイトにメッセージを直列化します。
::Event::Secureに含まれるメソッド
#compression_allowed? 、 # 編集済み、 # 区別
メッセージから継承されたメソッド
# =============================================================================================
IDに含まれるメソッド
コンストラクターの詳細
#初期化(フラグ、オプション、main_document、 * シーケンス)= msg
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
新しい OP_MSG プロトコル メッセージを作成します
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, , main_document, *シーケンス) 場合 flags flags.各 行う |flag| 発生 ArgumentError, "不明なフラグ: #{フラグ. analyze } " ただし、 KNOWN_フラグメント.key?(flag) end end @flags = flags || [] @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.
264 265 266 267 268 269 270 271 272 273 274 |
# ファイル 'lib/mongo/プロトコル/msg.rb', 行 264 デフォルト 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 の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
192 193 194 |
# ファイル 'lib/mongo/プロトコル/msg.rb', 行 192 デフォルト ドキュメント [ @main_document ] end |
fix_ after_deserialization =オブジェクト
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
逆シリアル化により @sections インスタンス変数がドキュメントのリストに設定された後、インスタンス変数が逆に入力されます。
TODO は、このメソッドが不要になるように逆直列化を修正します。
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 の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 |
# ファイル 'lib/mongo/プロトコル/msg.rb', 行 276 デフォルト 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 の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
送信されるコマンドで圧縮が許可されている場合は、メッセージを圧縮します。 それ以外の場合は、 は自分自身を返します。
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によって暗号化する必要があるデータが含まれている場合は、メッセージを復号化する資格があります。
243 244 245 246 247 248 249 250 251 |
# ファイル 'lib/mongo/プロトコル/msg.rb', 行 243 デフォルト 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によって暗号化するために必要なデータが含まれている場合は、暗号化の対象となります。
210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 |
# ファイル 'lib/mongo/プロトコル/msg.rb', 行 210 デフォルト Max_encrypt(接続, context) 場合 context.暗号化 場合 接続.説明.max_wire_version < 8 発生 エラー::CryptError.新着情報( ' より古いMongoDBサーバーに対して暗号化を実行することはできません ' + 4.2(ワイヤバージョンは8 未満)。現在サーバーに接続しています。 + "で最大ワイヤバージョン#{ connection . Description . max_wire_version } } " + (自動暗号化には最小のMongoDBバージョン 4.2 が必要です) ' ) end 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 によって反復が継続されているカーソル)が返される必要があります。
300 301 302 303 304 305 306 |
# ファイル 'lib/mongo/プロトコル/msg.rb', 行 300 デフォルト number_returned 場合 (doc = ドキュメント.最初に) & & (cursor = doc['cursor']) & & (バッチする = cursor[' firstBatch '] || cursor[' nextBatch ']) return バッチする.Length end 発生 NotImplementedError, ' number_returned は カーソル応答に対してのみ定義されます ' end |
ペイロード= BSON::Document
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
モニタリングのイベント ペイロードを返します。
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 の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
メッセージがデータベースからの応答を要求しているかどうか。
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 の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
ネットワーク上で送信できるバイトにメッセージを直列化します。
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 |