@Override
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
          try {
            if ((args == null || args.length == 0) && "close".equals(method.getName())) {
              RPC.stopProxy(cp);
              return null;
            } else {
              Object res = method.invoke(cp, args);
              if (
                res != null && args != null && args.length == 3
                  && "getBlockLocations".equals(method.getName()) && res instanceof LocatedBlocks
                  && args[0] instanceof String && args[0] != null
              ) {
                lrb.reorderBlocks(conf, (LocatedBlocks) res, (String) args[0]);
              }
              return res;
            }
          } catch (InvocationTargetException ite) {
            // We will have this for all the exception, checked on not, sent
            // by any layer, including the functional exception
            Throwable cause = ite.getCause();
            if (cause == null) {
              throw new RuntimeException("Proxy invocation failed and getCause is null", ite);
            }
            if (cause instanceof UndeclaredThrowableException) {
              Throwable causeCause = cause.getCause();
              if (causeCause == null) {
                throw new RuntimeException("UndeclaredThrowableException had null cause!");
              }
              cause = cause.getCause();
            }
            throw cause;
          }
        }
Add an interceptor on the calls to the namenode#getBlockLocations from the DFSClient linked to
this FileSystem. See HBASE-6435 for the background.
<p/>
There should be no reason, except testing, to create a specific ReorderBlocks.
@return true if the interceptor was added, false otherwise.
hbase-server/src/main/java/org/apache/hadoop/hbase/fs/HFileSystem.java