Details
-
Bug
-
Status: Closed
-
Minor
-
Resolution: Fixed
-
0.20.1, 0.20.2
-
x86 linux (ubuntu 10.04)
-
Reviewed
Description
with fuse-dfs, chown which only has owner (or only group) argument fails with Input/output error.
----------
/mnt/hdfs/tmp# chown root file1
chown: changing ownership of `file1': Input/output error
/mnt/hdfs/tmp# chown root:root file1
/mnt/hdfs/tmp# chown :root file1
chown: changing group of `file1': Input/output error
----------
I think it should be treated as unchanged for missing part(owner or group) instead of returning an error.
I took fuse_dfs log and it is saying
----------
unique: 25, opcode: SETATTR (4), nodeid: 14, insize: 128
chown /tmp/file1 0 4294967295
could not lookup group -1
unique: 25, error: -5 (Input/output error), outsize: 16
unique: 26, opcode: SETATTR (4), nodeid: 14, insize: 128
chown /tmp/file1 0 0
getattr /tmp/file1
unique: 26, success, outsize: 120
unique: 27, opcode: SETATTR (4), nodeid: 14, insize: 128
chown /tmp/file1 4294967295 0
could not lookup userid -1
unique: 27, error: -5 (Input/output error), outsize: 16
----------
therefore this should happen because dfs_chown() in src/contrib/fuse-dfs/src/fuse_impls_chown.c has following
----------
...
user = getUsername(uid);
if (NULL == user)
if (0 == ret) {
group = getGroup(gid);
if (group == NULL)
}
...
----------
but actually, hdfsChown() in src/c++/libhdfs/hdfs.c has this
----------
...
if (owner == NULL && group == NULL)
...
----------
and also, setOwner seems allowing NULL
----------
username - If it is null, the original username remains unchanged.
groupname - If it is null, the original groupname remains unchanged.
----------
according to the api document.
therefore, I think fuse_impls_chown.c should not treat only user(or only group) lookup fail as an error.