@Override public ServerName getServerHoldingRegion(TableName tn, byte[] regionName) throws IOException { HRegionLocation regionLoc = null; try (RegionLocator locator = connection.getRegionLocator(tn)) { regionLoc = locator.getRegionLocation(regionName); } if (regionLoc == null) { LOG.warn("Cannot find region server holding region " + Bytes.toString(regionName) + ", start key [" + Bytes.toString(HRegionInfo.getStartKey(regionName)) + "]"); return null; } AdminProtos.AdminService.BlockingInterface client = ((ClusterConnection)this.connection).getAdmin(regionLoc.getServerName()); ServerInfo info = ProtobufUtil.getServerInfo(null, client); return ProtobufUtil.toServerName(info.getServerName()); }
/** * Check if a region server is reachable and has the expected start code */ public boolean isServerReachable(ServerName server) { if (server == null) throw new NullPointerException("Passed server is null"); RetryCounter retryCounter = pingRetryCounterFactory.create(); while (retryCounter.shouldRetry()) { try { AdminService.BlockingInterface admin = getRsAdmin(server); if (admin != null) { ServerInfo info = ProtobufUtil.getServerInfo(admin); return info != null && info.hasServerName() && server.getStartcode() == info.getServerName().getStartCode(); } } catch (IOException ioe) { LOG.debug("Couldn't reach " + server + ", try=" + retryCounter.getAttemptTimes() + " of " + retryCounter.getMaxAttempts(), ioe); try { retryCounter.sleepUntilNextRetry(); } catch(InterruptedException ie) { Thread.currentThread().interrupt(); } } } return false; }
/** * Check if a region server is reachable and has the expected start code */ public boolean isServerReachable(ServerName server) { if (server == null) throw new NullPointerException("Passed server is null"); int maximumAttempts = Math.max(1, master.getConfiguration().getInt( "hbase.master.maximum.ping.server.attempts", 10)); for (int i = 0; i < maximumAttempts; i++) { try { AdminService.BlockingInterface admin = getRsAdmin(server); if (admin != null) { ServerInfo info = ProtobufUtil.getServerInfo(admin); return info != null && info.hasServerName() && server.getStartcode() == info.getServerName().getStartCode(); } } catch (IOException ioe) { LOG.debug("Couldn't reach " + server + ", try=" + i + " of " + maximumAttempts, ioe); } } return false; }
@Override public ServerName getServerHoldingRegion(byte[] regionName) throws IOException { HConnection connection = admin.getConnection(); HRegionLocation regionLoc = connection.locateRegion(regionName); if (regionLoc == null) { LOG.warn("Cannot find region server holding region " + Bytes.toString(regionName) + " for table " + HRegionInfo.getTableName(regionName) + ", start key [" + Bytes.toString(HRegionInfo.getStartKey(regionName)) + "]"); return null; } AdminProtos.AdminService.BlockingInterface client = connection.getAdmin(regionLoc.getServerName()); ServerInfo info = ProtobufUtil.getServerInfo(client); return ProtobufUtil.toServerName(info.getServerName()); }
/** * Check if a region server is reachable and has the expected start code */ public boolean isServerReachable(ServerName server) { if (server == null) throw new NullPointerException("Passed server is null"); RetryCounter retryCounter = pingRetryCounterFactory.create(); while (retryCounter.shouldRetry()) { synchronized (this.onlineServers) { if (this.deadservers.isDeadServer(server)) { return false; } } try { PayloadCarryingRpcController controller = newRpcController(); AdminService.BlockingInterface admin = getRsAdmin(server); if (admin != null) { ServerInfo info = ProtobufUtil.getServerInfo(controller, admin); return info != null && info.hasServerName() && server.getStartcode() == info.getServerName().getStartCode(); } } catch (IOException ioe) { if (LOG.isDebugEnabled()) { LOG.debug("Couldn't reach " + server + ", try=" + retryCounter.getAttemptTimes() + " of " + retryCounter.getMaxAttempts(), ioe); } try { retryCounter.sleepUntilNextRetry(); } catch(InterruptedException ie) { Thread.currentThread().interrupt(); break; } } } return false; }
/** * A utility to build a GetServerInfoResponse. * * @param serverName * @param webuiPort * @return the response */ public static GetServerInfoResponse buildGetServerInfoResponse( final ServerName serverName, final int webuiPort) { GetServerInfoResponse.Builder builder = GetServerInfoResponse.newBuilder(); ServerInfo.Builder serverInfoBuilder = ServerInfo.newBuilder(); serverInfoBuilder.setServerName(ProtobufUtil.toServerName(serverName)); if (webuiPort >= 0) { serverInfoBuilder.setWebuiPort(webuiPort); } builder.setServerInfo(serverInfoBuilder.build()); return builder.build(); }
/** * A helper to get the info of a region server using admin protocol. * @return the server name */ public static ServerInfo getServerInfo(final RpcController controller, final AdminService.BlockingInterface admin) throws IOException { GetServerInfoRequest request = RequestConverter.buildGetServerInfoRequest(); try { GetServerInfoResponse response = admin.getServerInfo(controller, request); return response.getServerInfo(); } catch (ServiceException se) { throw getRemoteException(se); } }
/** * A helper to get the info of a region server using admin protocol. * * @param admin * @return the server name * @throws IOException */ public static ServerInfo getServerInfo(final AdminService.BlockingInterface admin) throws IOException { GetServerInfoRequest request = RequestConverter.buildGetServerInfoRequest(); try { GetServerInfoResponse response = admin.getServerInfo(null, request); return response.getServerInfo(); } catch (ServiceException se) { throw getRemoteException(se); } }
/** * A helper to get the info of a region server using admin protocol. * @return the server name */ public static ServerInfo getServerInfo(final RpcController controller, final AdminService.BlockingInterface admin) throws IOException { GetServerInfoRequest request = buildGetServerInfoRequest(); try { GetServerInfoResponse response = admin.getServerInfo(controller, request); return response.getServerInfo(); } catch (ServiceException se) { throw getRemoteException(se); } }
/** * A helper to get the info of a region server using admin protocol. * * @param admin * @return the server name * @throws IOException */ public static ServerInfo getServerInfo( final AdminProtocol admin) throws IOException { GetServerInfoRequest request = RequestConverter.buildGetServerInfoRequest(); try { GetServerInfoResponse response = admin.getServerInfo(null, request); return response.getServerInfo(); } catch (ServiceException se) { throw getRemoteException(se); } }
@Override public ServerName getServerHoldingRegion(byte[] regionName) throws IOException { HConnection connection = admin.getConnection(); HRegionLocation regionLoc = connection.locateRegion(regionName); if (regionLoc == null) { return null; } AdminProtocol client = connection.getAdmin(regionLoc.getHostname(), regionLoc.getPort()); ServerInfo info = ProtobufUtil.getServerInfo(client); return ProtobufUtil.toServerName(info.getServerName()); }