From 6358af9250dba47cc9822ff369785affe3ffc9d2 Mon Sep 17 00:00:00 2001 From: Harald Wolff Date: Fri, 11 Oct 2019 11:39:54 +0200 Subject: [PATCH] Implement SegmentedFileStorage.AutoFlush --- odb/ng/storage/SegmentedFile.cs | 10 +++++++++- odb/ng/storage/fs/SegmentedFileStorage.cs | 21 ++++++++++++++++++--- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/odb/ng/storage/SegmentedFile.cs b/odb/ng/storage/SegmentedFile.cs index a135ed1..7263e14 100644 --- a/odb/ng/storage/SegmentedFile.cs +++ b/odb/ng/storage/SegmentedFile.cs @@ -252,7 +252,15 @@ namespace ln.types.odb.ng.storage } } - public class Segment + public void Sync() + { + lock (this) + { + fileStream.Flush(); + } + } + + public class Segment { public static readonly int HeaderSize = 32; diff --git a/odb/ng/storage/fs/SegmentedFileStorage.cs b/odb/ng/storage/fs/SegmentedFileStorage.cs index 2664936..3838713 100644 --- a/odb/ng/storage/fs/SegmentedFileStorage.cs +++ b/odb/ng/storage/fs/SegmentedFileStorage.cs @@ -45,8 +45,9 @@ namespace ln.types.odb.ng.storage public String DataFileName => System.IO.Path.Combine(StoragePath, "data.odb"); public override bool IsCaching => false; + public bool AutoFlush { get; set; } = true; - SegmentedFile segmentedFile; + SegmentedFile segmentedFile; MappingBTree unusedSegments = new MappingBTree((s)=>s.Offset); MappingBTree usedSegments = new MappingBTree((s)=>s.ID); @@ -176,6 +177,14 @@ namespace ln.types.odb.ng.storage } } + public void Sync() + { + lock (this) + { + segmentedFile.Sync(); + } + } + public override IEnumerable GetDocumentIDs() { lock (this) @@ -252,6 +261,9 @@ namespace ln.types.odb.ng.storage } document.StorageTimeStamp = segment.TimeStamp; usedSegments.Add(segment); + + if (AutoFlush) + segmentedFile.Sync(); } } @@ -270,8 +282,11 @@ namespace ln.types.odb.ng.storage indexRoot.Remove(documentID); PushUnusedSegment(segment); - } - } + + if (AutoFlush) + segmentedFile.Sync(); + } + } } public override bool Refresh(Document document)