fix(storage): fix unfinalized write size (#12016) · googleapis/google-cloud-go@6217f8f
@@ -46,7 +46,7 @@ type gRPCAppendBidiWriteBufferSender struct {
4646progress func(int64)
4747flushOffset int64
4848takeoverOffset int64
49-takeoverObj *storagepb.Object // Object returned by takeover stream reopening.
49+objResource *storagepb.Object // Captures received obj to set w.Attrs.
50505151// Fields used to report responses from the receive side of the stream
5252// recvs is closed when the current recv goroutine is complete. recvErr is set
@@ -96,14 +96,14 @@ func (w *gRPCWriter) newGRPCAppendTakeoverWriteBufferSender(ctx context.Context)
9696if err := s.connect(ctx); err != nil {
9797return nil, fmt.Errorf("storage: opening appendable write stream: %w", err)
9898 }
99-_, err := s.sendOnConnectedStream(nil, 0, true, false, true)
99+_, err := s.sendOnConnectedStream(nil, 0, false, false, true)
100100if err != nil {
101101return nil, err
102102 }
103103firstResp := <-s.recvs
104104// Object resource is returned in the first response on takeover, so capture
105105// this now.
106-s.takeoverObj = firstResp.GetResource()
106+s.objResource = firstResp.GetResource()
107107s.takeoverOffset = firstResp.GetResource().GetSize()
108108return s, nil
109109}
@@ -298,8 +298,8 @@ func (s *gRPCAppendBidiWriteBufferSender) sendOnConnectedStream(buf []byte, offs
298298// When closing the stream, update the object resource to reflect
299299// the persisted size. We get a new object from the stream if
300300// the object was finalized, but not if it's unfinalized.
301-if s.takeoverObj != nil && resp.GetPersistedSize() > 0 {
302-s.takeoverObj.Size = resp.GetPersistedSize()
301+if s.objResource != nil && resp.GetPersistedSize() > 0 {
302+s.objResource.Size = resp.GetPersistedSize()
303303 }
304304 }
305305if s.recvErr != io.EOF {
@@ -358,6 +358,9 @@ func (s *gRPCAppendBidiWriteBufferSender) sendBuffer(ctx context.Context, buf []
358358 }
359359360360obj, err = s.sendOnConnectedStream(buf, offset, flush, finishWrite, sendFirstMessage)
361+if obj != nil {
362+s.objResource = obj
363+ }
361364if err == nil {
362365return
363366 }