Esempio n. 1
0
        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)
        }
Esempio n. 2
0
        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");
            }
        }
Esempio n. 3
0
 public LayerLogReceiver(LayerManager mylayer)
 {
     this.mylayer = mylayer;
     checkpointSegment = null;
 }