aboutsummaryrefslogtreecommitdiff
path: root/weed/s3api/s3api_bucket_handlers.go
diff options
context:
space:
mode:
Diffstat (limited to 'weed/s3api/s3api_bucket_handlers.go')
-rw-r--r--weed/s3api/s3api_bucket_handlers.go48
1 files changed, 28 insertions, 20 deletions
diff --git a/weed/s3api/s3api_bucket_handlers.go b/weed/s3api/s3api_bucket_handlers.go
index df9abd451..3e5089bed 100644
--- a/weed/s3api/s3api_bucket_handlers.go
+++ b/weed/s3api/s3api_bucket_handlers.go
@@ -2,14 +2,19 @@ package s3api
import (
"context"
+ "encoding/xml"
"fmt"
+ "math"
"net/http"
"os"
"time"
+ "github.com/aws/aws-sdk-go/aws"
+ "github.com/aws/aws-sdk-go/service/s3"
+ "github.com/gorilla/mux"
+
"github.com/chrislusf/seaweedfs/weed/glog"
"github.com/chrislusf/seaweedfs/weed/pb/filer_pb"
- "github.com/gorilla/mux"
)
var (
@@ -17,37 +22,39 @@ var (
OS_GID = uint32(os.Getgid())
)
+type ListAllMyBucketsResult struct {
+ XMLName xml.Name `xml:"http://s3.amazonaws.com/doc/2006-03-01/ ListAllMyBucketsResult"`
+ Owner *s3.Owner
+ Buckets []*s3.Bucket `xml:"Buckets>Bucket"`
+}
+
func (s3a *S3ApiServer) ListBucketsHandler(w http.ResponseWriter, r *http.Request) {
- var response ListAllMyBucketsResponse
+ var response ListAllMyBucketsResult
- entries, err := s3a.list(s3a.option.BucketsPath, "", "", false, 0)
+ entries, err := s3a.list(s3a.option.BucketsPath, "", "", false, math.MaxInt32)
if err != nil {
writeErrorResponse(w, ErrInternalError, r.URL)
return
}
- var buckets []ListAllMyBucketsEntry
+ var buckets []*s3.Bucket
for _, entry := range entries {
if entry.IsDirectory {
- buckets = append(buckets, ListAllMyBucketsEntry{
- Name: entry.Name,
- CreationDate: time.Unix(entry.Attributes.Crtime, 0),
+ buckets = append(buckets, &s3.Bucket{
+ Name: aws.String(entry.Name),
+ CreationDate: aws.Time(time.Unix(entry.Attributes.Crtime, 0)),
})
}
}
- response = ListAllMyBucketsResponse{
- ListAllMyBucketsResponse: ListAllMyBucketsResult{
- Owner: CanonicalUser{
- ID: "",
- DisplayName: "",
- },
- Buckets: ListAllMyBucketsList{
- Bucket: buckets,
- },
+ response = ListAllMyBucketsResult{
+ Owner: &s3.Owner{
+ ID: aws.String(""),
+ DisplayName: aws.String(""),
},
+ Buckets: buckets,
}
writeSuccessResponseXML(w, encodeResponse(response))
@@ -74,15 +81,13 @@ func (s3a *S3ApiServer) DeleteBucketHandler(w http.ResponseWriter, r *http.Reque
err := s3a.withFilerClient(func(client filer_pb.SeaweedFilerClient) error {
- ctx := context.Background()
-
// delete collection
deleteCollectionRequest := &filer_pb.DeleteCollectionRequest{
Collection: bucket,
}
glog.V(1).Infof("delete collection: %v", deleteCollectionRequest)
- if _, err := client.DeleteCollection(ctx, deleteCollectionRequest); err != nil {
+ if _, err := client.DeleteCollection(context.Background(), deleteCollectionRequest); err != nil {
return fmt.Errorf("delete collection %s: %v", bucket, err)
}
@@ -112,7 +117,10 @@ func (s3a *S3ApiServer) HeadBucketHandler(w http.ResponseWriter, r *http.Request
}
glog.V(1).Infof("lookup bucket: %v", request)
- if _, err := client.LookupDirectoryEntry(context.Background(), request); err != nil {
+ if _, err := filer_pb.LookupEntry(client, request); err != nil {
+ if err == filer_pb.ErrNotFound {
+ return filer_pb.ErrNotFound
+ }
return fmt.Errorf("lookup bucket %s/%s: %v", s3a.option.BucketsPath, bucket, err)
}