(ctx context.Context, objName string, offset int64, buffer []byte)
| 664 | } |
| 665 | |
| 666 | func (rw *readerWriter) readRange(ctx context.Context, objName string, offset int64, buffer []byte) error { |
| 667 | options := getObjectOptions(rw) |
| 668 | err := options.SetRange(offset, offset+int64(len(buffer))) |
| 669 | if err != nil { |
| 670 | return fmt.Errorf("error setting headers for range read in s3: %w", err) |
| 671 | } |
| 672 | reader, _, _, err := rw.hedgedCore.GetObject(ctx, rw.cfg.Bucket, objName, options) |
| 673 | if err != nil { |
| 674 | return fmt.Errorf("error in range read from s3 backend, bucket: %s, objName: %s: %w", rw.cfg.Bucket, objName, err) |
| 675 | } |
| 676 | defer reader.Close() |
| 677 | |
| 678 | /* bytes read == len(buffer) if and only if err == nil */ |
| 679 | _, err = io.ReadFull(reader, buffer) |
| 680 | |
| 681 | if err == nil { |
| 682 | /* read EOF so connection can be reused */ |
| 683 | var dummy [1]byte |
| 684 | _, _ = reader.Read(dummy[:]) |
| 685 | return nil |
| 686 | } |
| 687 | |
| 688 | return err |
| 689 | } |
| 690 | |
| 691 | func fetchCreds(cfg *Config) (*credentials.Credentials, error) { |
| 692 | wrapCredentialsProvider := func(p credentials.Provider) credentials.Provider { |
no test coverage detected