hbase-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Elliott Clark (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (HBASE-7515) Store.loadStoreFiles should close opened files if there's an exception
Date Tue, 08 Jan 2013 23:42:12 GMT

    [ 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:
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 {

  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>() {
        public String call() throws Exception {
          String test = "STOREFILE CLOSED";
          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;

    for (Future<String> f: futureList) {
      try {
        String s = f.get();
        System.out.println("Got " + s);
      } catch (Exception e) {
        System.out.println("Caught error");


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

View raw message