blob: 311f9d0e5194743e635818ef3bf7a979c9a9f755 [file] [log] [blame]
/**
* 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.fs.FileEncryptionInfo;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.permission.FsPermission;
import org.apache.hadoop.hdfs.DFSUtilClient;
import java.io.IOException;
import java.util.Set;
/**
* HDFS metadata for an entity in the filesystem without locations. Note that
* symlinks and directories are returned as {@link HdfsLocatedFileStatus} for
* backwards compatibility.
*/
public class HdfsNamedFileStatus extends FileStatus implements HdfsFileStatus {
// local name of the inode that's encoded in java UTF8
private byte[] uPath;
private byte[] uSymlink; // symlink target encoded in java UTF8/null
private final long fileId;
private final FileEncryptionInfo feInfo;
private final ErasureCodingPolicy ecPolicy;
// Used by dir, not including dot and dotdot. Always zero for a regular file.
private final int childrenNum;
private final byte storagePolicy;
/**
* Constructor.
* @param length the number of bytes the file has
* @param isdir if the path is a directory
* @param replication the replication factor
* @param blocksize the block size
* @param mtime modification time
* @param atime access time
* @param permission permission
* @param owner the owner of the path
* @param group the group of the path
* @param symlink symlink target encoded in java UTF8 or null
* @param path the local name in java UTF8 encoding the same as that in-memory
* @param fileId the file id
* @param childrenNum the number of children. Used by directory.
* @param feInfo the file's encryption info
* @param storagePolicy ID which specifies storage policy
* @param ecPolicy the erasure coding policy
*/
HdfsNamedFileStatus(long length, boolean isdir, int replication,
long blocksize, long mtime, long atime,
FsPermission permission, Set<Flags> flags,
String owner, String group,
byte[] symlink, byte[] path, long fileId,
int childrenNum, FileEncryptionInfo feInfo,
byte storagePolicy, ErasureCodingPolicy ecPolicy) {
super(length, isdir, replication, blocksize, mtime, atime,
HdfsFileStatus.convert(isdir, symlink != null, permission, flags),
owner, group, null, null,
HdfsFileStatus.convert(flags));
this.uSymlink = symlink;
this.uPath = path;
this.fileId = fileId;
this.childrenNum = childrenNum;
this.feInfo = feInfo;
this.storagePolicy = storagePolicy;
this.ecPolicy = ecPolicy;
}
@Override
public void setOwner(String owner) {
super.setOwner(owner);
}
@Override
public void setGroup(String group) {
super.setOwner(group);
}
@Override
public boolean isSymlink() {
return uSymlink != null;
}
@Override
public Path getSymlink() throws IOException {
if (isSymlink()) {
return new Path(DFSUtilClient.bytes2String(getSymlinkInBytes()));
}
throw new IOException("Path " + getPath() + " is not a symbolic link");
}
@Override
public void setPermission(FsPermission permission) {
super.setPermission(permission);
}
/**
* Get the Java UTF8 representation of the local name.
*
* @return the local name in java UTF8
*/
@Override
public byte[] getLocalNameInBytes() {
return uPath;
}
@Override
public void setSymlink(Path sym) {
uSymlink = DFSUtilClient.string2Bytes(sym.toString());
}
/**
* Opaque referant for the symlink, to be resolved at the client.
*/
@Override
public byte[] getSymlinkInBytes() {
return uSymlink;
}
@Override
public long getFileId() {
return fileId;
}
@Override
public FileEncryptionInfo getFileEncryptionInfo() {
return feInfo;
}
/**
* Get the erasure coding policy if it's set.
*
* @return the erasure coding policy
*/
@Override
public ErasureCodingPolicy getErasureCodingPolicy() {
return ecPolicy;
}
@Override
public int getChildrenNum() {
return childrenNum;
}
/** @return the storage policy id */
@Override
public byte getStoragePolicy() {
return storagePolicy;
}
@Override
public boolean equals(Object o) {
// satisfy findbugs
return super.equals(o);
}
@Override
public int hashCode() {
// satisfy findbugs
return super.hashCode();
}
}