Skip to content

Commit

Permalink
Merge 7a576bb into 40f4f7e
Browse files Browse the repository at this point in the history
  • Loading branch information
cam-a committed Aug 20, 2018
2 parents 40f4f7e + 7a576bb commit 7d28476
Show file tree
Hide file tree
Showing 4 changed files with 150 additions and 30 deletions.
47 changes: 31 additions & 16 deletions cmd/storj/cmd/cp.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,12 +48,18 @@ func copy(cmd *cobra.Command, args []string) (err error) {
return err
}

u, err := url.Parse(args[0])
u0, err := url.Parse(args[0])
if err != nil {
return err
}

if u.Scheme == "" {
u1, err := url.Parse(args[1])
if err != nil {
return err
}

// if uploading
if u0.Scheme == "" {
f, err := os.Open(args[0])

fi, err := f.Stat()
Expand All @@ -68,12 +74,7 @@ func copy(cmd *cobra.Command, args []string) (err error) {

defer f.Close()

u, err = url.Parse(args[1])
if err != nil {
return err
}

oi, err := so.PutObject(ctx, u.Host, u.Path, fr, nil)
oi, err := so.PutObject(ctx, u1.Host, u1.Path, fr, nil)
if err != nil {
return err
}
Expand All @@ -84,24 +85,38 @@ func copy(cmd *cobra.Command, args []string) (err error) {
return nil
}

oi, err := so.GetObjectInfo(ctx, u.Host, u.Path)
srcInfo, err := so.GetObjectInfo(ctx, u0.Host, u0.Path)
if err != nil {
return err
}

f, err := os.Create(args[1])
if err != nil {
return err
}
// if downloading
if u1.Scheme == "" {
f, err := os.Create(args[1])
if err != nil {
return err
}

defer f.Close()

defer f.Close()
err = so.GetObject(ctx, srcInfo.Bucket, srcInfo.Name, 0, srcInfo.Size, f, srcInfo.ETag)
if err != nil {
return err
}

fmt.Printf("Downloaded %s to %s", srcInfo.Bucket+srcInfo.Name, args[1])

return nil
}

err = so.GetObject(ctx, oi.Bucket, oi.Name, 0, oi.Size, f, oi.ETag)
// if copying from one remote location to another
objInfo, err := so.CopyObject(ctx, u0.Host, u0.Path, u1.Host, u1.Path, srcInfo)
if err != nil {
return err
}

fmt.Printf("Downloaded %s to %s", oi.Bucket+oi.Name, args[1])
fmt.Println(objInfo.Bucket)
fmt.Println(objInfo.Name)

return nil
}
57 changes: 57 additions & 0 deletions cmd/storj/cmd/mb.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
// Copyright (C) 2018 Storj Labs, Inc.
// See LICENSE for copying information.

package cmd

import (
"fmt"
"net/url"
"path/filepath"

"github.com/spf13/cobra"
"github.com/zeebo/errs"
"storj.io/storj/pkg/cfgstruct"
"storj.io/storj/pkg/process"
)

var (
mbCfg Config
mbCmd = &cobra.Command{
Use: "mb",
Short: "Create a bucket",
RunE: makeBucket,
}
)

func init() {
RootCmd.AddCommand(mbCmd)
cfgstruct.Bind(mbCmd.Flags(), &mbCfg, cfgstruct.ConfDir(defaultConfDir))
mbCmd.Flags().String("config", filepath.Join(defaultConfDir, "config.yaml"), "path to configuration")
}

func makeBucket(cmd *cobra.Command, args []string) error {
ctx := process.Ctx(cmd)

if len(args) == 0 {
return errs.New("No bucket specified for creation")
}

so, err := getStorjObjects(ctx, mbCfg)
if err != nil {
return err
}

u, err := url.Parse(args[0])
if err != nil {
return err
}

err = so.MakeBucketWithLocation(ctx, u.Host, "")
if err != nil {
return err
}

fmt.Printf("Created %s", u.Host)

return nil
}
2 changes: 1 addition & 1 deletion cmd/storj/cmd/rb.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ func deleteBucket(cmd *cobra.Command, args []string) error {
return errs.New("No bucket specified for deletion")
}

so, err := getStorjObjects(ctx, rmCfg)
so, err := getStorjObjects(ctx, rbCfg)
if err != nil {
return err
}
Expand Down
74 changes: 61 additions & 13 deletions pkg/miniogw/gateway-storj.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import (
monkit "gopkg.in/spacemonkeygo/monkit.v2"

"storj.io/storj/pkg/paths"
"storj.io/storj/pkg/ranger"
"storj.io/storj/pkg/storage/buckets"
"storj.io/storj/pkg/storage/meta"
"storj.io/storj/pkg/storage/objects"
Expand Down Expand Up @@ -101,24 +102,37 @@ func (s *storjObjects) GetBucketInfo(ctx context.Context, bucket string) (
return minio.BucketInfo{Name: bucket, Created: meta.Created}, nil
}

func (s *storjObjects) GetObject(ctx context.Context, bucket, object string,
startOffset int64, length int64, writer io.Writer, etag string) (err error) {
func (s *storjObjects) getObject(ctx context.Context, bucket, object string) (rr ranger.RangeCloser, err error) {
defer mon.Task()(&ctx)(&err)
o, err := s.storj.bs.GetObjectStore(ctx, bucket)
if err != nil {
return err
return nil, err
}
rr, _, err := o.Get(ctx, paths.New(object))

rr, _, err = o.Get(ctx, paths.New(object))

return rr, err
}

func (s *storjObjects) GetObject(ctx context.Context, bucket, object string,
startOffset int64, length int64, writer io.Writer, etag string) (err error) {
defer mon.Task()(&ctx)(&err)

rr, err := s.getObject(ctx, bucket, object)
if err != nil {
return err
}

defer utils.LogClose(rr)

r, err := rr.Range(ctx, startOffset, length)
if err != nil {
return err
}
defer utils.LogClose(r)

_, err = io.Copy(writer, r)

return err
}

Expand Down Expand Up @@ -238,24 +252,43 @@ func (s *storjObjects) MakeBucketWithLocation(ctx context.Context,
return err
}

func (s *storjObjects) PutObject(ctx context.Context, bucket, object string,
data *hash.Reader, metadata map[string]string) (objInfo minio.ObjectInfo,
err error) {
func (s *storjObjects) CopyObject(ctx context.Context, srcBucket, srcObject, destBucket,
destObject string, srcInfo minio.ObjectInfo) (objInfo minio.ObjectInfo, err error) {
defer mon.Task()(&ctx)(&err)
tempContType := metadata["content-type"]
delete(metadata, "content-type")
//metadata serialized

rr, err := s.getObject(ctx, srcBucket, srcObject)
if err != nil {
return objInfo, err
}

defer utils.LogClose(rr)

r, err := rr.Range(ctx, 0, srcInfo.Size)
if err != nil {
return objInfo, err
}

defer utils.LogClose(r)

serMetaInfo := objects.SerializableMeta{
ContentType: tempContType,
UserDefined: metadata,
ContentType: srcInfo.ContentType,
UserDefined: srcInfo.UserDefined,
}

return s.putObject(ctx, destBucket, destObject, r, serMetaInfo)
}

func (s *storjObjects) putObject(ctx context.Context, bucket, object string, r io.Reader,
meta objects.SerializableMeta) (objInfo minio.ObjectInfo, err error) {
defer mon.Task()(&ctx)(&err)

// setting zero value means the object never expires
expTime := time.Time{}
o, err := s.storj.bs.GetObjectStore(ctx, bucket)
if err != nil {
return minio.ObjectInfo{}, err
}
m, err := o.Put(ctx, paths.New(object), data, serMetaInfo, expTime)
m, err := o.Put(ctx, paths.New(object), r, meta, expTime)
return minio.ObjectInfo{
Name: object,
Bucket: bucket,
Expand All @@ -267,6 +300,21 @@ func (s *storjObjects) PutObject(ctx context.Context, bucket, object string,
}, err
}

func (s *storjObjects) PutObject(ctx context.Context, bucket, object string,
data *hash.Reader, metadata map[string]string) (objInfo minio.ObjectInfo,
err error) {
defer mon.Task()(&ctx)(&err)
tempContType := metadata["content-type"]
delete(metadata, "content-type")
//metadata serialized
serMetaInfo := objects.SerializableMeta{
ContentType: tempContType,
UserDefined: metadata,
}

return s.putObject(ctx, bucket, object, data, serMetaInfo)
}

func (s *storjObjects) Shutdown(ctx context.Context) (err error) {
defer mon.Task()(&ctx)(&err)
return nil
Expand Down

0 comments on commit 7d28476

Please sign in to comment.