/** * Convert a HRegionInfo to a RegionInfo * * @param info the HRegionInfo to convert * @return the converted RegionInfo */ public static RegionInfo convert(final HRegionInfo info) { if (info == null) return null; RegionInfo.Builder builder = RegionInfo.newBuilder(); builder.setTableName(ProtobufUtil.toProtoTableName(info.getTable())); builder.setRegionId(info.getRegionId()); if (info.getStartKey() != null) { builder.setStartKey(ByteStringer.wrap(info.getStartKey())); } if (info.getEndKey() != null) { builder.setEndKey(ByteStringer.wrap(info.getEndKey())); } builder.setOffline(info.isOffline()); builder.setSplit(info.isSplit()); builder.setReplicaId(info.getReplicaId()); return builder.build(); }
/** * Convert a HRegionInfo to a RegionInfo * * @param info the HRegionInfo to convert * @return the converted RegionInfo */ public static RegionInfo convert(final HRegionInfo info) { if (info == null) return null; RegionInfo.Builder builder = RegionInfo.newBuilder(); builder.setTableName(ProtobufUtil.toProtoTableName(info.getTable())); builder.setRegionId(info.getRegionId()); if (info.getStartKey() != null) { builder.setStartKey(HBaseZeroCopyByteString.wrap(info.getStartKey())); } if (info.getEndKey() != null) { builder.setEndKey(HBaseZeroCopyByteString.wrap(info.getEndKey())); } builder.setOffline(info.isOffline()); builder.setSplit(info.isSplit()); return builder.build(); }
/** * Convert a HRegionInfo to a RegionInfo * * @param info the HRegionInfo to convert * @return the converted RegionInfo */ public static RegionInfo convert(final HRegionInfo info) { if (info == null) return null; RegionInfo.Builder builder = RegionInfo.newBuilder(); builder.setTableName(ProtobufUtil.toProtoTableName(info.getTable())); builder.setRegionId(info.getRegionId()); if (info.getStartKey() != null) { builder.setStartKey(ZeroCopyLiteralByteString.wrap(info.getStartKey())); } if (info.getEndKey() != null) { builder.setEndKey(ZeroCopyLiteralByteString.wrap(info.getEndKey())); } builder.setOffline(info.isOffline()); builder.setSplit(info.isSplit()); return builder.build(); }
/** * Convert a HRegionInfo to a RegionInfo * * @param info the HRegionInfo to convert * @return the converted RegionInfo */ public static RegionInfo convert(final HRegionInfo info) { if (info == null) return null; RegionInfo.Builder builder = RegionInfo.newBuilder(); builder.setTableName(ByteString.copyFrom(info.getTableName())); builder.setRegionId(info.getRegionId()); if (info.getStartKey() != null) { builder.setStartKey(ByteString.copyFrom(info.getStartKey())); } if (info.getEndKey() != null) { builder.setEndKey(ByteString.copyFrom(info.getEndKey())); } builder.setOffline(info.isOffline()); builder.setSplit(info.isSplit()); return builder.build(); }
@Test public void testConvert() { TableName tableName = TableName.valueOf("ns1:table1"); byte[] startKey = Bytes.toBytes("startKey"); byte[] endKey = Bytes.toBytes("endKey"); boolean split = false; long regionId = System.currentTimeMillis(); int replicaId = 42; HRegionInfo hri = new HRegionInfo(tableName, startKey, endKey, split, regionId, replicaId); // convert two times, compare HRegionInfo convertedHri = HRegionInfo.convert(HRegionInfo.convert(hri)); assertEquals(hri, convertedHri); // test convert RegionInfo without replicaId RegionInfo info = RegionInfo.newBuilder() .setTableName(HBaseProtos.TableName.newBuilder() .setQualifier(ByteString.copyFrom(tableName.getQualifier())) .setNamespace(ByteString.copyFrom(tableName.getNamespace())) .build()) .setStartKey(ByteString.copyFrom(startKey)) .setEndKey(ByteString.copyFrom(endKey)) .setSplit(split) .setRegionId(regionId) .build(); convertedHri = HRegionInfo.convert(info); HRegionInfo expectedHri = new HRegionInfo(tableName, startKey, endKey, split, regionId, 0); // expecting default replicaId assertEquals(expectedHri, convertedHri); }
/** * Get the list of region info from a GetOnlineRegionResponse * * @param proto the GetOnlineRegionResponse * @return the list of region info or null if <code>proto</code> is null */ static List<HRegionInfo> getRegionInfos(final GetOnlineRegionResponse proto) { if (proto == null) return null; List<HRegionInfo> regionInfos = new ArrayList<HRegionInfo>(); for (RegionInfo regionInfo: proto.getRegionInfoList()) { regionInfos.add(HRegionInfo.convert(regionInfo)); } return regionInfos; }
/** * Convert a RegionInfo to a HRegionInfo * * @param proto the RegionInfo to convert * @return the converted HRegionInfho */ public static HRegionInfo convert(final RegionInfo proto) { if (proto == null) return null; TableName tableName = ProtobufUtil.toTableName(proto.getTableName()); if (tableName.equals(TableName.META_TABLE_NAME)) { return RegionReplicaUtil.getRegionInfoForReplica(FIRST_META_REGIONINFO, proto.getReplicaId()); } long regionId = proto.getRegionId(); int replicaId = proto.hasReplicaId() ? proto.getReplicaId() : DEFAULT_REPLICA_ID; byte[] startKey = null; byte[] endKey = null; if (proto.hasStartKey()) { startKey = proto.getStartKey().toByteArray(); } if (proto.hasEndKey()) { endKey = proto.getEndKey().toByteArray(); } boolean split = false; if (proto.hasSplit()) { split = proto.getSplit(); } HRegionInfo hri = new HRegionInfo( tableName, startKey, endKey, split, regionId, replicaId); if (proto.hasOffline()) { hri.setOffline(proto.getOffline()); } return hri; }
/** * Convert a RegionInfo to a HRegionInfo * * @param proto the RegionInfo to convert * @return the converted HRegionInfho */ public static HRegionInfo convert(final RegionInfo proto) { if (proto == null) return null; TableName tableName = ProtobufUtil.toTableName(proto.getTableName()); if (tableName.equals(TableName.META_TABLE_NAME)) { return FIRST_META_REGIONINFO; } long regionId = proto.getRegionId(); int replicaId = proto.hasReplicaId() ? proto.getReplicaId() : DEFAULT_REPLICA_ID; byte[] startKey = null; byte[] endKey = null; if (proto.hasStartKey()) { startKey = proto.getStartKey().toByteArray(); } if (proto.hasEndKey()) { endKey = proto.getEndKey().toByteArray(); } boolean split = false; if (proto.hasSplit()) { split = proto.getSplit(); } HRegionInfo hri = new HRegionInfo( tableName, startKey, endKey, split, regionId, replicaId); if (proto.hasOffline()) { hri.setOffline(proto.getOffline()); } return hri; }
/** * Convert a RegionInfo to a HRegionInfo * * @param proto the RegionInfo to convert * @return the converted HRegionInfho */ public static HRegionInfo convert(final RegionInfo proto) { if (proto == null) return null; TableName tableName = ProtobufUtil.toTableName(proto.getTableName()); if (tableName.equals(TableName.META_TABLE_NAME)) { return FIRST_META_REGIONINFO; } long regionId = proto.getRegionId(); byte[] startKey = null; byte[] endKey = null; if (proto.hasStartKey()) { startKey = proto.getStartKey().toByteArray(); } if (proto.hasEndKey()) { endKey = proto.getEndKey().toByteArray(); } boolean split = false; if (proto.hasSplit()) { split = proto.getSplit(); } HRegionInfo hri = new HRegionInfo( tableName, startKey, endKey, split, regionId); if (proto.hasOffline()) { hri.setOffline(proto.getOffline()); } return hri; }
/** * Convert a HRegionInfo to a RegionInfo * * @param info the HRegionInfo to convert * @return the converted RegionInfo */ public static RegionInfo convert(final HRegionInfo info) { if (info == null) return null; RegionInfo.Builder builder = RegionInfo.newBuilder(); builder.setTableName(ProtobufUtil.toProtoTableName(info.getTable())); builder.setRegionId(info.getRegionId()); if (info.getStartKey() != null) { builder.setStartKey(HBaseZeroCopyByteString.wrap(info.getStartKey())); } if (info.getEndKey() != null) { builder.setEndKey(HBaseZeroCopyByteString.wrap(info.getEndKey())); } builder.setOffline(info.isOffline()); builder.setSplit(info.isSplit()); // Shen Li: splitKeys if (null != info.splitKeys) { for (byte [] splitKey : info.splitKeys) { builder.addSplitKey(HBaseZeroCopyByteString.wrap(splitKey)); } } if (null != info.replicaGroupIds) { for (int rgId : info.replicaGroupIds) { builder.addRgId(rgId); } } if (null != info.replicaNamespace) builder.setReplicaNamespace(info.replicaNamespace); // Shen Li: split-move if (null != info.destHostname) builder.setDestHostname(info.destHostname); return builder.build(); }
/** * Convert a RegionInfo to a HRegionInfo * * @param proto the RegionInfo to convert * @return the converted HRegionInfo */ public static HRegionInfo convert(final RegionInfo proto) { if (proto == null) return null; byte [] tableName = proto.getTableName().toByteArray(); if (Bytes.equals(tableName, HConstants.ROOT_TABLE_NAME)) { return ROOT_REGIONINFO; } else if (Bytes.equals(tableName, HConstants.META_TABLE_NAME)) { return FIRST_META_REGIONINFO; } long regionId = proto.getRegionId(); byte[] startKey = null; byte[] endKey = null; if (proto.hasStartKey()) { startKey = proto.getStartKey().toByteArray(); } if (proto.hasEndKey()) { endKey = proto.getEndKey().toByteArray(); } boolean split = false; if (proto.hasSplit()) { split = proto.getSplit(); } HRegionInfo hri = new HRegionInfo(tableName, startKey, endKey, split, regionId); if (proto.hasOffline()) { hri.setOffline(proto.getOffline()); } return hri; }
/** * Wamrmup a region on this server. * * This method should only be called by Master. It synchrnously opens the region and * closes the region bringing the most important pages in cache. * <p> * * @param controller the RPC controller * @param request the request * @throws ServiceException */ @Override public WarmupRegionResponse warmupRegion(final RpcController controller, final WarmupRegionRequest request) throws ServiceException { RegionInfo regionInfo = request.getRegionInfo(); final HRegionInfo region = HRegionInfo.convert(regionInfo); HTableDescriptor htd; WarmupRegionResponse response = WarmupRegionResponse.getDefaultInstance(); try { checkOpen(); String encodedName = region.getEncodedName(); byte[] encodedNameBytes = region.getEncodedNameAsBytes(); final Region onlineRegion = regionServer.getFromOnlineRegions(encodedName); if (onlineRegion != null) { LOG.info("Region already online. Skipping warming up " + region); return response; } if (LOG.isDebugEnabled()) { LOG.debug("Warming up Region " + region.getRegionNameAsString()); } htd = regionServer.tableDescriptors.get(region.getTable()); if (regionServer.getRegionsInTransitionInRS().containsKey(encodedNameBytes)) { LOG.info("Region is in transition. Skipping warmup " + region); return response; } HRegion.warmupHRegion(region, htd, regionServer.getWAL(region), regionServer.getConfiguration(), regionServer, null); } catch (IOException ie) { LOG.error("Failed warming up region " + region.getRegionNameAsString(), ie); throw new ServiceException(ie); } return response; }
/** * Convert a RegionInfo to a HRegionInfo * * @param proto the RegionInfo to convert * @return the converted HRegionInfho */ public static HRegionInfo convert(final RegionInfo proto) { if (proto == null) return null; TableName tableName = ProtobufUtil.toTableName(proto.getTableName()); if (tableName.equals(TableName.META_TABLE_NAME)) { return FIRST_META_REGIONINFO; } long regionId = proto.getRegionId(); byte[] startKey = null; byte[] endKey = null; if (proto.hasStartKey()) { startKey = proto.getStartKey().toByteArray(); } if (proto.hasEndKey()) { endKey = proto.getEndKey().toByteArray(); } boolean split = false; if (proto.hasSplit()) { split = proto.getSplit(); } // Shen Li: splitKeys byte[][] splitKeys = null; List<ByteString> splitKeyList = proto.getSplitKeyList(); if (null != splitKeyList && splitKeyList.size() > 0) { splitKeys = new byte[splitKeyList.size() + 2][]; int index = 0; splitKeys[index++] = startKey; for (ByteString splitKey: splitKeyList) { splitKeys[index++] = splitKey.toByteArray(); } splitKeys[index] = endKey; } else { splitKeys = new byte[][] {startKey, endKey}; } // Shen Li: replica group id int [] replicaGroupIds = null; List<Integer> rgIds = proto.getRgIdList(); if (null != rgIds && rgIds.size() > 0) { replicaGroupIds = new int[rgIds.size()]; for (int i = 0 ; i < replicaGroupIds.length; ++i) { replicaGroupIds[i] = rgIds.get(i); } } // Shen Li: replica namespace String replicaNamespace = proto.getReplicaNamespace(); String destHostname = proto.getDestHostname(); HRegionInfo hri = new HRegionInfo( tableName, splitKeys, 0, splitKeys.length - 1, split, regionId, replicaNamespace, replicaGroupIds); if (null != destHostname) { hri.setDestHostname(destHostname); } if (proto.hasOffline()) { hri.setOffline(proto.getOffline()); } return hri; }
/** * Convert a HRegionInfo to the protobuf RegionInfo * * @return the converted RegionInfo */ RegionInfo convert() { return convert(this); }
/** * Convert a HRegionInfo to a RegionInfo * * @return the converted RegionInfo */ RegionInfo convert() { return convert(this); }