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