Пример #1
0
    def load(cls, io):
        chunkfile = ChunkFile.open(io)
        _, logindexheader, logindexio = ChunkIO.from_name(chunkfile, LOG_INDEX_NAME)
        _, logbufferheader, logbufferio = ChunkIO.from_name(chunkfile, LOG_BUFFER_NAME)
       
        logindex_reader = LogIndexReader(logindexio, logindexheader.length/LogIndexEntrySerializer.SERIALIZED_LENGTH)
        logindex = SerializedLogIndex.load(logindex_reader)

        logbuffer_reader = LogBufferReader(logbufferio, logbufferheader.length)
        logbuffer = LogBuffer.load(logindex, logbuffer_reader)
        
        txlog = TransactionLog(chunkfile, logindex, logbuffer)
        
        outpointchunk, outpointchunkheader = chunkfile.get_chunk(OUTPOINTS_NAME) 
        outpoint_io = TransactionalIO(txlog, outpointchunk)
        outpoint_reader = OutpointIndexReader(outpoint_io, outpointchunkheader.length)
        outpoints = SerializedItemSet.load(outpoint_reader)
        return cls(txlog, outpoints)
Пример #2
0
 def test_SerializedLogIndex_recover_ErasesLastUnfinishedTransaction(self):
     COUNT = 10
     io = IoHandle.using_stringio(COUNT)
     reader = LogIndexReader(io, COUNT)
     logindex = SerializedLogIndex.new(reader)
     logindex.log(LogIndexEntry(LogIndexEntry.BEGIN_TX))
     logindex.log(LogIndexEntry(LogIndexEntry.WRITE, 1))
     logindex.log(LogIndexEntry(LogIndexEntry.WRITE, 2))
     logindex.log(LogIndexEntry(LogIndexEntry.END_TX))
     logindex.log(LogIndexEntry(LogIndexEntry.BEGIN_TX))
     logindex.log(LogIndexEntry(LogIndexEntry.WRITE, 3))
     logindex.log(LogIndexEntry(LogIndexEntry.WRITE, 4))
     logindex2 = SerializedLogIndex.load(reader)
     
     logindex2.recover()
     
     self.assertEquals(logindex2.tocommit, 
                       deque([ LogIndexEntry(LogIndexEntry.BEGIN_TX),
                               LogIndexEntry(LogIndexEntry.WRITE, 1),
                               LogIndexEntry(LogIndexEntry.WRITE, 2),
                               LogIndexEntry(LogIndexEntry.END_TX)] ))
Пример #3
0
    def test_SerializedLogIndex_recover_ErasesLastUnfinishedTransaction(self):
        COUNT = 10
        io = IoHandle.using_stringio(COUNT)
        reader = LogIndexReader(io, COUNT)
        logindex = SerializedLogIndex.new(reader)
        logindex.log(LogIndexEntry(LogIndexEntry.BEGIN_TX))
        logindex.log(LogIndexEntry(LogIndexEntry.WRITE, 1))
        logindex.log(LogIndexEntry(LogIndexEntry.WRITE, 2))
        logindex.log(LogIndexEntry(LogIndexEntry.END_TX))
        logindex.log(LogIndexEntry(LogIndexEntry.BEGIN_TX))
        logindex.log(LogIndexEntry(LogIndexEntry.WRITE, 3))
        logindex.log(LogIndexEntry(LogIndexEntry.WRITE, 4))
        logindex2 = SerializedLogIndex.load(reader)

        logindex2.recover()

        self.assertEquals(
            logindex2.tocommit,
            deque([
                LogIndexEntry(LogIndexEntry.BEGIN_TX),
                LogIndexEntry(LogIndexEntry.WRITE, 1),
                LogIndexEntry(LogIndexEntry.WRITE, 2),
                LogIndexEntry(LogIndexEntry.END_TX)
            ]))
Пример #4
0
    def load(cls, io):
        chunkfile = ChunkFile.open(io)
        _, logindexheader, logindexio = ChunkIO.from_name(
            chunkfile, LOG_INDEX_NAME)
        _, logbufferheader, logbufferio = ChunkIO.from_name(
            chunkfile, LOG_BUFFER_NAME)

        logindex_reader = LogIndexReader(
            logindexio,
            logindexheader.length / LogIndexEntrySerializer.SERIALIZED_LENGTH)
        logindex = SerializedLogIndex.load(logindex_reader)

        logbuffer_reader = LogBufferReader(logbufferio, logbufferheader.length)
        logbuffer = LogBuffer.load(logindex, logbuffer_reader)

        txlog = TransactionLog(chunkfile, logindex, logbuffer)

        outpointchunk, outpointchunkheader = chunkfile.get_chunk(
            OUTPOINTS_NAME)
        outpoint_io = TransactionalIO(txlog, outpointchunk)
        outpoint_reader = OutpointIndexReader(outpoint_io,
                                              outpointchunkheader.length)
        outpoints = SerializedItemSet.load(outpoint_reader)
        return cls(txlog, outpoints)