クラス: 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 )以降でのみ使用できます。
名前空間で定義済み
クラス: セクション 1
定数の概要の削減
- DATABASE_IDENTIFIER =
この定数は、プライベート API の一部です。 この定数は将来削除または変更される可能性があるため、可能な限り使用しないでください。
コマンドを実行するデータベース名の識別子。
'$db'.freeze
- 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
インスタンス属性の概要
メッセージから継承された属性
インスタンス メソッドの概要を折りたたむ
-
# 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 プロトコル メッセージを作成します
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, , main_document, *シーケンス) 場合 flags flags.各 行う |flag| ただし、 KNOWN_フラグメント.key?(flag) 発生 ArgumentError, "不明なフラグ: #{フラグ. analyze } " end 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.
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 の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
196 197 198 |
ファイル 'Build/ruby-Driver-v 2.19 /lib/mongo/protocol/msg.rb', 行196 デフォルト ドキュメント [@main_document] end |
fix_ after_deserialization =オブジェクト
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
逆シリアル化により @sections インスタンス変数がドキュメントのリストに設定された後、インスタンス変数が逆に入力されます。
TODO は、このメソッドが不要になるように逆直列化を修正します。
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 の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
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 の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
送信されるコマンドで圧縮が許可されている場合は、メッセージを圧縮します。 それ以外の場合は、 は自分自身を返します。
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によって暗号化する必要があるデータが含まれている場合は、メッセージを復号化する資格があります。
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によって暗号化するために必要なデータが含まれている場合は、暗号化の対象となります。
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 によって反復が継続されているカーソル)が返される必要があります。
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 の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
モニタリングのイベント ペイロードを返します。
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 |
応答可能かどうか= true 、 false
このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
メッセージがデータベースからの応答を要求しているかどうか。
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 の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。
ネットワーク上で送信できるバイトにメッセージを直列化します。
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 |