mirror of
https://github.com/ipfs/kubo.git
synced 2026-03-06 00:38:08 +08:00
Merge pull request #5506 from kjzz/fix/lock
add pin lock in AddallPin function
This commit is contained in:
commit
5c8580d6ac
@ -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
|
||||
@ -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)
|
||||
|
||||
@ -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()
|
||||
}
|
||||
@ -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 {
|
||||
|
||||
@ -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)
|
||||
@ -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)
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user