[ 
https://issues.apache.org/jira/browse/HADOOP-997?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12472873
 ] 

Tom White commented on HADOOP-997:
----------------------------------

> + Is it true that the Jets3tFileSystemStore#initialize runs after the retry 
> proxy has been set up so initialization will be retried if an Exception?  Is 
> this intentional?  Perhaps initialization should be outside the purview of 
> retry.

This was not intentional. I think initialization should probably not
be retried currently (in the future I might be worth thinking through
the initialization cases that need retrying).
It looks like this might be the cause of the exception you found.

> + Minor comment: In version 2 of the retry mechanism, you'd be able to narrow 
> retries to happen only for certain exception types: e.g. for IOExceptions 
> only rather than for Exception as its currently written.

S3 should only retry for IOExceptions - I'll fix this.

> + In S3OutputStream#newBackupFile, you replace File createTempFile with your 
> own tmp file name fabricator.  Any reason why you didn't stay using 
> createTempFile, just use the override  with signature instead:  
> http://java.sun.com/j2se/1.5.0/docs/api/java/io/File.html#createTempFile(java.lang.String,%20java.lang.String,%20java.io.File)?
>  (You do this in a few places in this patch).

I did this for consistency with HDFS and also because of a recent
issue with creating files in /tmp. I agree that createTempFile with
the signature you suggest is the way to go. I'll change it.

> + In S3FileSystem.java#createDefaultStore, should the retry params be exposed 
> as configurables? (I'm fine if the rejoinder is that this makes for too much 
> configuration).

Yes, this crossed my mind and I think we should have it. It also
occurred to me that with annotation driven retries (HADOOP-601) you
wouldn't be able to expose the parameters as configurables (as far as
I know).

> + On initialize, should Jets3tFileSystemStore clean up its tmp directory?  
> (If crash, deleteOnExit won't get a chance to run).

Possibly. Although the files should be deleted after transfer anyway.
The deleteOnExit was a backup, but you are right that it doesn't
always run.

> + If an IOException in retreiveBlock in Jets3tFileSystemStore, you do a 
> closeQuietly on the out stream.   Its followed by a finally that does 
> closeQuietly on both the in and out stream.  I don't follow whats going on 
> here.  Why not just leave all closing to the finally block?  (Suggest adding 
> a comment on why the special case handling of out stream in IOE block).

On failure I want to delete the file, but to do this I close the
stream first. I agree a better comment is needed.

Thanks for the detailed feedback. I'll look at making improvements
over the coming days.

> Implement S3 retry mechanism for failed block transfers
> -------------------------------------------------------
>
>                 Key: HADOOP-997
>                 URL: https://issues.apache.org/jira/browse/HADOOP-997
>             Project: Hadoop
>          Issue Type: Improvement
>          Components: fs
>    Affects Versions: 0.11.0
>            Reporter: Tom White
>         Assigned To: Tom White
>         Attachments: HADOOP-997.patch
>
>
> HADOOP-882 improves S3FileSystem so that when certain communications problems 
> with S3 occur the operation is retried. However, the retry mechanism cannot 
> handle a block transfer failure, since blocks may be very large and we don't 
> want to buffer them in memory. This improvement is to write a wrapper (using 
> java.lang.reflect.Proxy if possible - see discussion in HADOOP-882) that can 
> retry block transfers.

-- 
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