aws / aws-xray-sdk-java

The official AWS X-Ray Recorder SDK for Java.
Apache License 2.0
95 stars 99 forks source link

Failed to send over 64KB for subsegment output #388

Open feizhangyong opened 1 year ago

feizhangyong commented 1 year ago

the current situation ① Create subsegment of insertKaisyuRenkeiToSeikyuIchiranyoDataWork *Metadata size: 53688

②Using UDP Emitter, If it exceeds 64KB, first send the child subsegment, then send the parent subsegment Finally send the segment ➡When sending ① above, debug and check sendData of UDPEmitter, data. length: 59590 The difference between them is about 6000. Why is there such a difference?

↑The above is the pattern normally sent

↓ The attached image is a transmission failure pattern ※The difference is about 6000 bytes

image

carolabadeer commented 1 year ago

Hi @feizhangyong, Can you please enable debug logging to see the value of the serialized subsegment mentioned above?

Some parts of the code snippets above are not visible, but I believe the first snippet of the generateMetadata method is only calculating the size of the metadata field of the subsegment. UDPEmitter sends the entire serialized subsegment data and also adds the PROTOCOL_HEADER and PROTOCOL_DELIMITER to the bytes being emitted.

feizhangyong commented 1 year ago

@carolabadeer

thank you answer I have confirmed the details of the subsegment, and show the image below

↓ bytes in subsegment: 45826 ① Metadata bytes: 40663 ② Miscellaneous items, name, ID, etc. total less than 600 bytes

⇒ The question at the moment is what is the difference of 5000 bytes?

image