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();">×</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 & 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]
