From e2b2d0996f2faf676d479f1f71dafb330850c2fe Mon Sep 17 00:00:00 2001 From: Jeromy Date: Sat, 29 Apr 2017 12:18:30 -0700 Subject: [PATCH] Flush cached directories every so often during an add License: MIT Signed-off-by: Jeromy --- core/coreunix/add.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/core/coreunix/add.go b/core/coreunix/add.go index e8bf3a224..4a4affbd4 100644 --- a/core/coreunix/add.go +++ b/core/coreunix/add.go @@ -36,6 +36,8 @@ var log = logging.Logger("coreunix") // how many bytes of progress to wait before sending a progress update message const progressReaderIncrement = 1024 * 256 +var liveCacheSize = uint64(256 << 10) + type Link struct { Name, Hash string Size uint64 @@ -104,6 +106,7 @@ type Adder struct { unlocker bs.Unlocker tempRoot *cid.Cid Prefix *cid.Prefix + liveNodes uint64 } func (adder *Adder) mfsRoot() (*mfs.Root, error) { @@ -422,6 +425,19 @@ func (adder *Adder) addFile(file files.File) error { return err } + if adder.liveNodes >= liveCacheSize { + // TODO: A smarter cache that uses some sort of lru cache with an eviction handler + mr, err := adder.mfsRoot() + if err != nil { + return err + } + if err := mr.Flush(); err != nil { + return err + } + adder.liveNodes = 0 + } + adder.liveNodes++ + if file.IsDirectory() { return adder.addDir(file) }