| Index: client/isolate_storage.py
 | 
| diff --git a/client/isolate_storage.py b/client/isolate_storage.py
 | 
| index d366c551d548bc40bc96e5c075031e2208cd498f..63234b0a1295d85e9e700aa057373ff5516f05be 100644
 | 
| --- a/client/isolate_storage.py
 | 
| +++ b/client/isolate_storage.py
 | 
| @@ -542,17 +542,21 @@ class IsolateServerGrpc(StorageApi):
 | 
|      # array (like [0x01, 0x2a, 0xbc]).
 | 
|      req_digest.digest = binascii.unhexlify(digest)
 | 
|      expected_offset = 0
 | 
| -    for response in self._stub.FetchBlobs(request,
 | 
| -                                          timeout=DOWNLOAD_READ_TIMEOUT):
 | 
| -      if not response.status.succeeded:
 | 
| -        raise IOError(
 | 
| -            'Error while fetching %s: %s' % (digest, response.status))
 | 
| -      if not expected_offset == response.data.offset:
 | 
| -        raise IOError(
 | 
| -            'Error while fetching %s: expected offset %d, got %d' % (
 | 
| -                digest, expected_offset, response.data.offset))
 | 
| -      expected_offset += len(response.data.data)
 | 
| -      yield response.data.data
 | 
| +    try:
 | 
| +      for response in self._stub.FetchBlobs(request,
 | 
| +                                            timeout=DOWNLOAD_READ_TIMEOUT):
 | 
| +        if not response.status.succeeded:
 | 
| +          raise IOError(
 | 
| +              'Error while fetching %s: %s' % (digest, response.status))
 | 
| +        if not expected_offset == response.data.offset:
 | 
| +          raise IOError(
 | 
| +              'Error while fetching %s: expected offset %d, got %d' % (
 | 
| +                  digest, expected_offset, response.data.offset))
 | 
| +        expected_offset += len(response.data.data)
 | 
| +        yield response.data.data
 | 
| +    except grpc.RpcError as g:
 | 
| +      logging.error('gRPC error during fetch: re-throwing as IOError (%s)' % g)
 | 
| +      raise IOError(g)
 | 
|  
 | 
|    def push(self, item, push_state, content=None):
 | 
|      assert isinstance(item, Item)
 | 
| @@ -594,7 +598,12 @@ class IsolateServerGrpc(StorageApi):
 | 
|              chunk = chunk[slice_len:]
 | 
|  
 | 
|        # TODO(aludwin): batch up several requests to reuse TCP connections
 | 
| -      response = self._stub.PushBlobs(slicer())
 | 
| +      try:
 | 
| +        response = self._stub.PushBlobs(slicer())
 | 
| +      except grpc.RpcError as g:
 | 
| +        logging.error('gRPC error during push: re-throwing as IOError (%s)' % g)
 | 
| +        raise IOError(g)
 | 
| +
 | 
|        if not response.status.succeeded:
 | 
|          raise IOError(
 | 
|              'Error while uploading %s: %s' % (
 | 
| @@ -614,7 +623,12 @@ class IsolateServerGrpc(StorageApi):
 | 
|        cd = request.digest.add()
 | 
|        cd.digest = binascii.unhexlify(item.digest)
 | 
|        items_by_digest[cd.digest] = item
 | 
| -    response = self._stub.Contains(request)
 | 
| +    try:
 | 
| +      response = self._stub.Contains(request)
 | 
| +    except grpc.RpcError as g:
 | 
| +      logging.error('gRPC error during contains: re-throwing as IOError (%s)'
 | 
| +                    % g)
 | 
| +      raise IOError(g)
 | 
|  
 | 
|      # If everything's present, return the empty set.
 | 
|      if response.status.succeeded:
 | 
| 
 |