Bend.LogSegmentsHandler._organizeLogSegments C# (CSharp) Method

_organizeLogSegments() private method

private _organizeLogSegments ( RootBlockLogSegment segments ) : void
segments RootBlockLogSegment
return void
        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);
            }
        }