You are viewing a plain text version of this content. The canonical link for it is here.
Posted to hdfs-commits@hadoop.apache.org by wa...@apache.org on 2013/09/18 22:43:40 UTC
svn commit: r1524561 [1/2] - in
/hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs: ./
src/main/java/org/apache/hadoop/hdfs/
src/main/java/org/apache/hadoop/hdfs/protocol/
src/main/java/org/apache/hadoop/hdfs/protocolPB/ src/main/java/or...
Author: wang
Date: Wed Sep 18 20:43:40 2013
New Revision: 1524561
URL: http://svn.apache.org/r1524561
Log:
HDFS-5213. Separate PathBasedCacheEntry and PathBasedCacheDirectiveWithId. Contributed by Colin Patrick McCabe.
Added:
hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocol/PathBasedCacheDescriptor.java (with props)
hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocol/RemovePathBasedCacheDescriptorException.java (with props)
Modified:
hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/CHANGES-HDFS-4949.txt
hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSConfigKeys.java
hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DistributedFileSystem.java
hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocol/AddPathBasedCacheDirectiveException.java
hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocol/ClientProtocol.java
hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocol/PathBasedCacheDirective.java
hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocol/PathBasedCacheEntry.java
hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocolPB/ClientNamenodeProtocolServerSideTranslatorPB.java
hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocolPB/ClientNamenodeProtocolTranslatorPB.java
hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/CacheManager.java
hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java
hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NameNodeRpcServer.java
hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/CacheAdmin.java
hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/proto/ClientNamenodeProtocol.proto
hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/blockmanagement/TestCacheReplicationManager.java
hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestPathBasedCacheRequests.java
Modified: hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/CHANGES-HDFS-4949.txt
URL: http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/CHANGES-HDFS-4949.txt?rev=1524561&r1=1524560&r2=1524561&view=diff
==============================================================================
--- hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/CHANGES-HDFS-4949.txt (original)
+++ hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/CHANGES-HDFS-4949.txt Wed Sep 18 20:43:40 2013
@@ -39,6 +39,9 @@ HDFS-4949 (Unreleased)
HDFS-5197. Document dfs.cachereport.intervalMsec in hdfs-default.xml.
(cnauroth)
+ HDFS-5213. Separate PathBasedCacheEntry and PathBasedCacheDirectiveWithId.
+ (Contributed by Colin Patrick McCabe)
+
OPTIMIZATIONS
BUG FIXES
Modified: hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSConfigKeys.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSConfigKeys.java?rev=1524561&r1=1524560&r2=1524561&view=diff
==============================================================================
--- hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSConfigKeys.java (original)
+++ hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSConfigKeys.java Wed Sep 18 20:43:40 2013
@@ -200,9 +200,9 @@ public class DFSConfigKeys extends Commo
public static final String DFS_NAMENODE_LIST_CACHE_POOLS_NUM_RESPONSES =
"dfs.namenode.list.cache.pools.num.responses";
public static final int DFS_NAMENODE_LIST_CACHE_POOLS_NUM_RESPONSES_DEFAULT = 100;
- public static final String DFS_NAMENODE_LIST_CACHE_DIRECTIVES_NUM_RESPONSES =
- "dfs.namenode.list.cache.directives.num.responses";
- public static final int DFS_NAMENODE_LIST_CACHE_DIRECTIVES_NUM_RESPONSES_DEFAULT = 100;
+ public static final String DFS_NAMENODE_LIST_CACHE_DESCRIPTORS_NUM_RESPONSES =
+ "dfs.namenode.list.cache.descriptors.num.responses";
+ public static final int DFS_NAMENODE_LIST_CACHE_DESCRIPTORS_NUM_RESPONSES_DEFAULT = 100;
// Whether to enable datanode's stale state detection and usage for reads
public static final String DFS_NAMENODE_AVOID_STALE_DATANODE_FOR_READ_KEY = "dfs.namenode.avoid.read.stale.datanode";
Modified: hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DistributedFileSystem.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DistributedFileSystem.java?rev=1524561&r1=1524560&r2=1524561&view=diff
==============================================================================
--- hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DistributedFileSystem.java (original)
+++ hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DistributedFileSystem.java Wed Sep 18 20:43:40 2013
@@ -68,7 +68,7 @@ import org.apache.hadoop.hdfs.protocol.H
import org.apache.hadoop.hdfs.protocol.HdfsLocatedFileStatus;
import org.apache.hadoop.hdfs.protocol.LocatedBlock;
import org.apache.hadoop.hdfs.protocol.PathBasedCacheDirective;
-import org.apache.hadoop.hdfs.protocol.PathBasedCacheEntry;
+import org.apache.hadoop.hdfs.protocol.PathBasedCacheDescriptor;
import org.apache.hadoop.hdfs.protocol.SnapshotDiffReport;
import org.apache.hadoop.hdfs.protocol.SnapshottableDirectoryStatus;
import org.apache.hadoop.hdfs.security.token.block.InvalidBlockTokenException;
@@ -1591,7 +1591,7 @@ public class DistributedFileSystem exten
* PathBasedCache entry, or an IOException describing why the directive
* could not be added.
*/
- public List<Fallible<PathBasedCacheEntry>>
+ public List<Fallible<PathBasedCacheDescriptor>>
addPathBasedCacheDirective(List<PathBasedCacheDirective> directives)
throws IOException {
return dfs.namenode.addPathBasedCacheDirectives(directives);
@@ -1605,8 +1605,8 @@ public class DistributedFileSystem exten
* ID, or an IOException describing why the ID could not be removed.
*/
public List<Fallible<Long>>
- removePathBasedCacheEntries(List<Long> ids) throws IOException {
- return dfs.namenode.removePathBasedCacheEntries(ids);
+ removePathBasedCacheDescriptors(List<Long> ids) throws IOException {
+ return dfs.namenode.removePathBasedCacheDescriptors(ids);
}
/**
@@ -1615,11 +1615,11 @@ public class DistributedFileSystem exten
*
* @param pool The cache pool to list, or null to list all pools.
* @param path The path name to list, or null to list all paths.
- * @return A RemoteIterator which returns PathBasedCacheEntry objects.
+ * @return A RemoteIterator which returns PathBasedCacheDescriptor objects.
*/
- public RemoteIterator<PathBasedCacheEntry> listPathBasedCacheEntries(
+ public RemoteIterator<PathBasedCacheDescriptor> listPathBasedCacheDescriptors(
String pool, String path) throws IOException {
- return dfs.namenode.listPathBasedCacheEntries(0, pool, path);
+ return dfs.namenode.listPathBasedCacheDescriptors(0, pool, path);
}
/**
Modified: hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocol/AddPathBasedCacheDirectiveException.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocol/AddPathBasedCacheDirectiveException.java?rev=1524561&r1=1524560&r2=1524561&view=diff
==============================================================================
--- hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocol/AddPathBasedCacheDirectiveException.java (original)
+++ hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocol/AddPathBasedCacheDirectiveException.java Wed Sep 18 20:43:40 2013
@@ -75,6 +75,16 @@ public abstract class AddPathBasedCacheD
}
}
+ public static class PathAlreadyExistsInPoolError
+ extends AddPathBasedCacheDirectiveException {
+ private static final long serialVersionUID = 1L;
+
+ public PathAlreadyExistsInPoolError(PathBasedCacheDirective directive) {
+ super("path " + directive.getPath() + " already exists in pool " +
+ directive.getPool(), directive);
+ }
+ }
+
public static class UnexpectedAddPathBasedCacheDirectiveException
extends AddPathBasedCacheDirectiveException {
private static final long serialVersionUID = 1L;
Modified: hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocol/ClientProtocol.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocol/ClientProtocol.java?rev=1524561&r1=1524560&r2=1524561&view=diff
==============================================================================
--- hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocol/ClientProtocol.java (original)
+++ hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocol/ClientProtocol.java Wed Sep 18 20:43:40 2013
@@ -1106,7 +1106,7 @@ public interface ClientProtocol {
* could not be added.
*/
@AtMostOnce
- public List<Fallible<PathBasedCacheEntry>>
+ public List<Fallible<PathBasedCacheDescriptor>>
addPathBasedCacheDirectives(List<PathBasedCacheDirective> directives)
throws IOException;
@@ -1118,7 +1118,7 @@ public interface ClientProtocol {
* ID, or an IOException describing why the ID could not be removed.
*/
@AtMostOnce
- public List<Fallible<Long>> removePathBasedCacheEntries(List<Long> ids)
+ public List<Fallible<Long>> removePathBasedCacheDescriptors(List<Long> ids)
throws IOException;
/**
@@ -1126,13 +1126,13 @@ public interface ClientProtocol {
* from the server.
*
* @param prevId The last listed entry ID, or -1 if this is the first call to
- * listPathBasedCacheEntries.
+ * listPathBasedCacheDescriptors.
* @param pool The cache pool to list, or null to list all pools.
* @param path The path name to list, or null to list all paths.
- * @return A RemoteIterator which returns PathBasedCacheEntry objects.
+ * @return A RemoteIterator which returns PathBasedCacheDescriptor objects.
*/
@Idempotent
- public RemoteIterator<PathBasedCacheEntry> listPathBasedCacheEntries(long prevId,
+ public RemoteIterator<PathBasedCacheDescriptor> listPathBasedCacheDescriptors(long prevId,
String pool, String path) throws IOException;
/**
Added: hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocol/PathBasedCacheDescriptor.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocol/PathBasedCacheDescriptor.java?rev=1524561&view=auto
==============================================================================
--- hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocol/PathBasedCacheDescriptor.java (added)
+++ hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocol/PathBasedCacheDescriptor.java Wed Sep 18 20:43:40 2013
@@ -0,0 +1,77 @@
+/**
+ * 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.protocol;
+
+import org.apache.hadoop.classification.InterfaceAudience;
+import org.apache.hadoop.classification.InterfaceStability;
+import org.apache.commons.lang.builder.EqualsBuilder;
+import org.apache.commons.lang.builder.HashCodeBuilder;
+
+import com.google.common.base.Preconditions;
+
+/**
+ * A directive in a cache pool that includes an identifying ID number.
+ */
+@InterfaceStability.Evolving
+@InterfaceAudience.Public
+public final class PathBasedCacheDescriptor extends PathBasedCacheDirective {
+ private final long entryId;
+
+ public PathBasedCacheDescriptor(long entryId, String path, String pool) {
+ super(path, pool);
+ Preconditions.checkArgument(entryId > 0);
+ this.entryId = entryId;
+ }
+
+ public long getEntryId() {
+ return entryId;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (o == null) {
+ return false;
+ }
+ if (getClass() != o.getClass()) {
+ return false;
+ }
+ PathBasedCacheDescriptor other = (PathBasedCacheDescriptor)o;
+ return new EqualsBuilder().append(entryId, other.entryId).
+ append(getPath(), other.getPath()).
+ append(getPool(), other.getPool()).
+ isEquals();
+ }
+
+ @Override
+ public int hashCode() {
+ return new HashCodeBuilder().append(entryId).
+ append(getPath()).
+ append(getPool()).
+ hashCode();
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder builder = new StringBuilder();
+ builder.append("{ entryId:").append(entryId).
+ append(", path:").append(getPath()).
+ append(", pool:").append(getPool()).
+ append(" }");
+ return builder.toString();
+ }
+};
Propchange: hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocol/PathBasedCacheDescriptor.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocol/PathBasedCacheDirective.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocol/PathBasedCacheDirective.java?rev=1524561&r1=1524560&r2=1524561&view=diff
==============================================================================
--- hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocol/PathBasedCacheDirective.java (original)
+++ hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocol/PathBasedCacheDirective.java Wed Sep 18 20:43:40 2013
@@ -20,9 +20,11 @@ package org.apache.hadoop.hdfs.protocol;
import java.io.IOException;
import com.google.common.base.Preconditions;
-import com.google.common.collect.ComparisonChain;
+import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
+import org.apache.hadoop.classification.InterfaceAudience;
+import org.apache.hadoop.classification.InterfaceStability;
import org.apache.hadoop.hdfs.DFSUtil;
import org.apache.hadoop.hdfs.protocol.AddPathBasedCacheDirectiveException.EmptyPathError;
import org.apache.hadoop.hdfs.protocol.AddPathBasedCacheDirectiveException.InvalidPoolNameError;
@@ -31,7 +33,9 @@ import org.apache.hadoop.hdfs.protocol.A
/**
* A directive to add a path to a cache pool.
*/
-public class PathBasedCacheDirective implements Comparable<PathBasedCacheDirective> {
+@InterfaceStability.Evolving
+@InterfaceAudience.Public
+public class PathBasedCacheDirective {
private final String path;
private final String pool;
@@ -76,26 +80,24 @@ public class PathBasedCacheDirective imp
}
@Override
- public int compareTo(PathBasedCacheDirective rhs) {
- return ComparisonChain.start().
- compare(pool, rhs.getPool()).
- compare(path, rhs.getPath()).
- result();
+ public boolean equals(Object o) {
+ if (o == null) {
+ return false;
+ }
+ if (getClass() != o.getClass()) {
+ return false;
+ }
+ PathBasedCacheDirective other = (PathBasedCacheDirective)o;
+ return new EqualsBuilder().append(getPath(), other.getPath()).
+ append(getPool(), other.getPool()).
+ isEquals();
}
@Override
public int hashCode() {
- return new HashCodeBuilder().append(path).append(pool).hashCode();
- }
-
- @Override
- public boolean equals(Object o) {
- try {
- PathBasedCacheDirective other = (PathBasedCacheDirective)o;
- return other.compareTo(this) == 0;
- } catch (ClassCastException e) {
- return false;
- }
+ return new HashCodeBuilder().append(getPath()).
+ append(getPool()).
+ hashCode();
}
@Override
Modified: hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocol/PathBasedCacheEntry.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocol/PathBasedCacheEntry.java?rev=1524561&r1=1524560&r2=1524561&view=diff
==============================================================================
--- hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocol/PathBasedCacheEntry.java (original)
+++ hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocol/PathBasedCacheEntry.java Wed Sep 18 20:43:40 2013
@@ -17,59 +17,54 @@
*/
package org.apache.hadoop.hdfs.protocol;
-import org.apache.commons.lang.builder.EqualsBuilder;
-import org.apache.commons.lang.builder.HashCodeBuilder;
+import org.apache.hadoop.classification.InterfaceAudience;
+import org.apache.hadoop.hdfs.server.namenode.CachePool;
import com.google.common.base.Preconditions;
/**
- * An entry in the NameNode's PathBasedCache.
+ * Represents an entry in the PathBasedCache on the NameNode.
+ *
+ * This is an implementation class, not part of the public API.
*/
+@InterfaceAudience.Private
public final class PathBasedCacheEntry {
private final long entryId;
- private final PathBasedCacheDirective directive;
+ private final String path;
+ private final CachePool pool;
- public PathBasedCacheEntry(long entryId, PathBasedCacheDirective directive) {
+ public PathBasedCacheEntry(long entryId, String path, CachePool pool) {
Preconditions.checkArgument(entryId > 0);
this.entryId = entryId;
- this.directive = directive;
+ Preconditions.checkNotNull(path);
+ this.path = path;
+ Preconditions.checkNotNull(pool);
+ this.pool = pool;
}
public long getEntryId() {
return entryId;
}
- public PathBasedCacheDirective getDirective() {
- return directive;
+ public String getPath() {
+ return path;
}
- @Override
- public boolean equals(Object o) {
- try {
- PathBasedCacheEntry other = (PathBasedCacheEntry)o;
- return new EqualsBuilder().
- append(this.entryId, other.entryId).
- append(this.directive, other.directive).
- isEquals();
- } catch (ClassCastException e) {
- return false;
- }
- }
-
- @Override
- public int hashCode() {
- return new HashCodeBuilder().
- append(entryId).
- append(directive).
- hashCode();
+ public CachePool getPool() {
+ return pool;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("{ entryId:").append(entryId).
- append(", directive:").append(directive.toString()).
- append(" }");
+ append(", path:").append(path).
+ append(", pool:").append(pool).
+ append(" }");
return builder.toString();
}
+
+ public PathBasedCacheDescriptor getDescriptor() {
+ return new PathBasedCacheDescriptor(entryId, path, pool.getName());
+ }
};
Added: hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocol/RemovePathBasedCacheDescriptorException.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocol/RemovePathBasedCacheDescriptorException.java?rev=1524561&view=auto
==============================================================================
--- hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocol/RemovePathBasedCacheDescriptorException.java (added)
+++ hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocol/RemovePathBasedCacheDescriptorException.java Wed Sep 18 20:43:40 2013
@@ -0,0 +1,79 @@
+/**
+ * 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.protocol;
+
+import java.io.IOException;
+
+import com.google.common.base.Preconditions;
+
+/**
+ * An exception which occurred when trying to remove a PathBasedCache entry.
+ */
+public abstract class RemovePathBasedCacheDescriptorException extends IOException {
+ private static final long serialVersionUID = 1L;
+
+ private final long entryId;
+
+ public RemovePathBasedCacheDescriptorException(String description, long entryId) {
+ super(description);
+ this.entryId = entryId;
+ }
+
+ public long getEntryId() {
+ return this.entryId;
+ }
+
+ public final static class InvalidIdException
+ extends RemovePathBasedCacheDescriptorException {
+ private static final long serialVersionUID = 1L;
+
+ public InvalidIdException(long entryId) {
+ super("invalid PathBasedCacheDescriptor id " + entryId, entryId);
+ }
+ }
+
+ public final static class RemovePermissionDeniedException
+ extends RemovePathBasedCacheDescriptorException {
+ private static final long serialVersionUID = 1L;
+
+ public RemovePermissionDeniedException(long entryId) {
+ super("permission denied when trying to remove " +
+ "PathBasedCacheDescriptor id " + entryId, entryId);
+ }
+ }
+
+ public final static class NoSuchIdException
+ extends RemovePathBasedCacheDescriptorException {
+ private static final long serialVersionUID = 1L;
+
+ public NoSuchIdException(long entryId) {
+ super("there is no PathBasedCacheDescriptor with id " + entryId,
+ entryId);
+ }
+ }
+
+ public final static class UnexpectedRemovePathBasedCacheDescriptorException
+ extends RemovePathBasedCacheDescriptorException {
+ private static final long serialVersionUID = 1L;
+
+ public UnexpectedRemovePathBasedCacheDescriptorException(long id) {
+ super("encountered an unexpected error when trying to " +
+ "remove PathBasedCacheDescriptor with id " + id, id);
+ }
+ }
+}
Propchange: hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocol/RemovePathBasedCacheDescriptorException.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocolPB/ClientNamenodeProtocolServerSideTranslatorPB.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocolPB/ClientNamenodeProtocolServerSideTranslatorPB.java?rev=1524561&r1=1524560&r2=1524561&view=diff
==============================================================================
--- hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocolPB/ClientNamenodeProtocolServerSideTranslatorPB.java (original)
+++ hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocolPB/ClientNamenodeProtocolServerSideTranslatorPB.java Wed Sep 18 20:43:40 2013
@@ -32,6 +32,7 @@ import org.apache.hadoop.hdfs.protocol.A
import org.apache.hadoop.hdfs.protocol.AddPathBasedCacheDirectiveException.InvalidPathNameError;
import org.apache.hadoop.hdfs.protocol.AddPathBasedCacheDirectiveException.InvalidPoolNameError;
import org.apache.hadoop.hdfs.protocol.AddPathBasedCacheDirectiveException.PoolWritePermissionDeniedError;
+import org.apache.hadoop.hdfs.protocol.AddPathBasedCacheDirectiveException.PathAlreadyExistsInPoolError;
import org.apache.hadoop.hdfs.protocol.CachePoolInfo;
import org.apache.hadoop.hdfs.protocol.ClientProtocol;
import org.apache.hadoop.hdfs.protocol.CorruptFileBlocks;
@@ -40,10 +41,10 @@ import org.apache.hadoop.hdfs.protocol.H
import org.apache.hadoop.hdfs.protocol.LocatedBlock;
import org.apache.hadoop.hdfs.protocol.LocatedBlocks;
import org.apache.hadoop.hdfs.protocol.PathBasedCacheDirective;
-import org.apache.hadoop.hdfs.protocol.PathBasedCacheEntry;
-import org.apache.hadoop.hdfs.protocol.RemovePathBasedCacheEntryException.InvalidIdException;
-import org.apache.hadoop.hdfs.protocol.RemovePathBasedCacheEntryException.NoSuchIdException;
-import org.apache.hadoop.hdfs.protocol.RemovePathBasedCacheEntryException.RemovePermissionDeniedException;
+import org.apache.hadoop.hdfs.protocol.PathBasedCacheDescriptor;
+import org.apache.hadoop.hdfs.protocol.RemovePathBasedCacheDescriptorException.InvalidIdException;
+import org.apache.hadoop.hdfs.protocol.RemovePathBasedCacheDescriptorException.NoSuchIdException;
+import org.apache.hadoop.hdfs.protocol.RemovePathBasedCacheDescriptorException.RemovePermissionDeniedException;
import org.apache.hadoop.hdfs.protocol.SnapshotDiffReport;
import org.apache.hadoop.hdfs.protocol.SnapshottableDirectoryStatus;
import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.AbandonBlockRequestProto;
@@ -115,9 +116,9 @@ import org.apache.hadoop.hdfs.protocol.p
import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.ListCachePoolsResponseProto;
import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.ListCorruptFileBlocksRequestProto;
import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.ListCorruptFileBlocksResponseProto;
-import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.ListPathBasedCacheEntriesElementProto;
-import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.ListPathBasedCacheEntriesRequestProto;
-import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.ListPathBasedCacheEntriesResponseProto;
+import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.ListPathBasedCacheDescriptorsElementProto;
+import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.ListPathBasedCacheDescriptorsRequestProto;
+import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.ListPathBasedCacheDescriptorsResponseProto;
import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.MetaSaveRequestProto;
import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.MetaSaveResponseProto;
import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.MkdirsRequestProto;
@@ -131,9 +132,9 @@ import org.apache.hadoop.hdfs.protocol.p
import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.RefreshNodesResponseProto;
import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.RemoveCachePoolRequestProto;
import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.RemoveCachePoolResponseProto;
-import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.RemovePathBasedCacheEntriesRequestProto;
-import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.RemovePathBasedCacheEntriesResponseProto;
-import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.RemovePathBasedCacheEntryErrorProto;
+import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.RemovePathBasedCacheDescriptorsRequestProto;
+import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.RemovePathBasedCacheDescriptorsResponseProto;
+import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.RemovePathBasedCacheDescriptorErrorProto;
import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.Rename2RequestProto;
import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.Rename2ResponseProto;
import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.RenameRequestProto;
@@ -1048,13 +1049,13 @@ public class ClientNamenodeProtocolServe
PathBasedCacheDirectiveProto proto = request.getElements(i);
input.add(new PathBasedCacheDirective(proto.getPath(), proto.getPool()));
}
- List<Fallible<PathBasedCacheEntry>> output = server.addPathBasedCacheDirectives(input);
+ List<Fallible<PathBasedCacheDescriptor>> output = server.addPathBasedCacheDirectives(input);
AddPathBasedCacheDirectivesResponseProto.Builder builder =
AddPathBasedCacheDirectivesResponseProto.newBuilder();
for (int idx = 0; idx < output.size(); idx++) {
try {
- PathBasedCacheEntry entry = output.get(idx).get();
- builder.addResults(entry.getEntryId());
+ PathBasedCacheDescriptor directive = output.get(idx).get();
+ builder.addResults(directive.getEntryId());
} catch (IOException ioe) {
if (ioe.getCause() instanceof EmptyPathError) {
builder.addResults(AddPathBasedCacheDirectiveErrorProto.
@@ -1068,6 +1069,9 @@ public class ClientNamenodeProtocolServe
} else if (ioe.getCause() instanceof PoolWritePermissionDeniedError) {
builder.addResults(AddPathBasedCacheDirectiveErrorProto.
ADD_PERMISSION_DENIED_ERROR_VALUE);
+ } else if (ioe.getCause() instanceof PathAlreadyExistsInPoolError) {
+ builder.addResults(AddPathBasedCacheDirectiveErrorProto.
+ PATH_ALREADY_EXISTS_IN_POOL_ERROR_VALUE);
} else {
builder.addResults(AddPathBasedCacheDirectiveErrorProto.
UNEXPECTED_ADD_ERROR_VALUE);
@@ -1081,29 +1085,29 @@ public class ClientNamenodeProtocolServe
}
@Override
- public RemovePathBasedCacheEntriesResponseProto removePathBasedCacheEntries(
- RpcController controller, RemovePathBasedCacheEntriesRequestProto request)
+ public RemovePathBasedCacheDescriptorsResponseProto removePathBasedCacheDescriptors(
+ RpcController controller, RemovePathBasedCacheDescriptorsRequestProto request)
throws ServiceException {
try {
List<Fallible<Long>> output =
- server.removePathBasedCacheEntries(request.getElementsList());
- RemovePathBasedCacheEntriesResponseProto.Builder builder =
- RemovePathBasedCacheEntriesResponseProto.newBuilder();
+ server.removePathBasedCacheDescriptors(request.getElementsList());
+ RemovePathBasedCacheDescriptorsResponseProto.Builder builder =
+ RemovePathBasedCacheDescriptorsResponseProto.newBuilder();
for (int idx = 0; idx < output.size(); idx++) {
try {
long id = output.get(idx).get();
builder.addResults(id);
} catch (InvalidIdException ioe) {
- builder.addResults(RemovePathBasedCacheEntryErrorProto.
+ builder.addResults(RemovePathBasedCacheDescriptorErrorProto.
INVALID_CACHED_PATH_ID_ERROR_VALUE);
} catch (NoSuchIdException ioe) {
- builder.addResults(RemovePathBasedCacheEntryErrorProto.
+ builder.addResults(RemovePathBasedCacheDescriptorErrorProto.
NO_SUCH_CACHED_PATH_ID_ERROR_VALUE);
} catch (RemovePermissionDeniedException ioe) {
- builder.addResults(RemovePathBasedCacheEntryErrorProto.
+ builder.addResults(RemovePathBasedCacheDescriptorErrorProto.
REMOVE_PERMISSION_DENIED_ERROR_VALUE);
} catch (IOException ioe) {
- builder.addResults(RemovePathBasedCacheEntryErrorProto.
+ builder.addResults(RemovePathBasedCacheDescriptorErrorProto.
UNEXPECTED_REMOVE_ERROR_VALUE);
}
}
@@ -1114,31 +1118,32 @@ public class ClientNamenodeProtocolServe
}
@Override
- public ListPathBasedCacheEntriesResponseProto listPathBasedCacheEntries(
- RpcController controller, ListPathBasedCacheEntriesRequestProto request)
+ public ListPathBasedCacheDescriptorsResponseProto listPathBasedCacheDescriptors(
+ RpcController controller, ListPathBasedCacheDescriptorsRequestProto request)
throws ServiceException {
try {
- RemoteIterator<PathBasedCacheEntry> iter =
- server.listPathBasedCacheEntries(request.getPrevId(),
+ RemoteIterator<PathBasedCacheDescriptor> iter =
+ server.listPathBasedCacheDescriptors(request.getPrevId(),
request.hasPool() ? request.getPool() : null,
request.hasPath() ? request.getPath() : null);
- ListPathBasedCacheEntriesResponseProto.Builder builder =
- ListPathBasedCacheEntriesResponseProto.newBuilder();
+ ListPathBasedCacheDescriptorsResponseProto.Builder builder =
+ ListPathBasedCacheDescriptorsResponseProto.newBuilder();
long prevId = 0;
while (iter.hasNext()) {
- PathBasedCacheEntry entry = iter.next();
+ PathBasedCacheDescriptor directive = iter.next();
builder.addElements(
- ListPathBasedCacheEntriesElementProto.newBuilder().
- setId(entry.getEntryId()).
- setPath(entry.getDirective().getPath()).
- setPool(entry.getDirective().getPool()));
- prevId = entry.getEntryId();
+ ListPathBasedCacheDescriptorsElementProto.newBuilder().
+ setId(directive.getEntryId()).
+ setPath(directive.getPath()).
+ setPool(directive.getPool()));
+ prevId = directive.getEntryId();
}
if (prevId == 0) {
builder.setHasMore(false);
} else {
- iter = server.listPathBasedCacheEntries(prevId, request.getPool(),
- request.getPath());
+ iter = server.listPathBasedCacheDescriptors(prevId,
+ request.hasPool() ? request.getPool() : null,
+ request.hasPath() ? request.getPath() : null);
builder.setHasMore(iter.hasNext());
}
return builder.build();
Modified: hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocolPB/ClientNamenodeProtocolTranslatorPB.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocolPB/ClientNamenodeProtocolTranslatorPB.java?rev=1524561&r1=1524560&r2=1524561&view=diff
==============================================================================
--- hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocolPB/ClientNamenodeProtocolTranslatorPB.java (original)
+++ hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocolPB/ClientNamenodeProtocolTranslatorPB.java Wed Sep 18 20:43:40 2013
@@ -39,15 +39,17 @@ import org.apache.hadoop.fs.UnresolvedLi
import org.apache.hadoop.fs.permission.FsPermission;
import org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException;
import org.apache.hadoop.hdfs.protocol.PathBasedCacheDirective;
-import org.apache.hadoop.hdfs.protocol.PathBasedCacheEntry;
+import org.apache.hadoop.hdfs.protocol.PathBasedCacheDescriptor;
import org.apache.hadoop.hdfs.protocol.AddPathBasedCacheDirectiveException.EmptyPathError;
import org.apache.hadoop.hdfs.protocol.AddPathBasedCacheDirectiveException.InvalidPathNameError;
import org.apache.hadoop.hdfs.protocol.AddPathBasedCacheDirectiveException.InvalidPoolNameError;
+import org.apache.hadoop.hdfs.protocol.AddPathBasedCacheDirectiveException.PoolWritePermissionDeniedError;
+import org.apache.hadoop.hdfs.protocol.AddPathBasedCacheDirectiveException.PathAlreadyExistsInPoolError;
import org.apache.hadoop.hdfs.protocol.AddPathBasedCacheDirectiveException.UnexpectedAddPathBasedCacheDirectiveException;
-import org.apache.hadoop.hdfs.protocol.RemovePathBasedCacheEntryException.InvalidIdException;
-import org.apache.hadoop.hdfs.protocol.RemovePathBasedCacheEntryException.NoSuchIdException;
-import org.apache.hadoop.hdfs.protocol.RemovePathBasedCacheEntryException.RemovePermissionDeniedException;
-import org.apache.hadoop.hdfs.protocol.RemovePathBasedCacheEntryException.UnexpectedRemovePathBasedCacheEntryException;
+import org.apache.hadoop.hdfs.protocol.RemovePathBasedCacheDescriptorException.InvalidIdException;
+import org.apache.hadoop.hdfs.protocol.RemovePathBasedCacheDescriptorException.NoSuchIdException;
+import org.apache.hadoop.hdfs.protocol.RemovePathBasedCacheDescriptorException.RemovePermissionDeniedException;
+import org.apache.hadoop.hdfs.protocol.RemovePathBasedCacheDescriptorException.UnexpectedRemovePathBasedCacheDescriptorException;
import org.apache.hadoop.hdfs.protocol.ClientProtocol;
import org.apache.hadoop.hdfs.protocol.CorruptFileBlocks;
import org.apache.hadoop.hdfs.protocol.DSQuotaExceededException;
@@ -108,10 +110,10 @@ import org.apache.hadoop.hdfs.protocol.p
import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.GetSnapshottableDirListingRequestProto;
import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.GetSnapshottableDirListingResponseProto;
import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.IsFileClosedRequestProto;
-import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.ListPathBasedCacheEntriesElementProto;
-import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.ListPathBasedCacheEntriesRequestProto;
-import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.ListPathBasedCacheEntriesRequestProto;
-import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.ListPathBasedCacheEntriesResponseProto;
+import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.ListPathBasedCacheDescriptorsElementProto;
+import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.ListPathBasedCacheDescriptorsRequestProto;
+import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.ListPathBasedCacheDescriptorsRequestProto;
+import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.ListPathBasedCacheDescriptorsResponseProto;
import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.ListCachePoolsRequestProto;
import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.ListCachePoolsResponseElementProto;
import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.ListCachePoolsResponseProto;
@@ -121,9 +123,9 @@ import org.apache.hadoop.hdfs.protocol.p
import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.ModifyCachePoolRequestProto;
import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.RecoverLeaseRequestProto;
import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.RefreshNodesRequestProto;
-import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.RemovePathBasedCacheEntriesRequestProto;
-import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.RemovePathBasedCacheEntriesResponseProto;
-import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.RemovePathBasedCacheEntryErrorProto;
+import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.RemovePathBasedCacheDescriptorsRequestProto;
+import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.RemovePathBasedCacheDescriptorsResponseProto;
+import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.RemovePathBasedCacheDescriptorErrorProto;
import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.RemoveCachePoolRequestProto;
import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.Rename2RequestProto;
import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.RenameRequestProto;
@@ -145,6 +147,7 @@ import org.apache.hadoop.hdfs.protocol.p
import org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos.UpdatePipelineRequestProto;
import org.apache.hadoop.hdfs.security.token.block.DataEncryptionKey;
import org.apache.hadoop.hdfs.security.token.delegation.DelegationTokenIdentifier;
+import org.apache.hadoop.hdfs.server.namenode.CacheManager;
import org.apache.hadoop.hdfs.server.namenode.NotReplicatedYetException;
import org.apache.hadoop.hdfs.server.namenode.SafeModeException;
import org.apache.hadoop.io.EnumSetWritable;
@@ -1027,13 +1030,19 @@ public class ClientNamenodeProtocolTrans
} else if (code == AddPathBasedCacheDirectiveErrorProto.
INVALID_POOL_NAME_ERROR_VALUE) {
return new InvalidPoolNameError(directive);
+ } else if (code == AddPathBasedCacheDirectiveErrorProto.
+ ADD_PERMISSION_DENIED_ERROR_VALUE) {
+ return new PoolWritePermissionDeniedError(directive);
+ } else if (code == AddPathBasedCacheDirectiveErrorProto.
+ PATH_ALREADY_EXISTS_IN_POOL_ERROR_VALUE) {
+ return new PathAlreadyExistsInPoolError(directive);
} else {
return new UnexpectedAddPathBasedCacheDirectiveException(directive);
}
}
@Override
- public List<Fallible<PathBasedCacheEntry>> addPathBasedCacheDirectives(
+ public List<Fallible<PathBasedCacheDescriptor>> addPathBasedCacheDirectives(
List<PathBasedCacheDirective> directives) throws IOException {
try {
AddPathBasedCacheDirectivesRequestProto.Builder builder =
@@ -1047,17 +1056,18 @@ public class ClientNamenodeProtocolTrans
AddPathBasedCacheDirectivesResponseProto result =
rpcProxy.addPathBasedCacheDirectives(null, builder.build());
int resultsCount = result.getResultsCount();
- ArrayList<Fallible<PathBasedCacheEntry>> results =
- new ArrayList<Fallible<PathBasedCacheEntry>>(resultsCount);
+ ArrayList<Fallible<PathBasedCacheDescriptor>> results =
+ new ArrayList<Fallible<PathBasedCacheDescriptor>>(resultsCount);
for (int i = 0; i < resultsCount; i++) {
PathBasedCacheDirective directive = directives.get(i);
long code = result.getResults(i);
if (code > 0) {
- results.add(new Fallible<PathBasedCacheEntry>(
- new PathBasedCacheEntry(code, directive)));
+ results.add(new Fallible<PathBasedCacheDescriptor>(
+ new PathBasedCacheDescriptor(code,
+ directive.getPath(), directive.getPool())));
} else {
- results.add(new Fallible<PathBasedCacheEntry>(
- addPathBasedCacheDirectivesError(code, directive)));
+ results.add(new Fallible<PathBasedCacheDescriptor>(
+ addPathBasedCacheDirectivesError(code, directive)));
}
}
return results;
@@ -1066,32 +1076,32 @@ public class ClientNamenodeProtocolTrans
}
}
- private static IOException removePathBasedCacheEntriesError(long code, long id) {
- if (code == RemovePathBasedCacheEntryErrorProto.
+ private static IOException removePathBasedCacheDescriptorsError(long code, long id) {
+ if (code == RemovePathBasedCacheDescriptorErrorProto.
INVALID_CACHED_PATH_ID_ERROR_VALUE) {
return new InvalidIdException(id);
- } else if (code == RemovePathBasedCacheEntryErrorProto.
+ } else if (code == RemovePathBasedCacheDescriptorErrorProto.
NO_SUCH_CACHED_PATH_ID_ERROR_VALUE) {
return new NoSuchIdException(id);
- } else if (code == RemovePathBasedCacheEntryErrorProto.
+ } else if (code == RemovePathBasedCacheDescriptorErrorProto.
REMOVE_PERMISSION_DENIED_ERROR_VALUE) {
return new RemovePermissionDeniedException(id);
} else {
- return new UnexpectedRemovePathBasedCacheEntryException(id);
+ return new UnexpectedRemovePathBasedCacheDescriptorException(id);
}
}
@Override
- public List<Fallible<Long>> removePathBasedCacheEntries(List<Long> ids)
+ public List<Fallible<Long>> removePathBasedCacheDescriptors(List<Long> ids)
throws IOException {
try {
- RemovePathBasedCacheEntriesRequestProto.Builder builder =
- RemovePathBasedCacheEntriesRequestProto.newBuilder();
+ RemovePathBasedCacheDescriptorsRequestProto.Builder builder =
+ RemovePathBasedCacheDescriptorsRequestProto.newBuilder();
for (Long id : ids) {
builder.addElements(id);
}
- RemovePathBasedCacheEntriesResponseProto result =
- rpcProxy.removePathBasedCacheEntries(null, builder.build());
+ RemovePathBasedCacheDescriptorsResponseProto result =
+ rpcProxy.removePathBasedCacheDescriptors(null, builder.build());
int resultsCount = result.getResultsCount();
ArrayList<Fallible<Long>> results =
new ArrayList<Fallible<Long>>(resultsCount);
@@ -1101,7 +1111,7 @@ public class ClientNamenodeProtocolTrans
results.add(new Fallible<Long>(code));
} else {
results.add(new Fallible<Long>(
- removePathBasedCacheEntriesError(code, ids.get(i))));
+ removePathBasedCacheDescriptorsError(code, ids.get(i))));
}
}
return results;
@@ -1111,20 +1121,19 @@ public class ClientNamenodeProtocolTrans
}
private static class BatchedPathBasedCacheEntries
- implements BatchedEntries<PathBasedCacheEntry> {
- private ListPathBasedCacheEntriesResponseProto response;
+ implements BatchedEntries<PathBasedCacheDescriptor> {
+ private ListPathBasedCacheDescriptorsResponseProto response;
- BatchedPathBasedCacheEntries(ListPathBasedCacheEntriesResponseProto response) {
+ BatchedPathBasedCacheEntries(ListPathBasedCacheDescriptorsResponseProto response) {
this.response = response;
}
@Override
- public PathBasedCacheEntry get(int i) {
- ListPathBasedCacheEntriesElementProto elementProto =
+ public PathBasedCacheDescriptor get(int i) {
+ ListPathBasedCacheDescriptorsElementProto elementProto =
response.getElements(i);
- return new PathBasedCacheEntry(elementProto.getId(),
- new PathBasedCacheDirective(elementProto.getPath(),
- elementProto.getPool()));
+ return new PathBasedCacheDescriptor(elementProto.getId(),
+ elementProto.getPath(), elementProto.getPool());
}
@Override
@@ -1139,7 +1148,7 @@ public class ClientNamenodeProtocolTrans
}
private class PathBasedCacheEntriesIterator
- extends BatchedRemoteIterator<Long, PathBasedCacheEntry> {
+ extends BatchedRemoteIterator<Long, PathBasedCacheDescriptor> {
private final String pool;
private final String path;
@@ -1150,20 +1159,20 @@ public class ClientNamenodeProtocolTrans
}
@Override
- public BatchedEntries<PathBasedCacheEntry> makeRequest(
+ public BatchedEntries<PathBasedCacheDescriptor> makeRequest(
Long nextKey) throws IOException {
- ListPathBasedCacheEntriesResponseProto response;
+ ListPathBasedCacheDescriptorsResponseProto response;
try {
- ListPathBasedCacheEntriesRequestProto.Builder builder =
- ListPathBasedCacheEntriesRequestProto.newBuilder().setPrevId(nextKey);
+ ListPathBasedCacheDescriptorsRequestProto.Builder builder =
+ ListPathBasedCacheDescriptorsRequestProto.newBuilder().setPrevId(nextKey);
if (pool != null) {
builder.setPool(pool);
}
if (path != null) {
builder.setPath(path);
}
- ListPathBasedCacheEntriesRequestProto req = builder.build();
- response = rpcProxy.listPathBasedCacheEntries(null, req);
+ ListPathBasedCacheDescriptorsRequestProto req = builder.build();
+ response = rpcProxy.listPathBasedCacheDescriptors(null, req);
} catch (ServiceException e) {
throw ProtobufHelper.getRemoteException(e);
}
@@ -1171,13 +1180,13 @@ public class ClientNamenodeProtocolTrans
}
@Override
- public Long elementToPrevKey(PathBasedCacheEntry element) {
+ public Long elementToPrevKey(PathBasedCacheDescriptor element) {
return element.getEntryId();
}
}
@Override
- public RemoteIterator<PathBasedCacheEntry> listPathBasedCacheEntries(long prevId,
+ public RemoteIterator<PathBasedCacheDescriptor> listPathBasedCacheDescriptors(long prevId,
String pool, String path) throws IOException {
return new PathBasedCacheEntriesIterator(prevId, pool, path);
}
Modified: hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/CacheManager.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/CacheManager.java?rev=1524561&r1=1524560&r2=1524561&view=diff
==============================================================================
--- hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/CacheManager.java (original)
+++ hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/CacheManager.java Wed Sep 18 20:43:40 2013
@@ -19,8 +19,8 @@ package org.apache.hadoop.hdfs.server.na
import static org.apache.hadoop.hdfs.DFSConfigKeys.DFS_NAMENODE_LIST_CACHE_POOLS_NUM_RESPONSES;
import static org.apache.hadoop.hdfs.DFSConfigKeys.DFS_NAMENODE_LIST_CACHE_POOLS_NUM_RESPONSES_DEFAULT;
-import static org.apache.hadoop.hdfs.DFSConfigKeys.DFS_NAMENODE_LIST_CACHE_DIRECTIVES_NUM_RESPONSES;
-import static org.apache.hadoop.hdfs.DFSConfigKeys.DFS_NAMENODE_LIST_CACHE_DIRECTIVES_NUM_RESPONSES_DEFAULT;
+import static org.apache.hadoop.hdfs.DFSConfigKeys.DFS_NAMENODE_LIST_CACHE_DESCRIPTORS_NUM_RESPONSES;
+import static org.apache.hadoop.hdfs.DFSConfigKeys.DFS_NAMENODE_LIST_CACHE_DESCRIPTORS_NUM_RESPONSES_DEFAULT;
import java.io.IOException;
import java.util.ArrayList;
@@ -38,14 +38,15 @@ import org.apache.hadoop.fs.permission.F
import org.apache.hadoop.hdfs.DFSUtil;
import org.apache.hadoop.hdfs.protocol.CachePoolInfo;
import org.apache.hadoop.hdfs.protocol.PathBasedCacheDirective;
-import org.apache.hadoop.hdfs.protocol.PathBasedCacheEntry;
+import org.apache.hadoop.hdfs.protocol.PathBasedCacheDescriptor;
import org.apache.hadoop.hdfs.protocol.AddPathBasedCacheDirectiveException.InvalidPoolNameError;
import org.apache.hadoop.hdfs.protocol.AddPathBasedCacheDirectiveException.UnexpectedAddPathBasedCacheDirectiveException;
import org.apache.hadoop.hdfs.protocol.AddPathBasedCacheDirectiveException.PoolWritePermissionDeniedError;
-import org.apache.hadoop.hdfs.protocol.RemovePathBasedCacheEntryException.InvalidIdException;
-import org.apache.hadoop.hdfs.protocol.RemovePathBasedCacheEntryException.NoSuchIdException;
-import org.apache.hadoop.hdfs.protocol.RemovePathBasedCacheEntryException.UnexpectedRemovePathBasedCacheEntryException;
-import org.apache.hadoop.hdfs.protocol.RemovePathBasedCacheEntryException.RemovePermissionDeniedException;
+import org.apache.hadoop.hdfs.protocol.PathBasedCacheEntry;
+import org.apache.hadoop.hdfs.protocol.RemovePathBasedCacheDescriptorException.InvalidIdException;
+import org.apache.hadoop.hdfs.protocol.RemovePathBasedCacheDescriptorException.NoSuchIdException;
+import org.apache.hadoop.hdfs.protocol.RemovePathBasedCacheDescriptorException.UnexpectedRemovePathBasedCacheDescriptorException;
+import org.apache.hadoop.hdfs.protocol.RemovePathBasedCacheDescriptorException.RemovePermissionDeniedException;
import org.apache.hadoop.util.Fallible;
/**
@@ -57,19 +58,13 @@ public final class CacheManager {
/**
* Cache entries, sorted by ID.
*
- * listPathBasedCacheEntries relies on the ordering of elements in this map
+ * listPathBasedCacheDescriptors relies on the ordering of elements in this map
* to track what has already been listed by the client.
*/
private final TreeMap<Long, PathBasedCacheEntry> entriesById =
new TreeMap<Long, PathBasedCacheEntry>();
/**
- * Cache entries, sorted by directive.
- */
- private final TreeMap<PathBasedCacheDirective, PathBasedCacheEntry> entriesByDirective =
- new TreeMap<PathBasedCacheDirective, PathBasedCacheEntry>();
-
- /**
* Cache entries, sorted by path
*/
private final TreeMap<String, List<PathBasedCacheEntry>> entriesByPath =
@@ -94,7 +89,7 @@ public final class CacheManager {
/**
* Maximum number of cache pool directives to list in one operation.
*/
- private final int maxListCacheDirectivesResponses;
+ private final int maxListCacheDescriptorsResponses;
final private FSNamesystem namesystem;
final private FSDirectory dir;
@@ -107,14 +102,13 @@ public final class CacheManager {
maxListCachePoolsResponses = conf.getInt(
DFS_NAMENODE_LIST_CACHE_POOLS_NUM_RESPONSES,
DFS_NAMENODE_LIST_CACHE_POOLS_NUM_RESPONSES_DEFAULT);
- maxListCacheDirectivesResponses = conf.getInt(
- DFS_NAMENODE_LIST_CACHE_DIRECTIVES_NUM_RESPONSES,
- DFS_NAMENODE_LIST_CACHE_DIRECTIVES_NUM_RESPONSES_DEFAULT);
+ maxListCacheDescriptorsResponses = conf.getInt(
+ DFS_NAMENODE_LIST_CACHE_DESCRIPTORS_NUM_RESPONSES,
+ DFS_NAMENODE_LIST_CACHE_DESCRIPTORS_NUM_RESPONSES_DEFAULT);
}
synchronized void clear() {
entriesById.clear();
- entriesByDirective.clear();
entriesByPath.clear();
cachePools.clear();
nextEntryId = 1;
@@ -127,17 +121,32 @@ public final class CacheManager {
return nextEntryId++;
}
- private synchronized Fallible<PathBasedCacheEntry> addDirective(
+ private synchronized PathBasedCacheEntry
+ findEntry(PathBasedCacheDirective directive) {
+ List<PathBasedCacheEntry> existing =
+ entriesByPath.get(directive.getPath());
+ if (existing == null) {
+ return null;
+ }
+ for (PathBasedCacheEntry entry : existing) {
+ if (entry.getPool().getName().equals(directive.getPool())) {
+ return entry;
+ }
+ }
+ return null;
+ }
+
+ private synchronized Fallible<PathBasedCacheDescriptor> addDirective(
PathBasedCacheDirective directive, FSPermissionChecker pc) {
CachePool pool = cachePools.get(directive.getPool());
if (pool == null) {
LOG.info("addDirective " + directive + ": pool not found.");
- return new Fallible<PathBasedCacheEntry>(
+ return new Fallible<PathBasedCacheDescriptor>(
new InvalidPoolNameError(directive));
}
if ((pc != null) && (!pc.checkPermission(pool, FsAction.WRITE))) {
LOG.info("addDirective " + directive + ": write permission denied.");
- return new Fallible<PathBasedCacheEntry>(
+ return new Fallible<PathBasedCacheDescriptor>(
new PoolWritePermissionDeniedError(directive));
}
try {
@@ -145,22 +154,24 @@ public final class CacheManager {
} catch (IOException ioe) {
LOG.info("addDirective " + directive + ": validation failed: "
+ ioe.getClass().getName() + ": " + ioe.getMessage());
- return new Fallible<PathBasedCacheEntry>(ioe);
+ return new Fallible<PathBasedCacheDescriptor>(ioe);
}
+
// Check if we already have this entry.
- PathBasedCacheEntry existing = entriesByDirective.get(directive);
+ PathBasedCacheEntry existing = findEntry(directive);
if (existing != null) {
- // Entry already exists: return existing entry.
LOG.info("addDirective " + directive + ": there is an " +
- "existing directive " + existing);
- return new Fallible<PathBasedCacheEntry>(existing);
+ "existing directive " + existing + " in this pool.");
+ return new Fallible<PathBasedCacheDescriptor>(
+ existing.getDescriptor());
}
// Add a new entry with the next available ID.
PathBasedCacheEntry entry;
try {
- entry = new PathBasedCacheEntry(getNextEntryId(), directive);
+ entry = new PathBasedCacheEntry(getNextEntryId(),
+ directive.getPath(), pool);
} catch (IOException ioe) {
- return new Fallible<PathBasedCacheEntry>(
+ return new Fallible<PathBasedCacheDescriptor>(
new UnexpectedAddPathBasedCacheDirectiveException(directive));
}
LOG.info("addDirective " + directive + ": added cache directive "
@@ -168,7 +179,6 @@ public final class CacheManager {
// Success!
// First, add it to the various maps
- entriesByDirective.put(directive, entry);
entriesById.put(entry.getEntryId(), entry);
String path = directive.getPath();
List<PathBasedCacheEntry> entryList = entriesByPath.get(path);
@@ -181,7 +191,7 @@ public final class CacheManager {
// Next, set the path as cached in the namesystem
try {
INode node = dir.getINode(directive.getPath());
- if (node.isFile()) {
+ if (node != null && node.isFile()) {
INodeFile file = node.asFile();
// TODO: adjustable cache replication factor
namesystem.setCacheReplicationInt(directive.getPath(),
@@ -192,96 +202,90 @@ public final class CacheManager {
} catch (IOException ioe) {
LOG.info("addDirective " + directive +": failed to cache file: " +
ioe.getClass().getName() +": " + ioe.getMessage());
- return new Fallible<PathBasedCacheEntry>(ioe);
+ return new Fallible<PathBasedCacheDescriptor>(ioe);
}
-
- return new Fallible<PathBasedCacheEntry>(entry);
+ return new Fallible<PathBasedCacheDescriptor>(
+ entry.getDescriptor());
}
- public synchronized List<Fallible<PathBasedCacheEntry>> addDirectives(
+ public synchronized List<Fallible<PathBasedCacheDescriptor>> addDirectives(
List<PathBasedCacheDirective> directives, FSPermissionChecker pc) {
- ArrayList<Fallible<PathBasedCacheEntry>> results =
- new ArrayList<Fallible<PathBasedCacheEntry>>(directives.size());
+ ArrayList<Fallible<PathBasedCacheDescriptor>> results =
+ new ArrayList<Fallible<PathBasedCacheDescriptor>>(directives.size());
for (PathBasedCacheDirective directive: directives) {
results.add(addDirective(directive, pc));
}
return results;
}
- private synchronized Fallible<Long> removeEntry(long entryId,
+ private synchronized Fallible<Long> removeDescriptor(long id,
FSPermissionChecker pc) {
// Check for invalid IDs.
- if (entryId <= 0) {
- LOG.info("removeEntry " + entryId + ": invalid non-positive entry ID.");
- return new Fallible<Long>(new InvalidIdException(entryId));
+ if (id <= 0) {
+ LOG.info("removeDescriptor " + id + ": invalid non-positive " +
+ "descriptor ID.");
+ return new Fallible<Long>(new InvalidIdException(id));
}
// Find the entry.
- PathBasedCacheEntry existing = entriesById.get(entryId);
+ PathBasedCacheEntry existing = entriesById.get(id);
if (existing == null) {
- LOG.info("removeEntry " + entryId + ": entry not found.");
- return new Fallible<Long>(new NoSuchIdException(entryId));
+ LOG.info("removeDescriptor " + id + ": entry not found.");
+ return new Fallible<Long>(new NoSuchIdException(id));
}
- CachePool pool = cachePools.get(existing.getDirective().getPool());
+ CachePool pool = cachePools.get(existing.getDescriptor().getPool());
if (pool == null) {
- LOG.info("removeEntry " + entryId + ": pool not found for directive " +
- existing.getDirective());
+ LOG.info("removeDescriptor " + id + ": pool not found for directive " +
+ existing.getDescriptor());
return new Fallible<Long>(
- new UnexpectedRemovePathBasedCacheEntryException(entryId));
+ new UnexpectedRemovePathBasedCacheDescriptorException(id));
}
if ((pc != null) && (!pc.checkPermission(pool, FsAction.WRITE))) {
- LOG.info("removeEntry " + entryId + ": write permission denied to " +
+ LOG.info("removeDescriptor " + id + ": write permission denied to " +
"pool " + pool + " for entry " + existing);
return new Fallible<Long>(
- new RemovePermissionDeniedException(entryId));
+ new RemovePermissionDeniedException(id));
}
- // Remove the corresponding entry in entriesByDirective.
- if (entriesByDirective.remove(existing.getDirective()) == null) {
- LOG.warn("removeEntry " + entryId + ": failed to find existing entry " +
- existing + " in entriesByDirective");
- return new Fallible<Long>(
- new UnexpectedRemovePathBasedCacheEntryException(entryId));
- }
// Remove the corresponding entry in entriesByPath.
- String path = existing.getDirective().getPath();
+ String path = existing.getDescriptor().getPath();
List<PathBasedCacheEntry> entries = entriesByPath.get(path);
if (entries == null || !entries.remove(existing)) {
return new Fallible<Long>(
- new UnexpectedRemovePathBasedCacheEntryException(entryId));
+ new UnexpectedRemovePathBasedCacheDescriptorException(id));
}
if (entries.size() == 0) {
entriesByPath.remove(path);
}
- entriesById.remove(entryId);
+ entriesById.remove(id);
// Set the path as uncached in the namesystem
try {
- INode node = dir.getINode(existing.getDirective().getPath());
- if (node.isFile()) {
- namesystem.setCacheReplicationInt(existing.getDirective().getPath(),
+ INode node = dir.getINode(existing.getDescriptor().getPath());
+ if (node != null && node.isFile()) {
+ namesystem.setCacheReplicationInt(existing.getDescriptor().getPath(),
(short) 0);
}
} catch (IOException e) {
- LOG.warn("removeEntry " + entryId + ": failure while setting cache"
+ LOG.warn("removeDescriptor " + id + ": failure while setting cache"
+ " replication factor", e);
return new Fallible<Long>(e);
}
- LOG.info("removeEntry successful for PathCacheEntry id " + entryId);
- return new Fallible<Long>(entryId);
+ LOG.info("removeDescriptor successful for PathCacheEntry id " + id);
+ return new Fallible<Long>(id);
}
- public synchronized List<Fallible<Long>> removeEntries(List<Long> entryIds,
+ public synchronized List<Fallible<Long>> removeDescriptors(List<Long> ids,
FSPermissionChecker pc) {
ArrayList<Fallible<Long>> results =
- new ArrayList<Fallible<Long>>(entryIds.size());
- for (Long entryId : entryIds) {
- results.add(removeEntry(entryId, pc));
+ new ArrayList<Fallible<Long>>(ids.size());
+ for (Long id : ids) {
+ results.add(removeDescriptor(id, pc));
}
return results;
}
- public synchronized BatchedListEntries<PathBasedCacheEntry>
- listPathBasedCacheEntries(long prevId, String filterPool,
+ public synchronized BatchedListEntries<PathBasedCacheDescriptor>
+ listPathBasedCacheDescriptors(long prevId, String filterPool,
String filterPath, FSPermissionChecker pc) throws IOException {
final int NUM_PRE_ALLOCATED_ENTRIES = 16;
if (filterPath != null) {
@@ -289,16 +293,16 @@ public final class CacheManager {
throw new IOException("invalid path name '" + filterPath + "'");
}
}
- ArrayList<PathBasedCacheEntry> replies =
- new ArrayList<PathBasedCacheEntry>(NUM_PRE_ALLOCATED_ENTRIES);
+ ArrayList<PathBasedCacheDescriptor> replies =
+ new ArrayList<PathBasedCacheDescriptor>(NUM_PRE_ALLOCATED_ENTRIES);
int numReplies = 0;
SortedMap<Long, PathBasedCacheEntry> tailMap = entriesById.tailMap(prevId + 1);
for (Entry<Long, PathBasedCacheEntry> cur : tailMap.entrySet()) {
- if (numReplies >= maxListCacheDirectivesResponses) {
- return new BatchedListEntries<PathBasedCacheEntry>(replies, true);
+ if (numReplies >= maxListCacheDescriptorsResponses) {
+ return new BatchedListEntries<PathBasedCacheDescriptor>(replies, true);
}
PathBasedCacheEntry curEntry = cur.getValue();
- PathBasedCacheDirective directive = cur.getValue().getDirective();
+ PathBasedCacheDirective directive = cur.getValue().getDescriptor();
if (filterPool != null &&
!directive.getPool().equals(filterPool)) {
continue;
@@ -307,17 +311,12 @@ public final class CacheManager {
!directive.getPath().equals(filterPath)) {
continue;
}
- CachePool pool = cachePools.get(curEntry.getDirective().getPool());
- if (pool == null) {
- LOG.error("invalid pool for PathBasedCacheEntry " + curEntry);
- continue;
- }
- if (pc.checkPermission(pool, FsAction.READ)) {
- replies.add(cur.getValue());
+ if (pc.checkPermission(curEntry.getPool(), FsAction.READ)) {
+ replies.add(cur.getValue().getDescriptor());
numReplies++;
}
}
- return new BatchedListEntries<PathBasedCacheEntry>(replies, false);
+ return new BatchedListEntries<PathBasedCacheDescriptor>(replies, false);
}
/**
@@ -409,12 +408,12 @@ public final class CacheManager {
// Remove entries using this pool
// TODO: could optimize this somewhat to avoid the need to iterate
- // over all entries in entriesByDirective
- Iterator<Entry<PathBasedCacheDirective, PathBasedCacheEntry>> iter =
- entriesByDirective.entrySet().iterator();
+ // over all entries in entriesById
+ Iterator<Entry<Long, PathBasedCacheEntry>> iter =
+ entriesById.entrySet().iterator();
while (iter.hasNext()) {
- Entry<PathBasedCacheDirective, PathBasedCacheEntry> entry = iter.next();
- if (entry.getKey().getPool().equals(poolName)) {
+ Entry<Long, PathBasedCacheEntry> entry = iter.next();
+ if (entry.getValue().getPool() == pool) {
entriesById.remove(entry.getValue().getEntryId());
iter.remove();
}
Modified: hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java?rev=1524561&r1=1524560&r2=1524561&view=diff
==============================================================================
--- hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java (original)
+++ hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java Wed Sep 18 20:43:40 2013
@@ -144,7 +144,7 @@ import org.apache.hadoop.hdfs.HdfsConfig
import org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException;
import org.apache.hadoop.hdfs.protocol.Block;
import org.apache.hadoop.hdfs.protocol.PathBasedCacheDirective;
-import org.apache.hadoop.hdfs.protocol.PathBasedCacheEntry;
+import org.apache.hadoop.hdfs.protocol.PathBasedCacheDescriptor;
import org.apache.hadoop.hdfs.protocol.ClientProtocol;
import org.apache.hadoop.hdfs.protocol.DatanodeID;
import org.apache.hadoop.hdfs.protocol.DatanodeInfo;
@@ -6801,17 +6801,17 @@ public class FSNamesystem implements Nam
}
@SuppressWarnings("unchecked")
- List<Fallible<PathBasedCacheEntry>> addPathBasedCacheDirectives(
+ List<Fallible<PathBasedCacheDescriptor>> addPathBasedCacheDirectives(
List<PathBasedCacheDirective> directives) throws IOException {
CacheEntryWithPayload retryCacheEntry =
RetryCache.waitForCompletion(retryCache, null);
if (retryCacheEntry != null && retryCacheEntry.isSuccess()) {
- return (List<Fallible<PathBasedCacheEntry>>) retryCacheEntry.getPayload();
+ return (List<Fallible<PathBasedCacheDescriptor>>) retryCacheEntry.getPayload();
}
final FSPermissionChecker pc = isPermissionEnabled ?
getPermissionChecker() : null;
boolean success = false;
- List<Fallible<PathBasedCacheEntry>> results = null;
+ List<Fallible<PathBasedCacheDescriptor>> results = null;
checkOperation(OperationCategory.WRITE);
writeLock();
try {
@@ -6837,7 +6837,7 @@ public class FSNamesystem implements Nam
}
@SuppressWarnings("unchecked")
- List<Fallible<Long>> removePathBasedCacheEntries(List<Long> ids) throws IOException {
+ List<Fallible<Long>> removePathBasedCacheDescriptors(List<Long> ids) throws IOException {
CacheEntryWithPayload retryCacheEntry =
RetryCache.waitForCompletion(retryCache, null);
if (retryCacheEntry != null && retryCacheEntry.isSuccess()) {
@@ -6855,13 +6855,13 @@ public class FSNamesystem implements Nam
throw new SafeModeException(
"Cannot remove PathBasedCache directives", safeMode);
}
- results = cacheManager.removeEntries(ids, pc);
+ results = cacheManager.removeDescriptors(ids, pc);
//getEditLog().logRemovePathBasedCacheEntries(results); FIXME: HDFS-5119
success = true;
} finally {
writeUnlock();
if (isAuditEnabled() && isExternalInvocation()) {
- logAuditEvent(success, "removePathBasedCacheEntries", null, null, null);
+ logAuditEvent(success, "removePathBasedCacheDescriptors", null, null, null);
}
RetryCache.setState(retryCacheEntry, success, results);
}
@@ -6869,22 +6869,22 @@ public class FSNamesystem implements Nam
return results;
}
- BatchedListEntries<PathBasedCacheEntry> listPathBasedCacheEntries(long startId,
+ BatchedListEntries<PathBasedCacheDescriptor> listPathBasedCacheDescriptors(long startId,
String pool, String path) throws IOException {
final FSPermissionChecker pc = isPermissionEnabled ?
getPermissionChecker() : null;
- BatchedListEntries<PathBasedCacheEntry> results;
+ BatchedListEntries<PathBasedCacheDescriptor> results;
checkOperation(OperationCategory.READ);
readLock();
boolean success = false;
try {
checkOperation(OperationCategory.READ);
- results = cacheManager.listPathBasedCacheEntries(startId, pool, path, pc);
+ results = cacheManager.listPathBasedCacheDescriptors(startId, pool, path, pc);
success = true;
} finally {
readUnlock();
if (isAuditEnabled() && isExternalInvocation()) {
- logAuditEvent(success, "listPathBasedCacheEntries", null, null, null);
+ logAuditEvent(success, "listPathBasedCacheDescriptors", null, null, null);
}
}
return results;
Modified: hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NameNodeRpcServer.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NameNodeRpcServer.java?rev=1524561&r1=1524560&r2=1524561&view=diff
==============================================================================
--- hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NameNodeRpcServer.java (original)
+++ hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NameNodeRpcServer.java Wed Sep 18 20:43:40 2013
@@ -61,7 +61,7 @@ import org.apache.hadoop.hdfs.HDFSPolicy
import org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException;
import org.apache.hadoop.hdfs.protocol.BlockListAsLongs;
import org.apache.hadoop.hdfs.protocol.PathBasedCacheDirective;
-import org.apache.hadoop.hdfs.protocol.PathBasedCacheEntry;
+import org.apache.hadoop.hdfs.protocol.PathBasedCacheDescriptor;
import org.apache.hadoop.hdfs.protocol.CachePoolInfo;
import org.apache.hadoop.hdfs.protocol.CorruptFileBlocks;
import org.apache.hadoop.hdfs.protocol.DatanodeID;
@@ -1213,19 +1213,19 @@ class NameNodeRpcServer implements Namen
}
@Override
- public List<Fallible<PathBasedCacheEntry>> addPathBasedCacheDirectives(
+ public List<Fallible<PathBasedCacheDescriptor>> addPathBasedCacheDirectives(
List<PathBasedCacheDirective> paths) throws IOException {
return namesystem.addPathBasedCacheDirectives(paths);
}
@Override
- public List<Fallible<Long>> removePathBasedCacheEntries(List<Long> ids)
+ public List<Fallible<Long>> removePathBasedCacheDescriptors(List<Long> ids)
throws IOException {
- return namesystem.removePathBasedCacheEntries(ids);
+ return namesystem.removePathBasedCacheDescriptors(ids);
}
private class ServerSidePathBasedCacheEntriesIterator
- extends BatchedRemoteIterator<Long, PathBasedCacheEntry> {
+ extends BatchedRemoteIterator<Long, PathBasedCacheDescriptor> {
private final String pool;
@@ -1239,19 +1239,19 @@ class NameNodeRpcServer implements Namen
}
@Override
- public BatchedEntries<PathBasedCacheEntry> makeRequest(
+ public BatchedEntries<PathBasedCacheDescriptor> makeRequest(
Long nextKey) throws IOException {
- return namesystem.listPathBasedCacheEntries(nextKey, pool, path);
+ return namesystem.listPathBasedCacheDescriptors(nextKey, pool, path);
}
@Override
- public Long elementToPrevKey(PathBasedCacheEntry entry) {
+ public Long elementToPrevKey(PathBasedCacheDescriptor entry) {
return entry.getEntryId();
}
}
@Override
- public RemoteIterator<PathBasedCacheEntry> listPathBasedCacheEntries(long prevId,
+ public RemoteIterator<PathBasedCacheDescriptor> listPathBasedCacheDescriptors(long prevId,
String pool, String path) throws IOException {
return new ServerSidePathBasedCacheEntriesIterator(prevId, pool, path);
}
Modified: hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/CacheAdmin.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/CacheAdmin.java?rev=1524561&r1=1524560&r2=1524561&view=diff
==============================================================================
--- hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/CacheAdmin.java (original)
+++ hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/CacheAdmin.java Wed Sep 18 20:43:40 2013
@@ -28,7 +28,7 @@ import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.RemoteIterator;
import org.apache.hadoop.hdfs.DistributedFileSystem;
import org.apache.hadoop.hdfs.protocol.PathBasedCacheDirective;
-import org.apache.hadoop.hdfs.protocol.PathBasedCacheEntry;
+import org.apache.hadoop.hdfs.protocol.PathBasedCacheDescriptor;
import org.apache.hadoop.hdfs.tools.TableListing.Justification;
import org.apache.hadoop.util.Fallible;
import org.apache.hadoop.util.StringUtils;
@@ -100,10 +100,10 @@ public class CacheAdmin {
new LinkedList<PathBasedCacheDirective>();
PathBasedCacheDirective directive = new PathBasedCacheDirective(path, poolName);
directives.add(directive);
- List<Fallible<PathBasedCacheEntry>> results =
+ List<Fallible<PathBasedCacheDescriptor>> results =
dfs.addPathBasedCacheDirective(directives);
try {
- PathBasedCacheEntry entry = results.get(0).get();
+ PathBasedCacheDescriptor entry = results.get(0).get();
System.out.println("Added PathBasedCache entry " + entry.getEntryId());
return 0;
} catch (IOException e) {
@@ -155,7 +155,7 @@ public class CacheAdmin {
DistributedFileSystem dfs = getDFS();
List<Long> ids = new LinkedList<Long>();
ids.add(id);
- List<Fallible<Long>> results = dfs.removePathBasedCacheEntries(ids);
+ List<Fallible<Long>> results = dfs.removePathBasedCacheDescriptors(ids);
try {
Long resultId = results.get(0).get();
System.out.println("Removed PathBasedCache entry " + resultId);
@@ -208,15 +208,13 @@ public class CacheAdmin {
addField("PATH", Justification.LEFT).
build();
DistributedFileSystem dfs = getDFS();
- RemoteIterator<PathBasedCacheEntry> iter =
- dfs.listPathBasedCacheEntries(poolFilter, pathFilter);
+ RemoteIterator<PathBasedCacheDescriptor> iter =
+ dfs.listPathBasedCacheDescriptors(poolFilter, pathFilter);
int numEntries = 0;
while (iter.hasNext()) {
- PathBasedCacheEntry entry = iter.next();
+ PathBasedCacheDescriptor entry = iter.next();
String row[] = new String[] {
- "" + entry.getEntryId(),
- entry.getDirective().getPool(),
- entry.getDirective().getPath(),
+ "" + entry.getEntryId(), entry.getPool(), entry.getPath(),
};
tableListing.addRow(row);
numEntries++;
Modified: hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/proto/ClientNamenodeProtocol.proto
URL: http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/proto/ClientNamenodeProtocol.proto?rev=1524561&r1=1524560&r2=1524561&view=diff
==============================================================================
--- hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/proto/ClientNamenodeProtocol.proto (original)
+++ hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/main/proto/ClientNamenodeProtocol.proto Wed Sep 18 20:43:40 2013
@@ -382,37 +382,38 @@ enum AddPathBasedCacheDirectiveErrorProt
INVALID_PATH_NAME_ERROR = -3;
INVALID_POOL_NAME_ERROR = -4;
ADD_PERMISSION_DENIED_ERROR = -5;
+ PATH_ALREADY_EXISTS_IN_POOL_ERROR = -6;
}
-message RemovePathBasedCacheEntriesRequestProto {
+message RemovePathBasedCacheDescriptorsRequestProto {
repeated int64 elements = 1 [packed=true];
}
-message RemovePathBasedCacheEntriesResponseProto {
+message RemovePathBasedCacheDescriptorsResponseProto {
repeated int64 results = 1 [packed=true];
}
-enum RemovePathBasedCacheEntryErrorProto {
+enum RemovePathBasedCacheDescriptorErrorProto {
UNEXPECTED_REMOVE_ERROR = -1;
INVALID_CACHED_PATH_ID_ERROR = -2;
NO_SUCH_CACHED_PATH_ID_ERROR = -3;
REMOVE_PERMISSION_DENIED_ERROR = -4;
}
-message ListPathBasedCacheEntriesRequestProto {
+message ListPathBasedCacheDescriptorsRequestProto {
required int64 prevId = 1;
optional string pool = 2;
optional string path = 3;
}
-message ListPathBasedCacheEntriesElementProto {
+message ListPathBasedCacheDescriptorsElementProto {
required int64 id = 1;
required string pool = 2;
required string path = 3;
}
-message ListPathBasedCacheEntriesResponseProto {
- repeated ListPathBasedCacheEntriesElementProto elements = 1;
+message ListPathBasedCacheDescriptorsResponseProto {
+ repeated ListPathBasedCacheDescriptorsElementProto elements = 1;
required bool hasMore = 2;
}
@@ -645,10 +646,10 @@ service ClientNamenodeProtocol {
rpc getFileInfo(GetFileInfoRequestProto) returns(GetFileInfoResponseProto);
rpc addPathBasedCacheDirectives(AddPathBasedCacheDirectivesRequestProto)
returns (AddPathBasedCacheDirectivesResponseProto);
- rpc removePathBasedCacheEntries(RemovePathBasedCacheEntriesRequestProto)
- returns (RemovePathBasedCacheEntriesResponseProto);
- rpc listPathBasedCacheEntries(ListPathBasedCacheEntriesRequestProto)
- returns (ListPathBasedCacheEntriesResponseProto);
+ rpc removePathBasedCacheDescriptors(RemovePathBasedCacheDescriptorsRequestProto)
+ returns (RemovePathBasedCacheDescriptorsResponseProto);
+ rpc listPathBasedCacheDescriptors(ListPathBasedCacheDescriptorsRequestProto)
+ returns (ListPathBasedCacheDescriptorsResponseProto);
rpc addCachePool(AddCachePoolRequestProto)
returns(AddCachePoolResponseProto);
rpc modifyCachePool(ModifyCachePoolRequestProto)
Modified: hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/blockmanagement/TestCacheReplicationManager.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/blockmanagement/TestCacheReplicationManager.java?rev=1524561&r1=1524560&r2=1524561&view=diff
==============================================================================
--- hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/blockmanagement/TestCacheReplicationManager.java (original)
+++ hadoop/common/branches/HDFS-4949/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/blockmanagement/TestCacheReplicationManager.java Wed Sep 18 20:43:40 2013
@@ -37,7 +37,7 @@ import org.apache.hadoop.hdfs.HdfsConfig
import org.apache.hadoop.hdfs.MiniDFSCluster;
import org.apache.hadoop.hdfs.protocol.CachePoolInfo;
import org.apache.hadoop.hdfs.protocol.PathBasedCacheDirective;
-import org.apache.hadoop.hdfs.protocol.PathBasedCacheEntry;
+import org.apache.hadoop.hdfs.protocol.PathBasedCacheDescriptor;
import org.apache.hadoop.hdfs.server.namenode.NameNode;
import org.apache.hadoop.hdfs.server.protocol.NamenodeProtocols;
import org.apache.hadoop.io.nativeio.NativeIO;
@@ -151,12 +151,11 @@ public class TestCacheReplicationManager
List<PathBasedCacheDirective> toAdd =
new ArrayList<PathBasedCacheDirective>();
toAdd.add(new PathBasedCacheDirective(paths.get(i), pool));
- List<Fallible<PathBasedCacheEntry>> fallibles =
+ List<Fallible<PathBasedCacheDescriptor>> fallibles =
nnRpc.addPathBasedCacheDirectives(toAdd);
assertEquals("Unexpected number of fallibles",
1, fallibles.size());
- PathBasedCacheEntry entry = fallibles.get(0).get();
- PathBasedCacheDirective directive = entry.getDirective();
+ PathBasedCacheDescriptor directive = fallibles.get(0).get();
assertEquals("Directive does not match requested path", paths.get(i),
directive.getPath());
assertEquals("Directive does not match requested pool", pool,
@@ -165,13 +164,13 @@ public class TestCacheReplicationManager
waitForExpectedNumCachedBlocks(expected);
}
// Uncache and check each path in sequence
- RemoteIterator<PathBasedCacheEntry> entries =
- nnRpc.listPathBasedCacheEntries(0, null, null);
+ RemoteIterator<PathBasedCacheDescriptor> entries =
+ nnRpc.listPathBasedCacheDescriptors(0, null, null);
for (int i=0; i<numFiles; i++) {
- PathBasedCacheEntry entry = entries.next();
+ PathBasedCacheDescriptor entry = entries.next();
List<Long> toRemove = new ArrayList<Long>();
toRemove.add(entry.getEntryId());
- List<Fallible<Long>> fallibles = nnRpc.removePathBasedCacheEntries(toRemove);
+ List<Fallible<Long>> fallibles = nnRpc.removePathBasedCacheDescriptors(toRemove);
assertEquals("Unexpected number of fallibles", 1, fallibles.size());
Long l = fallibles.get(0).get();
assertEquals("Removed entryId does not match requested",