Skip to content

Commit 6814321

Browse files
fix(storage): enable fast resume for rapid object write streams by including write handle (#15762)
1 parent 5b52b68 commit 6814321

File tree

2 files changed

+9
-0
lines changed

2 files changed

+9
-0
lines changed

google/cloud/storage/internal/async/writer_connection_resumed.cc

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -334,6 +334,12 @@ class AsyncWriterConnectionResumedState
334334
append_object_spec.set_bucket(spec.bucket());
335335
append_object_spec.set_object(spec.object());
336336
}
337+
// Include write_handle to enable fast resume instead of slow
338+
// takeover. Without handle, server performs full state validation.
339+
if (first_response_.has_write_handle()) {
340+
*append_object_spec.mutable_write_handle() =
341+
first_response_.write_handle();
342+
}
337343
append_object_spec.set_generation(first_response_.resource().generation());
338344
ApplyWriteRedirectErrors(append_object_spec, std::move(proto_status));
339345

google/cloud/storage/internal/async/writer_connection_resumed_test.cc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,7 @@ TEST(WriteConnectionResumed, ResumeUsesWriteObjectSpecFromInitialRequest) {
268268
"test-object");
269269

270270
google::storage::v2::BidiWriteObjectResponse first_response;
271+
first_response.mutable_write_handle();
271272
first_response.mutable_resource()->set_generation(12345);
272273

273274
EXPECT_CALL(*mock, PersistedState)
@@ -318,6 +319,7 @@ TEST(WriteConnectionResumed, ResumeUsesWriteObjectSpecFromInitialRequest) {
318319

319320
EXPECT_FALSE(captured_request.has_write_object_spec());
320321
EXPECT_TRUE(captured_request.has_append_object_spec());
322+
EXPECT_TRUE(captured_request.append_object_spec().has_write_handle());
321323
EXPECT_EQ(captured_request.append_object_spec().generation(), 12345);
322324
EXPECT_EQ(captured_request.append_object_spec().object(), "test-object");
323325
EXPECT_EQ(captured_request.append_object_spec().bucket(),
@@ -383,6 +385,7 @@ TEST(WriteConnectionResumed, ResumeUsesAppendObjectSpecFromInitialRequest) {
383385

384386
EXPECT_FALSE(captured_request.has_write_object_spec());
385387
EXPECT_TRUE(captured_request.has_append_object_spec());
388+
EXPECT_FALSE(captured_request.append_object_spec().has_write_handle());
386389
EXPECT_EQ(captured_request.append_object_spec().generation(), 12345);
387390
EXPECT_EQ(captured_request.append_object_spec().object(), "test-object");
388391
EXPECT_EQ(captured_request.append_object_spec().bucket(),

0 commit comments

Comments
 (0)