Implement SegmentedFileStorage.AutoFlush
parent
72ecf658e2
commit
6358af9250
|
@ -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;
|
public static readonly int HeaderSize = 32;
|
||||||
|
|
||||||
|
|
|
@ -45,8 +45,9 @@ namespace ln.types.odb.ng.storage
|
||||||
public String DataFileName => System.IO.Path.Combine(StoragePath, "data.odb");
|
public String DataFileName => System.IO.Path.Combine(StoragePath, "data.odb");
|
||||||
|
|
||||||
public override bool IsCaching => false;
|
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<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);
|
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()
|
public override IEnumerable<Guid> GetDocumentIDs()
|
||||||
{
|
{
|
||||||
lock (this)
|
lock (this)
|
||||||
|
@ -252,6 +261,9 @@ namespace ln.types.odb.ng.storage
|
||||||
}
|
}
|
||||||
document.StorageTimeStamp = segment.TimeStamp;
|
document.StorageTimeStamp = segment.TimeStamp;
|
||||||
usedSegments.Add(segment);
|
usedSegments.Add(segment);
|
||||||
|
|
||||||
|
if (AutoFlush)
|
||||||
|
segmentedFile.Sync();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -270,8 +282,11 @@ namespace ln.types.odb.ng.storage
|
||||||
indexRoot.Remove(documentID);
|
indexRoot.Remove(documentID);
|
||||||
|
|
||||||
PushUnusedSegment(segment);
|
PushUnusedSegment(segment);
|
||||||
}
|
|
||||||
}
|
if (AutoFlush)
|
||||||
|
segmentedFile.Sync();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override bool Refresh(Document document)
|
public override bool Refresh(Document document)
|
||||||
|
|
Loading…
Reference in New Issue