2014-09-30 75 views
3

我在Java 7中使用com.datastax.cassandra cassandra-driver-core版本1.0.0連接到Apache Cassandra(版本1.2.12)。儘管1.2.12是我今天使用的版本,但該版本可能會發生變化,如果可能,我想知道如何以編程方式檢索Cassandra的版本(可能使用驅動程序,儘管我向其他人開放建議)。如何獲得Cassandra版本以編程方式

我發現Cluster.getMetadata()Cluster.getMetadata.getKeyspace()分別返回Metadata對象和KeyspaceMetadata對象,但那些都似乎有什麼方法將返回版本。

任何幫助表示讚賞

ANSWER

由於雙方米哈伊爾和布萊斯,我想出了答案。此方法返回Cassandra版本,如果羣集關閉,則返回「Offline」。我已經測試了這個代碼,它完美地工作。

private String getCassandraVersion() { 
    String[] cassandraServers = <insert your servers here>; 
    String keyspace = "system"; 
    Session session = null; 
    try { 
     Cluster cluster = Cluster.builder().addContactPoints(cassandraServers) 
       .build(); 
     session = cluster.connect(keyspace); 
     PreparedStatement ps = session.prepare("select release_version from system.local where key = 'local'"); 
     ResultSet result = session.execute(ps.bind()); 
     Row versionRow = result.one(); 
     if (versionRow != null) { 
      return versionRow.getString("release_version"); 
     } 
    } catch (Exception ex) { 
     _log.error("Failed to connect to '" + keyspace + "' keyspace!"); 
    } finally { 
     if(session != null) { 
      try { 
       session.shutdown(); 
      } catch (Exception ex) { 
       //NOP 
      } 
     } 
    } 
    return "Offline"; 
} 

再次感謝你們!

回答

3

您可以查詢從卡桑德拉的版本:select release_version from system.local where key = 'local';

3

除了米哈伊爾的非常簡潔的答案,我只想補充一點,你可以查詢release_version等一個節點知道自己從local列家族的重要項目在system密鑰空間:

cqlsh> use system; 
cqlsh:system> desc table local; 

CREATE TABLE local (
    key text, 
    bootstrapped text, 
    cluster_name text, 
    cql_version text, 
    data_center text, 
    gossip_generation int, 
    host_id uuid, 
    native_protocol_version text, 
    partitioner text, 
    rack text, 
    release_version text, 
    schema_version uuid, 
    thrift_version text, 
    tokens set<text>, 
    truncated_at map<uuid, blob>, 
    PRIMARY KEY ((key)) 
)... 

這列族應該只有一行,鍵入關閉的key='local'

欲瞭解更多信息,請檢查該文檔:The Data Dictionary in Cassandra 1.2

+0

你的回答是非常有益的,如果我能有顯着兩個答案是正確的,我會;然而,米哈伊爾擊敗了你,他的回答也非常有幫助,所以他得到了一個很大的綠色選中標記,不幸的是,你必須得到+1。儘管如此,再次感謝您的幫助! – 2014-09-30 21:12:03

相關問題