클래스: Mongo::Protocol::Msg Private
- 다음을 포함합니다.
- Monitoring::Event::Secure
- 다음에 정의됨:
- lib/mongo/protocol/msg.rb
개요
이 클래스는 비공개 API의 일부입니다. 이 클래스는 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
MongoDB 유선 프로토콜 메시지 메시지(OP_MSG)는 양방향 유선 프로토콜 옵코드입니다.
네임스페이스 아래에 정의됨
클래스: 섹션 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
직렬 변환기에 포함된 상수
Serializers::HEADER_PACK, Serializers::INT32_PACK, Serializers::INT64_PACK, Serializers::NULL, Serializers::ZERO
인스턴스 속성 요약
메시지에서 상속된 속성
인스턴스 메서드 요약 접기
-
#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?
메시지에서 상속된 메서드
#==, deserialize, deserialize_array, deserialize_field, deserialize_header, 필드, 필드들, #hash, #maybe_inflate, #set_request_id
ID에 포함된 메서드
생성자 세부 정보
#initialize(플래그, 옵션, main_document, *sequences) ⇒ 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 def 초기화(flags, , main_document, *시퀀스) 만약 flags flags.각 do |flag| 올리다 ArgumentError, "Unknown 플래그: #{플래그.검사}" 하지 않는 한 KNOWN_FLAGS.키?(flag) 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의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
이 메서드는 클라이언트 사이드 암호화 기능을 지원 하기 위해 작성되었습니다. 이 메서드는 다른 기능 이나 동작을 지원하는 데 사용하지 않는 것이 좋습니다.
이 메시지가 대량 쓰기를 나타내는지 여부입니다. 대량 쓰기는 동일한 유형의 여러 작업을 포함하는 삽입, 업데이트 또는 삭제 작업입니다.
264 265 266 267 268 269 270 271 272 273 274 |
# 파일 'lib/ Mongo/ 프로토콜/msg.rb', 줄 264 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의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
192 193 194 |
# 파일 'lib/ Mongo/ 프로토콜/msg.rb', 줄 192 def 문서 [ @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 def fix_after_deserialization 올리다 NotImplementedError, '역직렬화 후 @sections가 초기화되어야 합니다. ' 만약 @sections.nil? 만약 @sections.분량 != 1 올리다 NotImplementedError, "역직렬화는 정확히 하나의 섹션을 생성했을 것이지만 #{섹션.길이} 섹션을 생성했습니다" end @main_document = @sections.first @sequences = [] @sections = [ { 유형: 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 def may_add_server_api(server_api) 충돌 = {} %i[apiVersion apiStrict apiDeprecationErrors].각 do |키| 충돌[키] = @main_document[키] 만약 @main_document.키?(키) 충돌[키] = @main_document[키.to_s] 만약 @main_document.키?(키.to_s) 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의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
전송 중인 명령이 압축을 허용하는 경우 메시지를 압축합니다. 그렇지 않으면 자체를 반환합니다.
169 170 171 |
# 파일 'lib/ Mongo/ 프로토콜/msg.rb', 줄 169 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 로 암호화됨 해야 하는 데이터를 포함하는 경우 메시지를 해독할 수 있습니다.
243 244 245 246 247 248 249 250 251 |
# 파일 'lib/ Mongo/ 프로토콜/msg.rb', 줄 243 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 로 암호화 해야 하는 데이터를 포함하는 경우 암호화됨 할 수 있습니다.
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 def may_encrypt(연결, 컨텍스트) 만약 컨텍스트.암호화? 만약 연결.description.max_wire_version < 8 올리다 오류::CRYPTError.신규( '다음보다 오래된 MongoDB 서버 에 대해서는 암호화 수행할 수 없습니다. ' + '4.2 ( 미만의 와이어 버전). 현재 ' 서버 에 연결되어 있습니다.8 + "with max 와이어 버전 #{connection.description.max_wire_version}} " + '(자동 암호화에는 최소 4.2 MongoDB 버전이 필요합니다.)' ) end db_name = @main_document[DATABASE_IDENTIFIER] cmd = merge_sections enc_cmd = 컨텍스트.암호화(db_name, cmd) enc_cmd['$db'] = cmd['$db'] 만약 cmd.키?('$db') && !enc_cmd.키?('$db') 메시지.신규(@flags, @options, enc_cmd) other self end end |
#number_returned ⇒ 정수
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
서버 에서 반환된 문서 수를 반환합니다.
Msg 인스턴스 는 서버 회신용이어야 하며 회신은 활성 커서 (새로 생성된 커서 또는 getMore를 통해 반복이 계속되는 커서)를 반환해야 합니다.
300 301 302 303 304 305 306 |
# 파일 'lib/ Mongo/ 프로토콜/msg.rb', 줄 300 def number_returned 만약 (doc = 문서.first) && (cursor = doc['cursor']) && (배치 = cursor['firstBatch'] || cursor['NextBatch']) 반환 배치.분량 end 올리다 NotImplementedError, 'number_returned는 커서 에 대해서만 정의됩니다. ' end |
#payload ⇒ 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 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의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
메시지가 데이터베이스 로부터 응답을 기대하는지 여부입니다.
103 104 105 |
# 파일 'lib/ Mongo/ 프로토콜/msg.rb', 줄 103 def 회신 가능? @replyable ||= !flags.포함?(:more_to_com) end |
#직렬화(버퍼 = BSON::ByteBuffer.new, max_bson_size = nil, bson_overhead = nil) ⇒ BSON::ByteBuffer
이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.
메시지를 유선으로 전송할 수 있는 바이트로 직렬화합니다.
150 151 152 153 154 155 156 |
# 파일 'lib/ Mongo/ 프로토콜/msg.rb', 줄 150 def 직렬화(buffer = BSON::ByteBuffer.신규, max_bson_size = nil, bson_overhead = nil) validate_document_size!(max_bson_size) super add_check_sum(buffer) buffer end |