You are viewing a plain text version of this content. The canonical link for it is here.
Posted to hdfs-dev@hadoop.apache.org by "matsusaka kentaro (JIRA)" <ji...@apache.org> on 2010/06/18 09:28:23 UTC

[jira] Created: (HDFS-1249) with fuse-dfs, chown which only has owner (or only group) argument fails with Input/output error.

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.2, 0.20.1
         Environment: x86 linux (ubuntu 10.04)
            Reporter: matsusaka kentaro
            Priority: Minor


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.