From 67888cbaa961a949769ec5d6673279b941546b89 Mon Sep 17 00:00:00 2001 From: Harshavardhana Date: Thu, 12 Mar 2015 00:36:33 -0700 Subject: [PATCH] Restructure and use human readable names --- pkg/api/minioapi/api_test.go | 14 ++++---- pkg/api/minioapi/object_handlers.go | 6 ++-- pkg/api/minioapi/policy_handlers.go | 2 +- pkg/api/minioapi/{muxer.go => router.go} | 0 pkg/storage/fs/fs_object.go | 12 +++---- pkg/storage/fs/fs_policy.go | 4 +-- pkg/storage/inmemory/inmemory.go | 18 +++++----- pkg/storage/singledisk/singledisk.go | 19 +++++++---- pkg/storage/storage.go | 8 ++--- pkg/storage/storage_api_suite.go | 42 ++++++++++++------------ 10 files changed, 65 insertions(+), 60 deletions(-) rename pkg/api/minioapi/{muxer.go => router.go} (100%) diff --git a/pkg/api/minioapi/api_test.go b/pkg/api/minioapi/api_test.go index 808e524a0..dd6cd0d1b 100644 --- a/pkg/api/minioapi/api_test.go +++ b/pkg/api/minioapi/api_test.go @@ -61,7 +61,7 @@ func (s *MySuite) TestEmptyObject(c *C) { buffer := bytes.NewBufferString("") storage.CreateBucket("bucket") - storage.StoreObject("bucket", "object", "", buffer) + storage.CreateObject("bucket", "object", "", buffer) response, err := http.Get(testServer.URL + "/bucket/object") c.Assert(err, IsNil) @@ -86,7 +86,7 @@ func (s *MySuite) TestObject(c *C) { buffer := bytes.NewBufferString("hello world") storage.CreateBucket("bucket") - storage.StoreObject("bucket", "object", "", buffer) + storage.CreateObject("bucket", "object", "", buffer) response, err := http.Get(testServer.URL + "/bucket/object") c.Assert(err, IsNil) @@ -112,9 +112,9 @@ func (s *MySuite) TestMultipleObjects(c *C) { buffer3 := bytes.NewBufferString("hello three") storage.CreateBucket("bucket") - storage.StoreObject("bucket", "object1", "", buffer1) - storage.StoreObject("bucket", "object2", "", buffer2) - storage.StoreObject("bucket", "object3", "", buffer3) + storage.CreateObject("bucket", "object1", "", buffer1) + storage.CreateObject("bucket", "object2", "", buffer2) + storage.CreateObject("bucket", "object3", "", buffer3) // test non-existant object response, err := http.Get(testServer.URL + "/bucket/object") @@ -204,7 +204,7 @@ func (s *MySuite) TestHeader(c *C) { buffer := bytes.NewBufferString("hello world") storage.CreateBucket("bucket") - storage.StoreObject("bucket", "object", "", buffer) + storage.CreateObject("bucket", "object", "", buffer) response, err = http.Get(testServer.URL + "/bucket/object") c.Assert(err, IsNil) @@ -285,7 +285,7 @@ func (s *MySuite) TestPutObject(c *C) { var writer bytes.Buffer - storage.CopyObjectToWriter(&writer, "bucket", "two") + storage.GetObject(&writer, "bucket", "two") c.Assert(bytes.Equal(writer.Bytes(), []byte("hello world")), Equals, true) diff --git a/pkg/api/minioapi/object_handlers.go b/pkg/api/minioapi/object_handlers.go index 5038b2f7a..7b678fe38 100644 --- a/pkg/api/minioapi/object_handlers.go +++ b/pkg/api/minioapi/object_handlers.go @@ -52,7 +52,7 @@ func (server *minioAPI) getObjectHandler(w http.ResponseWriter, req *http.Reques switch httpRange.start == 0 && httpRange.length == 0 { case true: writeObjectHeaders(w, metadata) - if _, err := server.storage.CopyObjectToWriter(w, bucket, object); err != nil { + if _, err := server.storage.GetObject(w, bucket, object); err != nil { log.Println(err) error := errorCodeError(InternalError) errorResponse := getErrorResponse(error, "/"+bucket+"/"+object) @@ -64,7 +64,7 @@ func (server *minioAPI) getObjectHandler(w http.ResponseWriter, req *http.Reques metadata.Size = httpRange.length writeRangeObjectHeaders(w, metadata, httpRange.getContentRange()) w.WriteHeader(http.StatusPartialContent) - _, err := server.storage.CopyObjectToWriterRange(w, bucket, object, httpRange.start, httpRange.length) + _, err := server.storage.GetPartialObject(w, bucket, object, httpRange.start, httpRange.length) if err != nil { log.Println(err) error := errorCodeError(InternalError) @@ -165,7 +165,7 @@ func (server *minioAPI) putObjectHandler(w http.ResponseWriter, req *http.Reques return } - err := server.storage.StoreObject(bucket, object, "", req.Body) + err := server.storage.CreateObject(bucket, object, "", req.Body) switch err := err.(type) { case nil: w.Header().Set("Server", "Minio") diff --git a/pkg/api/minioapi/policy_handlers.go b/pkg/api/minioapi/policy_handlers.go index 30c7ad724..2ab115e96 100644 --- a/pkg/api/minioapi/policy_handlers.go +++ b/pkg/api/minioapi/policy_handlers.go @@ -43,7 +43,7 @@ func (server *minioAPI) putBucketPolicyHandler(w http.ResponseWriter, req *http. return } - err := server.storage.StoreBucketPolicy(bucket, policy) + err := server.storage.CreateBucketPolicy(bucket, policy) switch err := err.(type) { case nil: { diff --git a/pkg/api/minioapi/muxer.go b/pkg/api/minioapi/router.go similarity index 100% rename from pkg/api/minioapi/muxer.go rename to pkg/api/minioapi/router.go diff --git a/pkg/storage/fs/fs_object.go b/pkg/storage/fs/fs_object.go index e423712a6..6b8c59f9b 100644 --- a/pkg/storage/fs/fs_object.go +++ b/pkg/storage/fs/fs_object.go @@ -31,8 +31,8 @@ import ( /// Object Operations -// CopyObjectToWriterRange - GET object from range -func (storage *Storage) CopyObjectToWriterRange(w io.Writer, bucket, object string, start, length int64) (int64, error) { +// GetPartialObject - GET object from range +func (storage *Storage) GetPartialObject(w io.Writer, bucket, object string, start, length int64) (int64, error) { // validate bucket if mstorage.IsValidBucket(bucket) == false { return 0, mstorage.BucketNameInvalid{Bucket: bucket} @@ -79,8 +79,8 @@ func (storage *Storage) CopyObjectToWriterRange(w io.Writer, bucket, object stri return count, nil } -// CopyObjectToWriter - GET object -func (storage *Storage) CopyObjectToWriter(w io.Writer, bucket string, object string) (int64, error) { +// GetObject - GET object from key +func (storage *Storage) GetObject(w io.Writer, bucket string, object string) (int64, error) { // validate bucket if mstorage.IsValidBucket(bucket) == false { return 0, mstorage.BucketNameInvalid{Bucket: bucket} @@ -181,8 +181,8 @@ func (storage *Storage) GetObjectMetadata(bucket, object, prefix string) (mstora return metadata, nil } -// StoreObject - PUT object -func (storage *Storage) StoreObject(bucket, key, contentType string, data io.Reader) error { +// CreateObject - PUT object +func (storage *Storage) CreateObject(bucket, key, contentType string, data io.Reader) error { // TODO Commits should stage then move instead of writing directly storage.lock.Lock() defer storage.lock.Unlock() diff --git a/pkg/storage/fs/fs_policy.go b/pkg/storage/fs/fs_policy.go index c1f6a345b..bcded559f 100644 --- a/pkg/storage/fs/fs_policy.go +++ b/pkg/storage/fs/fs_policy.go @@ -69,8 +69,8 @@ func (storage *Storage) GetBucketPolicy(bucket string) (mstorage.BucketPolicy, e } -// StoreBucketPolicy - PUT bucket policy -func (storage *Storage) StoreBucketPolicy(bucket string, p mstorage.BucketPolicy) error { +// CreateBucketPolicy - PUT bucket policy +func (storage *Storage) CreateBucketPolicy(bucket string, p mstorage.BucketPolicy) error { storage.lock.Lock() defer storage.lock.Unlock() diff --git a/pkg/storage/inmemory/inmemory.go b/pkg/storage/inmemory/inmemory.go index 241b8fe25..e141d4ce4 100644 --- a/pkg/storage/inmemory/inmemory.go +++ b/pkg/storage/inmemory/inmemory.go @@ -64,8 +64,8 @@ func start(ctrlChannel <-chan string, errorChannel chan<- error) { close(errorChannel) } -// CopyObjectToWriter - GET object from memory buffer -func (storage *Storage) CopyObjectToWriter(w io.Writer, bucket string, object string) (int64, error) { +// GetObject - GET object from memory buffer +func (storage *Storage) GetObject(w io.Writer, bucket string, object string) (int64, error) { // get object key := object if val, ok := storage.objectdata[key]; ok { @@ -76,13 +76,13 @@ func (storage *Storage) CopyObjectToWriter(w io.Writer, bucket string, object st return 0, mstorage.ObjectNotFound{Bucket: bucket, Object: object} } -// CopyObjectToWriterRange - GET object from memory buffer range -func (storage *Storage) CopyObjectToWriterRange(w io.Writer, bucket, object string, start, end int64) (int64, error) { - return 0, mstorage.APINotImplemented{API: "GetObjectRange"} +// GetPartialObject - GET object from memory buffer range +func (storage *Storage) GetPartialObject(w io.Writer, bucket, object string, start, end int64) (int64, error) { + return 0, mstorage.APINotImplemented{API: "GetPartialObject"} } -// StoreBucketPolicy - Not implemented -func (storage *Storage) StoreBucketPolicy(bucket string, policy mstorage.BucketPolicy) error { +// CreateBucketPolicy - Not implemented +func (storage *Storage) CreateBucketPolicy(bucket string, policy mstorage.BucketPolicy) error { return mstorage.APINotImplemented{API: "PutBucketPolicy"} } @@ -91,8 +91,8 @@ func (storage *Storage) GetBucketPolicy(bucket string) (mstorage.BucketPolicy, e return mstorage.BucketPolicy{}, mstorage.APINotImplemented{API: "GetBucketPolicy"} } -// StoreObject - PUT object to memory buffer -func (storage *Storage) StoreObject(bucket, key, contentType string, data io.Reader) error { +// CreateObject - PUT object to memory buffer +func (storage *Storage) CreateObject(bucket, key, contentType string, data io.Reader) error { storage.lock.Lock() defer storage.lock.Unlock() diff --git a/pkg/storage/singledisk/singledisk.go b/pkg/storage/singledisk/singledisk.go index 42f23a4b4..fb70ba96d 100644 --- a/pkg/storage/singledisk/singledisk.go +++ b/pkg/storage/singledisk/singledisk.go @@ -53,8 +53,8 @@ func (diskStorage StorageDriver) CreateBucket(bucket string) error { return errors.New("Not Implemented") } -// StoreBucketPolicy sets a bucket's access policy -func (diskStorage StorageDriver) StoreBucketPolicy(bucket string, p storage.BucketPolicy) error { +// CreateBucketPolicy sets a bucket's access policy +func (diskStorage StorageDriver) CreateBucketPolicy(bucket string, p storage.BucketPolicy) error { return errors.New("Not Implemented") } @@ -63,13 +63,18 @@ func (diskStorage StorageDriver) GetBucketPolicy(bucket string) (storage.BucketP return storage.BucketPolicy{}, errors.New("Not Implemented") } -// CopyObjectToWriter retrieves an object and writes it to a writer -func (diskStorage StorageDriver) CopyObjectToWriter(w io.Writer, bucket string, object string) (int64, error) { +// GetObject retrieves an object and writes it to a writer +func (diskStorage StorageDriver) GetObject(w io.Writer, bucket, object string) (int64, error) { + return 0, errors.New("Not Implemented") +} + +// GetPartialObject retrieves an object and writes it to a writer +func (diskStorage StorageDriver) GetPartialObject(w io.Writer, bucket, object string, start, length int64) (int64, error) { return 0, errors.New("Not Implemented") } // GetObjectMetadata retrieves an object's metadata -func (diskStorage StorageDriver) GetObjectMetadata(bucket string, object string, prefix string) (storage.ObjectMetadata, error) { +func (diskStorage StorageDriver) GetObjectMetadata(bucket, object string, prefix string) (storage.ObjectMetadata, error) { return storage.ObjectMetadata{}, errors.New("Not Implemented") } @@ -78,7 +83,7 @@ func (diskStorage StorageDriver) ListObjects(bucket string, resources storage.Bu return nil, storage.BucketResourcesMetadata{}, errors.New("Not Implemented") } -// StoreObject creates a new object -func (diskStorage StorageDriver) StoreObject(bucket string, key string, contentType string, data io.Reader) error { +// CreateObject creates a new object +func (diskStorage StorageDriver) CreateObject(bucket string, key string, contentType string, data io.Reader) error { return errors.New("Not Implemented") } diff --git a/pkg/storage/storage.go b/pkg/storage/storage.go index 24ee7cd00..f984f608b 100644 --- a/pkg/storage/storage.go +++ b/pkg/storage/storage.go @@ -28,15 +28,15 @@ type Storage interface { // Bucket Operations ListBuckets() ([]BucketMetadata, error) CreateBucket(bucket string) error - StoreBucketPolicy(bucket string, p BucketPolicy) error + CreateBucketPolicy(bucket string, p BucketPolicy) error GetBucketPolicy(bucket string) (BucketPolicy, error) // Object Operations - CopyObjectToWriter(w io.Writer, bucket string, object string) (int64, error) - CopyObjectToWriterRange(w io.Writer, bucket string, object string, start, length int64) (int64, error) + GetObject(w io.Writer, bucket, object string) (int64, error) + GetPartialObject(w io.Writer, bucket, object string, start, length int64) (int64, error) GetObjectMetadata(bucket string, object string, prefix string) (ObjectMetadata, error) ListObjects(bucket string, resources BucketResourcesMetadata) ([]ObjectMetadata, BucketResourcesMetadata, error) - StoreObject(bucket string, key string, contentType string, data io.Reader) error + CreateObject(bucket string, key string, contentType string, data io.Reader) error } // BucketMetadata - name and create date diff --git a/pkg/storage/storage_api_suite.go b/pkg/storage/storage_api_suite.go index c52128410..2430d9dd5 100644 --- a/pkg/storage/storage_api_suite.go +++ b/pkg/storage/storage_api_suite.go @@ -58,7 +58,7 @@ func testMultipleObjectCreation(c *check.C, create func() Storage) { } key := "obj" + strconv.Itoa(i) objects[key] = []byte(randomString) - err := storage.StoreObject("bucket", key, "", bytes.NewBufferString(randomString)) + err := storage.CreateObject("bucket", key, "", bytes.NewBufferString(randomString)) c.Assert(err, check.IsNil) } @@ -66,7 +66,7 @@ func testMultipleObjectCreation(c *check.C, create func() Storage) { etags := make(map[string]string) for key, value := range objects { var byteBuffer bytes.Buffer - storage.CopyObjectToWriter(&byteBuffer, "bucket", key) + storage.GetObject(&byteBuffer, "bucket", key) c.Assert(bytes.Equal(value, byteBuffer.Bytes()), check.Equals, true) metadata, err := storage.GetObjectMetadata("bucket", key, "") @@ -90,7 +90,7 @@ func testPaging(c *check.C, create func() Storage) { // check before paging occurs for i := 0; i < 5; i++ { key := "obj" + strconv.Itoa(i) - storage.StoreObject("bucket", key, "", bytes.NewBufferString(key)) + storage.CreateObject("bucket", key, "", bytes.NewBufferString(key)) resources.Maxkeys = 5 objects, resources, err = storage.ListObjects("bucket", resources) c.Assert(len(objects), check.Equals, i+1) @@ -100,7 +100,7 @@ func testPaging(c *check.C, create func() Storage) { // check after paging occurs pages work for i := 6; i <= 10; i++ { key := "obj" + strconv.Itoa(i) - storage.StoreObject("bucket", key, "", bytes.NewBufferString(key)) + storage.CreateObject("bucket", key, "", bytes.NewBufferString(key)) resources.Maxkeys = 5 objects, resources, err = storage.ListObjects("bucket", resources) c.Assert(len(objects), check.Equals, 5) @@ -109,8 +109,8 @@ func testPaging(c *check.C, create func() Storage) { } // check paging with prefix at end returns less objects { - storage.StoreObject("bucket", "newPrefix", "", bytes.NewBufferString("prefix1")) - storage.StoreObject("bucket", "newPrefix2", "", bytes.NewBufferString("prefix2")) + storage.CreateObject("bucket", "newPrefix", "", bytes.NewBufferString("prefix1")) + storage.CreateObject("bucket", "newPrefix2", "", bytes.NewBufferString("prefix2")) resources.Prefix = "new" resources.Maxkeys = 5 objects, resources, err = storage.ListObjects("bucket", resources) @@ -131,8 +131,8 @@ func testPaging(c *check.C, create func() Storage) { // check delimited results with delimiter and prefix { - storage.StoreObject("bucket", "this/is/delimited", "", bytes.NewBufferString("prefix1")) - storage.StoreObject("bucket", "this/is/also/delimited", "", bytes.NewBufferString("prefix2")) + storage.CreateObject("bucket", "this/is/delimited", "", bytes.NewBufferString("prefix1")) + storage.CreateObject("bucket", "this/is/also/delimited", "", bytes.NewBufferString("prefix2")) var prefixes []string resources.CommonPrefixes = prefixes // allocate new everytime resources.Delimiter = "/" @@ -184,12 +184,12 @@ func testPaging(c *check.C, create func() Storage) { func testObjectOverwriteFails(c *check.C, create func() Storage) { storage := create() storage.CreateBucket("bucket") - err := storage.StoreObject("bucket", "object", "", bytes.NewBufferString("one")) + err := storage.CreateObject("bucket", "object", "", bytes.NewBufferString("one")) c.Assert(err, check.IsNil) - err = storage.StoreObject("bucket", "object", "", bytes.NewBufferString("three")) + err = storage.CreateObject("bucket", "object", "", bytes.NewBufferString("three")) c.Assert(err, check.Not(check.IsNil)) var bytesBuffer bytes.Buffer - length, err := storage.CopyObjectToWriter(&bytesBuffer, "bucket", "object") + length, err := storage.GetObject(&bytesBuffer, "bucket", "object") c.Assert(length, check.Equals, int64(len("one"))) c.Assert(err, check.IsNil) c.Assert(string(bytesBuffer.Bytes()), check.Equals, "one") @@ -197,7 +197,7 @@ func testObjectOverwriteFails(c *check.C, create func() Storage) { func testNonExistantBucketOperations(c *check.C, create func() Storage) { storage := create() - err := storage.StoreObject("bucket", "object", "", bytes.NewBufferString("one")) + err := storage.CreateObject("bucket", "object", "", bytes.NewBufferString("one")) c.Assert(err, check.Not(check.IsNil)) } @@ -213,10 +213,10 @@ func testPutObjectInSubdir(c *check.C, create func() Storage) { storage := create() err := storage.CreateBucket("bucket") c.Assert(err, check.IsNil) - err = storage.StoreObject("bucket", "dir1/dir2/object", "", bytes.NewBufferString("hello world")) + err = storage.CreateObject("bucket", "dir1/dir2/object", "", bytes.NewBufferString("hello world")) c.Assert(err, check.IsNil) var bytesBuffer bytes.Buffer - length, err := storage.CopyObjectToWriter(&bytesBuffer, "bucket", "dir1/dir2/object") + length, err := storage.GetObject(&bytesBuffer, "bucket", "dir1/dir2/object") c.Assert(len(bytesBuffer.Bytes()), check.Equals, len("hello world")) c.Assert(int64(len(bytesBuffer.Bytes())), check.Equals, length) c.Assert(err, check.IsNil) @@ -286,7 +286,7 @@ func testNonExistantObjectInBucket(c *check.C, create func() Storage) { c.Assert(err, check.IsNil) var byteBuffer bytes.Buffer - length, err := storage.CopyObjectToWriter(&byteBuffer, "bucket", "dir1") + length, err := storage.GetObject(&byteBuffer, "bucket", "dir1") c.Assert(length, check.Equals, int64(0)) c.Assert(err, check.Not(check.IsNil)) c.Assert(len(byteBuffer.Bytes()), check.Equals, 0) @@ -307,11 +307,11 @@ func testGetDirectoryReturnsObjectNotFound(c *check.C, create func() Storage) { err := storage.CreateBucket("bucket") c.Assert(err, check.IsNil) - err = storage.StoreObject("bucket", "dir1/dir2/object", "", bytes.NewBufferString("hello world")) + err = storage.CreateObject("bucket", "dir1/dir2/object", "", bytes.NewBufferString("hello world")) c.Assert(err, check.IsNil) var byteBuffer bytes.Buffer - length, err := storage.CopyObjectToWriter(&byteBuffer, "bucket", "dir1") + length, err := storage.GetObject(&byteBuffer, "bucket", "dir1") c.Assert(length, check.Equals, int64(0)) switch err := err.(type) { case ObjectNotFound: @@ -328,7 +328,7 @@ func testGetDirectoryReturnsObjectNotFound(c *check.C, create func() Storage) { c.Assert(len(byteBuffer.Bytes()), check.Equals, 0) var byteBuffer2 bytes.Buffer - length, err = storage.CopyObjectToWriter(&byteBuffer, "bucket", "dir1/") + length, err = storage.GetObject(&byteBuffer, "bucket", "dir1/") c.Assert(length, check.Equals, int64(0)) switch err := err.(type) { case ObjectNotFound: @@ -351,19 +351,19 @@ func testDefaultContentType(c *check.C, create func() Storage) { c.Assert(err, check.IsNil) // test empty - err = storage.StoreObject("bucket", "one", "", bytes.NewBufferString("one")) + err = storage.CreateObject("bucket", "one", "", bytes.NewBufferString("one")) metadata, err := storage.GetObjectMetadata("bucket", "one", "") c.Assert(err, check.IsNil) c.Assert(metadata.ContentType, check.Equals, "application/octet-stream") // test custom - storage.StoreObject("bucket", "two", "application/text", bytes.NewBufferString("two")) + storage.CreateObject("bucket", "two", "application/text", bytes.NewBufferString("two")) metadata, err = storage.GetObjectMetadata("bucket", "two", "") c.Assert(err, check.IsNil) c.Assert(metadata.ContentType, check.Equals, "application/text") // test trim space - storage.StoreObject("bucket", "three", "\tapplication/json ", bytes.NewBufferString("three")) + storage.CreateObject("bucket", "three", "\tapplication/json ", bytes.NewBufferString("three")) metadata, err = storage.GetObjectMetadata("bucket", "three", "") c.Assert(err, check.IsNil) c.Assert(metadata.ContentType, check.Equals, "application/json")