grundprinzip commented on code in PR #39695: URL: https://github.com/apache/spark/pull/39695#discussion_r1084087901
########## python/pyspark/sql/connect/client.py: ########## @@ -551,37 +588,35 @@ def _execute_and_fetch( logger.info("ExecuteAndFetch") m: Optional[pb2.ExecutePlanResponse.Metrics] = None - batches: List[pa.RecordBatch] = [] try: - for b in self._stub.ExecutePlan(req, metadata=self._builder.metadata()): - if b.client_id != self._session_id: - raise SparkConnectException( - "Received incorrect session identifier for request." - ) - if b.metrics is not None: - logger.debug("Received metric batch.") - m = b.metrics - if b.HasField("arrow_batch"): - logger.debug( - f"Received arrow batch rows={b.arrow_batch.row_count} " - f"size={len(b.arrow_batch.data)}" - ) - - with pa.ipc.open_stream(b.arrow_batch.data) as reader: - for batch in reader: - assert isinstance(batch, pa.RecordBatch) - batches.append(batch) + for attempt in Retrying(SparkConnectClient.retry_exception, **self._retry_policy): + with attempt: Review Comment: I think I'm confused, as explained above, you need the context manager to capture the exception that is thrown, but the contextmanager cannot retry itself (throws a do not repeat this exception) this is why you need the generator. The alternative is to wrap all of the API stubs into much more ugly code and I personally find this rather idiomatic because the actual exception is still visible and not swallowed. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: reviews-unsubscr...@spark.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: reviews-unsubscr...@spark.apache.org For additional commands, e-mail: reviews-h...@spark.apache.org