fix: update write handle on every recv() (#1716) · googleapis/python-storage@5d9fafe · GitHub
Skip to content
This repository was archived by the owner on Mar 31, 2026. It is now read-only.

Commit 5d9fafe

Browse files
authored
fix: update write handle on every recv() (#1716)
fix: update `write_handle` on every `recv()` from write object stream.
1 parent 2bc15fa commit 5d9fafe

4 files changed

Lines changed: 116 additions & 7 deletions

File tree

google/cloud/storage/_experimental/asyncio/_utils.py

Lines changed: 6 additions & 0 deletions

google/cloud/storage/_experimental/asyncio/async_appendable_object_writer.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
from google_crc32c import Checksum
2828
from google.api_core import exceptions
2929

30-
from ._utils import raise_if_no_fast_crc32c
30+
from . import _utils
3131
from google.cloud import _storage_v2
3232
from google.cloud.storage._experimental.asyncio.async_grpc_client import (
3333
AsyncGrpcClient,
@@ -121,7 +121,7 @@ def __init__(
121121
servers. Default is `_DEFAULT_FLUSH_INTERVAL_BYTES`.
122122
Must be a multiple of `_MAX_CHUNK_SIZE_BYTES`.
123123
"""
124-
raise_if_no_fast_crc32c()
124+
_utils.raise_if_no_fast_crc32c()
125125
self.client = client
126126
self.bucket_name = bucket_name
127127
self.object_name = object_name
@@ -175,6 +175,7 @@ async def state_lookup(self) -> int:
175175
)
176176
)
177177
response = await self.write_obj_stream.recv()
178+
_utils.update_write_handle_if_exists(self, response)
178179
self.persisted_size = response.persisted_size
179180
return self.persisted_size
180181

@@ -253,6 +254,7 @@ async def append(self, data: bytes) -> None:
253254

254255
if is_last_chunk:
255256
response = await self.write_obj_stream.recv()
257+
_utils.update_write_handle_if_exists(self, response)
256258
self.persisted_size = response.persisted_size
257259
self.offset = self.persisted_size
258260
self.bytes_appended_since_last_flush = 0
@@ -295,6 +297,7 @@ async def flush(self) -> int:
295297
)
296298
)
297299
response = await self.write_obj_stream.recv()
300+
_utils.update_write_handle_if_exists(self, response)
298301
self.persisted_size = response.persisted_size
299302
self.offset = self.persisted_size
300303
return self.persisted_size
@@ -351,6 +354,7 @@ async def finalize(self) -> _storage_v2.Object:
351354
_storage_v2.BidiWriteObjectRequest(finish_write=True)
352355
)
353356
response = await self.write_obj_stream.recv()
357+
_utils.update_write_handle_if_exists(self, response)
354358
self.object_resource = response.resource
355359
self.persisted_size = self.object_resource.size
356360
await self.write_obj_stream.close()

google/cloud/storage/_experimental/asyncio/async_write_object_stream.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
2323
"""
2424
from typing import Optional
25+
from . import _utils
2526
from google.cloud import _storage_v2
2627
from google.cloud.storage._experimental.asyncio.async_grpc_client import AsyncGrpcClient
2728
from google.cloud.storage._experimental.asyncio.async_abstract_object_stream import (
@@ -190,7 +191,7 @@ async def requests_done(self):
190191
"""Signals that all requests have been sent."""
191192

192193
await self.socket_like_rpc.send(None)
193-
await self.socket_like_rpc.recv()
194+
_utils.update_write_handle_if_exists(self, await self.socket_like_rpc.recv())
194195

195196
async def send(
196197
self, bidi_write_object_request: _storage_v2.BidiWriteObjectRequest
@@ -218,7 +219,9 @@ async def recv(self) -> _storage_v2.BidiWriteObjectResponse:
218219
"""
219220
if not self._is_stream_open:
220221
raise ValueError("Stream is not open")
221-
return await self.socket_like_rpc.recv()
222+
response = await self.socket_like_rpc.recv()
223+
_utils.update_write_handle_if_exists(self, response)
224+
return response
222225

223226
@property
224227
def is_stream_open(self) -> bool:

tests/unit/asyncio/test_async_write_object_stream.py

Lines changed: 99 additions & 3 deletions

0 commit comments

Comments
 (0)