@Test public void moveBlockWithReservedSpace() throws Exception { ServerConfiguration.reset(); final long RESERVE_SIZE = BLOCK_SIZE; init(RESERVE_SIZE); TieredBlockStoreTestUtils.cache2(SESSION_ID1, BLOCK_ID1, BLOCK_SIZE, mTestDir1, mMetaManager, mBlockIterator); TieredBlockStoreTestUtils.cache2(SESSION_ID1, BLOCK_ID2, mTestDir2.getCapacityBytes() - BLOCK_SIZE, mTestDir2, mMetaManager, mBlockIterator); assertEquals(0, mTestDir2.getAvailableBytes()); assertTrue(mTestDir2.getCapacityBytes() > mTestDir2.getCommittedBytes()); mThrown.expect(WorkerOutOfSpaceException.class); mThrown.expectMessage(ExceptionMessage.NO_SPACE_FOR_BLOCK_MOVE .getMessage(mTestDir2.toBlockStoreLocation(), BLOCK_ID1)); AllocateOptions moveOptions = AllocateOptions.forMove(mTestDir2.toBlockStoreLocation()) .setForceLocation(true) .setEvictionAllowed(false); mBlockStore.moveBlock(SESSION_ID1, BLOCK_ID1, moveOptions); mBlockStore.moveBlock(SESSION_ID1, BLOCK_ID1, moveOptions.setUseReservedSpace(true)); assertEquals(mTestDir1.getCapacityBytes(), mTestDir1.getAvailableBytes() + mTestDir1.getReservedBytes()); assertEquals(mTestDir2.getCapacityBytes(), mTestDir2.getCommittedBytes()); }
@Override public void moveBlock(long sessionId, long blockId, AllocateOptions moveOptions) throws BlockDoesNotExistException, BlockAlreadyExistsException, InvalidWorkerStateException, WorkerOutOfSpaceException, IOException { moveBlock(sessionId, blockId, BlockStoreLocation.anyTier(), moveOptions); }
TieredBlockStore implements BlockStore { @Override public void moveBlock(long sessionId, long blockId, AllocateOptions moveOptions) throws BlockDoesNotExistException, BlockAlreadyExistsException, InvalidWorkerStateException, WorkerOutOfSpaceException, IOException { moveBlock(sessionId, blockId, BlockStoreLocation.anyTier(), moveOptions); } }
TieredBlockStore implements BlockStore { @Override public void moveBlock(long sessionId, long blockId, AllocateOptions moveOptions) throws BlockDoesNotExistException, BlockAlreadyExistsException, InvalidWorkerStateException, WorkerOutOfSpaceException, IOException { moveBlock(sessionId, blockId, BlockStoreLocation.anyTier(), moveOptions); } TieredBlockStore(); }
TieredBlockStore implements BlockStore { @Override public void moveBlock(long sessionId, long blockId, AllocateOptions moveOptions) throws BlockDoesNotExistException, BlockAlreadyExistsException, InvalidWorkerStateException, WorkerOutOfSpaceException, IOException { moveBlock(sessionId, blockId, BlockStoreLocation.anyTier(), moveOptions); } TieredBlockStore(); @Override long lockBlock(long sessionId, long blockId); @Override long lockBlockNoException(long sessionId, long blockId); @Override void unlockBlock(long lockId); @Override boolean unlockBlock(long sessionId, long blockId); @Override BlockWriter getBlockWriter(long sessionId, long blockId); @Override BlockReader getBlockReader(long sessionId, long blockId, long lockId); @Override TempBlockMeta createBlock(long sessionId, long blockId, AllocateOptions options); @Override BlockMeta getVolatileBlockMeta(long blockId); @Override BlockMeta getBlockMeta(long sessionId, long blockId, long lockId); @Override TempBlockMeta getTempBlockMeta(long sessionId, long blockId); @Override void commitBlock(long sessionId, long blockId, boolean pinOnCreate); @Override long commitBlockLocked(long sessionId, long blockId, boolean pinOnCreate); @Override void abortBlock(long sessionId, long blockId); @Override void requestSpace(long sessionId, long blockId, long additionalBytes); @Override void moveBlock(long sessionId, long blockId, AllocateOptions moveOptions); @Override void moveBlock(long sessionId, long blockId, BlockStoreLocation oldLocation,
      AllocateOptions moveOptions); @Override void removeBlock(long sessionId, long blockId); @Override void removeBlock(long sessionId, long blockId, BlockStoreLocation location); @Override void accessBlock(long sessionId, long blockId); @Override synchronized void freeSpace(long sessionId, long minContiguousBytes,
      long minAvailableBytes, BlockStoreLocation location); @Override void cleanupSession(long sessionId); @Override boolean hasBlockMeta(long blockId); @Override BlockStoreMeta getBlockStoreMeta(); @Override BlockStoreMeta getBlockStoreMetaFull(); @Override void registerBlockStoreEventListener(BlockStoreEventListener listener); @Override void updatePinnedInodes(Set<Long> inodes); @Override boolean checkStorage(); void removeDir(StorageDir dir); @Override void close(); }
TieredBlockStore implements BlockStore { @Override public void moveBlock(long sessionId, long blockId, AllocateOptions moveOptions) throws BlockDoesNotExistException, BlockAlreadyExistsException, InvalidWorkerStateException, WorkerOutOfSpaceException, IOException { moveBlock(sessionId, blockId, BlockStoreLocation.anyTier(), moveOptions); } TieredBlockStore(); @Override long lockBlock(long sessionId, long blockId); @Override long lockBlockNoException(long sessionId, long blockId); @Override void unlockBlock(long lockId); @Override boolean unlockBlock(long sessionId, long blockId); @Override BlockWriter getBlockWriter(long sessionId, long blockId); @Override BlockReader getBlockReader(long sessionId, long blockId, long lockId); @Override TempBlockMeta createBlock(long sessionId, long blockId, AllocateOptions options); @Override BlockMeta getVolatileBlockMeta(long blockId); @Override BlockMeta getBlockMeta(long sessionId, long blockId, long lockId); @Override TempBlockMeta getTempBlockMeta(long sessionId, long blockId); @Override void commitBlock(long sessionId, long blockId, boolean pinOnCreate); @Override long commitBlockLocked(long sessionId, long blockId, boolean pinOnCreate); @Override void abortBlock(long sessionId, long blockId); @Override void requestSpace(long sessionId, long blockId, long additionalBytes); @Override void moveBlock(long sessionId, long blockId, AllocateOptions moveOptions); @Override void moveBlock(long sessionId, long blockId, BlockStoreLocation oldLocation,
      AllocateOptions moveOptions); @Override void removeBlock(long sessionId, long blockId); @Override void removeBlock(long sessionId, long blockId, BlockStoreLocation location); @Override void accessBlock(long sessionId, long blockId); @Override synchronized void freeSpace(long sessionId, long minContiguousBytes,
      long minAvailableBytes, BlockStoreLocation location); @Override void cleanupSession(long sessionId); @Override boolean hasBlockMeta(long blockId); @Override BlockStoreMeta getBlockStoreMeta(); @Override BlockStoreMeta getBlockStoreMetaFull(); @Override void registerBlockStoreEventListener(BlockStoreEventListener listener); @Override void updatePinnedInodes(Set<Long> inodes); @Override boolean checkStorage(); void removeDir(StorageDir dir); @Override void close();  }