You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-dev@hadoop.apache.org by "Pete Wyckoff (JIRA)" <ji...@apache.org> on 2008/09/08 06:04:44 UTC

[jira] Created: (HADOOP-4110) fuse-dfs implement posix truncate functionality

fuse-dfs implement posix truncate functionality
-----------------------------------------------

                 Key: HADOOP-4110
                 URL: https://issues.apache.org/jira/browse/HADOOP-4110
             Project: Hadoop Core
          Issue Type: New Feature
          Components: contrib/fuse-dfs
            Reporter: Pete Wyckoff


dfs_truncate(path, bytes);


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Commented: (HADOOP-4110) fuse-dfs implement posix truncate functionality

Posted by "Pete Wyckoff (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/HADOOP-4110?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12636779#action_12636779 ] 

Pete Wyckoff commented on HADOOP-4110:
--------------------------------------

since this is non-trivial to fully implement in hdfs, I am thinking of just implementing it for the case where bytes == 0. This is the common use case for: cp foo bar where bar already exists. truncate(bar, 0) is called and then foo is copied.  Getting the user/permissions right would need to do a stat on the file, get the user and groups and permissions and then do a delete, then the create and then chown and chmod. the code would look something like:
{code}
static int dfs_truncate(const char *path, off_t size)                                                                                                                
{                                                                                                                                                                    
  if (size != 0) {                                                                                                                                                   
    return -ENOTSUP;                                                                                                                                                 
  }                                                                                                                                                                  
                                                                                                                                                                     
  dfs_context *dfs = (dfs_context*)fuse_get_context()->private_data;                                                                                                 
                                                                                                                                                                     
  int ret = dfs_unlink(path);                                                                                                                                        
  if (ret != 0) {                                                                                                                                                    
    return ret;                                                                                                                                                      
  }                                                                                                                                                                  
                                                                                                                                                                     
  hdfsFS userFS;                                                                                                                                                     
  // if not connected, try to connect and fail out if we can't.                                                                                                      
  if ((userFS = doConnectAsUser(dfs->nn_hostname,dfs->nn_port)) == NULL) {                                                                                           
    syslog(LOG_ERR, "ERROR: could not connect to dfs %s:%d\n", __FILE__, __LINE__);                                                                                  
    return -EIO;                                                                                                                                                     
  }                                                                                                                                                                  
                                                                                                                                                                     
  hdfsFile file;                                                                                                                                                     
  if((file = (hdfsFile)hdfsOpenFile(userFS, path, O_WRONLY | O_CREAT,  0, 3, 0)) == NULL) {                                                                                       
    syslog(LOG_ERR, "ERROR: could not connect open file %s:%d\n", __FILE__, __LINE__);                                                                               
    return -EIO;                                                                                                                                                     
  }                                                                                                                                                                  
                                                                                                                                                                     
  if(hdfsCloseFile(userFS, file) != 0) {                                                                                                                             
    syslog(LOG_ERR, "ERROR: could not connect close file %s:%d\n", __FILE__, __LINE__);                                                                              
    return -EIO;                                                                                                                                                     
  }                                                                                                                                                                  
  return 0;                                                                                                                                                          
}                                                                                                                                                                    
{code}

> fuse-dfs implement posix truncate functionality
> -----------------------------------------------
>
>                 Key: HADOOP-4110
>                 URL: https://issues.apache.org/jira/browse/HADOOP-4110
>             Project: Hadoop Core
>          Issue Type: New Feature
>          Components: contrib/fuse-dfs
>            Reporter: Pete Wyckoff
>
> dfs_truncate(path, bytes);

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.