gRPC: 1.59.1
Protocol Buffers: 3.21.12
I have a .proto file with proto2 syntax. One of the messages is defined
like this:
message Log
{
repeated Event events = 1; // can be very heavy
...
optional string database = 7;
optional bytes bundle = 8;
...
}
I need to calculate the size of the message at runtime to send data when a
specific size threshold is reached. The function Log::ByteSizeLong() isn't
suitable for my needs because, when there are many added events, it
negatively impacts the performance of the critical sections.
I calculated the size according to the documentation and generated the
`pb.cc` file.
size_t getTagSize(uint32_t fieldNumber)
{
using namespace google::protobuf::internal;
return WireFormatLite::TagSize(fieldNumber,
WireFormatLite::FieldType::MAX_FIELD_TYPE);
}
size_t getProtobufMessageSize(google::protobuf::MessageLite* message,
uint32_t fieldNumber)
{
return getTagSize(fieldNumber) +
google::protobuf::internal::WireFormatLite::MessageSize(*message);
}
It functions perfectly on Windows. However, for POSIX systems (macOS and
Linux), there is a slight discrepancy between the calculated size and the
actual size of the serialized message. My calculations show that it is 2
bytes smaller for both the database and the bundle. When I comment out the
code that sets those fields, the size is accurate.
What causes the difference in serialized sizes between Windows and POSIX?
Could the methods I use to calculate the sizes also differ?
--
You received this message because you are subscribed to the Google Groups
"grpc.io" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion visit
https://groups.google.com/d/msgid/grpc-io/3ec404e7-488f-4af3-ae7f-5e63c9734933n%40googlegroups.com.