@@ -293,6 +293,17 @@ AsyncConnectionImpl::ReadObjectRange(ReadObjectParams p) {
293293
294294future<StatusOr<std::unique_ptr<storage_experimental::AsyncWriterConnection>>>
295295AsyncConnectionImpl::StartAppendableObjectUpload (AppendableUploadParams p) {
296+ return AppendableObjectUploadImpl (std::move (p));
297+ }
298+
299+ future<StatusOr<std::unique_ptr<storage_experimental::AsyncWriterConnection>>>
300+ AsyncConnectionImpl::ResumeAppendableObjectUpload (AppendableUploadParams p) {
301+ return AppendableObjectUploadImpl (std::move (p), true );
302+ }
303+
304+ future<StatusOr<std::unique_ptr<storage_experimental::AsyncWriterConnection>>>
305+ AsyncConnectionImpl::AppendableObjectUploadImpl (AppendableUploadParams p,
306+ bool takeover) {
296307 auto current = internal::MakeImmutableOptions (std::move (p.options ));
297308 auto request = p.request ;
298309 std::int64_t persisted_size = 0 ;
@@ -313,10 +324,10 @@ AsyncConnectionImpl::StartAppendableObjectUpload(AppendableUploadParams p) {
313324
314325 auto factory = WriteResultFactory (
315326 [stub = stub_, cq = cq_, retry = std::move (retry),
316- backoff = std::move (backoff), current, function_name = __func__](
317- google::storage::v2::BidiWriteObjectRequest req) {
318- auto call = [stub, request = std::move (req)](
319- CompletionQueue& cq,
327+ backoff = std::move (backoff), current, function_name = __func__,
328+ takeover]( google::storage::v2::BidiWriteObjectRequest req) {
329+ auto call = [stub, request = std::move (req), takeover ](
330+ google::cloud:: CompletionQueue& cq,
320331 std::shared_ptr<grpc::ClientContext> context,
321332 google::cloud::internal::ImmutableOptions options,
322333 RequestPlaceholder const &) mutable
@@ -325,7 +336,13 @@ AsyncConnectionImpl::StartAppendableObjectUpload(AppendableUploadParams p) {
325336 options->get <storage::TransferStallTimeoutOption>(),
326337 options->get <storage::TransferStallMinimumRateOption>(),
327338 google::storage::v2::ServiceConstants::MAX_WRITE_CHUNK_BYTES);
328- ApplyRoutingHeaders (*context, request.write_object_spec ());
339+
340+ // Apply the routing header
341+ if (takeover)
342+ ApplyRoutingHeaders (*context, request.append_object_spec ());
343+ else
344+ ApplyRoutingHeaders (*context, request.write_object_spec ());
345+
329346 auto rpc = stub->AsyncBidiWriteObject (cq, std::move (context),
330347 std::move (options));
331348 rpc = std::make_unique<StreamingRpcTimeout>(cq, timeout, timeout,
0 commit comments