github.com/treeverse/lakefs@v1.24.1-0.20240520134607-95648127bfb0/pkg/graveler/committed/batch_write_closer.go (about)

     1  package committed
     2  
     3  //go:generate go run github.com/golang/mock/mockgen@v1.6.0 -source=batch_write_closer.go -destination=mock/batch_write_closer.go -package=mock
     4  
     5  // BatchWriterCloser collects Range writers and handles the asynchronous
     6  // flushing and closing of the writers.
     7  // Example usage:
     8  //
     9  //	func batch(manager RangeManager, bwc BatchWriterCloser) {
    10  //			w1, _ := manager.GetWriter()
    11  //			_ = w1.WriteRecord(graveler.ValueRecord{Key: "foo1", Value: &graveler.Value{Address: "bar1"}})
    12  //			_ = w1.WriteRecord(graveler.ValueRecord{Key: "foo2", Value: &graveler.Value{Address: "bar2"}})
    13  //			_ = bwc.CloseWriterAsync(w1)
    14  //
    15  //			w2, _ := manager.GetWriter()
    16  //			_ = w2.WriteRecord(graveler.ValueRecord{Key: "goo1", Value: &graveler.Value{Address: "baz1"}})
    17  //			_ = bwc.CloseWriterAsync(w2)
    18  //
    19  //			// blocks until all writers finished or any writer failed
    20  //			res, err := bwc.Wait()
    21  //			// handle err, results, etc..
    22  //		}
    23  type BatchWriterCloser interface {
    24  	// CloseWriterAsync adds MetaRangeWriter instance for the BatchWriterCloser to handle.
    25  	// Any writes executed to the writer after this call are not guaranteed to succeed.
    26  	// If Wait() has already been called, returns an error.
    27  	CloseWriterAsync(ResultCloser) error
    28  
    29  	// Wait returns when all Writers finished.
    30  	// Any failure to close a single MetaRangeWriter will return with a nil results slice and an error.
    31  	Wait() ([]WriteResult, error)
    32  }