/** * Merge regions on the region server. * * @param controller the RPC controller * @param request the request * @return merge regions response * @throws ServiceException */ @Override @QosPriority(priority = HConstants.HIGH_QOS) public MergeRegionsResponse mergeRegions(final RpcController controller, final MergeRegionsRequest request) throws ServiceException { try { checkOpen(); requestCount.increment(); HRegion regionA = getRegion(request.getRegionA()); HRegion regionB = getRegion(request.getRegionB()); boolean forcible = request.getForcible(); regionA.startRegionOperation(Operation.MERGE_REGION); regionB.startRegionOperation(Operation.MERGE_REGION); LOG.info("Receiving merging request for " + regionA + ", " + regionB + ",forcible=" + forcible); regionA.flushcache(); regionB.flushcache(); compactSplitThread.requestRegionsMerge(regionA, regionB, forcible); return MergeRegionsResponse.newBuilder().build(); } catch (IOException ie) { throw new ServiceException(ie); } }
/** * Merge regions on the region server. * * @param controller the RPC controller * @param request the request * @return merge regions response * @throws ServiceException */ @Override @QosPriority(priority = HConstants.HIGH_QOS) public MergeRegionsResponse mergeRegions(final RpcController controller, final MergeRegionsRequest request) throws ServiceException { try { checkOpen(); requestCount.increment(); HRegion regionA = getRegion(request.getRegionA()); HRegion regionB = getRegion(request.getRegionB()); boolean forcible = request.getForcible(); regionA.startRegionOperation(Operation.MERGE_REGION); regionB.startRegionOperation(Operation.MERGE_REGION); LOG.info("Receiving merging request for " + regionA + ", " + regionB + ",forcible=" + forcible); regionA.flushcache(); regionB.flushcache(); regionServer.compactSplitThread.requestRegionsMerge(regionA, regionB, forcible); return MergeRegionsResponse.newBuilder().build(); } catch (IOException ie) { throw new ServiceException(ie); } }
/** * Create a MergeRegionsRequest for the given regions * @param regionA name of region a * @param regionB name of region b * @param forcible true if it is a compulsory merge * @return a MergeRegionsRequest */ public static MergeRegionsRequest buildMergeRegionsRequest( final byte[] regionA, final byte[] regionB, final boolean forcible) { MergeRegionsRequest.Builder builder = MergeRegionsRequest.newBuilder(); RegionSpecifier regionASpecifier = buildRegionSpecifier( RegionSpecifierType.REGION_NAME, regionA); RegionSpecifier regionBSpecifier = buildRegionSpecifier( RegionSpecifierType.REGION_NAME, regionB); builder.setRegionA(regionASpecifier); builder.setRegionB(regionBSpecifier); builder.setForcible(forcible); // send the master's wall clock time as well, so that the RS can refer to it builder.setMasterSystemTime(EnvironmentEdgeManager.currentTime()); return builder.build(); }
/** * A helper to merge regions using admin protocol. Send request to * regionserver. * @param admin * @param region_a * @param region_b * @param forcible true if do a compulsory merge, otherwise we will only merge * two adjacent regions * @throws IOException */ public static void mergeRegions(final RpcController controller, final AdminService.BlockingInterface admin, final HRegionInfo region_a, final HRegionInfo region_b, final boolean forcible) throws IOException { MergeRegionsRequest request = RequestConverter.buildMergeRegionsRequest( region_a.getRegionName(), region_b.getRegionName(),forcible); try { admin.mergeRegions(controller, request); } catch (ServiceException se) { throw ProtobufUtil.getRemoteException(se); } }
/** * Create a MergeRegionsRequest for the given regions * @param regionA name of region a * @param regionB name of region b * @param forcible true if it is a compulsory merge * @return a MergeRegionsRequest */ public static MergeRegionsRequest buildMergeRegionsRequest( final byte[] regionA, final byte[] regionB, final boolean forcible) { MergeRegionsRequest.Builder builder = MergeRegionsRequest.newBuilder(); RegionSpecifier regionASpecifier = buildRegionSpecifier( RegionSpecifierType.REGION_NAME, regionA); RegionSpecifier regionBSpecifier = buildRegionSpecifier( RegionSpecifierType.REGION_NAME, regionB); builder.setRegionA(regionASpecifier); builder.setRegionB(regionBSpecifier); builder.setForcible(forcible); return builder.build(); }
/** * A helper to merge regions using admin protocol. Send request to * regionserver. * @param admin * @param region_a * @param region_b * @param forcible true if do a compulsory merge, otherwise we will only merge * two adjacent regions * @throws IOException */ public static void mergeRegions(final AdminService.BlockingInterface admin, final HRegionInfo region_a, final HRegionInfo region_b, final boolean forcible) throws IOException { MergeRegionsRequest request = RequestConverter.buildMergeRegionsRequest( region_a.getRegionName(), region_b.getRegionName(),forcible); try { admin.mergeRegions(null, request); } catch (ServiceException se) { throw ProtobufUtil.getRemoteException(se); } }
@Override public MergeRegionsResponse mergeRegions(RpcController controller, MergeRegionsRequest request) throws ServiceException { // TODO Auto-generated method stub return null; }