Implement SegmentedFileStorage.AutoFlush

pull/2/head
Harald Wolff 2019-10-11 11:39:54 +02:00
parent 72ecf658e2
commit 6358af9250
2 changed files with 27 additions and 4 deletions

View File

@ -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;

View File

@ -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<int, SegmentedFile.Segment> unusedSegments = new MappingBTree<int, SegmentedFile.Segment>((s)=>s.Offset);
MappingBTree<Guid, SegmentedFile.Segment> usedSegments = new MappingBTree<Guid, SegmentedFile.Segment>((s)=>s.ID);
@ -176,6 +177,14 @@ namespace ln.types.odb.ng.storage
}
}
public void Sync()
{
lock (this)
{
segmentedFile.Sync();
}
}
public override IEnumerable<Guid> 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)