Oops -- I belatedly thought to bump up the deserialization logic to read from 
the same buffer that I originally wrote to and this worked fine, and clearly 
the problem lies elsewhere in the transit. Sorry for the noise!

Best,

Jack
On Mar 5, 2025 at 12:06 PM -0500, Jack Wimberley <jwimber...@paradigm4.com>, 
wrote:
> One other bit of information: I occasionally get the error message "Tried 
> reading schema message, was null or length 0” instead, in the exact same 
> context.
> On Mar 4, 2025 at 4:34 PM -0500, Jack Wimberley <jwimber...@paradigm4.com>, 
> wrote:
> > Hello all,
> >
> > I am attempting to serialize and then deserialize individual RecordBatch 
> > objects, using the C++ library. However, I’m getting an “Invalid” result on 
> > the deserialization end.
> >
> > On the serialization end, with the help of some methods THROW_NOT_OK that 
> > throw on non-OK Status and Result (and returns latter case returns the 
> > inner Value), I’m serializing using
> >
> > // batch is a valid std::shared_ptr<RecordBatch>
> > auto bufferStream = THROW_NOT_OK(io::BufferOutputStream::Create(1024));
> > auto batchWriter = THROW_NOT_OK(ipc::MakeStreamWriter(bufferStream, 
> > batch->schema()));
> > auto writeStatus = THROW_NOT_OK(batchWriter->WriteRecordBatch(*batch));
> > THROW_NOT_OK(batchWriter->Close());
> > auto batchBuffer = THROW_NOT_OK(bufferStream->Finish());
> >
> > // pass this data along
> >
> > The size of the buffer thus created is 1800. On the other end of the 
> > channel, I try to deserialize an in-memory copy of this IPC data using
> >
> >
> > // bufferPtr is a uint8_t* const location in memory and bufferSize a number 
> > of bytes
> > auto arrowBuffer = std::make_shared<Buffer>(bufferPtr, bufferSize); // 
> > no-copy wrap
> > auto bufferReader = std::make_shared<io::BufferReader>(arrowBuffer);
> > auto batchReader = 
> > THROW_NOT_OK(ipc::RecordBatchStreamReader::Open(bufferReader));
> >
> >
> > But, the last step fails, with a non-OK result with message
> >
> > Invalid: Expected to read 165847040 metadata bytes, but only read 1796
> >
> >
> > The metadata bytes size is way off, given the serialized RecordBatch was 
> > 1800 bytes to begin with. The number of bytes read looks about right, 
> > modulo that difference of 4. I saw some similar questions in the archives 
> > and online but the issues in them tended to be that the Close() step was 
> > missing. Other suggestions are a mismatch in the reader/writer format; I am 
> > using ones that look to me to be appropriately paired IPC stream I/O 
> > objects. Does some sort of header need to be written to the stream before 
> > the RecordBatch? Or, I did not use the second overloaded WriteRecordBatch 
> > method that takes a metadata object as the second argument, and the message 
> > mentions metadata bytes; is that relevant?
> >
> > Best,
> >
> > Jack Wimberley

Reply via email to