@Override public void moveBlock( long sessionId, long blockId, BlockStoreLocation oldLocation, BlockStoreLocation newLocation) throws BlockDoesNotExistException, BlockAlreadyExistsException, InvalidWorkerStateException, WorkerOutOfSpaceException, IOException { for (int i = 0; i < MAX_RETRIES + 1; i++) { MoveBlockResult moveResult = moveBlockInternal(sessionId, blockId, oldLocation, newLocation); if (moveResult.getSuccess()) { synchronized (mBlockStoreEventListeners) { for (BlockStoreEventListener listener : mBlockStoreEventListeners) { listener.onMoveBlockByClient( sessionId, blockId, moveResult.getSrcLocation(), moveResult.getDstLocation()); } } return; } if (i < MAX_RETRIES) { freeSpaceInternal(sessionId, moveResult.getBlockSize(), newLocation); } } throw new WorkerOutOfSpaceException( ExceptionMessage.NO_SPACE_FOR_BLOCK_MOVE, newLocation, blockId, MAX_RETRIES); }