HDS-3491. HttpFs does not set permissions correctly (tucu)

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1355556 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Alejandro Abdelnur 2012-06-29 20:59:11 +00:00
parent cd9ce99740
commit 34605c9594
7 changed files with 34 additions and 44 deletions

View File

@ -86,7 +86,7 @@ public class HttpFSFileSystem extends FileSystem {
public static final String ACCESS_TIME_PARAM = "accesstime";
public static final String RENEWER_PARAM = "renewer";
public static final String DEFAULT_PERMISSION = "default";
public static final Short DEFAULT_PERMISSION = 0755;
public static final String RENAME_JSON = "boolean";
@ -438,7 +438,7 @@ public class HttpFSFileSystem extends FileSystem {
* @return the Unix string symbolic reprentation.
*/
public static String permissionToString(FsPermission p) {
return (p == null) ? DEFAULT_PERMISSION : Integer.toString(p.toShort(), 8);
return Integer.toString((p == null) ? DEFAULT_PERMISSION : p.toShort(), 8);
}
/*

View File

@ -42,25 +42,6 @@ import java.util.Map;
*/
public class FSOperations {
/**
* Converts a Unix permission octal
* (i.e. 655 or 1777) into a FileSystemAccess permission.
*
* @param str Unix permission symbolic representation.
*
* @return the FileSystemAccess permission. If the given string was
* 'default', it returns <code>FsPermission.getDefault()</code>.
*/
private static FsPermission getPermission(String str) {
FsPermission permission;
if (str.equals(HttpFSFileSystem.DEFAULT_PERMISSION)) {
permission = FsPermission.getDefault();
} else {
permission = new FsPermission(Short.parseShort(str, 8));
}
return permission;
}
@SuppressWarnings({"unchecked", "deprecation"})
private static Map fileStatusToJSONRaw(FileStatus status, boolean emptyPathSuffix) {
Map json = new LinkedHashMap();
@ -252,7 +233,7 @@ public class FSOperations {
public static class FSCreate implements FileSystemAccess.FileSystemExecutor<Void> {
private InputStream is;
private Path path;
private String permission;
private short permission;
private boolean override;
private short replication;
private long blockSize;
@ -267,7 +248,8 @@ public class FSOperations {
* @param repl the replication factor for the file.
* @param blockSize the block size for the file.
*/
public FSCreate(InputStream is, String path, String perm, boolean override, short repl, long blockSize) {
public FSCreate(InputStream is, String path, short perm, boolean override,
short repl, long blockSize) {
this.is = is;
this.path = new Path(path);
this.permission = perm;
@ -293,7 +275,7 @@ public class FSOperations {
if (blockSize == -1) {
blockSize = fs.getDefaultBlockSize(path);
}
FsPermission fsPermission = getPermission(permission);
FsPermission fsPermission = new FsPermission(permission);
int bufferSize = fs.getConf().getInt("httpfs.buffer.size", 4096);
OutputStream os = fs.create(path, fsPermission, override, bufferSize, replication, blockSize, null);
IOUtils.copyBytes(is, os, bufferSize, true);
@ -477,7 +459,7 @@ public class FSOperations {
public static class FSMkdirs implements FileSystemAccess.FileSystemExecutor<JSONObject> {
private Path path;
private String permission;
private short permission;
/**
* Creates a mkdirs executor.
@ -485,7 +467,7 @@ public class FSOperations {
* @param path directory path to create.
* @param permission permission to use.
*/
public FSMkdirs(String path, String permission) {
public FSMkdirs(String path, short permission) {
this.path = new Path(path);
this.permission = permission;
}
@ -502,7 +484,7 @@ public class FSOperations {
*/
@Override
public JSONObject execute(FileSystem fs) throws IOException {
FsPermission fsPermission = getPermission(permission);
FsPermission fsPermission = new FsPermission(permission);
boolean mkdirs = fs.mkdirs(path, fsPermission);
return toJSON(HttpFSFileSystem.MKDIRS_JSON, mkdirs);
}
@ -621,7 +603,7 @@ public class FSOperations {
public static class FSSetPermission implements FileSystemAccess.FileSystemExecutor<Void> {
private Path path;
private String permission;
private short permission;
/**
* Creates a set-permission executor.
@ -629,7 +611,7 @@ public class FSOperations {
* @param path path to set the permission.
* @param permission permission to set.
*/
public FSSetPermission(String path, String permission) {
public FSSetPermission(String path, short permission) {
this.path = new Path(path);
this.permission = permission;
}
@ -645,7 +627,7 @@ public class FSOperations {
*/
@Override
public Void execute(FileSystem fs) throws IOException {
FsPermission fsPermission = getPermission(permission);
FsPermission fsPermission = new FsPermission(permission);
fs.setPermission(path, fsPermission);
return null;
}

View File

@ -337,25 +337,19 @@ public class HttpFSParametersProvider extends ParametersProvider {
/**
* Class for permission parameter.
*/
public static class PermissionParam extends StringParam {
public static class PermissionParam extends ShortParam {
/**
* Parameter name.
*/
public static final String NAME = HttpFSFileSystem.PERMISSION_PARAM;
/**
* Symbolic Unix permissions regular expression pattern.
*/
private static final Pattern PERMISSION_PATTERN =
Pattern.compile(HttpFSFileSystem.DEFAULT_PERMISSION +
"|[0-1]?[0-7][0-7][0-7]");
/**
* Constructor.
*/
public PermissionParam() {
super(NAME, HttpFSFileSystem.DEFAULT_PERMISSION, PERMISSION_PATTERN);
super(NAME, HttpFSFileSystem.DEFAULT_PERMISSION, 8);
}
}

View File

@ -484,7 +484,7 @@ public class HttpFSServer {
createUploadRedirectionURL(uriInfo,
HttpFSFileSystem.Operation.CREATE)).build();
} else {
String permission = params.get(PermissionParam.NAME,
Short permission = params.get(PermissionParam.NAME,
PermissionParam.class);
boolean override = params.get(OverwriteParam.NAME,
OverwriteParam.class);
@ -504,7 +504,7 @@ public class HttpFSServer {
break;
}
case MKDIRS: {
String permission = params.get(PermissionParam.NAME,
Short permission = params.get(PermissionParam.NAME,
PermissionParam.class);
FSOperations.FSMkdirs command =
new FSOperations.FSMkdirs(path, permission);
@ -533,7 +533,7 @@ public class HttpFSServer {
break;
}
case SETPERMISSION: {
String permission = params.get(PermissionParam.NAME,
Short permission = params.get(PermissionParam.NAME,
PermissionParam.class);
FSOperations.FSSetPermission command =
new FSOperations.FSSetPermission(path, permission);

View File

@ -20,12 +20,19 @@ package org.apache.hadoop.lib.wsrs;
public abstract class ShortParam extends Param<Short> {
public ShortParam(String name, Short defaultValue) {
private int radix;
public ShortParam(String name, Short defaultValue, int radix) {
super(name, defaultValue);
this.radix = radix;
}
public ShortParam(String name, Short defaultValue) {
this(name, defaultValue, 10);
}
protected Short parse(String str) throws Exception {
return Short.parseShort(str);
return Short.parseShort(str, radix);
}
@Override

View File

@ -77,6 +77,11 @@ public class TestParam {
};
test(param, "S", "a short", (short) 1, (short) 2, "x",
"" + ((int)Short.MAX_VALUE + 1));
param = new ShortParam("S", (short) 1, 8) {
};
Assert.assertEquals(new Short((short)01777), param.parse("01777"));
}
@Test

View File

@ -399,6 +399,8 @@ Branch-2 ( Unreleased changes )
HDFS-3551. WebHDFS CREATE should use client location for HTTP redirection.
(szetszwo)
HDFS-3491. HttpFs does not set permissions correctly (tucu)
Release 2.0.0-alpha - 05-23-2012
INCOMPATIBLE CHANGES