public void advanceActiveLogSegment()
{
Console.WriteLine("advance to next segment");
// close the current active segment
currentLogHeadStream.Close();
// advance to the next empty log stream...
if (empty_log_segments.Count == 0) {
// no more empty log segments!
this.logwriter.receiver.requestLogExtension();
if (empty_log_segments.Count == 0) {
throw new Exception("forceCheckpoint() failed to free log segments");
}
}
this.notifyLogStatus();
lock (this) {
currentLogSegmentInfo = empty_log_segments[0];
empty_log_segments.RemoveAt(0);
active_log_segments.Add(currentLogSegmentInfo);
}
// open the current log stream...
currentLogHeadStream = regionmgr.writeExistingRegionAddr(currentLogSegmentInfo.logsegment_start).getNewAccessStream();
if (currentLogHeadStream.Position != 0) {
throw new Exception(String.Format("advanced to non-start of segment! pos = {0}", currentLogHeadStream.Position));
}
}