HDFS-3350. In INode, add final to compareTo(..), equals(..) and hashCode(), and remove synchronized from updatePermissionStatus(..).
git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1333679 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
6b58fa6494
commit
dd8b7ae9d8
|
@ -594,6 +594,9 @@ Release 2.0.0 - UNRELEASED
|
||||||
|
|
||||||
HDFS-3359. DFSClient.close should close cached sockets. (todd)
|
HDFS-3359. DFSClient.close should close cached sockets. (todd)
|
||||||
|
|
||||||
|
HDFS-3350. In INode, add final to compareTo(..), equals(..) and hashCode(),
|
||||||
|
and remove synchronized from updatePermissionStatus(..). (szetszwo)
|
||||||
|
|
||||||
BREAKDOWN OF HDFS-1623 SUBTASKS
|
BREAKDOWN OF HDFS-1623 SUBTASKS
|
||||||
|
|
||||||
HDFS-2179. Add fencing framework and mechanisms for NameNode HA. (todd)
|
HDFS-2179. Add fencing framework and mechanisms for NameNode HA. (todd)
|
||||||
|
|
|
@ -30,6 +30,8 @@ import org.apache.hadoop.hdfs.protocol.Block;
|
||||||
import org.apache.hadoop.hdfs.server.blockmanagement.BlockInfo;
|
import org.apache.hadoop.hdfs.server.blockmanagement.BlockInfo;
|
||||||
import org.apache.hadoop.util.StringUtils;
|
import org.apache.hadoop.util.StringUtils;
|
||||||
|
|
||||||
|
import com.google.common.primitives.SignedBytes;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* We keep an in-memory representation of the file/block hierarchy.
|
* We keep an in-memory representation of the file/block hierarchy.
|
||||||
* This is a base INode class containing common fields for file and
|
* This is a base INode class containing common fields for file and
|
||||||
|
@ -143,8 +145,7 @@ abstract class INode implements Comparable<byte[]>, FSInodeInfo {
|
||||||
protected PermissionStatus getPermissionStatus() {
|
protected PermissionStatus getPermissionStatus() {
|
||||||
return new PermissionStatus(getUserName(),getGroupName(),getFsPermission());
|
return new PermissionStatus(getUserName(),getGroupName(),getFsPermission());
|
||||||
}
|
}
|
||||||
private synchronized void updatePermissionStatus(
|
private void updatePermissionStatus(PermissionStatusFormat f, long n) {
|
||||||
PermissionStatusFormat f, long n) {
|
|
||||||
permission = f.combine(n, permission);
|
permission = f.combine(n, permission);
|
||||||
}
|
}
|
||||||
/** Get user name */
|
/** Get user name */
|
||||||
|
@ -400,48 +401,30 @@ abstract class INode implements Comparable<byte[]>, FSInodeInfo {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
private static final byte[] EMPTY_BYTES = {};
|
||||||
// Comparable interface
|
|
||||||
//
|
@Override
|
||||||
public int compareTo(byte[] o) {
|
public final int compareTo(byte[] bytes) {
|
||||||
return compareBytes(name, o);
|
final byte[] left = name == null? EMPTY_BYTES: name;
|
||||||
|
final byte[] right = bytes == null? EMPTY_BYTES: bytes;
|
||||||
|
return SignedBytes.lexicographicalComparator().compare(left, right);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean equals(Object o) {
|
@Override
|
||||||
if (!(o instanceof INode)) {
|
public final boolean equals(Object that) {
|
||||||
|
if (this == that) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (that == null || !(that instanceof INode)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return Arrays.equals(this.name, ((INode)o).name);
|
return Arrays.equals(this.name, ((INode)that).name);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int hashCode() {
|
@Override
|
||||||
|
public final int hashCode() {
|
||||||
return Arrays.hashCode(this.name);
|
return Arrays.hashCode(this.name);
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
|
||||||
// static methods
|
|
||||||
//
|
|
||||||
/**
|
|
||||||
* Compare two byte arrays.
|
|
||||||
*
|
|
||||||
* @return a negative integer, zero, or a positive integer
|
|
||||||
* as defined by {@link #compareTo(byte[])}.
|
|
||||||
*/
|
|
||||||
static int compareBytes(byte[] a1, byte[] a2) {
|
|
||||||
if (a1==a2)
|
|
||||||
return 0;
|
|
||||||
int len1 = (a1==null ? 0 : a1.length);
|
|
||||||
int len2 = (a2==null ? 0 : a2.length);
|
|
||||||
int n = Math.min(len1, len2);
|
|
||||||
byte b1, b2;
|
|
||||||
for (int i=0; i<n; i++) {
|
|
||||||
b1 = a1[i];
|
|
||||||
b2 = a2[i];
|
|
||||||
if (b1 != b2)
|
|
||||||
return b1 - b2;
|
|
||||||
}
|
|
||||||
return len1 - len2;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create an INode; the inode's name is not set yet
|
* Create an INode; the inode's name is not set yet
|
||||||
|
|
|
@ -173,9 +173,9 @@ class INodeDirectory extends INode {
|
||||||
*/
|
*/
|
||||||
int getExistingPathINodes(byte[][] components, INode[] existing,
|
int getExistingPathINodes(byte[][] components, INode[] existing,
|
||||||
boolean resolveLink) throws UnresolvedLinkException {
|
boolean resolveLink) throws UnresolvedLinkException {
|
||||||
assert compareBytes(this.name, components[0]) == 0 :
|
assert this.compareTo(components[0]) == 0 :
|
||||||
"Incorrect name " + getLocalName() + " expected " +
|
"Incorrect name " + getLocalName() + " expected "
|
||||||
DFSUtil.bytes2String(components[0]);
|
+ (components[0] == null? null: DFSUtil.bytes2String(components[0]));
|
||||||
|
|
||||||
INode curNode = this;
|
INode curNode = this;
|
||||||
int count = 0;
|
int count = 0;
|
||||||
|
@ -317,8 +317,7 @@ class INodeDirectory extends INode {
|
||||||
INode newNode,
|
INode newNode,
|
||||||
INodeDirectory parent,
|
INodeDirectory parent,
|
||||||
boolean propagateModTime
|
boolean propagateModTime
|
||||||
) throws FileNotFoundException,
|
) throws FileNotFoundException {
|
||||||
UnresolvedLinkException {
|
|
||||||
// insert into the parent children list
|
// insert into the parent children list
|
||||||
newNode.name = localname;
|
newNode.name = localname;
|
||||||
if(parent.addChild(newNode, propagateModTime) == null)
|
if(parent.addChild(newNode, propagateModTime) == null)
|
||||||
|
|
Loading…
Reference in New Issue