GH-26727: [C++][Flight] Use ipc::RecordBatchWriter with custom IpcPayloadWriter for TransportMessageWriter (DoExchange)#47410
Conversation
|
|
|
Current CI failures are unrelated and tracked here:
I can rebase once the ORC issue is fixed |
…IpcPayloadWriter for TransportMessageWriter (DoExchange)
| return arrow::Status::OK(); | ||
| } | ||
| Status Close() override { | ||
| // Closing is handled one layer up in TransportMessageWriter::Close |
There was a problem hiding this comment.
Unrelated to this PR, but I'm curious, shouldn't ServerDataStream::WritesDone be called here instead of at the end of ServerTransport::DoExchange? @lidavidm
There was a problem hiding this comment.
Well ideally, we would just expose gRPC and then the server could decide when it wants to end its output (it can continue reading even after doing so)
…started_ boolean flag
… using the same we used on the client
|
After merging your PR, Conbench analyzed the 4 benchmarking runs that have been run so far on merge-commit de52048. There weren't enough matching historic benchmark results to make a call on whether there were regressions. The full Conbench report has more details. |
Rationale for this change
The Flight Server DoExchange method currently does not support Dictionary replacement or Dictionary Deltas, similar to how the client currently behaves or how we do for DoGet we should use an
ipc::RecordBatchWriterwith a customIpcPayloadWriterinstead of reimplementing Dictionary Replacement / Deltas logic.What changes are included in this PR?
Removes manually generation of individual ipc Payloads and uses an
ipc::RecordBatchWriterand a customTransportMessagePayloadWriterto modify theIpcPayloadsintoFlightPayloads.Are these changes tested?
Yes, existing tests cover the DoExchange functionality and new test for Python has been added where Dictionary deltas are being send via DoExchange. The test was failing before this change because the dictionary wasn't updated:
Are there any user-facing changes?
No, only that the expected dictionary replacement/deltas will work for DoExchange.