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;
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue