mirror of
https://github.com/minio/minio.git
synced 2025-11-07 04:42:56 -05:00
Move wrappers at pkgs/minio back to cmd/minio - as their usage is limited
This commit is contained in:
103
cmd/minio/common.go
Normal file
103
cmd/minio/common.go
Normal 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
37
cmd/minio/encode.go
Normal 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
58
cmd/minio/erasure.go
Normal 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
30
cmd/minio/get.go
Normal 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
1
cmd/minio/init.go
Normal file
@@ -0,0 +1 @@
|
||||
package main
|
||||
24
cmd/minio/list.go
Normal file
24
cmd/minio/list.go
Normal 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)
|
||||
}
|
||||
@@ -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
43
cmd/minio/put.go
Normal 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
1
cmd/minio/verify.go
Normal file
@@ -0,0 +1 @@
|
||||
package main
|
||||
Reference in New Issue
Block a user