[
https://issues.apache.org/jira/browse/HBASE-7515?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13547419#comment-13547419
]
Elliott Clark commented on HBASE-7515:
--------------------------------------
How can the callable ever return something when it's thrown an exception?
Try the example below:
{code}
package org.apache.hadoop.hbase.regionserver;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.CompletionService;
import java.util.concurrent.ExecutorCompletionService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class TestFailCreate {
@Test
public void testFailCallable() throws Exception {
CompletionService<String> completionService =
new ExecutorCompletionService<String>(Executors.newCachedThreadPool());
List<Future<String>> futureList = new ArrayList<Future<String>>();
for (int i = 0; i < 10; i ++ ) {
Future<String> f = completionService.submit(new Callable<String>() {
@Override
public String call() throws Exception {
String test = "STOREFILE CLOSED";
Thread.sleep(100);
test = "STORE FILE START OPEN";
if (true == true) {
test = "STOREFILE HALF OPEN";
//This is simulating opening the store file. If somewhere in
opening up the store
// file some exception is thrown. The storefile is left in a half
// open state and there is no reference to it.
throw new Exception("TEST EXCEPTION");
// test = "STORE FILE FULLY OPEN"; // This line is never reached.
}
System.out.println("GOT TO THE RETURN LINE");
return test;
}
});
futureList.add(f);
}
for (Future<String> f: futureList) {
try {
String s = f.get();
System.out.println("Got " + s);
} catch (Exception e) {
System.out.println("Caught error");
}
}
}
}
{code}
Notice how "GOT TO THE RETURN LINE" is never printed out.
> Store.loadStoreFiles should close opened files if there's an exception
> ----------------------------------------------------------------------
>
> Key: HBASE-7515
> URL: https://issues.apache.org/jira/browse/HBASE-7515
> Project: HBase
> Issue Type: Bug
> Affects Versions: 0.94.3
> Reporter: Jean-Daniel Cryans
> Assignee: Ted Yu
> Fix For: 0.96.0, 0.94.5
>
> Attachments: 7515.txt, 7515-v2.txt, 7515-v3.txt
>
>
> Related to HBASE-7513. If a RS is able to open a few store files in
> {{Store.loadStoreFiles}} but one of them fails like in 7513, the opened files
> won't be closed and file descriptors will remain in a CLOSED_WAIT state.
> The situation we encountered is that over the weekend one region was bounced
> between >100 region servers and eventually they all started dying on "Too
> many open files".
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira