@Override
  public SetNormalizerRunningResponse setNormalizerRunning(RpcController controller,
    SetNormalizerRunningRequest request) throws ServiceException {
    rpcPreCheck("setNormalizerRunning");

    // Sets normalizer on/off flag in ZK.
    // TODO: this method is totally broken in terms of atomicity of actions and values read.
    // 1. The contract has this RPC returning the previous value. There isn't a ZKUtil method
    // that lets us retrieve the previous value as part of setting a new value, so we simply
    // perform a read before issuing the update. Thus we have a data race opportunity, between
    // when the `prevValue` is read and whatever is actually overwritten.
    // 2. Down in `setNormalizerOn`, the call to `createAndWatch` inside of the catch clause can
    // itself fail in the event that the znode already exists. Thus, another data race, between
    // when the initial `setData` call is notified of the absence of the target znode and the
    // subsequent `createAndWatch`, with another client creating said node.
    // That said, there's supposed to be only one active master and thus there's supposed to be
    // only one process with the authority to modify the value.
    final boolean prevValue = server.getRegionNormalizerManager().isNormalizerOn();
    final boolean newValue = request.getOn();
    try {
      server.getRegionNormalizerManager().setNormalizerOn(newValue);
    } catch (IOException e) {
      throw new ServiceException(e);
    }
    LOG.info("{} set normalizerSwitch={}", server.getClientIdAuditPrefix(), newValue);
    return SetNormalizerRunningResponse.newBuilder().setPrevNormalizerValue(prevValue).build();
  }
Triggers an asynchronous attempt to take a snapshot. {@inheritDoc}
hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java