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
}