func()

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
}