Skip to content

Commit e2b2d09

Browse files
committed
Flush cached directories every so often during an add
License: MIT Signed-off-by: Jeromy <[email protected]>
1 parent e5529cd commit e2b2d09

File tree

1 file changed

+16
-0
lines changed

1 file changed

+16
-0
lines changed

core/coreunix/add.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ var log = logging.Logger("coreunix")
3636
// how many bytes of progress to wait before sending a progress update message
3737
const progressReaderIncrement = 1024 * 256
3838

39+
var liveCacheSize = uint64(256 << 10)
40+
3941
type Link struct {
4042
Name, Hash string
4143
Size uint64
@@ -104,6 +106,7 @@ type Adder struct {
104106
unlocker bs.Unlocker
105107
tempRoot *cid.Cid
106108
Prefix *cid.Prefix
109+
liveNodes uint64
107110
}
108111

109112
func (adder *Adder) mfsRoot() (*mfs.Root, error) {
@@ -422,6 +425,19 @@ func (adder *Adder) addFile(file files.File) error {
422425
return err
423426
}
424427

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+
425441
if file.IsDirectory() {
426442
return adder.addDir(file)
427443
}

0 commit comments

Comments
 (0)