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 el...@apache.org on 2012/07/19 20:38:14 UTC
svn commit: r1363467 - in
/hadoop/common/branches/branch-2/hadoop-hdfs-project: ./ hadoop-hdfs/
hadoop-hdfs/src/main/java/ hadoop-hdfs/src/main/native/
hadoop-hdfs/src/main/native/fuse-dfs/ hadoop-hdfs/src/main/native/libhdfs/
hadoop-hdfs/src/main/weba...
Author: eli
Date: Thu Jul 19 18:38:13 2012
New Revision: 1363467
URL: http://svn.apache.org/viewvc?rev=1363467&view=rev
Log:
HDFS-1249. With fuse-dfs, chown which only has owner (or only group) argument fails with Input/output error. Contributed by Colin Patrick McCabe
Modified:
hadoop/common/branches/branch-2/hadoop-hdfs-project/ (props changed)
hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/ (props changed)
hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/ (props changed)
hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/native/ (props changed)
hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/native/fuse-dfs/fuse_impls_chown.c
hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/native/libhdfs/hdfs.c
hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/native/libhdfs/hdfs.h
hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/native/libhdfs/test_libhdfs_threaded.c
hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/datanode/ (props changed)
hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/hdfs/ (props changed)
hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/secondary/ (props changed)
hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/test/hdfs/ (props changed)
Propchange: hadoop/common/branches/branch-2/hadoop-hdfs-project/
------------------------------------------------------------------------------
Merged /hadoop/common/trunk/hadoop-hdfs-project:r1363466
Propchange: hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/
------------------------------------------------------------------------------
Merged /hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs:r1363466
Modified: hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt?rev=1363467&r1=1363466&r2=1363467&view=diff
==============================================================================
--- hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt (original)
+++ hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt Thu Jul 19 18:38:13 2012
@@ -165,6 +165,9 @@ Release 2.0.1-alpha - UNRELEASED
HDFS-3675. libhdfs: follow documented return codes. (Colin Patrick McCabe via eli)
+ HDFS-1249. With fuse-dfs, chown which only has owner (or only group)
+ argument fails with Input/output error. (Colin Patrick McCabe via eli)
+
OPTIMIZATIONS
HDFS-2982. Startup performance suffers when there are many edit log
Propchange: hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/
------------------------------------------------------------------------------
Merged /hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java:r1363466
Propchange: hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/native/
------------------------------------------------------------------------------
Merged /hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/native:r1363466
Modified: hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/native/fuse-dfs/fuse_impls_chown.c
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/native/fuse-dfs/fuse_impls_chown.c?rev=1363467&r1=1363466&r2=1363467&view=diff
==============================================================================
--- hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/native/fuse-dfs/fuse_impls_chown.c (original)
+++ hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/native/fuse-dfs/fuse_impls_chown.c Thu Jul 19 18:38:13 2012
@@ -40,19 +40,26 @@ int dfs_chown(const char *path, uid_t ui
assert(dfs);
assert('/' == *path);
- user = getUsername(uid);
- if (NULL == user) {
- ERROR("Could not lookup the user id string %d",(int)uid);
- ret = -EIO;
+ if ((uid == -1) && (gid == -1)) {
+ ret = 0;
goto cleanup;
}
-
- group = getGroup(gid);
- if (group == NULL) {
- ERROR("Could not lookup the group id string %d",(int)gid);
- ret = -EIO;
- goto cleanup;
- }
+ if (uid != -1) {
+ user = getUsername(uid);
+ if (NULL == user) {
+ ERROR("Could not lookup the user id string %d",(int)uid);
+ ret = -EIO;
+ goto cleanup;
+ }
+ }
+ if (gid != -1) {
+ group = getGroup(gid);
+ if (group == NULL) {
+ ERROR("Could not lookup the group id string %d",(int)gid);
+ ret = -EIO;
+ goto cleanup;
+ }
+ }
userFS = doConnectAsUser(dfs->nn_uri, dfs->nn_port);
if (userFS == NULL) {
@@ -62,8 +69,9 @@ int dfs_chown(const char *path, uid_t ui
}
if (hdfsChown(userFS, path, user, group)) {
- ERROR("Could not chown %s to %d:%d", path, (int)uid, gid);
- ret = (errno > 0) ? -errno : -EIO;
+ ret = errno;
+ ERROR("Could not chown %s to %d:%d: error %d", path, (int)uid, gid, ret);
+ ret = (ret > 0) ? -ret : -EIO;
goto cleanup;
}
Modified: hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/native/libhdfs/hdfs.c
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/native/libhdfs/hdfs.c?rev=1363467&r1=1363466&r2=1363467&view=diff
==============================================================================
--- hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/native/libhdfs/hdfs.c (original)
+++ hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/native/libhdfs/hdfs.c Thu Jul 19 18:38:13 2012
@@ -1811,9 +1811,7 @@ int hdfsChown(hdfsFS fs, const char* pat
}
if (owner == NULL && group == NULL) {
- fprintf(stderr, "Both owner and group cannot be null in chown");
- errno = EINVAL;
- return -1;
+ return 0;
}
jobject jFS = (jobject)fs;
@@ -1823,8 +1821,8 @@ int hdfsChown(hdfsFS fs, const char* pat
return -1;
}
- jstring jOwnerString = (*env)->NewStringUTF(env, owner);
- jstring jGroupString = (*env)->NewStringUTF(env, group);
+ jstring jOwnerString = owner ? (*env)->NewStringUTF(env, owner) : NULL;
+ jstring jGroupString = group ? (*env)->NewStringUTF(env, group) : NULL;
//Create the directory
int ret = 0;
Modified: hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/native/libhdfs/hdfs.h
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/native/libhdfs/hdfs.h?rev=1363467&r1=1363466&r2=1363467&view=diff
==============================================================================
--- hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/native/libhdfs/hdfs.h (original)
+++ hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/native/libhdfs/hdfs.h Thu Jul 19 18:38:13 2012
@@ -556,14 +556,16 @@ extern "C" {
tOffset hdfsGetUsed(hdfsFS fs);
/**
- * hdfsChown
- * @param fs The configured filesystem handle.
- * @param path the path to the file or directory
- * @param owner this is a string in Hadoop land. Set to null or "" if only setting group
- * @param group this is a string in Hadoop land. Set to null or "" if only setting user
- * @return 0 on success else -1
+ * Change the user and/or group of a file or directory.
+ *
+ * @param fs The configured filesystem handle.
+ * @param path the path to the file or directory
+ * @param owner User string. Set to NULL for 'no change'
+ * @param group Group string. Set to NULL for 'no change'
+ * @return 0 on success else -1
*/
- int hdfsChown(hdfsFS fs, const char* path, const char *owner, const char *group);
+ int hdfsChown(hdfsFS fs, const char* path, const char *owner,
+ const char *group);
/**
* hdfsChmod
Modified: hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/native/libhdfs/test_libhdfs_threaded.c
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/native/libhdfs/test_libhdfs_threaded.c?rev=1363467&r1=1363466&r2=1363467&view=diff
==============================================================================
--- hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/native/libhdfs/test_libhdfs_threaded.c (original)
+++ hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/native/libhdfs/test_libhdfs_threaded.c Thu Jul 19 18:38:13 2012
@@ -67,6 +67,7 @@ static int doTestHdfsOperations(struct t
char prefix[256], tmp[256];
hdfsFile file;
int ret, expected;
+ hdfsFileInfo *fileInfo;
snprintf(prefix, sizeof(prefix), "/tlhData%04d", ti->threadIdx);
@@ -120,6 +121,28 @@ static int doTestHdfsOperations(struct t
// TODO: Non-recursive delete should fail?
//EXPECT_NONZERO(hdfsDelete(fs, prefix, 0));
+ snprintf(tmp, sizeof(tmp), "%s/file", prefix);
+ EXPECT_ZERO(hdfsChown(fs, tmp, NULL, NULL));
+ EXPECT_ZERO(hdfsChown(fs, tmp, NULL, "doop"));
+ fileInfo = hdfsGetPathInfo(fs, tmp);
+ EXPECT_NONNULL(fileInfo);
+ EXPECT_ZERO(strcmp("doop", fileInfo->mGroup));
+ hdfsFreeFileInfo(fileInfo, 1);
+
+ EXPECT_ZERO(hdfsChown(fs, tmp, "ha", "doop2"));
+ fileInfo = hdfsGetPathInfo(fs, tmp);
+ EXPECT_NONNULL(fileInfo);
+ EXPECT_ZERO(strcmp("ha", fileInfo->mOwner));
+ EXPECT_ZERO(strcmp("doop2", fileInfo->mGroup));
+ hdfsFreeFileInfo(fileInfo, 1);
+
+ EXPECT_ZERO(hdfsChown(fs, tmp, "ha2", NULL));
+ fileInfo = hdfsGetPathInfo(fs, tmp);
+ EXPECT_NONNULL(fileInfo);
+ EXPECT_ZERO(strcmp("ha2", fileInfo->mOwner));
+ EXPECT_ZERO(strcmp("doop2", fileInfo->mGroup));
+ hdfsFreeFileInfo(fileInfo, 1);
+
EXPECT_ZERO(hdfsDelete(fs, prefix, 1));
return 0;
}
Propchange: hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/datanode/
------------------------------------------------------------------------------
Merged /hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/datanode:r1363466
Propchange: hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/hdfs/
------------------------------------------------------------------------------
Merged /hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/hdfs:r1363466
Propchange: hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/secondary/
------------------------------------------------------------------------------
Merged /hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/webapps/secondary:r1363466
Propchange: hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/test/hdfs/
------------------------------------------------------------------------------
Merged /hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/src/test/hdfs:r1363466