LCOV - code coverage report
Current view: top level - pebble/objstorage/objstorageprovider - shared_writable.go (source / functions) Hit Total Coverage
Test: 2024-07-16 08:16Z b6c49f44 - tests + meta.lcov Lines: 22 28 78.6 %
Date: 2024-07-16 08:17:55 Functions: 0 0 -

          Line data    Source code
       1             : // Copyright 2023 The LevelDB-Go and Pebble Authors. All rights reserved. Use
       2             : // of this source code is governed by a BSD-style license that can be found in
       3             : // the LICENSE file.
       4             : 
       5             : package objstorageprovider
       6             : 
       7             : import (
       8             :         "io"
       9             : 
      10             :         "github.com/cockroachdb/pebble/objstorage"
      11             : )
      12             : 
      13             : // NewRemoteWritable creates an objstorage.Writable out of an io.WriteCloser.
      14           2 : func NewRemoteWritable(obj io.WriteCloser) objstorage.Writable {
      15           2 :         return &sharedWritable{storageWriter: obj}
      16           2 : }
      17             : 
      18             : // sharedWritable is a very simple implementation of Writable on top of the
      19             : // WriteCloser returned by remote.Storage.CreateObject.
      20             : type sharedWritable struct {
      21             :         // Either both p and meta must be unset / zero values, or both must be set.
      22             :         // The case where both are unset is true only in tests.
      23             :         p             *provider
      24             :         meta          objstorage.ObjectMetadata
      25             :         storageWriter io.WriteCloser
      26             : }
      27             : 
      28             : var _ objstorage.Writable = (*sharedWritable)(nil)
      29             : 
      30             : // Write is part of the Writable interface.
      31           2 : func (w *sharedWritable) Write(p []byte) error {
      32           2 :         _, err := w.storageWriter.Write(p)
      33           2 :         return err
      34           2 : }
      35             : 
      36             : // Finish is part of the Writable interface.
      37           2 : func (w *sharedWritable) Finish() error {
      38           2 :         err := w.storageWriter.Close()
      39           2 :         w.storageWriter = nil
      40           2 :         if err != nil {
      41           0 :                 w.Abort()
      42           0 :                 return err
      43           0 :         }
      44             : 
      45             :         // Create the marker object.
      46           2 :         if w.p != nil {
      47           2 :                 if err := w.p.sharedCreateRef(w.meta); err != nil {
      48           0 :                         w.Abort()
      49           0 :                         return err
      50           0 :                 }
      51             :         }
      52           2 :         return nil
      53             : }
      54             : 
      55             : // Abort is part of the Writable interface.
      56           1 : func (w *sharedWritable) Abort() {
      57           1 :         if w.storageWriter != nil {
      58           1 :                 _ = w.storageWriter.Close()
      59           1 :                 w.storageWriter = nil
      60           1 :         }
      61           1 :         if w.p != nil {
      62           1 :                 w.p.removeMetadata(w.meta.DiskFileNum)
      63           1 :         }
      64             :         // TODO(radu): delete the object if it was created.
      65             : }

Generated by: LCOV version 1.14