http://git-wip-us.apache.org/repos/asf/hadoop/blob/73be4292/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/federation/store/records/impl/pb/RouterStatePBImpl.java
----------------------------------------------------------------------
diff --git 
a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/federation/store/records/impl/pb/RouterStatePBImpl.java
 
b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/federation/store/records/impl/pb/RouterStatePBImpl.java
deleted file mode 100644
index 23a61f9..0000000
--- 
a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/federation/store/records/impl/pb/RouterStatePBImpl.java
+++ /dev/null
@@ -1,202 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.hadoop.hdfs.server.federation.store.records.impl.pb;
-
-import java.io.IOException;
-
-import 
org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.RouterRecordProto;
-import 
org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.RouterRecordProto.Builder;
-import 
org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.RouterRecordProtoOrBuilder;
-import 
org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.StateStoreVersionRecordProto;
-import org.apache.hadoop.hdfs.server.federation.router.RouterServiceState;
-import 
org.apache.hadoop.hdfs.server.federation.store.driver.StateStoreSerializer;
-import 
org.apache.hadoop.hdfs.server.federation.store.protocol.impl.pb.FederationProtocolPBTranslator;
-import org.apache.hadoop.hdfs.server.federation.store.records.RouterState;
-import 
org.apache.hadoop.hdfs.server.federation.store.records.StateStoreVersion;
-
-import com.google.protobuf.Message;
-
-/**
- * Protobuf implementation of the RouterState record.
- */
-public class RouterStatePBImpl extends RouterState implements PBRecord {
-
-  private FederationProtocolPBTranslator<RouterRecordProto, Builder,
-      RouterRecordProtoOrBuilder> translator =
-          new FederationProtocolPBTranslator<RouterRecordProto, Builder,
-             RouterRecordProtoOrBuilder>(RouterRecordProto.class);
-
-  public RouterStatePBImpl() {
-  }
-
-  public RouterStatePBImpl(RouterRecordProto proto) {
-    this.translator.setProto(proto);
-  }
-
-  @Override
-  public RouterRecordProto getProto() {
-    return this.translator.build();
-  }
-
-  @Override
-  public void setProto(Message proto) {
-    this.translator.setProto(proto);
-  }
-
-  @Override
-  public void readInstance(String base64String) throws IOException {
-    this.translator.readInstance(base64String);
-  }
-
-  @Override
-  public void setAddress(String address) {
-    RouterRecordProto.Builder builder = this.translator.getBuilder();
-    if (address == null) {
-      builder.clearAddress();
-    } else {
-      builder.setAddress(address);
-    }
-  }
-
-  @Override
-  public String getAddress() {
-    RouterRecordProtoOrBuilder proto = this.translator.getProtoOrBuilder();
-    if (!proto.hasAddress()) {
-      return null;
-    }
-    return proto.getAddress();
-  }
-
-  @Override
-  public void setStateStoreVersion(StateStoreVersion version) {
-    RouterRecordProto.Builder builder = this.translator.getBuilder();
-    if (version instanceof StateStoreVersionPBImpl) {
-      StateStoreVersionPBImpl versionPB = (StateStoreVersionPBImpl)version;
-      StateStoreVersionRecordProto versionProto =
-          (StateStoreVersionRecordProto)versionPB.getProto();
-      builder.setStateStoreVersion(versionProto);
-    } else {
-      builder.clearStateStoreVersion();
-    }
-  }
-
-  @Override
-  public StateStoreVersion getStateStoreVersion() throws IOException {
-    RouterRecordProtoOrBuilder proto = this.translator.getProtoOrBuilder();
-    if (!proto.hasStateStoreVersion()) {
-      return null;
-    }
-    StateStoreVersionRecordProto versionProto = proto.getStateStoreVersion();
-    StateStoreVersion version =
-        StateStoreSerializer.newRecord(StateStoreVersion.class);
-    if (version instanceof StateStoreVersionPBImpl) {
-      StateStoreVersionPBImpl versionPB = (StateStoreVersionPBImpl)version;
-      versionPB.setProto(versionProto);
-      return versionPB;
-    } else {
-      throw new IOException("Cannot get State Store version");
-    }
-  }
-
-  @Override
-  public RouterServiceState getStatus() {
-    RouterRecordProtoOrBuilder proto = this.translator.getProtoOrBuilder();
-    if (!proto.hasStatus()) {
-      return null;
-    }
-    return RouterServiceState.valueOf(proto.getStatus());
-  }
-
-  @Override
-  public void setStatus(RouterServiceState newStatus) {
-    RouterRecordProto.Builder builder = this.translator.getBuilder();
-    if (newStatus == null) {
-      builder.clearStatus();
-    } else {
-      builder.setStatus(newStatus.toString());
-    }
-  }
-
-  @Override
-  public String getVersion() {
-    RouterRecordProtoOrBuilder proto = this.translator.getProtoOrBuilder();
-    if (!proto.hasVersion()) {
-      return null;
-    }
-    return proto.getVersion();
-  }
-
-  @Override
-  public void setVersion(String version) {
-    RouterRecordProto.Builder builder = this.translator.getBuilder();
-    if (version == null) {
-      builder.clearVersion();
-    } else {
-      builder.setVersion(version);
-    }
-  }
-
-  @Override
-  public String getCompileInfo() {
-    RouterRecordProtoOrBuilder proto = this.translator.getProtoOrBuilder();
-    if (!proto.hasCompileInfo()) {
-      return null;
-    }
-    return proto.getCompileInfo();
-  }
-
-  @Override
-  public void setCompileInfo(String info) {
-    RouterRecordProto.Builder builder = this.translator.getBuilder();
-    if (info == null) {
-      builder.clearCompileInfo();
-    } else {
-      builder.setCompileInfo(info);
-    }
-  }
-
-  @Override
-  public void setDateStarted(long dateStarted) {
-    this.translator.getBuilder().setDateStarted(dateStarted);
-  }
-
-  @Override
-  public long getDateStarted() {
-    return this.translator.getProtoOrBuilder().getDateStarted();
-  }
-
-  @Override
-  public void setDateModified(long time) {
-    this.translator.getBuilder().setDateModified(time);
-  }
-
-  @Override
-  public long getDateModified() {
-    return this.translator.getProtoOrBuilder().getDateModified();
-  }
-
-  @Override
-  public void setDateCreated(long time) {
-    this.translator.getBuilder().setDateCreated(time);
-  }
-
-  @Override
-  public long getDateCreated() {
-    return this.translator.getProtoOrBuilder().getDateCreated();
-  }
-}

http://git-wip-us.apache.org/repos/asf/hadoop/blob/73be4292/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/federation/store/records/impl/pb/StateStoreVersionPBImpl.java
----------------------------------------------------------------------
diff --git 
a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/federation/store/records/impl/pb/StateStoreVersionPBImpl.java
 
b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/federation/store/records/impl/pb/StateStoreVersionPBImpl.java
deleted file mode 100644
index 7696136..0000000
--- 
a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/federation/store/records/impl/pb/StateStoreVersionPBImpl.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.hadoop.hdfs.server.federation.store.records.impl.pb;
-
-import java.io.IOException;
-
-import 
org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.StateStoreVersionRecordProto;
-import 
org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.StateStoreVersionRecordProto.Builder;
-import 
org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.StateStoreVersionRecordProtoOrBuilder;
-import 
org.apache.hadoop.hdfs.server.federation.store.protocol.impl.pb.FederationProtocolPBTranslator;
-import 
org.apache.hadoop.hdfs.server.federation.store.records.StateStoreVersion;
-
-import com.google.protobuf.Message;
-
-/**
- * Protobuf implementation of the StateStoreVersion record.
- */
-public class StateStoreVersionPBImpl extends StateStoreVersion
-    implements PBRecord {
-
-  private FederationProtocolPBTranslator<StateStoreVersionRecordProto, Builder,
-      StateStoreVersionRecordProtoOrBuilder> translator =
-          new FederationProtocolPBTranslator<StateStoreVersionRecordProto,
-              Builder, StateStoreVersionRecordProtoOrBuilder>(
-                  StateStoreVersionRecordProto.class);
-
-  public StateStoreVersionPBImpl() {
-  }
-
-  @Override
-  public StateStoreVersionRecordProto getProto() {
-    return this.translator.build();
-  }
-
-  @Override
-  public void setProto(Message proto) {
-    this.translator.setProto(proto);
-  }
-
-  @Override
-  public void readInstance(String base64String) throws IOException {
-    this.translator.readInstance(base64String);
-  }
-
-  @Override
-  public long getMembershipVersion() {
-    return this.translator.getProtoOrBuilder().getMembershipVersion();
-  }
-
-  @Override
-  public void setMembershipVersion(long version) {
-    this.translator.getBuilder().setMembershipVersion(version);
-  }
-
-  @Override
-  public long getMountTableVersion() {
-    return this.translator.getProtoOrBuilder().getMountTableVersion();
-  }
-
-  @Override
-  public void setMountTableVersion(long version) {
-    this.translator.getBuilder().setMountTableVersion(version);
-  }
-}

http://git-wip-us.apache.org/repos/asf/hadoop/blob/73be4292/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/federation/store/records/impl/pb/package-info.java
----------------------------------------------------------------------
diff --git 
a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/federation/store/records/impl/pb/package-info.java
 
b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/federation/store/records/impl/pb/package-info.java
deleted file mode 100644
index b329732..0000000
--- 
a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/federation/store/records/impl/pb/package-info.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * The protobuf implementations of state store data records defined in the
- * org.apache.hadoop.hdfs.server.federation.store.records package. Each
- * implementation wraps an associated protobuf proto definition.
- */
[email protected]
[email protected]
-package org.apache.hadoop.hdfs.server.federation.store.records.impl.pb;
-
-import org.apache.hadoop.classification.InterfaceAudience;
-import org.apache.hadoop.classification.InterfaceStability;
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/hadoop/blob/73be4292/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/federation/store/records/package-info.java
----------------------------------------------------------------------
diff --git 
a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/federation/store/records/package-info.java
 
b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/federation/store/records/package-info.java
deleted file mode 100644
index 63b13af..0000000
--- 
a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/federation/store/records/package-info.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Contains the abstract definitions of the state store data records. The state
- * store supports multiple multiple data records.
- * <p>
- * Data records inherit from a common class
- * {@link org.apache.hadoop.hdfs.server.federation.store.records.BaseRecord
- * BaseRecord}. Data records are serialized when written to the data store 
using
- * a modular serialization implementation. The default is profobuf
- * serialization. Data is stored as rows of records of the same type with each
- * data member in a record representing a column.
- */
[email protected]
[email protected]
-
-package org.apache.hadoop.hdfs.server.federation.store.records;
-
-import org.apache.hadoop.classification.InterfaceAudience;
-import org.apache.hadoop.classification.InterfaceStability;

http://git-wip-us.apache.org/repos/asf/hadoop/blob/73be4292/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/federation/utils/ConsistentHashRing.java
----------------------------------------------------------------------
diff --git 
a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/federation/utils/ConsistentHashRing.java
 
b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/federation/utils/ConsistentHashRing.java
deleted file mode 100644
index 89273db..0000000
--- 
a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/federation/utils/ConsistentHashRing.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.hadoop.hdfs.server.federation.utils;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-import java.util.SortedMap;
-import java.util.TreeMap;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReadWriteLock;
-import java.util.concurrent.locks.ReentrantReadWriteLock;
-
-import org.apache.hadoop.io.MD5Hash;
-
-/**
- * Consistent hash ring to distribute items across nodes (locations). If we add
- * or remove nodes, it minimizes the item migration.
- */
-public class ConsistentHashRing {
-  private static final String SEPERATOR = "/";
-  private static final String VIRTUAL_NODE_FORMAT = "%s" + SEPERATOR + "%d";
-
-  /** Hash ring. */
-  private SortedMap<String, String> ring = new TreeMap<String, String>();
-  /** Entry -> num virtual nodes on ring. */
-  private Map<String, Integer> entryToVirtualNodes =
-      new HashMap<String, Integer>();
-
-  /** Synchronization. */
-  private final ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
-  private final Lock readLock = readWriteLock.readLock();
-  private final Lock writeLock = readWriteLock.writeLock();
-
-  public ConsistentHashRing(Set<String> locations) {
-    for (String location : locations) {
-      addLocation(location);
-    }
-  }
-
-  /**
-   * Add entry to consistent hash ring.
-   *
-   * @param location Node to add to the ring.
-   */
-  public void addLocation(String location) {
-    addLocation(location, 100);
-  }
-
-  /**
-   * Add entry to consistent hash ring.
-   *
-   * @param location Node to add to the ring.
-   * @param numVirtualNodes Number of virtual nodes to add.
-   */
-  public void addLocation(String location, int numVirtualNodes) {
-    writeLock.lock();
-    try {
-      entryToVirtualNodes.put(location, numVirtualNodes);
-      for (int i = 0; i < numVirtualNodes; i++) {
-        String key = String.format(VIRTUAL_NODE_FORMAT, location, i);
-        String hash = getHash(key);
-        ring.put(hash, key);
-      }
-    } finally {
-      writeLock.unlock();
-    }
-  }
-
-  /**
-   * Remove specified entry from hash ring.
-   *
-   * @param location Node to remove from the ring.
-   */
-  public void removeLocation(String location) {
-    writeLock.lock();
-    try {
-      Integer numVirtualNodes = entryToVirtualNodes.remove(location);
-      for (int i = 0; i < numVirtualNodes; i++) {
-        String key = String.format(VIRTUAL_NODE_FORMAT, location, i);
-        String hash = getHash(key);
-        ring.remove(hash);
-      }
-    } finally {
-      writeLock.unlock();
-    }
-  }
-
-  /**
-   * Return location (owner) of specified item. Owner is the next
-   * entry on the hash ring (with a hash value > hash value of item).
-   * @param item Item to look for.
-   * @return The location of the item.
-   */
-  public String getLocation(String item) {
-    readLock.lock();
-    try {
-      if (ring.isEmpty()) {
-        return null;
-      }
-      String hash = getHash(item);
-      if (!ring.containsKey(hash)) {
-        SortedMap<String, String> tailMap = ring.tailMap(hash);
-        hash = tailMap.isEmpty() ? ring.firstKey() : tailMap.firstKey();
-      }
-      String virtualNode = ring.get(hash);
-      int index = virtualNode.lastIndexOf(SEPERATOR);
-      if (index >= 0) {
-        return virtualNode.substring(0, index);
-      } else {
-        return virtualNode;
-      }
-    } finally {
-      readLock.unlock();
-    }
-  }
-
-  public String getHash(String key) {
-    return MD5Hash.digest(key).toString();
-  }
-
-  /**
-   * Get the locations in the ring.
-   * @return Set of locations in the ring.
-   */
-  public Set<String> getLocations() {
-    return entryToVirtualNodes.keySet();
-  }
-}

http://git-wip-us.apache.org/repos/asf/hadoop/blob/73be4292/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/federation/utils/package-info.java
----------------------------------------------------------------------
diff --git 
a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/federation/utils/package-info.java
 
b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/federation/utils/package-info.java
deleted file mode 100644
index 7149675..0000000
--- 
a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/federation/utils/package-info.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Assorted utility classes and helpers for HDFS Federation.
- */
[email protected]
[email protected]
-
-package org.apache.hadoop.hdfs.server.federation.utils;
-
-import org.apache.hadoop.classification.InterfaceAudience;
-import org.apache.hadoop.classification.InterfaceStability;

http://git-wip-us.apache.org/repos/asf/hadoop/blob/73be4292/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/federation/RouterAdmin.java
----------------------------------------------------------------------
diff --git 
a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/federation/RouterAdmin.java
 
b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/federation/RouterAdmin.java
deleted file mode 100644
index d799ad4..0000000
--- 
a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/federation/RouterAdmin.java
+++ /dev/null
@@ -1,491 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.hadoop.hdfs.tools.federation;
-
-import java.io.IOException;
-import java.net.InetSocketAddress;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.hadoop.classification.InterfaceAudience.Private;
-import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.conf.Configured;
-import org.apache.hadoop.fs.permission.FsPermission;
-import org.apache.hadoop.hdfs.DFSConfigKeys;
-import org.apache.hadoop.hdfs.HdfsConfiguration;
-import org.apache.hadoop.hdfs.server.federation.resolver.MountTableManager;
-import org.apache.hadoop.hdfs.server.federation.resolver.RemoteLocation;
-import 
org.apache.hadoop.hdfs.server.federation.resolver.order.DestinationOrder;
-import org.apache.hadoop.hdfs.server.federation.router.RouterClient;
-import org.apache.hadoop.hdfs.server.federation.router.RouterStateManager;
-import 
org.apache.hadoop.hdfs.server.federation.store.protocol.AddMountTableEntryRequest;
-import 
org.apache.hadoop.hdfs.server.federation.store.protocol.AddMountTableEntryResponse;
-import 
org.apache.hadoop.hdfs.server.federation.store.protocol.EnterSafeModeRequest;
-import 
org.apache.hadoop.hdfs.server.federation.store.protocol.EnterSafeModeResponse;
-import 
org.apache.hadoop.hdfs.server.federation.store.protocol.GetMountTableEntriesRequest;
-import 
org.apache.hadoop.hdfs.server.federation.store.protocol.GetMountTableEntriesResponse;
-import 
org.apache.hadoop.hdfs.server.federation.store.protocol.GetSafeModeRequest;
-import 
org.apache.hadoop.hdfs.server.federation.store.protocol.GetSafeModeResponse;
-import 
org.apache.hadoop.hdfs.server.federation.store.protocol.LeaveSafeModeRequest;
-import 
org.apache.hadoop.hdfs.server.federation.store.protocol.LeaveSafeModeResponse;
-import 
org.apache.hadoop.hdfs.server.federation.store.protocol.RemoveMountTableEntryRequest;
-import 
org.apache.hadoop.hdfs.server.federation.store.protocol.RemoveMountTableEntryResponse;
-import 
org.apache.hadoop.hdfs.server.federation.store.protocol.UpdateMountTableEntryRequest;
-import 
org.apache.hadoop.hdfs.server.federation.store.protocol.UpdateMountTableEntryResponse;
-import org.apache.hadoop.hdfs.server.federation.store.records.MountTable;
-import org.apache.hadoop.ipc.RPC;
-import org.apache.hadoop.ipc.RemoteException;
-import org.apache.hadoop.net.NetUtils;
-import org.apache.hadoop.util.Tool;
-import org.apache.hadoop.util.ToolRunner;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * This class provides some Federation administrative access shell commands.
- */
-@Private
-public class RouterAdmin extends Configured implements Tool {
-
-  private static final Logger LOG = LoggerFactory.getLogger(RouterAdmin.class);
-
-  private RouterClient client;
-
-  public static void main(String[] argv) throws Exception {
-    Configuration conf = new HdfsConfiguration();
-    RouterAdmin admin = new RouterAdmin(conf);
-
-    int res = ToolRunner.run(admin, argv);
-    System.exit(res);
-  }
-
-  public RouterAdmin(Configuration conf) {
-    super(conf);
-  }
-
-  /**
-   * Print the usage message.
-   */
-  public void printUsage() {
-    String usage = "Federation Admin Tools:\n"
-        + "\t[-add <source> <nameservice> <destination> "
-        + "[-readonly] [-order HASH|LOCAL|RANDOM|HASH_ALL] "
-        + "-owner <owner> -group <group> -mode <mode>]\n"
-        + "\t[-rm <source>]\n"
-        + "\t[-ls <path>]\n"
-        + "\t[-safemode enter | leave | get]\n";
-
-    System.out.println(usage);
-  }
-
-  @Override
-  public int run(String[] argv) throws Exception {
-    if (argv.length < 1) {
-      System.err.println("Not enough parameters specificed");
-      printUsage();
-      return -1;
-    }
-
-    int exitCode = -1;
-    int i = 0;
-    String cmd = argv[i++];
-
-    // Verify that we have enough command line parameters
-    if ("-add".equals(cmd)) {
-      if (argv.length < 4) {
-        System.err.println("Not enough parameters specificed for cmd " + cmd);
-        printUsage();
-        return exitCode;
-      }
-    } else if ("-rm".equalsIgnoreCase(cmd)) {
-      if (argv.length < 2) {
-        System.err.println("Not enough parameters specificed for cmd " + cmd);
-        printUsage();
-        return exitCode;
-      }
-    } else if ("-safemode".equalsIgnoreCase(cmd)) {
-      if (argv.length < 2) {
-        System.err.println("Not enough parameters specificed for cmd " + cmd);
-        printUsage();
-        return exitCode;
-      }
-    }
-
-    // Initialize RouterClient
-    try {
-      String address = getConf().getTrimmed(
-          DFSConfigKeys.DFS_ROUTER_ADMIN_ADDRESS_KEY,
-          DFSConfigKeys.DFS_ROUTER_ADMIN_ADDRESS_DEFAULT);
-      InetSocketAddress routerSocket = NetUtils.createSocketAddr(address);
-      client = new RouterClient(routerSocket, getConf());
-    } catch (RPC.VersionMismatch v) {
-      System.err.println(
-          "Version mismatch between client and server... command aborted");
-      return exitCode;
-    } catch (IOException e) {
-      System.err.println("Bad connection to Router... command aborted");
-      return exitCode;
-    }
-
-    Exception debugException = null;
-    exitCode = 0;
-    try {
-      if ("-add".equals(cmd)) {
-        if (addMount(argv, i)) {
-          System.out.println("Successfuly added mount point " + argv[i]);
-        }
-      } else if ("-rm".equals(cmd)) {
-        if (removeMount(argv[i])) {
-          System.out.println("Successfully removed mount point " + argv[i]);
-        }
-      } else if ("-ls".equals(cmd)) {
-        if (argv.length > 1) {
-          listMounts(argv[i]);
-        } else {
-          listMounts("/");
-        }
-      } else if ("-safemode".equals(cmd)) {
-        manageSafeMode(argv[i]);
-      } else {
-        printUsage();
-        return exitCode;
-      }
-    } catch (IllegalArgumentException arge) {
-      debugException = arge;
-      exitCode = -1;
-      System.err.println(cmd.substring(1) + ": " + arge.getLocalizedMessage());
-      printUsage();
-    } catch (RemoteException e) {
-      // This is a error returned by the server.
-      // Print out the first line of the error message, ignore the stack trace.
-      exitCode = -1;
-      debugException = e;
-      try {
-        String[] content;
-        content = e.getLocalizedMessage().split("\n");
-        System.err.println(cmd.substring(1) + ": " + content[0]);
-        e.printStackTrace();
-      } catch (Exception ex) {
-        System.err.println(cmd.substring(1) + ": " + ex.getLocalizedMessage());
-        e.printStackTrace();
-        debugException = ex;
-      }
-    } catch (Exception e) {
-      exitCode = -1;
-      debugException = e;
-      System.err.println(cmd.substring(1) + ": " + e.getLocalizedMessage());
-      e.printStackTrace();
-    }
-    if (debugException != null) {
-      LOG.debug("Exception encountered", debugException);
-    }
-    return exitCode;
-  }
-
-  /**
-   * Add a mount table entry or update if it exists.
-   *
-   * @param parameters Parameters for the mount point.
-   * @param i Index in the parameters.
-   */
-  public boolean addMount(String[] parameters, int i) throws IOException {
-    // Mandatory parameters
-    String mount = parameters[i++];
-    String[] nss = parameters[i++].split(",");
-    String dest = parameters[i++];
-
-    // Optional parameters
-    boolean readOnly = false;
-    String owner = null;
-    String group = null;
-    FsPermission mode = null;
-    DestinationOrder order = DestinationOrder.HASH;
-    while (i < parameters.length) {
-      if (parameters[i].equals("-readonly")) {
-        readOnly = true;
-      } else if (parameters[i].equals("-order")) {
-        i++;
-        try {
-          order = DestinationOrder.valueOf(parameters[i]);
-        } catch(Exception e) {
-          System.err.println("Cannot parse order: " + parameters[i]);
-        }
-      } else if (parameters[i].equals("-owner")) {
-        i++;
-        owner = parameters[i];
-      } else if (parameters[i].equals("-group")) {
-        i++;
-        group = parameters[i];
-      } else if (parameters[i].equals("-mode")) {
-        i++;
-        short modeValue = Short.parseShort(parameters[i], 8);
-        mode = new FsPermission(modeValue);
-      }
-
-      i++;
-    }
-
-    return addMount(mount, nss, dest, readOnly, order,
-        new ACLEntity(owner, group, mode));
-  }
-
-  /**
-   * Add a mount table entry or update if it exists.
-   *
-   * @param mount Mount point.
-   * @param nss Namespaces where this is mounted to.
-   * @param dest Destination path.
-   * @param readonly If the mount point is read only.
-   * @param order Order of the destination locations.
-   * @param aclInfo the ACL info for mount point.
-   * @return If the mount point was added.
-   * @throws IOException Error adding the mount point.
-   */
-  public boolean addMount(String mount, String[] nss, String dest,
-      boolean readonly, DestinationOrder order, ACLEntity aclInfo)
-      throws IOException {
-    // Get the existing entry
-    MountTableManager mountTable = client.getMountTableManager();
-    GetMountTableEntriesRequest getRequest =
-        GetMountTableEntriesRequest.newInstance(mount);
-    GetMountTableEntriesResponse getResponse =
-        mountTable.getMountTableEntries(getRequest);
-    List<MountTable> results = getResponse.getEntries();
-    MountTable existingEntry = null;
-    for (MountTable result : results) {
-      if (mount.equals(result.getSourcePath())) {
-        existingEntry = result;
-      }
-    }
-
-    if (existingEntry == null) {
-      // Create and add the entry if it doesn't exist
-      Map<String, String> destMap = new LinkedHashMap<>();
-      for (String ns : nss) {
-        destMap.put(ns, dest);
-      }
-      MountTable newEntry = MountTable.newInstance(mount, destMap);
-      if (readonly) {
-        newEntry.setReadOnly(true);
-      }
-      if (order != null) {
-        newEntry.setDestOrder(order);
-      }
-
-      // Set ACL info for mount table entry
-      if (aclInfo.getOwner() != null) {
-        newEntry.setOwnerName(aclInfo.getOwner());
-      }
-
-      if (aclInfo.getGroup() != null) {
-        newEntry.setGroupName(aclInfo.getGroup());
-      }
-
-      if (aclInfo.getMode() != null) {
-        newEntry.setMode(aclInfo.getMode());
-      }
-
-      AddMountTableEntryRequest request =
-          AddMountTableEntryRequest.newInstance(newEntry);
-      AddMountTableEntryResponse addResponse =
-          mountTable.addMountTableEntry(request);
-      boolean added = addResponse.getStatus();
-      if (!added) {
-        System.err.println("Cannot add mount point " + mount);
-      }
-      return added;
-    } else {
-      // Update the existing entry if it exists
-      for (String nsId : nss) {
-        if (!existingEntry.addDestination(nsId, dest)) {
-          System.err.println("Cannot add destination at " + nsId + " " + dest);
-        }
-      }
-      if (readonly) {
-        existingEntry.setReadOnly(true);
-      }
-      if (order != null) {
-        existingEntry.setDestOrder(order);
-      }
-
-      // Update ACL info of mount table entry
-      if (aclInfo.getOwner() != null) {
-        existingEntry.setOwnerName(aclInfo.getOwner());
-      }
-
-      if (aclInfo.getGroup() != null) {
-        existingEntry.setGroupName(aclInfo.getGroup());
-      }
-
-      if (aclInfo.getMode() != null) {
-        existingEntry.setMode(aclInfo.getMode());
-      }
-
-      UpdateMountTableEntryRequest updateRequest =
-          UpdateMountTableEntryRequest.newInstance(existingEntry);
-      UpdateMountTableEntryResponse updateResponse =
-          mountTable.updateMountTableEntry(updateRequest);
-      boolean updated = updateResponse.getStatus();
-      if (!updated) {
-        System.err.println("Cannot update mount point " + mount);
-      }
-      return updated;
-    }
-  }
-
-  /**
-   * Remove mount point.
-   *
-   * @param path Path to remove.
-   * @throws IOException If it cannot be removed.
-   */
-  public boolean removeMount(String path) throws IOException {
-    MountTableManager mountTable = client.getMountTableManager();
-    RemoveMountTableEntryRequest request =
-        RemoveMountTableEntryRequest.newInstance(path);
-    RemoveMountTableEntryResponse response =
-        mountTable.removeMountTableEntry(request);
-    boolean removed = response.getStatus();
-    if (!removed) {
-      System.out.println("Cannot remove mount point " + path);
-    }
-    return removed;
-  }
-
-  /**
-   * List mount points.
-   *
-   * @param path Path to list.
-   * @throws IOException If it cannot be listed.
-   */
-  public void listMounts(String path) throws IOException {
-    MountTableManager mountTable = client.getMountTableManager();
-    GetMountTableEntriesRequest request =
-        GetMountTableEntriesRequest.newInstance(path);
-    GetMountTableEntriesResponse response =
-        mountTable.getMountTableEntries(request);
-    List<MountTable> entries = response.getEntries();
-    printMounts(entries);
-  }
-
-  private static void printMounts(List<MountTable> entries) {
-    System.out.println("Mount Table Entries:");
-    System.out.println(String.format(
-        "%-25s %-25s %-25s %-25s %-25s",
-        "Source", "Destinations", "Owner", "Group", "Mode"));
-    for (MountTable entry : entries) {
-      StringBuilder destBuilder = new StringBuilder();
-      for (RemoteLocation location : entry.getDestinations()) {
-        if (destBuilder.length() > 0) {
-          destBuilder.append(",");
-        }
-        destBuilder.append(String.format("%s->%s", location.getNameserviceId(),
-            location.getDest()));
-      }
-      System.out.print(String.format("%-25s %-25s", entry.getSourcePath(),
-          destBuilder.toString()));
-
-      System.out.println(String.format(" %-25s %-25s %-25s",
-          entry.getOwnerName(), entry.getGroupName(), entry.getMode()));
-    }
-  }
-
-  /**
-   * Manager the safe mode state.
-   * @param cmd Input command, enter or leave safe mode.
-   * @throws IOException
-   */
-  private void manageSafeMode(String cmd) throws IOException {
-    if (cmd.equals("enter")) {
-      if (enterSafeMode()) {
-        System.out.println("Successfully enter safe mode.");
-      }
-    } else if (cmd.equals("leave")) {
-      if (leaveSafeMode()) {
-        System.out.println("Successfully leave safe mode.");
-      }
-    } else if (cmd.equals("get")) {
-      boolean result = getSafeMode();
-      System.out.println("Safe Mode: " + result);
-    }
-  }
-
-  /**
-   * Request the Router entering safemode state.
-   * @return Return true if entering safemode successfully.
-   * @throws IOException
-   */
-  private boolean enterSafeMode() throws IOException {
-    RouterStateManager stateManager = client.getRouterStateManager();
-    EnterSafeModeResponse response = stateManager.enterSafeMode(
-        EnterSafeModeRequest.newInstance());
-    return response.getStatus();
-  }
-
-  /**
-   * Request the Router leaving safemode state.
-   * @return Return true if leaving safemode successfully.
-   * @throws IOException
-   */
-  private boolean leaveSafeMode() throws IOException {
-    RouterStateManager stateManager = client.getRouterStateManager();
-    LeaveSafeModeResponse response = stateManager.leaveSafeMode(
-        LeaveSafeModeRequest.newInstance());
-    return response.getStatus();
-  }
-
-  /**
-   * Verify if current Router state is safe mode state.
-   * @return True if the Router is in safe mode.
-   * @throws IOException
-   */
-  private boolean getSafeMode() throws IOException {
-    RouterStateManager stateManager = client.getRouterStateManager();
-    GetSafeModeResponse response = stateManager.getSafeMode(
-        GetSafeModeRequest.newInstance());
-    return response.isInSafeMode();
-  }
-
-  /**
-   * Inner class that stores ACL info of mount table.
-   */
-  static class ACLEntity {
-    private final String owner;
-    private final String group;
-    private final FsPermission mode;
-
-    ACLEntity(String owner, String group, FsPermission mode) {
-      this.owner = owner;
-      this.group = group;
-      this.mode = mode;
-    }
-
-    public String getOwner() {
-      return owner;
-    }
-
-    public String getGroup() {
-      return group;
-    }
-
-    public FsPermission getMode() {
-      return mode;
-    }
-  }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/hadoop/blob/73be4292/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/federation/package-info.java
----------------------------------------------------------------------
diff --git 
a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/federation/package-info.java
 
b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/federation/package-info.java
deleted file mode 100644
index 466c3d3..0000000
--- 
a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/federation/package-info.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * It includes the tools to manage the Router-based federation. Includes the
- * utilities to add and remove mount table entries.
- */
[email protected]
[email protected]
-package org.apache.hadoop.hdfs.tools.federation;
-
-import org.apache.hadoop.classification.InterfaceAudience;
-import org.apache.hadoop.classification.InterfaceStability;
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/hadoop/blob/73be4292/hadoop-hdfs-project/hadoop-hdfs/src/main/proto/FederationProtocol.proto
----------------------------------------------------------------------
diff --git 
a/hadoop-hdfs-project/hadoop-hdfs/src/main/proto/FederationProtocol.proto 
b/hadoop-hdfs-project/hadoop-hdfs/src/main/proto/FederationProtocol.proto
deleted file mode 100644
index 46dbc8b..0000000
--- a/hadoop-hdfs-project/hadoop-hdfs/src/main/proto/FederationProtocol.proto
+++ /dev/null
@@ -1,240 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-option java_package = "org.apache.hadoop.hdfs.federation.protocol.proto";
-option java_outer_classname = "HdfsServerFederationProtos";
-option java_generic_services = true;
-option java_generate_equals_and_hash = true;
-package hadoop.hdfs;
-
-
-/////////////////////////////////////////////////
-// Membership
-/////////////////////////////////////////////////
-
-message NamenodeMembershipStatsRecordProto {
-  optional uint64 totalSpace = 1;
-  optional uint64 availableSpace = 2;
-
-  optional uint64 numOfFiles = 10;
-  optional uint64 numOfBlocks = 11;
-  optional uint64 numOfBlocksMissing = 12;
-  optional uint64 numOfBlocksPendingReplication = 13;
-  optional uint64 numOfBlocksUnderReplicated = 14;
-  optional uint64 numOfBlocksPendingDeletion = 15;
-
-  optional uint32 numOfActiveDatanodes = 20;
-  optional uint32 numOfDeadDatanodes = 21;
-  optional uint32 numOfDecommissioningDatanodes = 22;
-  optional uint32 numOfDecomActiveDatanodes = 23;
-  optional uint32 numOfDecomDeadDatanodes = 24;
-}
-
-message NamenodeMembershipRecordProto {
-  optional uint64 dateCreated = 1;
-  optional uint64 dateModified = 2;
-  optional uint64 lastContact = 3;
-  optional string routerId = 4;
-  optional string nameserviceId = 5;
-  optional string namenodeId = 6;
-  optional string clusterId = 7;
-  optional string blockPoolId = 8;
-  optional string webAddress = 9;
-  optional string rpcAddress = 10;
-  optional string serviceAddress = 11;
-  optional string lifelineAddress = 12;
-  optional string state = 13;
-  optional bool isSafeMode = 14;
-
-  optional NamenodeMembershipStatsRecordProto stats = 15;
-}
-
-message FederationNamespaceInfoProto {
-  optional string blockPoolId = 1;
-  optional string clusterId = 2;
-  optional string nameserviceId = 3;
-}
-
-message GetNamenodeRegistrationsRequestProto {
-  optional NamenodeMembershipRecordProto membership = 1;
-}
-
-message GetNamenodeRegistrationsResponseProto {
-  repeated NamenodeMembershipRecordProto namenodeMemberships = 1;
-}
-
-message GetExpiredRegistrationsRequestProto {
-}
-
-message GetNamespaceInfoRequestProto {
-}
-
-message GetNamespaceInfoResponseProto {
-  repeated FederationNamespaceInfoProto namespaceInfos = 1;
-}
-
-message UpdateNamenodeRegistrationRequestProto {
-  optional string nameserviceId = 1;
-  optional string namenodeId = 2;
-  optional string state = 3;
-}
-
-message UpdateNamenodeRegistrationResponseProto {
-  optional bool status = 1;
-}
-
-message NamenodeHeartbeatRequestProto {
-  optional NamenodeMembershipRecordProto namenodeMembership = 1;
-}
-
-message NamenodeHeartbeatResponseProto {
-  optional bool status = 1;
-}
-
-
-/////////////////////////////////////////////////
-// Mount table
-/////////////////////////////////////////////////
-
-message RemoteLocationProto {
-  optional string nameserviceId = 1;
-  optional string path = 2;
-}
-
-message MountTableRecordProto {
-  optional string srcPath = 1;
-  repeated RemoteLocationProto destinations = 2;
-  optional uint64 dateCreated = 3;
-  optional uint64 dateModified = 4;
-  optional bool readOnly = 5 [default = false];
-
-  enum DestOrder {
-    HASH = 0;
-    LOCAL = 1;
-    RANDOM = 2;
-    HASH_ALL = 3;
-  }
-  optional DestOrder destOrder = 6 [default = HASH];
-
-  optional string ownerName = 10;
-  optional string groupName = 11;
-  optional int32 mode = 12;
-}
-
-message AddMountTableEntryRequestProto {
-  optional MountTableRecordProto entry = 1;
-}
-
-message AddMountTableEntryResponseProto {
-  optional bool status = 1;
-}
-
-message UpdateMountTableEntryRequestProto {
-  optional MountTableRecordProto entry = 1;
-}
-
-message UpdateMountTableEntryResponseProto {
-  optional bool status = 1;
-}
-
-message RemoveMountTableEntryRequestProto {
-  optional string srcPath = 1;
-}
-
-message RemoveMountTableEntryResponseProto{
-  optional bool status = 1;
-}
-
-message GetMountTableEntriesRequestProto {
-  optional string srcPath = 1;
-}
-
-message GetMountTableEntriesResponseProto {
-  repeated MountTableRecordProto entries = 1;
-  optional uint64 timestamp = 2;
-}
-
-
-/////////////////////////////////////////////////
-// Routers
-/////////////////////////////////////////////////
-
-message StateStoreVersionRecordProto {
-  optional uint64 membershipVersion = 1;
-  optional uint64 mountTableVersion = 2;
-}
-
-message RouterRecordProto {
-  optional uint64 dateCreated = 1;
-  optional uint64 dateModified = 2;
-  optional string address = 3;
-  optional string status = 4;
-  optional StateStoreVersionRecordProto stateStoreVersion = 5;
-  optional string version = 6;
-  optional string compileInfo = 7;
-  optional uint64 dateStarted = 8;
-}
-
-message GetRouterRegistrationRequestProto {
-  optional string routerId = 1;
-}
-
-message GetRouterRegistrationResponseProto {
-  optional RouterRecordProto router = 1;
-}
-
-message GetRouterRegistrationsRequestProto {
-}
-
-message GetRouterRegistrationsResponseProto {
-  optional uint64 timestamp = 1;
-  repeated RouterRecordProto routers = 2;
-}
-
-message RouterHeartbeatRequestProto {
-  optional RouterRecordProto router = 1;
-}
-
-message RouterHeartbeatResponseProto {
-  optional bool status = 1;
-}
-
-/////////////////////////////////////////////////
-// Route State
-/////////////////////////////////////////////////
-
-message EnterSafeModeRequestProto {
-}
-
-message EnterSafeModeResponseProto {
-  optional bool status = 1;
-}
-
-message LeaveSafeModeRequestProto {
-}
-
-message LeaveSafeModeResponseProto {
-  optional bool status = 1;
-}
-
-message GetSafeModeRequestProto {
-}
-
-message GetSafeModeResponseProto {
-  optional bool isInSafeMode = 1;
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/hadoop/blob/73be4292/hadoop-hdfs-project/hadoop-hdfs/src/main/proto/RouterProtocol.proto
----------------------------------------------------------------------
diff --git 
a/hadoop-hdfs-project/hadoop-hdfs/src/main/proto/RouterProtocol.proto 
b/hadoop-hdfs-project/hadoop-hdfs/src/main/proto/RouterProtocol.proto
deleted file mode 100644
index a4e4d65..0000000
--- a/hadoop-hdfs-project/hadoop-hdfs/src/main/proto/RouterProtocol.proto
+++ /dev/null
@@ -1,62 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-option java_package = "org.apache.hadoop.hdfs.protocol.proto";
-option java_outer_classname = "RouterProtocolProtos";
-option java_generic_services = true;
-option java_generate_equals_and_hash = true;
-package hadoop.hdfs.router;
-
-import "FederationProtocol.proto";
-
-service RouterAdminProtocolService {
-  /**
-   * Add a mount table entry.
-   */
-  rpc addMountTableEntry(AddMountTableEntryRequestProto) 
returns(AddMountTableEntryResponseProto);
-
-  /**
-   * Update an existing mount table entry without copying files.
-   */
-  rpc updateMountTableEntry(UpdateMountTableEntryRequestProto) 
returns(UpdateMountTableEntryResponseProto);
-
-  /**
-   * Remove a mount table entry.
-   */
-  rpc removeMountTableEntry(RemoveMountTableEntryRequestProto) 
returns(RemoveMountTableEntryResponseProto);
-
-  /**
-   * Get matching mount entries
-   */
-  rpc getMountTableEntries(GetMountTableEntriesRequestProto) 
returns(GetMountTableEntriesResponseProto);
-
-  /**
-   * Transform Router state to safe mode state.
-   */
-  rpc enterSafeMode(EnterSafeModeRequestProto) returns 
(EnterSafeModeResponseProto);
-
-  /**
-   * Transform Router state from safe mode to running state.
-   */
-  rpc leaveSafeMode(LeaveSafeModeRequestProto) returns 
(LeaveSafeModeResponseProto);
-
-  /**
-   * Verify if current Router state is safe mode state.
-   */
-  rpc getSafeMode(GetSafeModeRequestProto) returns (GetSafeModeResponseProto);
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/hadoop/blob/73be4292/hadoop-hdfs-project/hadoop-hdfs/src/main/resources/hdfs-default.xml
----------------------------------------------------------------------
diff --git 
a/hadoop-hdfs-project/hadoop-hdfs/src/main/resources/hdfs-default.xml 
b/hadoop-hdfs-project/hadoop-hdfs/src/main/resources/hdfs-default.xml
index eeff806..c1738cb 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/main/resources/hdfs-default.xml
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/resources/hdfs-default.xml
@@ -4372,391 +4372,4 @@
       will throw NameNodeFormatException.
     </description>
   </property>
-
-  <property>
-    <name>dfs.federation.router.default.nameserviceId</name>
-    <value></value>
-    <description>
-      Nameservice identifier of the default subcluster to monitor.
-    </description>
-  </property>
-
-  <property>
-    <name>dfs.federation.router.rpc.enable</name>
-    <value>true</value>
-    <description>
-      If true, the RPC service to handle client requests in the router is
-      enabled.
-    </description>
-  </property>
-
-  <property>
-    <name>dfs.federation.router.rpc-address</name>
-    <value>0.0.0.0:8888</value>
-    <description>
-      RPC address that handles all clients requests.
-      The value of this property will take the form of router-host1:rpc-port.
-    </description>
-  </property>
-
-  <property>
-    <name>dfs.federation.router.rpc-bind-host</name>
-    <value></value>
-    <description>
-      The actual address the RPC server will bind to. If this optional address 
is
-      set, it overrides only the hostname portion of
-      dfs.federation.router.rpc-address. This is useful for making the name 
node
-      listen on all interfaces by setting it to 0.0.0.0.
-    </description>
-  </property>
-
-  <property>
-    <name>dfs.federation.router.handler.count</name>
-    <value>10</value>
-    <description>
-      The number of server threads for the router to handle RPC requests from
-      clients.
-    </description>
-  </property>
-
-  <property>
-    <name>dfs.federation.router.handler.queue.size</name>
-    <value>100</value>
-    <description>
-      The size of the queue for the number of handlers to handle RPC client 
requests.
-    </description>
-  </property>
-
-  <property>
-    <name>dfs.federation.router.reader.count</name>
-    <value>1</value>
-    <description>
-      The number of readers for the router to handle RPC client requests.
-    </description>
-  </property>
-
-  <property>
-    <name>dfs.federation.router.reader.queue.size</name>
-    <value>100</value>
-    <description>
-      The size of the queue for the number of readers for the router to handle 
RPC client requests.
-    </description>
-  </property>
-
-  <property>
-    <name>dfs.federation.router.connection.pool-size</name>
-    <value>1</value>
-    <description>
-      Size of the pool of connections from the router to namenodes.
-    </description>
-  </property>
-
-  <property>
-    <name>dfs.federation.router.connection.clean.ms</name>
-    <value>10000</value>
-    <description>
-      Time interval, in milliseconds, to check if the connection pool should
-      remove unused connections.
-    </description>
-  </property>
-
-  <property>
-    <name>dfs.federation.router.connection.pool.clean.ms</name>
-    <value>60000</value>
-    <description>
-      Time interval, in milliseconds, to check if the connection manager should
-      remove unused connection pools.
-    </description>
-  </property>
-
-  <property>
-    <name>dfs.federation.router.metrics.enable</name>
-    <value>true</value>
-    <description>
-      If the metrics in the router are enabled.
-    </description>
-  </property>
-
-  <property>
-    <name>dfs.federation.router.metrics.class</name>
-    
<value>org.apache.hadoop.hdfs.server.federation.metrics.FederationRPCPerformanceMonitor</value>
-    <description>
-      Class to monitor the RPC system in the router. It must implement the
-      RouterRpcMonitor interface.
-    </description>
-  </property>
-
-  <property>
-    <name>dfs.federation.router.admin.enable</name>
-    <value>true</value>
-    <description>
-      If true, the RPC admin service to handle client requests in the router is
-      enabled.
-    </description>
-  </property>
-
-  <property>
-    <name>dfs.federation.router.admin-address</name>
-    <value>0.0.0.0:8111</value>
-    <description>
-      RPC address that handles the admin requests.
-      The value of this property will take the form of router-host1:rpc-port.
-    </description>
-  </property>
-
-  <property>
-    <name>dfs.federation.router.admin-bind-host</name>
-    <value></value>
-    <description>
-      The actual address the RPC admin server will bind to. If this optional
-      address is set, it overrides only the hostname portion of
-      dfs.federation.router.admin-address. This is useful for making the name
-      node listen on all interfaces by setting it to 0.0.0.0.
-    </description>
-  </property>
-
-  <property>
-    <name>dfs.federation.router.admin.handler.count</name>
-    <value>1</value>
-    <description>
-      The number of server threads for the router to handle RPC requests from
-      admin.
-    </description>
-  </property>
-
-  <property>
-    <name>dfs.federation.router.http-address</name>
-    <value>0.0.0.0:50071</value>
-    <description>
-      HTTP address that handles the web requests to the Router.
-      The value of this property will take the form of router-host1:http-port.
-    </description>
-  </property>
-
-  <property>
-    <name>dfs.federation.router.http-bind-host</name>
-    <value></value>
-    <description>
-      The actual address the HTTP server will bind to. If this optional
-      address is set, it overrides only the hostname portion of
-      dfs.federation.router.http-address. This is useful for making the name
-      node listen on all interfaces by setting it to 0.0.0.0.
-    </description>
-  </property>
-
-  <property>
-    <name>dfs.federation.router.https-address</name>
-    <value>0.0.0.0:50072</value>
-    <description>
-      HTTPS address that handles the web requests to the Router.
-      The value of this property will take the form of router-host1:https-port.
-    </description>
-  </property>
-
-  <property>
-    <name>dfs.federation.router.https-bind-host</name>
-    <value></value>
-    <description>
-      The actual address the HTTPS server will bind to. If this optional
-      address is set, it overrides only the hostname portion of
-      dfs.federation.router.https-address. This is useful for making the name
-      node listen on all interfaces by setting it to 0.0.0.0.
-    </description>
-  </property>
-
-  <property>
-    <name>dfs.federation.router.http.enable</name>
-    <value>true</value>
-    <description>
-      If the HTTP service to handle client requests in the router is enabled.
-    </description>
-  </property>
-
-  <property>
-    <name>dfs.federation.router.metrics.enable</name>
-    <value>true</value>
-    <description>
-      If the metrics service in the router is enabled.
-    </description>
-  </property>
-
-  <property>
-    <name>dfs.federation.router.file.resolver.client.class</name>
-    
<value>org.apache.hadoop.hdfs.server.federation.resolver.MountTableResolver</value>
-    <description>
-      Class to resolve files to subclusters.
-    </description>
-  </property>
-
-  <property>
-    <name>dfs.federation.router.namenode.resolver.client.class</name>
-    
<value>org.apache.hadoop.hdfs.server.federation.resolver.MembershipNamenodeResolver</value>
-    <description>
-      Class to resolve the namenode for a subcluster.
-    </description>
-  </property>
-
-  <property>
-    <name>dfs.federation.router.store.enable</name>
-    <value>true</value>
-    <description>
-      If true, the Router connects to the State Store.
-    </description>
-  </property>
-
-  <property>
-    <name>dfs.federation.router.store.serializer</name>
-    
<value>org.apache.hadoop.hdfs.server.federation.store.driver.impl.StateStoreSerializerPBImpl</value>
-    <description>
-      Class to serialize State Store records.
-    </description>
-  </property>
-
-  <property>
-    <name>dfs.federation.router.store.driver.class</name>
-    
<value>org.apache.hadoop.hdfs.server.federation.store.driver.impl.StateStoreZooKeeperImpl</value>
-    <description>
-      Class to implement the State Store. There are three implementation 
classes currently
-      being supported:
-      
org.apache.hadoop.hdfs.server.federation.store.driver.impl.StateStoreFileImpl,
-      
org.apache.hadoop.hdfs.server.federation.store.driver.impl.StateStoreFileSystemImpl
 and
-      
org.apache.hadoop.hdfs.server.federation.store.driver.impl.StateStoreZooKeeperImpl.
-      These implementation classes use the local file, filesystem and 
ZooKeeper as a backend respectively.
-      By default it uses the ZooKeeper as the default State Store.
-    </description>
-  </property>
-
-  <property>
-    <name>dfs.federation.router.store.connection.test</name>
-    <value>60000</value>
-    <description>
-      How often to check for the connection to the State Store in milliseconds.
-    </description>
-  </property>
-
-  <property>
-    <name>dfs.federation.router.cache.ttl</name>
-    <value>1m</value>
-    <description>
-      How often to refresh the State Store caches in milliseconds. This setting
-      supports multiple time unit suffixes as described in
-      dfs.heartbeat.interval. If no suffix is specified then milliseconds is
-      assumed.
-    </description>
-  </property>
-
-  <property>
-    <name>dfs.federation.router.store.membership.expiration</name>
-    <value>300000</value>
-    <description>
-      Expiration time in milliseconds for a membership record.
-    </description>
-  </property>
-
-  <property>
-    <name>dfs.federation.router.heartbeat.enable</name>
-    <value>true</value>
-    <description>
-      If true, the Router heartbeats into the State Store.
-    </description>
-  </property>
-
-  <property>
-    <name>dfs.federation.router.heartbeat.interval</name>
-    <value>5000</value>
-    <description>
-      How often the Router should heartbeat into the State Store in 
milliseconds.
-    </description>
-  </property>
-
-  <property>
-    <name>dfs.federation.router.heartbeat-state.interval</name>
-    <value>5s</value>
-    <description>
-      How often the Router should heartbeat its state into the State Store in
-      milliseconds. This setting supports multiple time unit suffixes as
-      described in dfs.federation.router.quota-cache.update.interval.
-    </description>
-  </property>
-
-  <property>
-    <name>dfs.federation.router.store.router.expiration</name>
-    <value>5m</value>
-    <description>
-      Expiration time in milliseconds for a router state record. This setting
-      supports multiple time unit suffixes as described in
-      dfs.federation.router.quota-cache.update.interval.
-    </description>
-  </property>
-
-  <property>
-    <name>dfs.federation.router.safemode.enable</name>
-    <value>true</value>
-    <description>
-    </description>
-  </property>
-
-  <property>
-    <name>dfs.federation.router.safemode.extension</name>
-    <value>30s</value>
-    <description>
-      Time after startup that the Router is in safe mode. This setting
-      supports multiple time unit suffixes as described in
-      dfs.heartbeat.interval. If no suffix is specified then milliseconds is
-      assumed.
-    </description>
-  </property>
-
-  <property>
-    <name>dfs.federation.router.safemode.expiration</name>
-    <value>3m</value>
-    <description>
-      Time without being able to reach the State Store to enter safe mode. This
-      setting supports multiple time unit suffixes as described in
-      dfs.heartbeat.interval. If no suffix is specified then milliseconds is
-      assumed.
-    </description>
-  </property>
-
-  <property>
-    <name>dfs.federation.router.monitor.namenode</name>
-    <value></value>
-    <description>
-      The identifier of the namenodes to monitor and heartbeat.
-    </description>
-  </property>
-
-  <property>
-    <name>dfs.federation.router.monitor.localnamenode.enable</name>
-    <value>true</value>
-    <description>
-      If true, the Router should monitor the namenode in the local machine.
-    </description>
-  </property>
-
-  <property>
-    <name>dfs.federation.router.mount-table.max-cache-size</name>
-    <value>10000</value>
-    <description>
-      Maximum number of mount table cache entries to have.
-      By default, remove cache entries if we have more than 10k.
-    </description>
-  </property>
-
-  <property>
-    <name>dfs.federation.router.client.thread-size</name>
-    <value>32</value>
-    <description>
-      Max threads size for the RouterClient to execute concurrent
-      requests.
-    </description>
-  </property>
-
-  <property>
-    <name>dfs.federation.router.client.retry.max.attempts</name>
-    <value>3</value>
-    <description>
-      Max retry attempts for the RouterClient talking to the Router.
-    </description>
-  </property>
 </configuration>

http://git-wip-us.apache.org/repos/asf/hadoop/blob/73be4292/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/router/federationhealth.html
----------------------------------------------------------------------
diff --git 
a/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/router/federationhealth.html 
b/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/router/federationhealth.html
deleted file mode 100644
index a490086..0000000
--- 
a/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/router/federationhealth.html
+++ /dev/null
@@ -1,422 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd";>
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  See the NOTICE file distributed with
-   this work for additional information regarding copyright ownership.
-   The ASF licenses this file to You under the Apache License, Version 2.0
-   (the "License"); you may not use this file except in compliance with
-   the License.  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml";>
-<head>
-<meta http-equiv="X-UA-Compatible" content="IE=9" />
-<link rel="stylesheet" type="text/css" 
href="/static/bootstrap-3.0.2/css/bootstrap.min.css" />
-<link rel="stylesheet" type="text/css" href="/static/dataTables.bootstrap.css" 
/>
-<link rel="stylesheet" type="text/css" href="/static/hadoop.css" />
-<title>Router Information</title>
-</head>
-<body>
-
-<header class="navbar navbar-inverse bs-docs-nav" role="banner">
-<div class="container">
-  <div class="navbar-header">
-    <div class="navbar-brand">Hadoop</div>
-  </div>
-
-  <ul class="nav navbar-nav" id="ui-tabs">
-    <li><a href="#tab-overview">Overview</a></li>
-    <li><a href="#tab-namenode">Subclusters</a></li>
-    <li><a href="#tab-router">Routers</a></li>
-    <li><a href="#tab-datanode">Datanodes</a></li>
-    <li><a href="#tab-mounttable">Mount table</a></li>
-    <li class="dropdown">
-      <a href="#" class="dropdown-toggle" data-toggle="dropdown">Utilities <b 
class="caret"></b></a>
-      <ul class="dropdown-menu">
-        <li><a href="jmx">Metrics</a></li>
-        <li><a href="conf">Configuration</a></li>
-        <li><a href="logs">Logs</a></li>
-        <li><a href="fsck">FSCK</a></li>
-      </ul>
-    </li>
-  </ul>
-</div>
-</header>
-
-<div class="container">
-
-<div id="alert-panel">
-  <div class="alert alert-danger">
-    <button type="button" class="close" 
onclick="$('#alert-panel').hide();">&times;</button>
-    <div class="alert-body" id="alert-panel-body"></div>
-  </div>
-</div>
-
-<div class="tab-content">
-  <div class="tab-pane" id="tab-overview"></div>
-  <div class="tab-pane" id="tab-namenode"></div>
-  <div class="tab-pane" id="tab-router"></div>
-  <div class="tab-pane" id="tab-datanode"></div>
-  <div class="tab-pane" id="tab-mounttable"></div>
-</div>
-
-<div class="row">
-  <hr />
-  <div class="col-xs-2"><p>Hadoop, {release-year-token}.</p></div>
-</div>
-</div>
-
-<!-- Overview -->
-<script type="text/x-dust-template" id="tmpl-federationhealth">
-<div class="page-header"><h1>Router 
{#federation}<small>'{HostAndPort}'</small>{/federation}</h1></div>
-{#federation}
-<table class="table table-bordered table-striped">
-  <tr><th>Started:</th><td>{RouterStarted}</td></tr>
-  <tr><th>Version:</th><td>{Version}</td></tr>
-  <tr><th>Compiled:</th><td>{CompileInfo}</td></tr>
-  <tr><th>Cluster ID:</th><td>{ClusterId}</td></tr>
-  <tr><th>Block Pool ID:</th><td>{BlockPoolId}</td></tr>
-  <tr><th>Status:</th><td>{RouterStatus}</td></tr>
-</table>
-{/federation}
-
-<div class="page-header"><h1>Summary</h1></div>
-{#federation}
-<table class="table table-bordered table-striped">
-  <tr><th>Total capacity</th><td>{TotalCapacity|fmt_bytes}</td></tr>
-  <tr><th>Used capacity</th><td>{UsedCapacity|fmt_bytes}</td></tr>
-  <tr><th>Remaining capacity</th><td>{RemainingCapacity|fmt_bytes}</td></tr>
-  <tr><th>Nameservices</th><td>{NumNameservices}</td></tr>
-  <tr><th>Namenodes</th><td>{NumNamenodes}</td></tr>
-  <tr>
-    <th>DataNodes usages% (Min/Median/Max/stdDev)</th>
-    <td>{#NodeUsage.nodeUsage}{min} / {median} / {max} / 
{stdDev}{/NodeUsage.nodeUsage}</td>
-  </tr>
-  <tr><th><a href="#tab-datanode">Live Nodes</a></th><td>{NumLiveNodes} 
(Decommissioned: {NumDecomLiveNodes})</td></tr>
-  <tr><th><a href="#tab-datanode">Dead Nodes</a></th><td>{NumDeadNodes} 
(Decommissioned: {NumDecomDeadNodes})</td></tr>
-  <tr><th><a href="#tab-datanode">Decommissioning 
Nodes</a></th><td>{NumDecommissioningNodes}</td></tr>
-  <tr><th>Files</th><td>{NumFiles}</td></tr>
-  <tr><th>Blocks</th><td>{NumBlocks}</td></tr>
-  <tr><th title="Excludes missing blocks.">Number of Under-Replicated 
Blocks</th><td>{NumOfBlocksUnderReplicated}</td></tr>
-  <tr><th>Number of Blocks Pending 
Deletion</th><td>{NumOfBlocksPendingDeletion}</td></tr>
-</table>
-{/federation}
-</script>
-
-<!-- Subclusters info: list of nameservices and namenodes -->
-<script type="text/x-dust-template" id="tmpl-namenode">
-<div class="page-header"><h1>Nameservice Information</h1></div>
-<div>
-  <ul class="dfshealth-node-legend">
-    <li class="dfshealth-node-icon dfshealth-node-alive">Active</li>
-    <li class="dfshealth-node-icon 
dfshealth-node-down-decommissioned">Standby</li>
-    <li class="dfshealth-node-icon dfshealth-node-down-maintenance">Safe 
mode</li>
-    <li class="dfshealth-node-icon dfshealth-node-down">Unavailable</li>
-  </ul>
-</div>
-<small>
-<table class="table">
-  <thead>
-    <tr>
-      <th colspan="6"></th>
-      <th colspan="3">Blocks</th>
-      <th colspan="2">Nodes</th>
-      <th colspan="3">Decom</th>
-    </tr>
-    <tr>
-      <th></th>
-      <th>Nameservice</th>
-      <th>Namenode</th>
-      <th>Last Contact</th>
-      <th>Capacity</th>
-      <th>Files</th>
-      <th>Total</th>
-      <th>Missing</th>
-      <th>Under-Replicated</th>
-      <th>Live</th>
-      <th>Dead</th>
-      <th>Progress</th>
-      <th>Live</th>
-      <th>Dead</th>
-    </tr>
-  </thead>
-  <tbody>
-    {#Nameservices}
-    <tr>
-      <td class="dfshealth-node-icon dfshealth-node-{iconState}" 
title="{title}"></td>
-      <td><a href="http://{webAddress}";>{nameserviceId}</a></td>
-      <td><a href="http://{webAddress}";>{namenodeId}</a></td>
-      <td>{lastHeartbeat}</td>
-      <td ng-value="{usedPercentage}" style="width:210px">
-        <div>
-          <div style="display:inline-block; float: left; padding-right: 10px; 
width:60px;">{totalSpace|fmt_bytes}</div>
-          <div class="clearfix progress dfshealth-node-capacity-bar" 
title="Used: {used|fmt_bytes}">
-            <div class="progress-bar {#helper_usage_bar 
value="{usedPercentage}"/}" style="width: {usedPercentage}%">
-            </div>
-          </div>
-        </div>
-      </td>
-      <td>{numOfFiles}</td>
-      <td>{numOfBlocks}</td>
-      <td>{numOfBlocksMissing}</td>
-      <td>{numOfBlocksUnderReplicated}</td>
-      <td>{numOfActiveDatanodes}</td>
-      <td>{numOfDeadDatanodes}</td>
-      <td>{numOfDecommissioningDatanodes}</td>
-      <td>{numOfDecomActiveDatanodes}</td>
-      <td>{numOfDecomDeadDatanodes}</td>
-    </tr>
-    {/Nameservices}
-  </tbody>
-</table>
-</small>
-
-<div class="page-header"><h1>Namenode Information</h1></div>
-<div>
-  <ul class="dfshealth-node-legend">
-    <li class="dfshealth-node-icon dfshealth-node-alive">Active</li>
-    <li class="dfshealth-node-icon 
dfshealth-node-down-decommissioned">Standby</li>
-    <li class="dfshealth-node-icon dfshealth-node-down-maintenance">Safe 
mode</li>
-    <li class="dfshealth-node-icon dfshealth-node-down">Unavailable</li>
-  </ul>
-</div>
-<small>
-<table class="table">
-  <thead>
-    <tr>
-      <th colspan="7"></th>
-      <th colspan="3">Blocks</th>
-      <th colspan="2">Nodes</th>
-      <th colspan="3">Decom</th>
-    </tr>
-    <tr>
-      <th></th>
-      <th colspan="2">Namenode</th>
-      <th>Web address</th>
-      <th>Last Contact</th>
-      <th>Capacity</th>
-      <th>Files</th>
-      <th>Total</th>
-      <th>Missing</th>
-      <th>Under-Replicated</th>
-      <th>Live</th>
-      <th>Dead</th>
-      <th>Progress</th>
-      <th>Live</th>
-      <th>Dead</th>
-    </tr>
-  </thead>
-  <tbody>
-    {#Namenodes}
-    <tr>
-      <td class="dfshealth-node-icon dfshealth-node-{iconState}" 
title="{title}"></td>
-      <td>{nameserviceId}</td>
-      <td>{namenodeId}</td>
-      <td><a href="http://{webAddress}";>{webAddress}</a></td>
-      <td>{lastHeartbeat}</td>
-      <td ng-value="{usedPercentage}" style="width:210px">
-        <div>
-          <div style="display:inline-block; float: left; padding-right: 10px; 
width:60px;">{totalSpace|fmt_bytes}</div>
-          <div class="clearfix progress dfshealth-node-capacity-bar" 
title="Used: {used|fmt_bytes}">
-            <div class="progress-bar {#helper_usage_bar 
value="{usedPercentage}"/}" style="width: {usedPercentage}%">
-            </div>
-          </div>
-        </div>
-      </td>
-      <td>{numOfFiles}</td>
-      <td>{numOfBlocks}</td>
-      <td>{numOfBlocksMissing}</td>
-      <td>{numOfBlocksUnderReplicated}</td>
-      <td>{numOfActiveDatanodes}</td>
-      <td>{numOfDeadDatanodes}</td>
-      <td>{numOfDecommissioningDatanodes}</td>
-      <td>{numOfDecomActiveDatanodes}</td>
-      <td>{numOfDecomDeadDatanodes}</td>
-    </tr>
-    {/Namenodes}
-  </tbody>
-</table>
-</small>
-</script>
-
-<!-- Routers -->
-<script type="text/x-dust-template" id="tmpl-router">
-<div class="page-header"><h1>Routers Information</h1></div>
-<div>
-  <ul class="dfshealth-node-legend">
-    <li class="dfshealth-node-icon dfshealth-node-alive">Active</li>
-    <li class="dfshealth-node-icon dfshealth-node-decommissioned">Safe 
mode</li>
-    <li class="dfshealth-node-icon dfshealth-node-down">Unavailable</li>
-  </ul>
-</div>
-<table class="table">
-  <thead>
-    <tr>
-      <th colspan="4"></th>
-      <th colspan="2">Last update</th>
-      <th></th>
-    </tr>
-    <tr>
-      <th></th>
-      <th>Address</th>
-      <th>Status</th>
-      <th>Heartbeat</th>
-      <th>Membership</th>
-      <th>Mount table</th>
-      <th>Version</th>
-    </tr>
-  </thead>
-  <tbody>
-    {#Routers}
-    <tr>
-      <td class="dfshealth-node-icon dfshealth-node-{iconState}" 
title="{title}"></td>
-      <td>{address}</td>
-      <td>{status}</td>
-      <td>{lastHeartbeat} sec ago</td>
-      <td>{lastMembershipUpdate}</td>
-      <td>{lastMountTableUpdate}</td>
-      <td>{version}</td>
-    </tr>
-    {/Routers}
-  </tbody>
-</table>
-</script>
-
-<!-- Datanodes -->
-<script type="text/x-dust-template" id="tmpl-datanode">
-<div class="page-header"><h1>Datanode Information</h1></div>
-<div>
-  <ul class="dfshealth-node-legend">
-    <li class="dfshealth-node-icon dfshealth-node-alive">In service</li>
-    <li class="dfshealth-node-icon dfshealth-node-down">Down</li>
-    <li class="dfshealth-node-icon 
dfshealth-node-decommissioned">Decommissioned</li>
-    <li class="dfshealth-node-icon 
dfshealth-node-down-decommissioned">Decommissioned &amp; dead</li>
-  </ul>
-</div>
-<div class="page-header"><h1><small>In operation</small></h1></div>
-<small>
-<table class="table" id="table-datanodes">
-  <thead>
-    <tr>
-      <th>Node</th>
-      <th>Last contact</th>
-      <th style="width:180px; text-align:center">Capacity</th>
-      <!--th>Blocks</th-->
-      <th>Block pool used</th>
-      <!--th>Version</th-->
-    </tr>
-  </thead>
-  {#LiveNodes}
-  <tr>
-    <td ng-value="{state}-{name}" class="dfshealth-node-icon 
dfshealth-node-{state}">{location}/{name} ({xferaddr})</td>
-    <td ng-value="{lastContact}">{#helper_relative_time 
value="{lastContact}"/}</td>
-    <td ng-value="{usedPercentage}" style="width:210px">
-      <div>
-        <div style="display:inline-block; float: left; padding-right: 10px; 
width:60px;">{capacity|fmt_bytes}</div>
-        <div class="clearfix progress dfshealth-node-capacity-bar" title="Non 
DFS: {nonDfsUsedSpace|fmt_bytes}, Used: {used|fmt_bytes}">
-          <div class="progress-bar {#helper_usage_bar 
value="{usedPercentage}"/}" style="width: {usedPercentage}%">
-          </div>
-        </div>
-      </div>
-    </td>
-    <!--td>{numBlocks}</td-->
-    <td ng-value="{blockPoolUsedPercent}">{blockPoolUsed|fmt_bytes} 
({blockPoolUsedPercent|fmt_percentage})</td>
-    <!--td>{version}</td-->
-  </tr>
-  {/LiveNodes}
-  {#DeadNodes}
-  <tr class="danger">
-    <td ng-value="{state}-{name}" class="dfshealth-node-icon 
dfshealth-node-{state}">{location}/{name} ({xferaddr})</td>
-    <td>{#helper_relative_time value="{lastContact}"/}</td>
-    <td></td>
-    <!--td></td-->
-    <td></td>
-    <!--td></td-->
-  </tr>
-  {/DeadNodes}
-</table>
-</small>
-
-<div class="page-header"><h1><small>Decommissioning</small></h1></div>
-<small>
-<table class="table">
-  <thead>
-    <tr>
-      <th>Node</th>
-      <th>Under replicated blocks</th>
-      <th>Blocks with no live replicas</th>
-      <th>Under Replicated Blocks <br/>In files under construction</th>
-    </tr>
-  </thead>
-  {#DecomNodes}
-  <tr>
-    <td>{location}/{name} ({xferaddr})</td>
-    <td>{underReplicatedBlocks}</td>
-    <td>{decommissionOnlyReplicas}</td>
-    <td>{underReplicateInOpenFiles}</td>
-  </tr>
-  {/DecomNodes}
-</table>
-</small>
-</script>
-
-<!-- Mount table -->
-<script type="text/x-dust-template" id="tmpl-mounttable">
-<div class="page-header"><h1>Mount Table</h1></div>
-<small>
-<table class="table">
-  <thead>
-    <tr>
-      <th>Global path</th>
-      <th>Target nameservice</th>
-      <th>Target path</th>
-      <th>Order</th>
-      <th>Read only</th>
-      <th>Owner</th>
-      <th>Group</th>
-      <th>Permission</th>
-      <th>Date Modified</th>
-      <th>Date Created</th>
-    </tr>
-  </thead>
-  <tbody>
-    {#MountTable}
-    <tr>
-      <td>{sourcePath}</td>
-      <td>{nameserviceId}</td>
-      <td>{path}</td>
-      <td>{order}</td>
-      <td class="dfshealth-node-icon dfshealth-mount-read-only-{readonly}"/>
-      <td>{ownerName}</td>
-      <td>{groupName}</td>
-      <td>{mode}</td>
-      <td>{dateModified}</td>
-      <td>{dateCreated}</td>
-    </tr>
-    {/MountTable}
-  </tbody>
-</table>
-</small>
-</script>
-
-
-
-<script type="text/javascript" src="/static/jquery-1.10.2.min.js"></script>
-<script type="text/javascript" src="/static/jquery.dataTables.min.js"></script>
-<script type="text/javascript" 
src="/static/bootstrap-3.0.2/js/bootstrap.min.js"></script>
-<script type="text/javascript" src="/static/dataTables.bootstrap.js"></script>
-<script type="text/javascript" src="/static/moment.min.js"></script>
-<script type="text/javascript" src="/static/dust-full-2.0.0.min.js"></script>
-<script type="text/javascript" 
src="/static/dust-helpers-1.1.1.min.js"></script>
-<script type="text/javascript" src="/static/dfs-dust.js"></script>
-<script type="text/javascript" src="federationhealth.js"></script>
-</body>
-</html>


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to