mirror of
https://github.com/minio/minio.git
synced 2025-11-09 21:49:46 -05:00
Donut mode will now take multiple paths as argument, updated docs as well
This commit is contained in:
@@ -38,7 +38,7 @@ import (
|
||||
// donutDriver - creates a new single disk drivers driver using donut
|
||||
type donutDriver struct {
|
||||
donut donut.Donut
|
||||
path string
|
||||
paths []string
|
||||
}
|
||||
|
||||
const (
|
||||
@@ -47,9 +47,9 @@ const (
|
||||
|
||||
// This is a dummy nodeDiskMap which is going to be deprecated soon
|
||||
// once the Management API is standardized, this map is useful for now
|
||||
// to show multi disk API correctness behavior.
|
||||
// to show multi disk API correctness and parity calculation
|
||||
//
|
||||
// This should be obtained from donut configuration file
|
||||
// Ideally this should be obtained from per node configuration file
|
||||
func createNodeDiskMap(p string) map[string][]string {
|
||||
nodes := make(map[string][]string)
|
||||
nodes["localhost"] = make([]string, 16)
|
||||
@@ -65,24 +65,51 @@ func createNodeDiskMap(p string) map[string][]string {
|
||||
return nodes
|
||||
}
|
||||
|
||||
// This is a dummy nodeDiskMap which is going to be deprecated soon
|
||||
// once the Management API is standardized, and we have way of adding
|
||||
// and removing disks. This is useful for now to take inputs from CLI
|
||||
func createNodeDiskMapFromSlice(paths []string) map[string][]string {
|
||||
diskPaths := make([]string, len(paths))
|
||||
nodes := make(map[string][]string)
|
||||
for i, p := range paths {
|
||||
diskPath := path.Join(p, strconv.Itoa(i))
|
||||
if _, err := os.Stat(diskPath); err != nil {
|
||||
if os.IsNotExist(err) {
|
||||
os.MkdirAll(diskPath, 0700)
|
||||
}
|
||||
}
|
||||
diskPaths[i] = diskPath
|
||||
}
|
||||
nodes["localhost"] = diskPaths
|
||||
return nodes
|
||||
}
|
||||
|
||||
// Start a single disk subsystem
|
||||
func Start(path string) (chan<- string, <-chan error, drivers.Driver) {
|
||||
func Start(paths []string) (chan<- string, <-chan error, drivers.Driver) {
|
||||
ctrlChannel := make(chan string)
|
||||
errorChannel := make(chan error)
|
||||
errParams := map[string]string{"path": path}
|
||||
|
||||
// Soon to be user configurable, when Management API
|
||||
// is finished we remove "default" to something
|
||||
// which is passed down from configuration
|
||||
donut, err := donut.NewDonut("default", createNodeDiskMap(path))
|
||||
if err != nil {
|
||||
err = iodine.New(err, errParams)
|
||||
log.Error.Println(err)
|
||||
// Soon to be user configurable, when Management API is available
|
||||
// we should remove "default" to something which is passed down
|
||||
// from configuration paramters
|
||||
var d donut.Donut
|
||||
var err error
|
||||
if len(paths) == 1 {
|
||||
d, err = donut.NewDonut("default", createNodeDiskMap(paths[0]))
|
||||
if err != nil {
|
||||
err = iodine.New(err, nil)
|
||||
log.Error.Println(err)
|
||||
}
|
||||
} else {
|
||||
d, err = donut.NewDonut("default", createNodeDiskMapFromSlice(paths))
|
||||
if err != nil {
|
||||
err = iodine.New(err, nil)
|
||||
log.Error.Println(err)
|
||||
}
|
||||
}
|
||||
|
||||
s := new(donutDriver)
|
||||
s.donut = donut
|
||||
s.path = path
|
||||
s.donut = d
|
||||
s.paths = paths
|
||||
|
||||
go start(ctrlChannel, errorChannel, s)
|
||||
return ctrlChannel, errorChannel, s
|
||||
@@ -143,7 +170,7 @@ func (d donutDriver) GetBucketMetadata(bucketName string) (drivers.BucketMetadat
|
||||
}
|
||||
acl, ok := metadata["acl"]
|
||||
if !ok {
|
||||
return drivers.BucketMetadata{}, iodine.New(drivers.BackendCorrupted{Path: d.path}, nil)
|
||||
return drivers.BucketMetadata{}, iodine.New(drivers.BackendCorrupted{}, nil)
|
||||
}
|
||||
bucketMetadata := drivers.BucketMetadata{
|
||||
Name: metadata["name"],
|
||||
|
||||
@@ -32,13 +32,14 @@ type MySuite struct{}
|
||||
var _ = Suite(&MySuite{})
|
||||
|
||||
func (s *MySuite) TestAPISuite(c *C) {
|
||||
// c.Skip("Not Implemented")
|
||||
var storageList []string
|
||||
create := func() drivers.Driver {
|
||||
path, err := ioutil.TempDir(os.TempDir(), "minio-fs-")
|
||||
var paths []string
|
||||
p, err := ioutil.TempDir(os.TempDir(), "minio-fs-")
|
||||
c.Check(err, IsNil)
|
||||
storageList = append(storageList, path)
|
||||
_, _, store := Start(path) // TODO Make InMemory driver
|
||||
storageList = append(storageList, p)
|
||||
paths = append(paths, p)
|
||||
_, _, store := Start(paths)
|
||||
return store
|
||||
}
|
||||
drivers.APITestSuite(c, create)
|
||||
|
||||
Reference in New Issue
Block a user