mirror of
https://github.com/minio/mc.git
synced 2025-11-14 23:42:27 +03:00
Merge pull request #488 from harshavardhana/pr_out_fix_listcmd_makebucketcmd_for_multi_target
This commit is contained in:
@@ -134,11 +134,7 @@ func (manager mcClientManager) getNewClient(urlStr string, auth *hostConfig, deb
|
|||||||
clnt = s3.New(s3Config)
|
clnt = s3.New(s3Config)
|
||||||
return clnt, nil
|
return clnt, nil
|
||||||
case client.Filesystem:
|
case client.Filesystem:
|
||||||
absURLStr, err := filepath.Abs(filepath.Clean(urlStr))
|
clnt = fs.New(filepath.Clean(urlStr))
|
||||||
if err != nil {
|
|
||||||
return nil, iodine.New(err, nil)
|
|
||||||
}
|
|
||||||
clnt = fs.New(absURLStr)
|
|
||||||
return clnt, nil
|
return clnt, nil
|
||||||
default:
|
default:
|
||||||
return nil, iodine.New(errUnsupportedScheme{
|
return nil, iodine.New(errUnsupportedScheme{
|
||||||
|
|||||||
35
cmd-ls.go
35
cmd-ls.go
@@ -106,27 +106,26 @@ func runListCmd(ctx *cli.Context) {
|
|||||||
}
|
}
|
||||||
targetURLConfigMap[targetURL] = targetConfig
|
targetURLConfigMap[targetURL] = targetConfig
|
||||||
}
|
}
|
||||||
errorMsg, err := doListCmd(mcClientManager{}, targetURLConfigMap, globalDebugFlag)
|
for targetURL, targetConfig := range targetURLConfigMap {
|
||||||
err = iodine.New(err, nil)
|
errorMsg, err := doListCmd(mcClientManager{}, targetURL, targetConfig, globalDebugFlag)
|
||||||
if err != nil {
|
err = iodine.New(err, nil)
|
||||||
if errorMsg == "" {
|
if err != nil {
|
||||||
errorMsg = "mc: List command failed. Please re-run with --debug and report this bug."
|
if errorMsg == "" {
|
||||||
|
errorMsg = "mc: List command failed. Please re-run with --debug and report this bug."
|
||||||
|
}
|
||||||
|
log.Debug.Println(err)
|
||||||
|
console.Fatalf("%s", errorMsg)
|
||||||
}
|
}
|
||||||
log.Debug.Println(err)
|
|
||||||
console.Fatalf("%s", errorMsg)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func doListCmd(manager clientManager, targetURLConfigMap map[string]*hostConfig, debug bool) (string, error) {
|
func doListCmd(manager clientManager, targetURL string, targetConfig *hostConfig, debug bool) (string, error) {
|
||||||
for targetURL, targetConfig := range targetURLConfigMap {
|
clnt, err := manager.getNewClient(targetURL, targetConfig, globalDebugFlag)
|
||||||
clnt, err := manager.getNewClient(targetURL, targetConfig, globalDebugFlag)
|
if err != nil {
|
||||||
if err != nil {
|
err := iodine.New(err, nil)
|
||||||
err := iodine.New(err, nil)
|
msg := fmt.Sprintf("mc: instantiating a new client for URL [%s] failed with following reason: [%s]\n",
|
||||||
msg := fmt.Sprintf("mc: instantiating a new client for URL [%s] failed with following reason: [%s]\n",
|
targetURL, iodine.ToError(err))
|
||||||
targetURL, iodine.ToError(err))
|
return msg, err
|
||||||
return msg, err
|
|
||||||
}
|
|
||||||
return doList(clnt, targetURL)
|
|
||||||
}
|
}
|
||||||
return "", nil
|
return doList(clnt, targetURL)
|
||||||
}
|
}
|
||||||
|
|||||||
70
cmd-mb.go
70
cmd-mb.go
@@ -58,45 +58,47 @@ func runMakeBucketCmd(ctx *cli.Context) {
|
|||||||
}
|
}
|
||||||
targetURLConfigMap[targetURL] = targetConfig
|
targetURLConfigMap[targetURL] = targetConfig
|
||||||
}
|
}
|
||||||
errorMsg, err := doMakeBucketCmd(mcClientManager{}, targetURLConfigMap, globalDebugFlag)
|
for targetURL, targetConfig := range targetURLConfigMap {
|
||||||
err = iodine.New(err, nil)
|
errorMsg, err := doMakeBucketCmd(mcClientManager{}, targetURL, targetConfig, globalDebugFlag)
|
||||||
if err != nil {
|
err = iodine.New(err, nil)
|
||||||
if errorMsg == "" {
|
if err != nil {
|
||||||
errorMsg = "No error message present, please rerun with --debug and report a bug."
|
if errorMsg == "" {
|
||||||
|
errorMsg = "No error message present, please rerun with --debug and report a bug."
|
||||||
|
}
|
||||||
|
log.Debug.Println(err)
|
||||||
|
console.Fatalf("%s", errorMsg)
|
||||||
}
|
}
|
||||||
log.Debug.Println(err)
|
|
||||||
console.Fatalf("%s", errorMsg)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func doMakeBucketCmd(manager clientManager, targetURLConfigMap map[string]*hostConfig, debug bool) (string, error) {
|
func doMakeBucket(clnt client.Client, targetURL string) (string, error) {
|
||||||
var err error
|
err := clnt.PutBucket()
|
||||||
var clnt client.Client
|
if err != nil {
|
||||||
|
console.Infof("Retrying ...")
|
||||||
for targetURL, targetConfig := range targetURLConfigMap {
|
}
|
||||||
clnt, err = manager.getNewClient(targetURL, targetConfig, debug)
|
for i := 0; i < globalMaxRetryFlag && err != nil; i++ {
|
||||||
if err != nil {
|
|
||||||
err := iodine.New(err, nil)
|
|
||||||
msg := fmt.Sprintf("mc: instantiating a new client for URL [%s] failed with following reason: [%s]\n",
|
|
||||||
targetURL, iodine.ToError(err))
|
|
||||||
return msg, err
|
|
||||||
}
|
|
||||||
err = clnt.PutBucket()
|
err = clnt.PutBucket()
|
||||||
if err != nil {
|
console.Errorf(" %d", i)
|
||||||
console.Infof("Retrying ...")
|
// Progressively longer delays
|
||||||
}
|
time.Sleep(time.Duration(i*i) * time.Second)
|
||||||
for i := 0; i < globalMaxRetryFlag && err != nil; i++ {
|
}
|
||||||
err = clnt.PutBucket()
|
if err != nil {
|
||||||
console.Errorf(" %d", i)
|
err := iodine.New(err, nil)
|
||||||
// Progressively longer delays
|
msg := fmt.Sprintf("\nmc: Creating bucket failed for URL [%s] with following reason: [%s]\n", targetURL, iodine.ToError(err))
|
||||||
time.Sleep(time.Duration(i*i) * time.Second)
|
return msg, err
|
||||||
}
|
|
||||||
if err != nil {
|
|
||||||
err := iodine.New(err, nil)
|
|
||||||
msg := fmt.Sprintf("\nmc: Creating bucket failed for URL [%s] with following reason: [%s]\n", targetURL, iodine.ToError(err))
|
|
||||||
return msg, err
|
|
||||||
}
|
|
||||||
console.Infoln()
|
|
||||||
}
|
}
|
||||||
return "", nil
|
return "", nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func doMakeBucketCmd(manager clientManager, targetURL string, targetConfig *hostConfig, debug bool) (string, error) {
|
||||||
|
var err error
|
||||||
|
var clnt client.Client
|
||||||
|
clnt, err = manager.getNewClient(targetURL, targetConfig, debug)
|
||||||
|
if err != nil {
|
||||||
|
err := iodine.New(err, nil)
|
||||||
|
msg := fmt.Sprintf("mc: instantiating a new client for URL [%s] failed with following reason: [%s]\n",
|
||||||
|
targetURL, iodine.ToError(err))
|
||||||
|
return msg, err
|
||||||
|
}
|
||||||
|
return doMakeBucket(clnt, targetURL)
|
||||||
|
}
|
||||||
|
|||||||
19
cmd_test.go
19
cmd_test.go
@@ -27,10 +27,11 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
"net"
|
"net"
|
||||||
|
|
||||||
|
"io/ioutil"
|
||||||
|
|
||||||
. "github.com/minio-io/check"
|
. "github.com/minio-io/check"
|
||||||
"github.com/minio-io/mc/pkg/client"
|
"github.com/minio-io/mc/pkg/client"
|
||||||
clientMocks "github.com/minio-io/mc/pkg/client/mocks"
|
clientMocks "github.com/minio-io/mc/pkg/client/mocks"
|
||||||
"io/ioutil"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type CmdTestSuite struct{}
|
type CmdTestSuite struct{}
|
||||||
@@ -287,7 +288,7 @@ func (s *CmdTestSuite) TestLsCmdWithBucket(c *C) {
|
|||||||
|
|
||||||
manager.On("getNewClient", sourceURL, sourceConfig, false).Return(cl1, nil).Once()
|
manager.On("getNewClient", sourceURL, sourceConfig, false).Return(cl1, nil).Once()
|
||||||
cl1.On("List").Return(items, nil).Once()
|
cl1.On("List").Return(items, nil).Once()
|
||||||
msg, err := doListCmd(manager, sourceURLConfigMap, false)
|
msg, err := doListCmd(manager, sourceURL, sourceConfig, false)
|
||||||
c.Assert(msg, Equals, "")
|
c.Assert(msg, Equals, "")
|
||||||
c.Assert(err, IsNil)
|
c.Assert(err, IsNil)
|
||||||
|
|
||||||
@@ -321,7 +322,7 @@ func (s *CmdTestSuite) TestLsCmdWithFilePath(c *C) {
|
|||||||
|
|
||||||
manager.On("getNewClient", sourceURL, sourceConfig, false).Return(cl1, nil).Once()
|
manager.On("getNewClient", sourceURL, sourceConfig, false).Return(cl1, nil).Once()
|
||||||
cl1.On("List").Return(items, nil).Once()
|
cl1.On("List").Return(items, nil).Once()
|
||||||
msg, err := doListCmd(manager, sourceURLConfigMap, false)
|
msg, err := doListCmd(manager, sourceURL, sourceConfig, false)
|
||||||
c.Assert(msg, Equals, "")
|
c.Assert(msg, Equals, "")
|
||||||
c.Assert(err, IsNil)
|
c.Assert(err, IsNil)
|
||||||
|
|
||||||
@@ -349,7 +350,7 @@ func (s *CmdTestSuite) TestLsCmdListsBuckets(c *C) {
|
|||||||
|
|
||||||
manager.On("getNewClient", sourceURL, sourceConfig, false).Return(cl1, nil).Once()
|
manager.On("getNewClient", sourceURL, sourceConfig, false).Return(cl1, nil).Once()
|
||||||
cl1.On("List").Return(buckets, nil).Once()
|
cl1.On("List").Return(buckets, nil).Once()
|
||||||
msg, err := doListCmd(manager, sourceURLConfigMap, false)
|
msg, err := doListCmd(manager, sourceURL, sourceConfig, false)
|
||||||
c.Assert(msg, Equals, "")
|
c.Assert(msg, Equals, "")
|
||||||
c.Assert(err, IsNil)
|
c.Assert(err, IsNil)
|
||||||
|
|
||||||
@@ -372,7 +373,7 @@ func (s *CmdTestSuite) TestMbCmd(c *C) {
|
|||||||
|
|
||||||
manager.On("getNewClient", sourceURL, sourceConfig, false).Return(cl1, nil).Once()
|
manager.On("getNewClient", sourceURL, sourceConfig, false).Return(cl1, nil).Once()
|
||||||
cl1.On("PutBucket").Return(nil).Once()
|
cl1.On("PutBucket").Return(nil).Once()
|
||||||
msg, err := doMakeBucketCmd(manager, sourceURLConfigMap, false)
|
msg, err := doMakeBucketCmd(manager, sourceURL, sourceConfig, false)
|
||||||
c.Assert(msg, Equals, "")
|
c.Assert(msg, Equals, "")
|
||||||
c.Assert(err, IsNil)
|
c.Assert(err, IsNil)
|
||||||
|
|
||||||
@@ -394,14 +395,14 @@ func (s *CmdTestSuite) TestMbCmdFailures(c *C) {
|
|||||||
sourceURLConfigMap[sourceURL] = sourceConfig
|
sourceURLConfigMap[sourceURL] = sourceConfig
|
||||||
|
|
||||||
manager.On("getNewClient", sourceURL, sourceConfig, false).Return(nil, errors.New("Expected Failure")).Once()
|
manager.On("getNewClient", sourceURL, sourceConfig, false).Return(nil, errors.New("Expected Failure")).Once()
|
||||||
msg, err := doMakeBucketCmd(manager, sourceURLConfigMap, false)
|
msg, err := doMakeBucketCmd(manager, sourceURL, sourceConfig, false)
|
||||||
c.Assert(len(msg) > 0, Equals, true)
|
c.Assert(len(msg) > 0, Equals, true)
|
||||||
c.Assert(err, Not(IsNil))
|
c.Assert(err, Not(IsNil))
|
||||||
|
|
||||||
manager.On("getNewClient", sourceURL, sourceConfig, false).Return(cl1, nil).Once()
|
manager.On("getNewClient", sourceURL, sourceConfig, false).Return(cl1, nil).Once()
|
||||||
cl1.On("PutBucket").Return(&net.DNSError{}).Once()
|
cl1.On("PutBucket").Return(&net.DNSError{}).Once()
|
||||||
cl1.On("PutBucket").Return(nil).Once()
|
cl1.On("PutBucket").Return(nil).Once()
|
||||||
msg, err = doMakeBucketCmd(manager, sourceURLConfigMap, false)
|
msg, err = doMakeBucketCmd(manager, sourceURL, sourceConfig, false)
|
||||||
c.Assert(msg, Equals, "")
|
c.Assert(msg, Equals, "")
|
||||||
c.Assert(err, IsNil)
|
c.Assert(err, IsNil)
|
||||||
|
|
||||||
@@ -412,7 +413,7 @@ func (s *CmdTestSuite) TestMbCmdFailures(c *C) {
|
|||||||
for i := 0; i <= globalMaxRetryFlag; i++ {
|
for i := 0; i <= globalMaxRetryFlag; i++ {
|
||||||
cl1.On("PutBucket").Return(errors.New("Another Expected Error")).Once()
|
cl1.On("PutBucket").Return(errors.New("Another Expected Error")).Once()
|
||||||
}
|
}
|
||||||
msg, err = doMakeBucketCmd(manager, sourceURLConfigMap, false)
|
msg, err = doMakeBucketCmd(manager, sourceURL, sourceConfig, false)
|
||||||
globalMaxRetryFlag = retries
|
globalMaxRetryFlag = retries
|
||||||
c.Assert(len(msg) > 0, Equals, true)
|
c.Assert(len(msg) > 0, Equals, true)
|
||||||
c.Assert(err, Not(IsNil))
|
c.Assert(err, Not(IsNil))
|
||||||
@@ -436,7 +437,7 @@ func (s *CmdTestSuite) TestMbCmdOnFile(c *C) {
|
|||||||
|
|
||||||
manager.On("getNewClient", sourceURL, sourceConfig, false).Return(cl1, nil).Once()
|
manager.On("getNewClient", sourceURL, sourceConfig, false).Return(cl1, nil).Once()
|
||||||
cl1.On("PutBucket").Return(nil).Once()
|
cl1.On("PutBucket").Return(nil).Once()
|
||||||
msg, err := doMakeBucketCmd(manager, sourceURLConfigMap, false)
|
msg, err := doMakeBucketCmd(manager, sourceURL, sourceConfig, false)
|
||||||
c.Assert(msg, Equals, "")
|
c.Assert(msg, Equals, "")
|
||||||
c.Assert(err, IsNil)
|
c.Assert(err, IsNil)
|
||||||
|
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ type Client interface {
|
|||||||
// Common operations
|
// Common operations
|
||||||
Stat() error
|
Stat() error
|
||||||
List() (items []*Item, err error)
|
List() (items []*Item, err error)
|
||||||
|
// ListNew() error
|
||||||
|
|
||||||
// Bucket operations
|
// Bucket operations
|
||||||
PutBucket() error
|
PutBucket() error
|
||||||
|
|||||||
Reference in New Issue
Block a user