From 1379ee76f36468ce646750afa008ede66b25c5b9 Mon Sep 17 00:00:00 2001 From: Kejie Zhang <601172892@qq.com> Date: Fri, 21 Sep 2018 14:55:15 +0800 Subject: [PATCH 1/2] add pin lock in AddallPin function License: MIT Signed-off-by: Kejie Zhang <601172892@qq.com> --- core/commands/add.go | 33 ++----------------------------- core/coreunix/add.go | 41 ++++++++++++++++++++++++++++++++++++--- core/coreunix/add_test.go | 4 ++-- 3 files changed, 42 insertions(+), 36 deletions(-) diff --git a/core/commands/add.go b/core/commands/add.go index b7f3d6a84..fc50f3dc2 100644 --- a/core/commands/add.go +++ b/core/commands/add.go @@ -276,6 +276,7 @@ You can now check what blocks have been created by: fileAdder.NoCopy = nocopy fileAdder.Name = pathName fileAdder.CidBuilder = prefix + fileAdder.Hash = hash if inline { fileAdder.CidBuilder = cidutil.InlineBuilder{ @@ -297,42 +298,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) diff --git a/core/coreunix/add.go b/core/coreunix/add.go index ad8450f6a..64fa7ca13 100644 --- a/core/coreunix/add.go +++ b/core/coreunix/add.go @@ -86,6 +86,7 @@ type Adder struct { Name string NoCopy bool Chunker string + Hash bool root ipld.Node mroot *mfs.Root unlocker bstore.Unlocker @@ -398,8 +399,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 +410,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.Hash { + return nil + } + return adder.PinRoot() } func (adder *Adder) addFile(file files.File) error { diff --git a/core/coreunix/add_test.go b/core/coreunix/add_test.go index d2c9c7337..bba5d7ce8 100644 --- a/core/coreunix/add_test.go +++ b/core/coreunix/add_test.go @@ -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) } From dde11416f6a717acd00743dc75556cc58ac09d31 Mon Sep 17 00:00:00 2001 From: Kejie Zhang <601172892@qq.com> Date: Sun, 23 Sep 2018 22:26:32 +0800 Subject: [PATCH 2/2] delete useless hash param in adder License: MIT Signed-off-by: Kejie Zhang <601172892@qq.com> --- core/commands/add.go | 3 +-- core/coreunix/add.go | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/core/commands/add.go b/core/commands/add.go index fc50f3dc2..40e170cdb 100644 --- a/core/commands/add.go +++ b/core/commands/add.go @@ -270,13 +270,12 @@ 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 fileAdder.Name = pathName fileAdder.CidBuilder = prefix - fileAdder.Hash = hash if inline { fileAdder.CidBuilder = cidutil.InlineBuilder{ diff --git a/core/coreunix/add.go b/core/coreunix/add.go index 64fa7ca13..3792db943 100644 --- a/core/coreunix/add.go +++ b/core/coreunix/add.go @@ -86,7 +86,6 @@ type Adder struct { Name string NoCopy bool Chunker string - Hash bool root ipld.Node mroot *mfs.Root unlocker bstore.Unlocker @@ -441,7 +440,7 @@ func (adder *Adder) AddAllAndPin(file files.File) error { return err } - if adder.Hash { + if !adder.Pin { return nil } return adder.PinRoot()