private void _organizeLogSegments(RootBlockLogSegment[] segments)
{
BDSkipList<long, RootBlockLogSegment> order_segments = new BDSkipList<long, RootBlockLogSegment>();
// (2) scan and organize the log-segments (so they are in proper order)
foreach (RootBlockLogSegment seg in segments) {
Stream logsegment = regionmgr.readRegionAddr(seg.logsegment_start).getNewAccessStream();
BinaryReader br = new BinaryReader(logsegment);
LogPacketHeader hdr = Util.readStruct<LogPacketHeader>(br);
if (hdr.magic != LogPacketHeader.LOG_MAGIC) {
abortCorrupt(String.Format("_organizeLogSegments() found corrupt log segment! magic => {0}", hdr.magic));
}
if (hdr.cmddata_length == 0 && hdr.checksum == 0) {
empty_log_segments.Add(seg);
} else {
order_segments.Add(hdr.curLWSN, seg);
}
logsegment.Close();
}
// now insert the active segments in proper order..
foreach (var kvp in order_segments.scanForward(ScanRange<long>.All())) {
Console.WriteLine("active segment: {0}", kvp.Key);
active_log_segments.Add(kvp.Value);
}
}