[
https://issues.apache.org/jira/browse/HDFS-1249?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
matsusaka kentaro updated HDFS-1249:
------------------------------------
Attachment: HDFS1249.1
I think it should behave like this attached diff.
> with fuse-dfs, chown which only has owner (or only group) argument fails with
> Input/output error.
> -------------------------------------------------------------------------------------------------
>
> Key: HDFS-1249
> URL: https://issues.apache.org/jira/browse/HDFS-1249
> Project: Hadoop HDFS
> Issue Type: Bug
> Components: contrib/fuse-dfs
> Affects Versions: 0.20.1, 0.20.2
> Environment: x86 linux (ubuntu 10.04)
> Reporter: matsusaka kentaro
> Priority: Minor
> Attachments: HDFS1249.1
>
>
> 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) {
> syslog(LOG_ERR,"Could not lookup the user id string %d\n",(int)uid);
> fprintf(stderr, "could not lookup userid %d\n", (int)uid);
> ret = -EIO;
> }
> if (0 == ret) {
> group = getGroup(gid);
> if (group == NULL) {
> syslog(LOG_ERR,"Could not lookup the group id string %d\n",(int)gid);
> fprintf(stderr, "could not lookup group %d\n", (int)gid);
> ret = -EIO;
> }
> }
> ...
> ----------
> but actually, hdfsChown() in src/c++/libhdfs/hdfs.c has this
> ----------
> ...
> if (owner == NULL && group == NULL) {
> fprintf(stderr, "Both owner and group cannot be null in chown");
> errno = EINVAL;
> return -1;
> }
> ...
> ----------
> 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.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.