public void DEBUG_addNewWorkingSegmentWithoutFlush() { // (1) create a new working segment SegmentMemoryBuilder newlayer = new SegmentMemoryBuilder(); SegmentMemoryBuilder checkpointSegment; int checkpoint_segment_size; Console.WriteLine("************ WARNING ************ Using DEBUG_addNewWorkingSegmentWithoutFlush()"); lock (flushLock) { lock (this.segmentlayers) { checkpointSegment = workingSegment; checkpoint_segment_size = checkpointSegment.RowCount; workingSegment = newlayer; segmentlayers.Insert(0, workingSegment); } } Console.WriteLine("*********** num memory layers = {0}", segmentlayers.Count); this.debugDump(); // (2) wait a moment, then check that the old working segment was no longer written (or make it readonly) }
public void handleCommand(LogCommands cmd, byte[] cmddata) { if (cmd == LogCommands.UPDATE) { // decode basic block key/value writes BlockAccessor ba = new BlockAccessor(cmddata); ISegmentBlockDecoder decoder = new SegmentBlockBasicDecoder(ba); foreach (KeyValuePair<RecordKey, RecordUpdate> kvp in decoder.sortedWalk()) { // add the updates to our working segment... lock (mylayer.segmentlayers) { #if false // some status debug code... if (RangemapManager.RangeKey.isRangeKey(kvp.Key)) { System.Console.WriteLine("LayerManager.handleCommand : setValue() {0} => {1}", kvp.Key.ToString(), kvp.Value.ToString()); if (kvp.Value.type != RecordUpdateTypes.DELETION_TOMBSTONE && kvp.Value.data.Length != 16) { throw new Exception("!!! corrupted rangekey appeared in handleCommand"); } } #endif mylayer.workingSegment.setRecord(kvp.Key, kvp.Value); } } } else if (cmd == LogCommands.CHECKPOINT_START) { // here we move aside the checkpoint segment... // - if this is during live operation, the checkpoint is running as soon as we return. // - if this is during recovery, there is no checkpoint running and we'll need to // TODO: we need some kind of key/checksum to be sure that we CHECKPOINT and DROP the right dataF checkpointSegment = mylayer.workingSegment; SegmentMemoryBuilder newsegment = new SegmentMemoryBuilder(); lock (mylayer.segmentlayers) { mylayer.workingSegment = newsegment; mylayer.segmentlayers.Insert(0, mylayer.workingSegment); } } else if (cmd == LogCommands.CHECKPOINT_DROP) { // TODO: we need some kind of key/checksum to be sure that we CHECKPOINT and DROP the right data if (checkpointSegment != null) { lock (mylayer.segmentlayers) { mylayer.segmentlayers.Remove(checkpointSegment); checkpointSegment = null; } } else { throw new Exception("can't drop, no segment to drop"); } } else { throw new Exception("unimplemented command"); } }
public LayerLogReceiver(LayerManager mylayer) { this.mylayer = mylayer; checkpointSegment = null; }