[ 
https://issues.apache.org/jira/browse/ARROW-16592?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17538239#comment-17538239
 ] 

David Li commented on ARROW-16592:
----------------------------------

Can you provide a reproduction? This still works:

{code:python}
import traceback
import pyarrow as pa
import pyarrow.flight as flight

class Server(flight.FlightServerBase):
    def do_put(self, context, descriptor, reader, writer):
        raise flight.FlightCancelledError("foo", extra_info=b"bar")


print("PyArrow version:", pa.__version__)
server = Server("grpc://localhost:0")
client = flight.connect(f"grpc://localhost:{server.port}")

schema = pa.schema([("a", pa.int64())])
writer, reader = client.do_put(flight.FlightDescriptor.for_command(b""), schema)
try:
    writer.write_batch(pa.record_batch([[1]], schema=schema))
    writer.close()
except flight.FlightError as e:
    traceback.print_exc()
    print(e.extra_info)
except Exception:
    traceback.print_exc()
{code}

{noformat}
PyArrow version: 8.0.0
Traceback (most recent call last):
  File "/home/lidavidm/Code/upstream/arrow-16592/test.py", line 18, in <module>
    writer.close()
  File "pyarrow/_flight.pyx", line 1031, in 
pyarrow._flight.MetadataRecordBatchWriter.close
  File "pyarrow/_flight.pyx", line 64, in pyarrow._flight.check_flight_status
pyarrow._flight.FlightCancelledError: foo. Detail: Cancelled. gRPC client debug 
context: {"created":"@1652798292.507666326","description":"Error received from 
peer 
ipv4:127.0.0.1:42099","file":"/home/conda/feedstock_root/build_artifacts/grpc-cpp_1651922392722/work/src/core/lib/surface/call.cc","file_line":1074,"grpc_message":"foo.
 Detail: Cancelled","grpc_status":1}. Client context: OK
b'bar'
{noformat}

> [FlightRPC][Python] Regression in DoPut error handling
> ------------------------------------------------------
>
>                 Key: ARROW-16592
>                 URL: https://issues.apache.org/jira/browse/ARROW-16592
>             Project: Apache Arrow
>          Issue Type: Bug
>            Reporter: Lubo Slivka
>            Assignee: David Li
>            Priority: Major
>
> In PyArrow 8.0.0, any error raised while handling DoPut on the server results 
> in FlightInternalError on the client.
> In PyArrow 7.0.0, errors raised while handling DoPut are propagated/converted 
> to non-internal errors.
> —
> Example: on 7.0.0, raising FlightCancelledError while handling DoPut on the 
> server would propagate that error including extra_info all the way to the 
> FlightClient. This is not the case anymore on 8.0.0.
> The FlightInternalError contains extra detail that is derived from the 
> cancelled error though:
> {code:java}
> /arrow/cpp/src/arrow/flight/client.cc:363: Close() failed: IOError: <error 
> message from FlightError is here>. Detail: Cancelled. gRPC client debug 
> context: {"created":"@1652777650.446052211","description":"Error received 
> from peer 
> ipv4:127.0.0.1:16001","file":"/opt/vcpkg/buildtrees/grpc/src/85a295989c-6cf7bf442d.clean/src/core/lib/surface/call.cc","file_line":903,"grpc_message":"<error
>  message from FlightError is here>. Detail: Cancelled","grpc_status":1}. 
> Client context: OK. Detail: Cancelled
>  {code}
> Note: skimming through the code, it seems this problem is not unique to 
> PyArrow.



--
This message was sent by Atlassian Jira
(v8.20.7#820007)

Reply via email to