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 }