@cryptotaxi247 / kubo / commits / e2b2d0996

Flush cached directories every so often during an add

License: MIT Signed-off-by: Jeromy <jeromyj@gmail.com>

Jeromy committed Apr 29, 2017 at 12:18 UTC e2b2d0996f2faf676d479f1f71dafb330850c2fe
1 file changed +16
core/coreunix/add.go
+16
@@ -36,6 +36,8 @@ var log = logging.Logger("coreunix")
36 // how many bytes of progress to wait before sending a progress update message
37 const progressReaderIncrement = 1024 * 256
38
39 +var liveCacheSize = uint64(256 << 10)
40 +
41 type Link struct {
42 Name, Hash string
43 Size uint64
@@ -104,6 +106,7 @@ type Adder struct {
106 unlocker bs.Unlocker
107 tempRoot *cid.Cid
108 Prefix *cid.Prefix
109 + liveNodes uint64
110 }
111
112 func (adder *Adder) mfsRoot() (*mfs.Root, error) {
@@ -422,6 +425,19 @@ func (adder *Adder) addFile(file files.File) error {
425 return err
426 }
427
428 + if adder.liveNodes >= liveCacheSize {
429 + // TODO: A smarter cache that uses some sort of lru cache with an eviction handler
430 + mr, err := adder.mfsRoot()
431 + if err != nil {
432 + return err
433 + }
434 + if err := mr.Flush(); err != nil {
435 + return err
436 + }
437 + adder.liveNodes = 0
438 + }
439 + adder.liveNodes++
440 +
441 if file.IsDirectory() {
442 return adder.addDir(file)
443 }