2012-04-03 3 views
5

Всякий раз, когда я использую любую функцию Гектор API для доступа к базе данных Cassandra мой, я получаю исключение:Проблема с Гектором API и базы данных Cassandra: Незарегистрированные исключение

me.prettyprint.hector.api.exceptions.HectorException: Все бассейны хозяина снижены. Бремя повторной подачи выдается клиенту.

У моего сервера есть база данных Cassandra, работающая в фоновом режиме.

Я прочитал об исключении и фактически не документирован. Похоже, что исключение связано с проблемами подключения.

Как исправить это?

ответ

3

Вы получите эту ошибку, если клиент Hector не сможет подключиться к Cassandra. Для этого может быть ряд причин:

  • Убедитесь, что параметры соединения в вашем коде (ip/host/port) настроены правильно.
  • Удостоверьтесь, что вы можете подключиться к нему с помощью cassandra-cli удаленно - это может быть проблема с сетью.
  • Попробуйте ввести здесь свой код подключения - возможно, там есть проблема.
0

Я получаю эту ошибку случайно из-за проблем с сетевым подключением, но повторная попытка несколько раз обычно исправляет ее. Вот код, я использую, чтобы повторить попытку Hector функции API:

/** An interface where inside the execute() method I call Hector */ 
public interface Retriable<T> { 
    T execute(); 
} 

/** 
* Executes operation and retries N times in case of an exception 
* @param retriable 
* @param maxRetries 
* @param <T> 
* @return 
*/ 
public static <T> T executeWithRetry(Retriable<T> retriable, int maxRetries) { 
    T result; 
    int retries = 0; 
    long sleepSec = 1; 
    // retry in case of an exception: 
    while (true) { 
     try { 
      result = retriable.execute(); 
      break; 
     } catch (Exception e) { 
      if (retries == maxRetries) { 
       LOG.error("Exception occurred. Reached max retries.", e); 
       throw e; 
      } 
      retries++; 
      LOG.error(String.format("Exception occurred. Retrying in %d seconds - #%d", sleepSec, retries), e); 
      try { 
       Thread.sleep(sleepSec * 1000); 
       // increase sleepSec exponentially: 
       sleepSec *= 2; 
      } catch (InterruptedException e1) { 
       e1.printStackTrace(); 
      } 
     } 
    } 
    return result; 
} 

И пример того, как использовать его:

ColumnFamilyResult<String, String> columns = executeWithRetry(new Retriable<ColumnFamilyResult<String, String>>() { 
     @Override 
     public ColumnFamilyResult<String, String> execute() { 
      return template.queryColumns(row.getKey()); 
     } 
    }); 
0

я получаю ту же ошибку с Кассандры блока 2.0.2.1 но С понижением версия до 2.0.2.0 решена проблема. Это странно, но я использовал 2.0.2.0 сейчас с некоторыми дополнительными SBT зависимостей

  "com.datastax.cassandra" % "cassandra-driver-core" % "2.0.1", 
     "org.cassandraunit" % "cassandra-unit" % "2.0.2.0" withSources() withJavadoc()