[ 
https://issues.apache.org/jira/browse/HADOOP-5438?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12689002#action_12689002
 ] 

He Yongqiang commented on HADOOP-5438:
--------------------------------------

Is an eumn like this ok?
{code}
static enum CreateFlag {
        CREATE, OVERWRITE, APPEND, TUNCATE;
 }
{code}

And the change Filesytem.create to:
{code}
      public FSDataOutputStream create(Path f, FsPermission permission,
                        boolean overwrite, int bufferSize, short replication,
                        long blockSize, Progressable progress) throws 
IOException {

                return this.create(f, permission, overwrite ? 
CreateFlag.OVERWRITE
                                : CreateFlag.CREATE, bufferSize, replication, 
blockSize,
                                progress);
        }

        public abstract FSDataOutputStream create(Path f, FsPermission 
permission,
                        CreateFlag flag, int bufferSize, short replication, 
long blockSize,
                        Progressable progress) throws IOException ;
{code}

> Merge FileSystem.create and FileSystem.append
> ---------------------------------------------
>
>                 Key: HADOOP-5438
>                 URL: https://issues.apache.org/jira/browse/HADOOP-5438
>             Project: Hadoop Core
>          Issue Type: Improvement
>            Reporter: He Yongqiang
>
> Currently, when a user wants to modify a file, the user first calls exists() 
> to know if this file is already there. And then uses create() or append() 
> according to whether the file exists or not.
> the code looks like:
> {code}
> FSDataOutputStream out_1 = null;
> if (fs.exists(path_1))
>    out_1 = fs.append(path_1);
> else
>    out_1 = fs.create(path_1);
> {code}
> . On the performace side,It involes two RPCs. On the easy-of-use side, it is 
> not very convient in contrast to the traditional open interface.
> It will more complicate if there is a overwrite parameter specified. I donot 
> know whether there is a bug about 'overwrite' in 0.19, some times it takes a 
> long time for overwrite creates to reture. So i make the write file code with 
> overwrite param works like:
> {code}
> boolean exists = fs.exists(name);
> if (overwrite) {
>     if (exists)
>        fs.delete(name, true);
>      this.out = fs.create(name, overwrite, bufferSize, replication,
>                                   blockSize, progress);
>      this.currentRowID = 0;
>  } else {
>    if (!exists)
>       this.out = fs.create(name, overwrite, bufferSize,
>                                       replication, blockSize, progress);
>    else
>       this.out = fs.append(name, bufferSize, progress);
> {code}
> Some code statements there are really redundant and not needed, especialy 
> with the delete(). But without deleting first, the overwrite takes a long 
> time to reture.
> BTW, i will create another issue about the overwrite problem. If it is not a 
> bug at all or a duplicate, someone please close it.

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

Reply via email to