示例#1
0
 // TODO: We should be able to get the ServerName from the AdminProtocol
 // rather than have to pass it in.  Its made awkward by the fact that the
 // HRI is likely a proxy against remote server so the getServerName needs
 // to be fixed to go to a local method or to a cache before we can do this.
 private boolean verifyRegionLocation(
     final ClusterConnection connection,
     AdminService.BlockingInterface hostingServer,
     final ServerName address,
     final byte[] regionName)
     throws IOException {
   if (hostingServer == null) {
     LOG.info("Passed hostingServer is null");
     return false;
   }
   Throwable t;
   PayloadCarryingRpcController controller = connection.getRpcControllerFactory().newController();
   try {
     // Try and get regioninfo from the hosting server.
     return ProtobufUtil.getRegionInfo(controller, hostingServer, regionName) != null;
   } catch (ConnectException e) {
     t = e;
   } catch (RetriesExhaustedException e) {
     t = e;
   } catch (RemoteException e) {
     IOException ioe = e.unwrapRemoteException();
     t = ioe;
   } catch (IOException e) {
     Throwable cause = e.getCause();
     if (cause != null && cause instanceof EOFException) {
       t = cause;
     } else if (cause != null
         && cause.getMessage() != null
         && cause.getMessage().contains("Connection reset")) {
       t = cause;
     } else {
       t = e;
     }
   }
   LOG.info(
       "Failed verification of "
           + Bytes.toStringBinary(regionName)
           + " at address="
           + address
           + ", exception="
           + t.getMessage());
   return false;
 }