Move wrappers at pkgs/minio back to cmd/minio - as their usage is limited

This commit is contained in:
Harshavardhana
2014-12-15 20:09:50 -08:00
parent 1f8806b44f
commit 98119707fb
11 changed files with 22 additions and 23 deletions

103
cmd/minio/common.go Normal file
View File

@@ -0,0 +1,103 @@
package main
import (
"errors"
"log"
"os"
"os/user"
"path"
"strconv"
"strings"
"github.com/codegangsta/cli"
"github.com/minio-io/minio/pkgs/strbyteconv"
)
// config representing cli input
type inputConfig struct {
k int
m int
blockSize uint64
rootDir string
stagingDir string
}
// parses input and returns an inputConfig with parsed input
func parseInput(c *cli.Context) (inputConfig, error) {
var k, m int
if c.String("protection-level") != "" {
protectionLevel := c.String("protection-level")
protectionLevelSplit := strings.Split(protectionLevel, ",")
if len(protectionLevelSplit) != 2 {
return inputConfig{}, errors.New("Malformed input for protection-level")
}
var err error
k, err = strconv.Atoi(protectionLevelSplit[0])
if err != nil {
return inputConfig{}, err
}
m, err = strconv.Atoi(protectionLevelSplit[1])
if err != nil {
return inputConfig{}, err
}
}
var blockSize uint64
blockSize = 0
if c.String("block-size") != "" {
if c.String("block-size") != "full" {
var err error
blockSize, err = strbyteconv.StringToBytes(c.String("block-size"))
if err != nil {
return inputConfig{}, err
}
}
}
var rootDir string
if c.String("root") != "" {
rootDir = c.String("root")
}
var stagingDir string
if c.String("staging") != "" {
stagingDir = c.String("staging")
}
config := inputConfig{
k: k,
m: m,
blockSize: blockSize,
rootDir: rootDir,
stagingDir: stagingDir,
}
return config, nil
}
func getObjectdir(basename string) string {
user, err := user.Current()
if err != nil {
log.Fatal(err)
}
homePath := user.HomeDir
minioPath := path.Join(homePath, basename)
err = _initDir(minioPath)
if err != nil {
log.Fatal(err)
}
return minioPath
}
func _initDir(dirPath string) error {
_, err := os.Lstat(dirPath)
if err != nil {
log.Printf("%s not found, creating a new-one for the first time",
dirPath)
err = os.MkdirAll(dirPath, 0700)
if err != nil {
return err
}
}
return nil
}

37
cmd/minio/encode.go Normal file
View File

@@ -0,0 +1,37 @@
package main
import (
"log"
"github.com/codegangsta/cli"
)
func encode(c *cli.Context) {
config, err := parseInput(c)
if err != nil {
log.Fatal(err)
}
var objectName string
switch len(c.Args()) {
case 1:
objectName = c.Args().Get(0)
default:
log.Fatal("Please specify a valid object name \n # erasure-demo encode [OBJECTNAME]")
}
// Get from staging area
stagingConfig := config
stagingConfig.k = 2
stagingConfig.m = 1
stagingConfig.rootDir = config.stagingDir
reader, err := erasureGet(stagingConfig, objectName)
if err != nil {
log.Fatal(err)
}
// Increase parity to user defined or default 10,6
err = erasurePut(config, objectName, reader)
if err != nil {
log.Fatal(err)
}
}

58
cmd/minio/erasure.go Normal file
View File

@@ -0,0 +1,58 @@
package main
import (
"bytes"
"encoding/json"
"io"
"os"
"github.com/minio-io/minio/pkgs/storage"
es "github.com/minio-io/minio/pkgs/storage/encodedstorage"
)
func erasureGetList(config inputConfig, objectPath string) (io.Reader, error) {
var objectStorage storage.ObjectStorage
objectStorage, err := es.NewStorage(config.rootDir, config.k, config.m, config.blockSize)
if err != nil {
return nil, err
}
objectDescList, err := objectStorage.List(objectPath)
if err != nil {
return nil, err
}
var objectDescListBytes []byte
if objectDescListBytes, err = json.Marshal(objectDescList); err != nil {
return nil, err
}
objectDescListBuffer := bytes.NewBuffer(objectDescListBytes)
return objectDescListBuffer, nil
}
func erasureGet(config inputConfig, objectPath string) (io.Reader, error) {
var objectStorage storage.ObjectStorage
objectStorage, err := es.NewStorage(config.rootDir, config.k, config.m, config.blockSize)
if err != nil {
return nil, err
}
object, err := objectStorage.Get(objectPath)
if err != nil {
return nil, err
}
return object, nil
}
func erasurePut(config inputConfig, objectPath string, reader io.Reader) error {
var err error
if err := os.MkdirAll(config.rootDir, 0700); err != nil {
return err
}
var objectStorage storage.ObjectStorage
if objectStorage, err = es.NewStorage(config.rootDir, config.k, config.m, config.blockSize); err != nil {
return err
}
if err = objectStorage.Put(objectPath, reader); err != nil {
return err
}
return nil
}

30
cmd/minio/get.go Normal file
View File

@@ -0,0 +1,30 @@
package main
import (
"io"
"log"
"os"
"github.com/codegangsta/cli"
)
func get(c *cli.Context) {
config, err := parseInput(c)
if err != nil {
log.Fatal(err)
}
var objectName string
var objectReader io.Reader
switch len(c.Args()) {
case 1:
objectName = c.Args().Get(0)
default:
log.Fatal("Please specify a valid object name \n # erasure-demo get [OBJECTNAME]")
}
if objectReader, err = erasureGet(config, objectName); err != nil {
log.Fatal(err)
}
io.Copy(os.Stdout, objectReader)
}

1
cmd/minio/init.go Normal file
View File

@@ -0,0 +1 @@
package main

24
cmd/minio/list.go Normal file
View File

@@ -0,0 +1,24 @@
package main
import (
"io"
"log"
"os"
"github.com/codegangsta/cli"
)
func list(c *cli.Context) {
config, err := parseInput(c)
if err != nil {
log.Fatal(err)
}
config.k = 10
config.m = 6
reader, err := erasureGetList(config, "")
if err != nil {
log.Fatal(err)
}
io.Copy(os.Stdout, reader)
}

View File

@@ -4,7 +4,6 @@ import (
"os"
"github.com/codegangsta/cli"
"github.com/minio-io/minio/pkgs/minio"
)
func main() {
@@ -15,16 +14,16 @@ func main() {
{
Name: "encode",
Usage: "erasure encode a byte stream",
Action: minio.Encode,
Action: encode,
Flags: []cli.Flag{
cli.StringFlag{
Name: "root",
Value: minio.Getobjectdir(".minio/erasure"),
Value: getObjectdir(".minio/erasure"),
Usage: "",
},
cli.StringFlag{
Name: "staging",
Value: minio.Getobjectdir(".minio/staging"),
Value: getObjectdir(".minio/staging"),
Usage: "",
},
cli.StringFlag{
@@ -42,11 +41,11 @@ func main() {
{
Name: "get",
Usage: "get an object",
Action: minio.Get,
Action: get,
Flags: []cli.Flag{
cli.StringFlag{
Name: "root",
Value: minio.Getobjectdir(".minio/erasure"),
Value: getObjectdir(".minio/erasure"),
Usage: "",
},
cli.StringFlag{
@@ -64,11 +63,11 @@ func main() {
{
Name: "put",
Usage: "put an object",
Action: minio.Put,
Action: put,
Flags: []cli.Flag{
cli.StringFlag{
Name: "staging",
Value: minio.Getobjectdir(".minio/staging"),
Value: getObjectdir(".minio/staging"),
Usage: "",
},
cli.StringFlag{
@@ -81,11 +80,11 @@ func main() {
{
Name: "list",
Usage: "list objects",
Action: minio.List,
Action: list,
Flags: []cli.Flag{
cli.StringFlag{
Name: "root",
Value: minio.Getobjectdir(".minio/erasure"),
Value: getObjectdir(".minio/erasure"),
Usage: "",
},
},

43
cmd/minio/put.go Normal file
View File

@@ -0,0 +1,43 @@
package main
import (
"log"
"os"
"path"
"github.com/codegangsta/cli"
)
func put(c *cli.Context) {
config, err := parseInput(c)
if err != nil {
log.Fatal(err)
}
var filePath, objectName string
switch len(c.Args()) {
case 1:
objectName = path.Base(c.Args().Get(0))
filePath = c.Args().Get(0)
case 2:
objectName = c.Args().Get(0)
filePath = c.Args().Get(1)
default:
log.Fatal("Please specify a valid object name \n # erasure-demo put [OBJECTNAME] [FILENAME]")
}
inputFile, err := os.Open(filePath)
defer inputFile.Close()
if err != nil {
log.Fatal(err)
}
// Staging parity
stagingConfig := config
stagingConfig.k = 2
stagingConfig.m = 1
stagingConfig.rootDir = config.stagingDir
if err := erasurePut(stagingConfig, objectName, inputFile); err != nil {
log.Fatal(err)
}
}

1
cmd/minio/verify.go Normal file
View File

@@ -0,0 +1 @@
package main