Our application workflow uses protobuf for cross-language IPC.
We have a C++ application publishing data over Linux shared memory to various clients on the same host.
Data is published to shared memory using the protobuf API of "SerializeAsString", and the client's side does "ParseFromString".
Some of the clients are written in Python, while others are written in C++.
Even though the data we get after parsing appears to be fine, in C++ the "ParseFromString" method always returns false.
In the beginning we used protobuf v3.15.5 on the Python clients, we got "RuntimeWarning: Unexpected end-group tag: Not all data was converted", from ParseFromString() call.
After upgrading server and client side protobuf to 21.12, we start getting Decode error exception. google.protobuf.message.DecodeError: Error parsing message
Again, the strange thing is that all the data looks fine despite the exceptions. Any suggestions?
Language: C++//Python
operating system :
Server - Docker image Ubuntu 20.04.5 run on aarch64.
Client - Docker image Ubuntu 20.04.5 run on x86.
Runtime / compiler are you using - Python 3.10, Gcc/G++ - 9.
What did you do? Steps to reproduce the behavior:
Part of my Proto:
message Frame
{
bytes depth = 1;
bytes rgb = 2;
uint64 SampleTime = 3;
uint64 SentTime = 4;
uint64 AlignTime = 5;
}
message CameraData
{
Frame frame = 1;
uint32 fps = 2;
}
Serialize with:
SerializeAsString()
data blob :
b'\rQ\xc3\x8e\xb6\x15\xd6\xae\xc7\xb8\x1d\x01m-\xb7%\xe6\xb2@?-\x12\xef\x11?5\xec\xf00>=\xdb\x85\x8f>E;\xd3j\xb9M\xa49\xa4\xbbUj\xa1\x0e\xba]\xfcL1\xbaeI\x03\x04\xbbmD\x98\xf7\xbau\xa3\x10\xc2\xbb}*\xb8\x07\xbe\x85\x01\x0f\xbfk\xbc\x8d\x01\x8f\xcc\xe7>\x95\x01\x92I0\xbf\x9d\x01\xee\xa2\xef\xbf\xa0\x01\x02\xad\x01\xff\xff\x7f\x7f\xb5\x01\xff\xff\x7f\x7f\xc0\x01\xd5\xc4\x9b\xaf\x91\xf4\xfc\x02\xc8\x01\xdb\xf2\x9b\xaf\x91\xf4\xfc\x02\xd2\x01\x02\x08\x01'
Parse with :
ParseFromString()
error:
google.protobuf.message.DecodeError: Error parsing message
Thanks a lot for your Help !
I am working with Itzik, you are right, the schema is not the same as the serialized data. this is the correct schema: