Skip to content

Commit a7f0db6

Browse files
committed
Error handling for future
1 parent 852e11f commit a7f0db6

File tree

1 file changed

+29
-2
lines changed

1 file changed

+29
-2
lines changed

pinecone/core/grpc/index_grpc.py

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
from pinecone.core.client.model.namespace_summary import NamespaceSummary
2626
from pinecone import FetchResponse, QueryResponse, ScoredVector, SingleQueryResults, UpsertResponse, \
2727
DescribeIndexStatsResponse
28-
from grpc._channel import _InactiveRpcError
28+
from grpc._channel import _InactiveRpcError, _MultiThreadedRendezvous
2929
from pinecone.exceptions import PineconeProtocolError, PineconeException
3030

3131
__all__ = ["GRPCIndex", "GRPCVector", "GRPCQueryVector"]
@@ -207,6 +207,32 @@ def parse_stats_response(response: dict):
207207
return DescribeIndexStatsResponse(namespaces=namespace_summaries, dimension=dimension, _check_type=False)
208208

209209

210+
class PineconeGrpcFuture:
211+
def __init__(self, delegate):
212+
self._delegate = delegate
213+
214+
def cancel(self):
215+
return self._delegate.cancel()
216+
217+
def cancelled(self):
218+
return self._delegate.cancelled()
219+
220+
def running(self):
221+
return self._delegate.running()
222+
223+
def done(self):
224+
return self._delegate.done()
225+
226+
def add_done_callback(self, fun):
227+
return self._delegate.add_done_callback(fun)
228+
229+
def result(self, timeout=None):
230+
try:
231+
self._delegate.result(timeout=timeout)
232+
except _MultiThreadedRendezvous as e:
233+
raise PineconeException(e._state.debug_error_string) from e
234+
235+
210236
class GRPCIndex(GRPCIndexBase):
211237

212238
@property
@@ -226,7 +252,8 @@ def _vector_transform(item):
226252
request = UpsertRequest(vectors=list(map(_vector_transform, vectors)), **kwargs)
227253
timeout = kwargs.pop('timeout', None)
228254
if async_req:
229-
return self._wrap_grpc_call(self.stub.Upsert.future, request, timeout=timeout)
255+
future = self._wrap_grpc_call(self.stub.Upsert.future, request, timeout=timeout)
256+
return PineconeGrpcFuture(future)
230257
else:
231258
return self._wrap_grpc_call(self.stub.Upsert, request, timeout=timeout)
232259

0 commit comments

Comments
 (0)