Skip to content

Commit

Permalink
Merge pull request #5506 from kjzz/fix/lock
Browse files Browse the repository at this point in the history
add pin lock in AddallPin function
  • Loading branch information
Stebalien committed Oct 2, 2018
2 parents 9569f99 + dde1141 commit 5c8580d
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 37 deletions.
34 changes: 2 additions & 32 deletions core/commands/add.go
Original file line number Diff line number Diff line change
Expand Up @@ -270,7 +270,7 @@ You can now check what blocks have been created by:
fileAdder.Hidden = hidden
fileAdder.Trickle = trickle
fileAdder.Wrap = wrap
fileAdder.Pin = dopin
fileAdder.Pin = dopin && !hash
fileAdder.Silent = silent
fileAdder.RawLeaves = rawblks
fileAdder.NoCopy = nocopy
Expand All @@ -297,42 +297,12 @@ You can now check what blocks have been created by:
fileAdder.SetMfsRoot(mr)
}

addAllAndPin := func(f files.File) error {
// Iterate over each top-level file and add individually. Otherwise the
// single files.File f is treated as a directory, affecting hidden file
// semantics.
for {
file, err := f.NextFile()
if err == io.EOF {
// Finished the list of files.
break
} else if err != nil {
return err
}
if err := fileAdder.AddFile(file); err != nil {
return err
}
}

// copy intermediary nodes from editor to our actual dagservice
_, err := fileAdder.Finalize()
if err != nil {
return err
}

if hash {
return nil
}

return fileAdder.PinRoot()
}

errCh := make(chan error)
go func() {
var err error
defer func() { errCh <- err }()
defer close(outChan)
err = addAllAndPin(req.Files)
err = fileAdder.AddAllAndPin(req.Files)
}()

err = res.Emit(outChan)
Expand Down
40 changes: 37 additions & 3 deletions core/coreunix/add.go
Original file line number Diff line number Diff line change
Expand Up @@ -398,8 +398,8 @@ func (adder *Adder) addNode(node ipld.Node, path string) error {
return nil
}

// AddFile adds the given file while respecting the adder.
func (adder *Adder) AddFile(file files.File) error {
// AddAllAndPin adds the given request's files and pin them.
func (adder *Adder) AddAllAndPin(file files.File) error {
if adder.Pin {
adder.unlocker = adder.blockstore.PinLock()
}
Expand All @@ -409,7 +409,41 @@ func (adder *Adder) AddFile(file files.File) error {
}
}()

return adder.addFile(file)
switch {
case file.IsDirectory():
// Iterate over each top-level file and add individually. Otherwise the
// single files.File f is treated as a directory, affecting hidden file
// semantics.
for {
file, err := file.NextFile()
if err == io.EOF {
// Finished the list of files.
break
} else if err != nil {
return err
}
if err := adder.addFile(file); err != nil {
return err
}
}
break
default:
if err := adder.addFile(file); err != nil {
return err
}
break
}

// copy intermediary nodes from editor to our actual dagservice
_, err := adder.Finalize()
if err != nil {
return err
}

if !adder.Pin {
return nil
}
return adder.PinRoot()
}

func (adder *Adder) addFile(file files.File) error {
Expand Down
4 changes: 2 additions & 2 deletions core/coreunix/add_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ func TestAddGCLive(t *testing.T) {
go func() {
defer close(addDone)
defer close(out)
err := adder.AddFile(slf)
err := adder.AddAllAndPin(slf)

if err != nil {
t.Fatal(err)
Expand Down Expand Up @@ -191,7 +191,7 @@ func testAddWPosInfo(t *testing.T, rawLeaves bool) {

go func() {
defer close(adder.Out)
err = adder.AddFile(file)
err = adder.AddAllAndPin(file)
if err != nil {
t.Fatal(err)
}
Expand Down

0 comments on commit 5c8580d

Please sign in to comment.