Пример #1
0
 @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);
 }