private void requestRegionSplit() {
    final TableName table = parent.getTable();
    final RegionInfo hri_a = RegionInfoBuilder.newBuilder(table).setStartKey(parent.getStartKey())
      .setEndKey(midKey).build();
    final RegionInfo hri_b =
      RegionInfoBuilder.newBuilder(table).setStartKey(midKey).setEndKey(parent.getEndKey()).build();
    // Send the split request to the master. the master will do the validation on the split-key.
    // The parent region will be unassigned and the two new regions will be assigned.
    // hri_a and hri_b objects may not reflect the regions that will be created, those objects
    // are created just to pass the information to the reportRegionStateTransition().
    if (
      !server.reportRegionStateTransition(new RegionStateTransitionContext(
        TransitionCode.READY_TO_SPLIT, HConstants.NO_SEQNUM, -1, -1, parent, hri_a, hri_b))
    ) {
      LOG.error("Unable to ask master to split " + parent.getRegionNameAsString());
    }
  }
Handles processing region splits. Put in a queue, owned by HRegionServer.
hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/SplitRequest.java