@cryptotaxi247 / kubo / commits / 1379ee76f

add pin lock in AddallPin function

License: MIT Signed-off-by: Kejie Zhang <601172892@qq.com>

Kejie Zhang committed Sep 21, 2018 at 14:55 UTC 1379ee76f36468ce646750afa008ede66b25c5b9
3 files changed +42 -36
core/commands/add.go
+2 -31
@@ -276,6 +276,7 @@ You can now check what blocks have been created by:
276 fileAdder.NoCopy = nocopy
277 fileAdder.Name = pathName
278 fileAdder.CidBuilder = prefix
279 + fileAdder.Hash = hash
280
281 if inline {
282 fileAdder.CidBuilder = cidutil.InlineBuilder{
@@ -297,42 +298,12 @@ You can now check what blocks have been created by:
298 fileAdder.SetMfsRoot(mr)
299 }
300
300 - addAllAndPin := func(f files.File) error {
301 - // Iterate over each top-level file and add individually. Otherwise the
302 - // single files.File f is treated as a directory, affecting hidden file
303 - // semantics.
304 - for {
305 - file, err := f.NextFile()
306 - if err == io.EOF {
307 - // Finished the list of files.
308 - break
309 - } else if err != nil {
310 - return err
311 - }
312 - if err := fileAdder.AddFile(file); err != nil {
313 - return err
314 - }
315 - }
316 -
317 - // copy intermediary nodes from editor to our actual dagservice
318 - _, err := fileAdder.Finalize()
319 - if err != nil {
320 - return err
321 - }
322 -
323 - if hash {
324 - return nil
325 - }
326 -
327 - return fileAdder.PinRoot()
328 - }
329 -
301 errCh := make(chan error)
302 go func() {
303 var err error
304 defer func() { errCh <- err }()
305 defer close(outChan)
335 - err = addAllAndPin(req.Files)
306 + err = fileAdder.AddAllAndPin(req.Files)
307 }()
308
309 err = res.Emit(outChan)
core/coreunix/add.go
+38 -3
@@ -86,6 +86,7 @@ type Adder struct {
86 Name string
87 NoCopy bool
88 Chunker string
89 + Hash bool
90 root ipld.Node
91 mroot *mfs.Root
92 unlocker bstore.Unlocker
@@ -398,8 +399,8 @@ func (adder *Adder) addNode(node ipld.Node, path string) error {
399 return nil
400 }
401
401 -// AddFile adds the given file while respecting the adder.
402 -func (adder *Adder) AddFile(file files.File) error {
402 +// AddAllAndPin adds the given request's files and pin them.
403 +func (adder *Adder) AddAllAndPin(file files.File) error {
404 if adder.Pin {
405 adder.unlocker = adder.blockstore.PinLock()
406 }
@@ -409,7 +410,41 @@ func (adder *Adder) AddFile(file files.File) error {
410 }
411 }()
412
412 - return adder.addFile(file)
413 + switch {
414 + case file.IsDirectory():
415 + // Iterate over each top-level file and add individually. Otherwise the
416 + // single files.File f is treated as a directory, affecting hidden file
417 + // semantics.
418 + for {
419 + file, err := file.NextFile()
420 + if err == io.EOF {
421 + // Finished the list of files.
422 + break
423 + } else if err != nil {
424 + return err
425 + }
426 + if err := adder.addFile(file); err != nil {
427 + return err
428 + }
429 + }
430 + break
431 + default:
432 + if err := adder.addFile(file); err != nil {
433 + return err
434 + }
435 + break
436 + }
437 +
438 + // copy intermediary nodes from editor to our actual dagservice
439 + _, err := adder.Finalize()
440 + if err != nil {
441 + return err
442 + }
443 +
444 + if adder.Hash {
445 + return nil
446 + }
447 + return adder.PinRoot()
448 }
449
450 func (adder *Adder) addFile(file files.File) error {
core/coreunix/add_test.go
+2 -2
@@ -85,7 +85,7 @@ func TestAddGCLive(t *testing.T) {
85 go func() {
86 defer close(addDone)
87 defer close(out)
88 - err := adder.AddFile(slf)
88 + err := adder.AddAllAndPin(slf)
89
90 if err != nil {
91 t.Fatal(err)
@@ -191,7 +191,7 @@ func testAddWPosInfo(t *testing.T, rawLeaves bool) {
191
192 go func() {
193 defer close(adder.Out)
194 - err = adder.AddFile(file)
194 + err = adder.AddAllAndPin(file)
195 if err != nil {
196 t.Fatal(err)
197 }