public void CanPinBufferMultipleTimesAndUnpinMultipleTimes() { _poolStrategy = new LRUBufferPoolStrategy(_logManager, _fileManager, 3); _bufferManager = new BufferManager(_fileManager, _logManager, _poolStrategy, null, null); var filename = RandomFilename; var pageFormatter = new BasePageFormatter(); var buffer1 = _bufferManager.PinNew(filename, pageFormatter); Assert.IsTrue(buffer1.IsPinned); Assert.AreEqual(2, _bufferManager.Available); var buffer2 = _bufferManager.Pin(buffer1.Block); Assert.IsTrue(buffer2.IsPinned); Assert.AreEqual(2, _bufferManager.Available); _bufferManager.Unpin(buffer1); Assert.IsTrue(buffer1.IsPinned); Assert.AreEqual(2, _bufferManager.Available); _bufferManager.Unpin(buffer2); Assert.IsFalse(buffer2.IsPinned); Assert.AreEqual(3, _bufferManager.Available); }
public void CannotPinMoreNewBlocksThatPoolHave() { _poolStrategy = new LRUBufferPoolStrategy(_logManager, _fileManager, 3); _bufferManager = new BufferManager(_fileManager, _logManager, _poolStrategy, TimeSpan.FromMilliseconds(500), TimeSpan.FromMilliseconds(100)); var filename = RandomFilename; var pageFormatter = new BasePageFormatter(); var buffer1 = _bufferManager.PinNew(filename, pageFormatter); var buffer2 = _bufferManager.PinNew(filename, pageFormatter); var buffer3 = _bufferManager.PinNew(filename, pageFormatter); Assert.IsTrue(buffer1.IsPinned); Assert.IsTrue(buffer2.IsPinned); Assert.IsTrue(buffer3.IsPinned); Assert.AreEqual(filename, buffer1.Block.Filename); Assert.AreEqual(0, buffer1.Block.Id); Assert.AreEqual(filename, buffer2.Block.Filename); Assert.AreEqual(1, buffer2.Block.Id); Assert.AreEqual(filename, buffer3.Block.Filename); Assert.AreEqual(2, buffer3.Block.Id); Assert.Throws <BufferBusyException>(() => { var buffer4 = _bufferManager.PinNew(filename, pageFormatter); }); Assert.AreEqual(0, _bufferManager.Available); }
public void CanUnpinBuffer() { _poolStrategy = new LRUBufferPoolStrategy(_logManager, _fileManager, 3); var filename = RandomFilename; var pageFormatter = new BasePageFormatter(); var buffer1 = _poolStrategy.PinNew(filename, pageFormatter); var buffer2 = _poolStrategy.PinNew(filename, pageFormatter); Assert.IsTrue(buffer1.IsPinned); Assert.IsTrue(buffer2.IsPinned); Assert.AreEqual(filename, buffer1.Block.Filename); Assert.AreEqual(0, buffer1.Block.Id); Assert.AreEqual(filename, buffer2.Block.Filename); Assert.AreEqual(1, buffer2.Block.Id); Assert.AreEqual(1, _poolStrategy.Available); _poolStrategy.Unpin(buffer1); Assert.IsFalse(buffer1.IsPinned); Assert.AreEqual(2, _poolStrategy.Available); _poolStrategy.Unpin(buffer2); Assert.IsFalse(buffer2.IsPinned); Assert.AreEqual(3, _poolStrategy.Available); }
public void CanPinNewBuffer() { _poolStrategy = new LRUBufferPoolStrategy(_logManager, _fileManager, 3); _bufferManager = new BufferManager(_fileManager, _logManager, _poolStrategy, null, null); var filename = RandomFilename; var pageFormatter = new BasePageFormatter(); var buffer1 = _bufferManager.PinNew(filename, pageFormatter); var buffer2 = _bufferManager.PinNew(filename, pageFormatter); Assert.IsTrue(buffer1.IsPinned); Assert.IsTrue(buffer2.IsPinned); Assert.AreEqual(filename, buffer1.Block.Filename); Assert.AreEqual(0, buffer1.Block.Id); Assert.AreEqual(filename, buffer2.Block.Filename); Assert.AreEqual(1, buffer2.Block.Id); Assert.AreEqual(1, _bufferManager.Available); }
public void CanPinBufferWriteAndFlush() { _poolStrategy = new LRUBufferPoolStrategy(_logManager, _fileManager, 3); var filename = RandomFilename; var pageFormatter = new BasePageFormatter(); var buffer1 = _poolStrategy.PinNew(filename, pageFormatter); buffer1.SetInt(0, 123, 1, 1); _poolStrategy.FlushAll(1); _poolStrategy.Unpin(buffer1); var page = _fileManager.ResolvePage(); var canRead = page.Read(new Block(filename, 0)); var canGetValue = page.GetInt(0, out var value); Assert.IsFalse(buffer1.IsPinned); Assert.IsTrue(canRead); Assert.IsTrue(canGetValue); Assert.AreEqual(123, value); }
public void CannotPinMoreNewBlocksThatPoolHave() { _poolStrategy = new LRUBufferPoolStrategy(_logManager, _fileManager, 3); var filename = RandomFilename; var pageFormatter = new BasePageFormatter(); var buffer1 = _poolStrategy.PinNew(filename, pageFormatter); var buffer2 = _poolStrategy.PinNew(filename, pageFormatter); var buffer3 = _poolStrategy.PinNew(filename, pageFormatter); var buffer4 = _poolStrategy.PinNew(filename, pageFormatter); Assert.IsTrue(buffer1.IsPinned); Assert.IsTrue(buffer2.IsPinned); Assert.IsTrue(buffer3.IsPinned); Assert.AreEqual(filename, buffer1.Block.Filename); Assert.AreEqual(0, buffer1.Block.Id); Assert.AreEqual(filename, buffer2.Block.Filename); Assert.AreEqual(1, buffer2.Block.Id); Assert.AreEqual(filename, buffer3.Block.Filename); Assert.AreEqual(2, buffer3.Block.Id); Assert.IsNull(buffer4); Assert.AreEqual(0, _poolStrategy.Available); }