클래스: Mongo::Protocol::Msg Private
- 다음을 포함합니다.
- Monitoring::Event::Secure
- 다음에 정의됨:
- lib/mongo/protocol/msg.rb
개요
이 클래스는 비공개 API의 일부입니다. 이 클래스는 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
MongoDB 유선 프로토콜 메시지 메시지(OP_MSG)는 양방향 유선 프로토콜 옵코드입니다.
OP_MSG는 MongoDB 3.6 (maxWireVersion >= 6) 이상에서만 사용할 수 있습니다.
네임스페이스 아래에 정의됨
클래스: 섹션 1
상수 요약 접기
- DATABASE_IDENTIFIER =
이 상수는 비공개 API의 일부입니다. 이 상수는 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
명령을 실행할 데이터베이스 이름의 식별자입니다.
'$db'.동결
- INTERNAL_KEYS =
이 상수는 비공개 API의 일부입니다. 이 상수는 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
드라이버가 명령에 추가하는 키입니다. 더 나은 로깅을 위해 해시 끝으로 이동합니다.
세트.신규(%w($clusterTime $db lsid 서명 txnNumber)).동결
Monitoring::Event::Secure에 포함된 상수
Monitoring::Event::Secure::REDACTED_COMMANDS
메시지에서 상속된 상수
Mongo::Protocol::Message::BATCH_SIZE, Mongo::Protocol::Message::COLLECTION, Mongo::Protocol::Message::LIMIT, Mongo::Protocol::Message::MAX_MESSAGE_SIZE, Mongo::Protocol:: Message::ORDERED, Mongo::Protocol::Message::Q
인스턴스 속성 요약
메시지에서 상속된 속성
인스턴스 메서드 요약 접기
-
#bulk_write? ⇒ 부울
비공개
이 메시지가 대량 쓰기를 나타내는지 여부입니다.
- 문서 #개 ⇒ 객체 비공개
-
#fix_after_deserialization ⇒ 객체
비공개
역직렬화로 @sections 인스턴스 변수를 문서 목록으로 설정한 후 인스턴스 변수를 역방향으로 채웁니다.
-
#initialize(플래그, 옵션, main_document, *sequences) ⇒ Msg
생성자
비공개
새 OP_MSG 프로토콜 메시지를 생성합니다.
- #may_add_server_api(server_api) ⇒ 객체 비공개
-
#may_compress(압축기, zlib_compression_level = nil) ⇒ 메시지
비공개
전송 중인 명령이 압축을 허용하는 경우 메시지를 압축합니다.
-
#maybe_decrypt(context) ⇒ Mongo::Protocol::Msg
비공개
libmongocrypt로 이 메시지를 해독할 수 있습니다.
-
#maybe_encrypt(connection, context) ⇒ Mongo::Protocol::Msg
비공개
이 메시지를 libmongocrypt로 암호화할 수 있습니다.
-
#number_returned ⇒ 정수
비공개
서버 에서 반환된 문서 수를 반환합니다.
-
#페이로드 ⇒ BSON::Document
비공개
모니터링 할 이벤트 페이로드를 반환합니다.
-
#회신 가능? ⇒ 참, 거짓
비공개
메시지가 데이터베이스 로부터 응답을 기대하는지 여부입니다.
-
#serialize(buffer = BSON::ByteBuffer.new, max_bson_size = nil, bson_overhead = nil) ⇒ BSON::ByteBuffer
비공개
메시지를 유선으로 전송할 수 있는 바이트로 직렬화합니다.
Monitoring::Event::Secure에 포함된 메서드
#compression_allowed?, #redacted, #sensitivity?
메시지에서 상속된 메서드
#==, 역직렬화, #hash, #maybe_inflate, #set_request_id
ID에 포함된 메서드
생성자 세부 정보
#initialize(플래그, 옵션, main_document, *sequences) ⇒ 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 |
# 파일 'lib/ Mongo/ 프로토콜/msg.rb', 줄 66 def 초기화(flags, , main_document, *시퀀스) 만약 flags flags.각 do |flag| 하지 않는 한 KNOWN_FLAGS.키?(flag) 올리다 ArgumentError, "Unknown 플래그: #{플래그.검사}" end end end @flags = flags || [] @options = 하지 않는 한 main_document.is_a?(해시) 올리다 ArgumentError, "메인 문서 는 다음과 같이 해시여야 합니다: #{main_document.class}" end @main_document = main_document 시퀀스.each_with_index do |섹션, index| 하지 않는 한 섹션.is_a?(섹션 1) 올리다 ArgumentError, "모든 시퀀스는 섹션1 인스턴스여야 하며, 다음을 얻습니다: #{섹션} at index #{index}" end end @sequences = 시퀀스 @sections = [ {유형: 0, 페이로드: @main_document} ] + @sequences.map do |섹션| {유형: 1, 페이로드: { identifier: 섹션.식별자, 시퀀스: 섹션.문서.map do |doc| 캐싱 해시.신규(doc) end, }} end @request_id = nil super end |
인스턴스 메서드 세부 정보
#bulk_write? ⇒ 부울
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
이 메서드는 클라이언트 사이드 암호화 기능을 지원 하기 위해 작성되었습니다. 이 메서드는 다른 기능 이나 동작을 지원하는 데 사용하지 않는 것이 좋습니다.
이 메시지가 대량 쓰기를 나타내는지 여부입니다. 대량 쓰기는 동일한 유형의 여러 작업을 포함하는 삽입, 업데이트 또는 삭제 작업입니다.
272 273 274 275 276 277 278 279 280 281 282 |
# 파일 'lib/ Mongo/ 프로토콜/msg.rb', 줄 272 def bulk_write? 삽입 = @main_document['documents'] 업데이트 = @main_document['updates'] deletes = @main_document['deletes'] num_inserts = 삽입 && 삽입.분량 || 0 num_updates = 업데이트 && 업데이트.분량 || 0 num_deletes = deletes && deletes.분량 || 0 num_inserts > 1 || num_updates > 1 || num_deletes > 1 end |
문서 #개 ⇒ 객체
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
196 197 198 |
# 파일 'lib/ Mongo/ 프로토콜/msg.rb', 줄 196 def 문서 [@main_document] end |
#fix_after_deserialization ⇒ 객체
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
역직렬화로 @sections 인스턴스 변수를 문서 목록으로 설정한 후 인스턴스 변수를 역방향으로 채웁니다.
TODO는 이 메서드가 필요하지 않도록 역직렬화를 수정합니다.
184 185 186 187 188 189 190 191 192 193 194 |
# 파일 'lib/ Mongo/ 프로토콜/msg.rb', 줄 184 def fix_after_deserialization 만약 @sections.nil? 올리다 NotImplementedError, "역직렬화 후 @sections가 초기화되어야 합니다" end 만약 @sections.분량 != 1 올리다 NotImplementedError, "역직렬화는 정확히 하나의 섹션을 생성했을 것이지만 #{섹션.길이} 섹션을 생성했습니다" end @main_document = @sections.first @sequences = [] @sections = [{유형: 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 |
# 파일 'lib/ Mongo/ 프로토콜/msg.rb', 줄 284 def may_add_server_api(server_api) 충돌 = {} %i(apiVersion apiStrict apiDeprecationErrors).각 do |키| 만약 @main_document.키?(키) 충돌[키] = @main_document[키] end 만약 @main_document.키?(키.to_s) 충돌[키] = @main_document[키.to_s] end end 하지 않는 한 충돌.비어 있나요? 올리다 오류::ServerApiConflict, "클라이언트가 :server_api 옵션으로 구성되었지만 작업에서 다음과 같은 충돌하는 매개 변수를 제공했습니다: #{conflicts.검사}" end main_document = @main_document.merge( Utils.transformation_server_api(server_api) ) 메시지.신규(@flags, @options, main_document, *@sequences) end |
#may_compress(압축기, zlib_compression_level = nil) ⇒ 메시지
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
전송 중인 명령이 압축을 허용하는 경우 메시지를 압축합니다. 그렇지 않으면 자체를 반환합니다.
174 175 176 |
# 파일 'lib/ Mongo/ 프로토콜/msg.rb', 줄 174 def may_compress(압축기, zlib_compression_level = nil) compress_if_posible(명령.키.first, 압축기, zlib_compression_level) end |
#maybe_decrypt(context) ⇒ Mongo::Protocol::Msg
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
libmongocrypt로 이 메시지를 해독할 수 있습니다. 지정된 클라이언트 가 있고, 해당 클라이언트 에 자동 암호화 옵션이 제공되었으며, 이 메시지를 해독할 수 있는 경우에만 메시지가 해독됩니다. 메시지가 libmongocrypt에서 허용된 명령 유형 중 하나를 나타내고 로컬 또는 원격 JSON schema 로 암호화됨 해야 하는 데이터를 포함하는 경우 메시지를 해독할 수 있습니다.
251 252 253 254 255 256 257 258 259 |
# 파일 'lib/ Mongo/ 프로토콜/msg.rb', 줄 251 def may_decrypt(컨텍스트) 만약 컨텍스트.해독? cmd = merge_sections enc_cmd = 컨텍스트.암호 해독(cmd) 메시지.신규(@flags, @options, enc_cmd) other self 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 |
# 파일 'lib/ Mongo/ 프로토콜/msg.rb', 줄 214 def may_encrypt(연결, 컨텍스트) # TODO는 나중에, 즉 이 메서드가 실행될 때 압축이 발생하는지 확인합니다. # 메시지는 압축되지 않습니다. 만약 컨텍스트.암호화? 만약 연결.description.max_wire_version < 8 올리다 오류::CRYPTError.신규( "다음보다 오래된 MongoDB 서버 에 대해서는 암호화 를 수행할 수 없습니다." + "4.2 ( 8 미만의 유선 버전 ). 현재 서버에 연결되어 있습니다 " + "with max 와이어 버전 #{connection.description.max_wire_version}} " + "(자동 암호화를 사용하려면 최소 MongoDB 버전이 4.2 이상이어야 함)" ) end db_name = @main_document[DATABASE_IDENTIFIER] cmd = merge_sections enc_cmd = 컨텍스트.암호화(db_name, cmd) 만약 cmd.키?('$db') && !enc_cmd.키?('$db') enc_cmd['$db'] = cmd['$db'] end 메시지.신규(@flags, @options, enc_cmd) other self end end |
#number_returned ⇒ 정수
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
서버 에서 반환된 문서 수를 반환합니다.
Msg 인스턴스 는 서버 회신용이어야 하며 회신은 활성 커서 (새로 생성된 커서 또는 getMore를 통해 반복이 계속되는 커서)를 반환해야 합니다.
311 312 313 314 315 316 317 318 319 320 |
# 파일 'lib/ Mongo/ 프로토콜/msg.rb', 줄 311 def number_returned 만약 doc = 문서.first 만약 cursor = doc['cursor'] 만약 배치 = cursor['firstBatch'] || cursor['NextBatch'] 반환 배치.분량 end end end 올리다 NotImplementedError, "number_returned는 커서 응답에 대해서만 정의됩니다" end |
#payload ⇒ 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 |
# 파일 'lib/ Mongo/ 프로토콜/msg.rb', 줄 120 def Payload # 더 나은 로깅을 위해 main_document에서 키 재정렬 - 참조 # https://jira.mongodb.org/browse/RUBY-1591. # 재정렬을 하지 않더라도 페이로드는 # 다음에서 사용된 명령이 있기 때문에 유선을 통해 전송된 내용과 일치합니다. # 게시된 이벤트는 여러 섹션의 키를 결합합니다. # 페이로드가 유선으로 전송되었습니다. ordered_command = {} skipped_command = {} 명령.각 do |k, v| 만약 INTERNAL_KEYS.멤버?(k.to_s) skipped_command[k] = v other ordered_command[k] = v end end ordered_command.update(skipped_command) BSON::문서.신규( command_name: ordered_command.키.first.to_s, database_name: @main_document[DATABASE_IDENTIFIER], 명령: ordered_command, request_id: request_id, 회신: @main_document, ) end |
#회신 가능? ⇒ true, false
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
메시지가 데이터베이스 로부터 응답을 기대하는지 여부입니다.
108 109 110 |
# 파일 'lib/ Mongo/ 프로토콜/msg.rb', 줄 108 def 회신 가능? @replyable ||= !flags.포함?(:more_to_com) end |
#직렬화(버퍼 = BSON::ByteBuffer.new, max_bson_size = nil, bson_overhead = nil) ⇒ BSON::ByteBuffer
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
메시지를 유선으로 전송할 수 있는 바이트로 직렬화합니다.
155 156 157 158 159 160 161 |
# 파일 'lib/ Mongo/ 프로토콜/msg.rb', 줄 155 def 직렬화(buffer = BSON::ByteBuffer.신규, max_bson_size = nil, bson_overhead = nil) validate_document_size!(max_bson_size) super add_check_sum(buffer) buffer end |