Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support HTTP, HTTPS schemes as well as whatever Go CDK supports for blob storage #1280

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion go/cli/mcap/cmd/attachment.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ var getAttachmentCmd = &cobra.Command{
}
}

err = utils.WithReader(ctx, filename, func(_ bool, rs io.ReadSeeker) error {
err = utils.WithReader(ctx, filename, func(_ utils.LocalOrRemote, rs io.ReadSeeker) error {
reader, err := mcap.NewReader(rs)
if err != nil {
return fmt.Errorf("failed to construct reader: %w", err)
Expand Down
2 changes: 1 addition & 1 deletion go/cli/mcap/cmd/attachments.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ var attachmentsCmd = &cobra.Command{
die("Unexpected number of args")
}
filename := args[0]
err := utils.WithReader(ctx, filename, func(_ bool, rs io.ReadSeeker) error {
err := utils.WithReader(ctx, filename, func(_ utils.LocalOrRemote, rs io.ReadSeeker) error {
reader, err := mcap.NewReader(rs)
if err != nil {
return fmt.Errorf("failed to get reader: %w", err)
Expand Down
2 changes: 1 addition & 1 deletion go/cli/mcap/cmd/cat.go
Original file line number Diff line number Diff line change
Expand Up @@ -347,7 +347,7 @@ var catCmd = &cobra.Command{
die("supply a file")
}
filename := args[0]
err = utils.WithReader(ctx, filename, func(_ bool, rs io.ReadSeeker) error {
err = utils.WithReader(ctx, filename, func(_ utils.LocalOrRemote, rs io.ReadSeeker) error {
reader, err := mcap.NewReader(rs)
if err != nil {
return fmt.Errorf("failed to create reader: %w", err)
Expand Down
2 changes: 1 addition & 1 deletion go/cli/mcap/cmd/channels.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ var channelsCmd = &cobra.Command{
die("Unexpected number of args")
}
filename := args[0]
err := utils.WithReader(ctx, filename, func(_ bool, rs io.ReadSeeker) error {
err := utils.WithReader(ctx, filename, func(_ utils.LocalOrRemote, rs io.ReadSeeker) error {
reader, err := mcap.NewReader(rs)
if err != nil {
return fmt.Errorf("failed to get reader: %w", err)
Expand Down
2 changes: 1 addition & 1 deletion go/cli/mcap/cmd/chunks.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ var chunksCmd = &cobra.Command{
die("Unexpected number of args")
}
filename := args[0]
err := utils.WithReader(ctx, filename, func(_ bool, rs io.ReadSeeker) error {
err := utils.WithReader(ctx, filename, func(_ utils.LocalOrRemote, rs io.ReadSeeker) error {
reader, err := mcap.NewReader(rs)
if err != nil {
return fmt.Errorf("failed to get reader: %w", err)
Expand Down
4 changes: 2 additions & 2 deletions go/cli/mcap/cmd/doctor.go
Original file line number Diff line number Diff line change
Expand Up @@ -646,9 +646,9 @@ func main(_ *cobra.Command, args []string) {
os.Exit(1)
}
filename := args[0]
err := utils.WithReader(ctx, filename, func(remote bool, rs io.ReadSeeker) error {
err := utils.WithReader(ctx, filename, func(localOrRemote utils.LocalOrRemote, rs io.ReadSeeker) error {
doctor := newMcapDoctor(rs)
if remote {
if localOrRemote == utils.Remote {
doctor.warn("Will read full remote file")
}
if verbose {
Expand Down
2 changes: 1 addition & 1 deletion go/cli/mcap/cmd/du.go
Original file line number Diff line number Diff line change
Expand Up @@ -286,7 +286,7 @@ Note: This command will scan and uncompress the entire file.`,
die("Unexpected number of args")
}
filename := args[0]
err := utils.WithReader(ctx, filename, func(_ bool, rs io.ReadSeeker) error {
err := utils.WithReader(ctx, filename, func(_ utils.LocalOrRemote, rs io.ReadSeeker) error {
usage := newUsage(rs)
return usage.RunDu()
})
Expand Down
4 changes: 2 additions & 2 deletions go/cli/mcap/cmd/filter.go
Original file line number Diff line number Diff line change
Expand Up @@ -140,12 +140,12 @@ func run(filterOptions *filterOpts, args []string) {
die("please supply a file. see --help for usage details.")
}
} else {
closeFile, newReader, err := utils.GetReader(context.Background(), args[0])
newReader, _, err := utils.GetReader(context.Background(), args[0])
if err != nil {
die("failed to open source for reading: %s", err)
}
defer func() {
if closeErr := closeFile(); closeErr != nil {
if closeErr := newReader.Close(); closeErr != nil {
die("error closing read source: %s", closeErr)
}
}()
Expand Down
2 changes: 1 addition & 1 deletion go/cli/mcap/cmd/info.go
Original file line number Diff line number Diff line change
Expand Up @@ -216,7 +216,7 @@ var infoCmd = &cobra.Command{
}
// check if it's a remote file
filename := args[0]
err := utils.WithReader(ctx, filename, func(_ bool, rs io.ReadSeeker) error {
err := utils.WithReader(ctx, filename, func(_ utils.LocalOrRemote, rs io.ReadSeeker) error {
reader, err := mcap.NewReader(rs)
if err != nil {
return fmt.Errorf("failed to get reader: %w", err)
Expand Down
4 changes: 2 additions & 2 deletions go/cli/mcap/cmd/metadata.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ var listMetadataCmd = &cobra.Command{
die("Unexpected number of args")
}
filename := args[0]
err := utils.WithReader(ctx, filename, func(_ bool, rs io.ReadSeeker) error {
err := utils.WithReader(ctx, filename, func(_ utils.LocalOrRemote, rs io.ReadSeeker) error {
reader, err := mcap.NewReader(rs)
if err != nil {
return fmt.Errorf("failed to build mcap reader: %w", err)
Expand Down Expand Up @@ -141,7 +141,7 @@ var getMetadataCmd = &cobra.Command{
die("Unexpected number of args")
}
filename := args[0]
err := utils.WithReader(ctx, filename, func(_ bool, rs io.ReadSeeker) error {
err := utils.WithReader(ctx, filename, func(_ utils.LocalOrRemote, rs io.ReadSeeker) error {
reader, err := mcap.NewReader(rs)
if err != nil {
return fmt.Errorf("failed to build reader: %w", err)
Expand Down
2 changes: 1 addition & 1 deletion go/cli/mcap/cmd/schemas.go
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ var schemasCmd = &cobra.Command{
die("Unexpected number of args")
}
filename := args[0]
err := utils.WithReader(ctx, filename, func(_ bool, rs io.ReadSeeker) error {
err := utils.WithReader(ctx, filename, func(_ utils.LocalOrRemote, rs io.ReadSeeker) error {
reader, err := mcap.NewReader(rs)
if err != nil {
return fmt.Errorf("failed to get reader: %w", err)
Expand Down
2 changes: 1 addition & 1 deletion go/cli/mcap/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ module github.com/foxglove/mcap/go/cli/mcap
go 1.20

require (
cloud.google.com/go/storage v1.23.0
gocloud.dev v0.40.0
github.com/fatih/color v1.13.0
github.com/foxglove/go-rosbag v0.0.6
github.com/foxglove/mcap/go/mcap v0.4.0
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,24 +5,25 @@ import (
"fmt"
"io"

"cloud.google.com/go/storage"
"gocloud.dev/blob"
)

type GCSReadSeekCloser struct {
type GoCloudReadSeekCloser struct {
size int64
object *storage.ObjectHandle
key string
ctx context.Context
offset int64
r io.ReadCloser
bucket *blob.Bucket
}

func (r *GCSReadSeekCloser) Read(p []byte) (int, error) {
func (r *GoCloudReadSeekCloser) Read(p []byte) (int, error) {
n, err := r.r.Read(p)
r.offset += int64(n)
return n, err
}

func (r *GCSReadSeekCloser) Seek(offset int64, whence int) (int64, error) {
func (r *GoCloudReadSeekCloser) Seek(offset int64, whence int) (int64, error) {
var seekTo int64
switch whence {
case io.SeekCurrent:
Expand All @@ -41,7 +42,7 @@ func (r *GCSReadSeekCloser) Seek(offset int64, whence int) (int64, error) {
if err != nil {
return 0, err
}
reader, err := r.object.NewRangeReader(r.ctx, seekTo, -1)
reader, err := r.bucket.NewRangeReader(r.ctx, r.key, seekTo, -1, nil)
if err != nil {
return 0, err
}
Expand All @@ -51,19 +52,21 @@ func (r *GCSReadSeekCloser) Seek(offset int64, whence int) (int64, error) {
return seekTo, nil
}

func (r *GCSReadSeekCloser) Close() error {
func (r *GoCloudReadSeekCloser) Close() error {
return r.r.Close()
}

func NewGCSReadSeekCloser(ctx context.Context, object *storage.ObjectHandle) (*GCSReadSeekCloser, error) {
r, err := object.NewReader(ctx)
func NewGoCloudReadSeekCloser(ctx context.Context, bucket *blob.Bucket, key string) (*GoCloudReadSeekCloser, error) {
r, err := bucket.NewReader(ctx, key, nil)
if err != nil {
return nil, err
}
return &GCSReadSeekCloser{
size: r.Attrs.Size,
object: object,

return &GoCloudReadSeekCloser{
size: r.Size(),
key: key,
r: r,
ctx: ctx,
bucket: bucket,
}, nil
}
Loading
Loading