2012-04-03 27 views
5

Bất cứ khi nào tôi sử dụng bất kỳ chức năng Hector API để truy cập vào cơ sở dữ liệu Cassandra của tôi, tôi nhận được một ngoại lệ:Issue với Hector API và cơ sở dữ liệu Cassandra: khống và ngoại lệ

me.prettyprint.hector.api.exceptions.HectorException: Tất cả hồ chủ đánh dấu xuống. Thử lại gánh nặng được đẩy ra cho khách hàng.

Máy chủ của tôi không có cơ sở dữ liệu Cassandra chạy ẩn.

Tôi đã đọc về ngoại lệ và nó có hiệu quả không có giấy tờ. Dường như ngoại lệ là do sự cố kết nối.

Làm cách nào để khắc phục sự cố?

Trả lời

3

Bạn sẽ gặp lỗi đó nếu ứng dụng khách Hector không thể kết nối với Cassandra. Có thể có một số lý do cho việc này và những điều cần thử:

  • Đảm bảo rằng thuộc tính kết nối trong mã của bạn (ip/máy chủ/cổng) được định cấu hình chính xác.
  • Hãy chắc chắn rằng bạn có thể kết nối với nó bằng cassandra-cli từ xa - nó có thể là một vấn đề về mạng.
  • Thử đăng mã kết nối của bạn ở đây - có thể có sự cố ở đó.
0

Tôi gặp lỗi này ngẫu nhiên do sự cố kết nối mạng nhưng việc thử lại nhiều lần thường khắc phục được sự cố. Dưới đây là đoạn code tôi sử dụng để thử chức năng API Hector:

/** 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; 
} 

Và một ví dụ về cách sử dụng nó:

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

tôi đã nhận được báo lỗi tương tự với cassandra đơn vị 2.0.2.1 nhưng Hạ cấp phiên bản thành 2.0.2.0 giải quyết được sự cố. Đó là kỳ lạ nhưng tôi sử dụng 2.0.2.0 cho bây giờ với một số bổ sung SBT phụ thuộc

  "com.datastax.cassandra" % "cassandra-driver-core" % "2.0.1", 
     "org.cassandraunit" % "cassandra-unit" % "2.0.2.0" withSources() withJavadoc() 
Các vấn đề liên quan