Пример #1
0
    def test_FindEmptyLocation_CalledWithMultipleValues_ReturnsFirstLargeEnoughEntry(self):
        logs = {(1,2) : "log1", (4,5) : "log2", (8,10) : "log3"}
        logbuff = LogBuffer(mock.Mock(iosize=10), logs)
        self.assertEquals(logbuff.getunallocated(), [(0, 1), (2, 4), (5, 8)])

        self.assertEquals(logbuff.find_empty_location(1), 0)
        self.assertEquals(logbuff.find_empty_location(2), 2)
        self.assertEquals(logbuff.find_empty_location(3), 5)
Пример #2
0
    def test_FindEmptyLocation_CalledWithMultipleValues_ReturnsFirstLargeEnoughEntry(
            self):
        logs = {(1, 2): "log1", (4, 5): "log2", (8, 10): "log3"}
        logbuff = LogBuffer(mock.Mock(iosize=10), logs)
        self.assertEquals(logbuff.getunallocated(), [(0, 1), (2, 4), (5, 8)])

        self.assertEquals(logbuff.find_empty_location(1), 0)
        self.assertEquals(logbuff.find_empty_location(2), 2)
        self.assertEquals(logbuff.find_empty_location(3), 5)
Пример #3
0
 def test_load_WhenCalledWithLogIndexAndBufferReader_WriteLogsAreCorrectlyAssigned(self):
     logbuffer_reader = mock.Mock(read_entry = lambda pos: {0: ("log1", 1), 10: ("log2", 5)}[pos])
     logindex = mock.Mock(tocommit = [ LogIndexEntry(LogIndexEntry.WRITE, 0),
                                       LogIndexEntry(LogIndexEntry.WRITE, 10)])
     
     logbuff = LogBuffer.load(logindex, logbuffer_reader)
     
     self.assertEquals(logbuff.writelogs, 
                       {(0, 1) : "log1", (10, 15): "log2"})
Пример #4
0
    def test_load_WhenCalledWithLogIndexAndBufferReader_WriteLogsAreCorrectlyAssigned(
            self):
        logbuffer_reader = mock.Mock(read_entry=lambda pos: {
            0: ("log1", 1),
            10: ("log2", 5)
        }[pos])
        logindex = mock.Mock(tocommit=[
            LogIndexEntry(LogIndexEntry.WRITE, 0),
            LogIndexEntry(LogIndexEntry.WRITE, 10)
        ])

        logbuff = LogBuffer.load(logindex, logbuffer_reader)

        self.assertEquals(logbuff.writelogs, {
            (0, 1): "log1",
            (10, 15): "log2"
        })
Пример #5
0
    def test_1(self):
        IO_SIZE = 1000
        BUFFER_SIZE = 1000
        INDEX_COUNT = 20
        io = IoHandle.using_stringio(BUFFER_SIZE)
        buffer_reader = LogBufferReader(io, BUFFER_SIZE)
        logbuffer = LogBuffer(buffer_reader)

        io = IoHandle.using_stringio(
            LogIndexEntrySerializer.SERIALIZED_LENGTH * INDEX_COUNT)
        logindex_reader = LogIndexReader(io, INDEX_COUNT)
        logindex = SerializedLogIndex.new(logindex_reader)

        io = MultiChunkIO.using_stringios({0: IO_SIZE})
        log = TransactionalChunkFile(io, logindex, logbuffer, 1, 2)
        log.start_transaction()
        log.write(0, 3, "hello test")
        log.write(0, 12, "hello blog")
Пример #6
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)
Пример #7
0
    def new(cls, io):
        IO_SIZE = 1000
        BUFFER_SIZE = 10000
        INDEX_COUNT = 50
        OUTPOINTS_SIZE = 1000

        fileheader = FileHeader()
        io.write(FileHeaderSerializer.serialize(fileheader))
        #write chunks
        chunkfile = ChunkFile(io)
        chunkfile.append_chunk(
            LOG_INDEX_NAME,
            INDEX_COUNT * LogIndexEntrySerializer.SERIALIZED_LENGTH)
        chunkfile.append_chunk(LOG_BUFFER_NAME, BUFFER_SIZE)
        chunkfile.append_chunk(OUTPOINTS_NAME, OUTPOINTS_SIZE)
        #Load log index and log buffer
        _, _logindexheader, logindexio = chunkfile.open_chunk(LOG_INDEX_NAME)
        logindex_reader = LogIndexReader(logindexio, INDEX_COUNT)

        logindex = SerializedLogIndex.new(logindex_reader)
        _, logbufferheader, logbufferio = chunkfile.open_chunk(LOG_BUFFER_NAME)
        buffer_reader = LogBufferReader(logbufferio, logbufferheader.length)
        logbuffer = LogBuffer(buffer_reader)
        # format other chunks ( not transactionally)
        _, outpointsheader, outpointsio = chunkfile.open_chunk(OUTPOINTS_NAME)
        outpoint_dict = SerializedDict.new(outpointsio,
                                           outpointsheader.length,
                                           serializer=OutpointIndexSerializer)
        SerializedItemSet.load(outpoint_dict)
        #
        txlog = TransactionLog(chunkfile, logindex, logbuffer)

        outpointchunk, outpointchunkheader = chunkfile.get_chunk(
            OUTPOINTS_NAME)
        outpoint_io = TransactionalIO(txlog, outpointchunk)
        outpoint_reader = SerializedDict.load(outpoint_io, OUTPOINTS_SIZE,
                                              OutpointIndexSerializer)
        outpoints = SerializedItemSet.load(outpoint_reader)
        return cls(txlog, outpoints)
Пример #8
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)
Пример #9
0
 def test_getunallocated_WithMultipleLogs_ReturnsSpaceBetweenLogs(self):
     logs = {(10,20) : "log1", (30,40) : "log2", (70,99) : "log3"}
     logbuff = LogBuffer(mock.Mock(iosize=100), logs)
     
     self.assertEquals(logbuff.getunallocated(), [(0, 10), (20, 30), (40, 70), (99, 100)])
Пример #10
0
 def test_getunallocated_WithTwoLogsWithSpaceInbetween_ReturnsSpaceBetweenLogs(self):
     logs = {(0,1) : "log1", (2,3) : "log2"}
     logbuff = LogBuffer(mock.Mock(iosize=3), logs)
     
     self.assertEquals(logbuff.getunallocated(), [(1, 2)])
Пример #11
0
 def test_getunallocated_WithTwoLogsTakingAllSpace_ReturnsEmpty(self):
     logs = {(0,1) : "log1", (1,2) : "log2"}
     logbuff = LogBuffer(mock.Mock(iosize=2), logs)
     
     self.assertEquals(logbuff.getunallocated(), [])
Пример #12
0
 def test_getunallocated_WithOneLogEndingAtBufferSize_ReturnsOnlyOneRangeAtTheBeginning(self):
     logs = {(1,2) : "log1"}
     logbuff = LogBuffer(mock.Mock(iosize=2), logs)
     
     self.assertEquals(logbuff.getunallocated(), [(0, 1)])
Пример #13
0
 def test_getunallocated_WithOneLogStartingAtBegining_ReturnsOnlyOneRangeAtTheEnd(self):
     logs = {(0,1) : "log1"}
     logbuff = LogBuffer(mock.Mock(iosize=2), logs)
     
     self.assertEquals(logbuff.getunallocated(), [(1, 2)])
Пример #14
0
 def test_getunallocated_WithEmptyWriteLogs_ReturnsZeroToBufferSize(self):
     writelogs = {}
     logbuff = LogBuffer(mock.Mock(iosize=100), writelogs)
     
     self.assertEquals(logbuff.getunallocated(), [(0, 100)])
Пример #15
0
    def test_getunallocated_WithEmptyWriteLogs_ReturnsZeroToBufferSize(self):
        writelogs = {}
        logbuff = LogBuffer(mock.Mock(iosize=100), writelogs)

        self.assertEquals(logbuff.getunallocated(), [(0, 100)])
Пример #16
0
    def test_getunallocated_WithMultipleLogs_ReturnsSpaceBetweenLogs(self):
        logs = {(10, 20): "log1", (30, 40): "log2", (70, 99): "log3"}
        logbuff = LogBuffer(mock.Mock(iosize=100), logs)

        self.assertEquals(logbuff.getunallocated(), [(0, 10), (20, 30),
                                                     (40, 70), (99, 100)])
Пример #17
0
    def test_getunallocated_WithTwoLogsWithSpaceInbetween_ReturnsSpaceBetweenLogs(
            self):
        logs = {(0, 1): "log1", (2, 3): "log2"}
        logbuff = LogBuffer(mock.Mock(iosize=3), logs)

        self.assertEquals(logbuff.getunallocated(), [(1, 2)])
Пример #18
0
    def test_getunallocated_WithTwoLogsTakingAllSpace_ReturnsEmpty(self):
        logs = {(0, 1): "log1", (1, 2): "log2"}
        logbuff = LogBuffer(mock.Mock(iosize=2), logs)

        self.assertEquals(logbuff.getunallocated(), [])
Пример #19
0
    def test_getunallocated_WithOneLogEndingAtBufferSize_ReturnsOnlyOneRangeAtTheBeginning(
            self):
        logs = {(1, 2): "log1"}
        logbuff = LogBuffer(mock.Mock(iosize=2), logs)

        self.assertEquals(logbuff.getunallocated(), [(0, 1)])
Пример #20
0
    def test_getunallocated_WithOneLogStartingAtBegining_ReturnsOnlyOneRangeAtTheEnd(
            self):
        logs = {(0, 1): "log1"}
        logbuff = LogBuffer(mock.Mock(iosize=2), logs)

        self.assertEquals(logbuff.getunallocated(), [(1, 2)])