in cli_tools/common/utils/storage/buffered_writer.go [173:217]
func (b *BufferedWriter) Close() error {
if err := b.flush(); err != nil {
return err
}
close(b.upload)
b.Wait()
client, err := b.client(b.ctx, b.oauth)
if err != nil {
return err
}
defer client.Close()
// Compose the object.
for i := 0; ; i++ {
var objs []domain.StorageObject
// Max 32 components in a single compose.
l := math.Min(float64(32), float64(len(b.tmpObjs)))
for _, obj := range b.tmpObjs[:int(l)] {
objs = append(objs, client.GetObject(b.bkt, obj))
}
if len(objs) == 1 {
if _, err := client.GetObject(b.bkt, b.obj).CopyFrom(objs[0]); err != nil {
return err
}
err = objs[0].Delete()
if err != nil {
return err
}
break
}
newObj := client.GetObject(b.bkt, path.Join(b.obj, b.id+"_compose_"+strconv.Itoa(i)))
b.tmpObjs = append([]string{newObj.ObjectName()}, b.tmpObjs[int(l):]...)
if _, err := newObj.Compose(objs...); err != nil {
return err
}
for _, o := range objs {
err = o.Delete()
if err != nil {
return err
}
}
}
return nil
}