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

[EMAIL PROTECTED] commented on HADOOP-997:
------------------------------------------

I tried the patch and got this:

[EMAIL PROTECTED]:/mnt/hadoop-trunk$ ./bin/hadoop fs -fs s3://AWS_ID:[EMAIL 
PROTECTED] -put /mnt/search/searcher.dir/index-sorted /1998/20070207040835-1998
Exception in thread "main" java.lang.reflect.UndeclaredThrowableException
        at org.apache.hadoop.fs.s3.$Proxy0.initialize(Unknown Source)
        at org.apache.hadoop.fs.s3.S3FileSystem.initialize(S3FileSystem.java:63)
        at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:160)
        at org.apache.hadoop.fs.FileSystem.getNamed(FileSystem.java:119)
        at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:91)
        at org.apache.hadoop.fs.FsShell.init(FsShell.java:39)
        at org.apache.hadoop.fs.FsShell.run(FsShell.java:796)
        at org.apache.hadoop.util.ToolBase.doMain(ToolBase.java:189)
        at org.apache.hadoop.fs.FsShell.main(FsShell.java:895)
Caused by: java.lang.IllegalAccessException: Class 
org.apache.hadoop.io.retry.RetryInvocationHandler can not access a member of 
class org.apache.hadoop.fs.s3.FileSystemStore with modifiers "public abstract"
        at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:65)
        at java.lang.reflect.Method.invoke(Method.java:578)
        at 
org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:62)
        at 
org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:42)
        ... 9 more

Before the patch, the above command-line worked.

[EMAIL PROTECTED]:/mnt/hadoop-trunk$ svn info
...
Revision: 507114
...

Other comments on patch, 

+ The retry mechanism looks sweet.
+ 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.
+ 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.
+ 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).
+ 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).
+ On initialize, should Jets3tFileSystemStore clean up its tmp directory?  (If 
crash, deleteOnExit won't get a chance to 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).

Good stuff Tom.

> 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