1
0
mirror of https://github.com/minio/mc.git synced 2025-11-12 01:02:26 +03:00

Fix sync bug when in TypeA and TypeB sync style source doesn't exist

This commit is contained in:
Harshavardhana
2015-06-22 15:56:58 -07:00
parent 4b88ad7786
commit 9b901bac21
4 changed files with 46 additions and 2 deletions

View File

@@ -23,6 +23,7 @@ import (
"os"
"os/signal"
"runtime"
"strings"
"sync"
"github.com/minio/cli"
@@ -71,9 +72,13 @@ EXAMPLES:
// doSyncSession - Sync an object to multiple destination
func doSyncSession(sURLs syncURLs, bar *barSend, syncQueue chan bool, ssCh chan syncSession, wg *sync.WaitGroup, s *sessionV1) {
// waitgroup reply deferred until this function returns
defer wg.Done()
// hold lock for map updates inside session
s.Lock.Lock()
defer s.Lock.Unlock()
if !globalQuietFlag {
bar.SetCaption(sURLs.SourceContent.Name + ": ")
}
@@ -105,6 +110,10 @@ func doSyncSession(sURLs syncURLs, bar *barSend, syncQueue chan bool, ssCh chan
var newReader io.Reader
switch globalQuietFlag {
case true:
console.Infos(SyncMessage{
Source: sURLs.SourceContent.Name,
Target: strings.Join(targetURLs, " "),
})
newReader = yielder.NewReader(reader)
default:
// set up progress

View File

@@ -53,6 +53,13 @@ type cpURLs struct {
Error error
}
func (c cpURLs) IsEmpty() bool {
if c.SourceContent == nil && c.TargetContent == nil {
return true
}
return false
}
type cpURLsType uint8
const (

View File

@@ -74,6 +74,7 @@ func (i InfoMessage) String() string {
return i.Message
}
// CopyMessage container for file copy messages
type CopyMessage struct {
Message string `json:"message"`
Source string `json:"source"`
@@ -83,3 +84,10 @@ type CopyMessage struct {
func (c CopyMessage) String() string {
return fmt.Sprintf("%s -> %s", c.Source, c.Target)
}
// SyncMessage container for file sync messages, inherits CopyMessage
type SyncMessage CopyMessage
func (s SyncMessage) String() string {
return fmt.Sprintf("%s -> %s", s.Source, s.Target)
}

View File

@@ -52,6 +52,22 @@ type syncURLs struct {
Error error
}
func (s syncURLs) IsEmpty() bool {
empty := false
if s.SourceContent == nil {
empty = true
if s.TargetContents == nil {
empty = true
return empty
}
if len(s.TargetContents) > 0 && s.TargetContents[0] == nil {
empty = true
return empty
}
}
return empty
}
type syncURLsType cpURLsType
// guessSyncURLType guesses the type of URL. This approach all allows prepareURL
@@ -91,7 +107,9 @@ func prepareSyncURLsTypeA(sourceURL string, targetURLs []string) <-chan syncURLs
sURLs.SourceContent = cURLs.SourceContent
sURLs.TargetContents = append(sURLs.TargetContents, cURLs.TargetContent)
}
syncURLsCh <- sURLs
if !sURLs.IsEmpty() {
syncURLsCh <- sURLs
}
}()
return syncURLsCh
}
@@ -113,7 +131,9 @@ func prepareSyncURLsTypeB(sourceURL string, targetURLs []string) <-chan syncURLs
sURLs.SourceContent = cURLs.SourceContent
sURLs.TargetContents = append(sURLs.TargetContents, cURLs.TargetContent)
}
syncURLsCh <- sURLs
if !sURLs.IsEmpty() {
syncURLsCh <- sURLs
}
}()
return syncURLsCh
}