2012-04-20 16 views
12

Do monitorowania operacji mojej aplikacji, szukam czegoś podobnego do „walidacji połączenie SQL” powszechnie stosowanych zapytańKontrola stanu połączenia Cassandry (przy użyciu hektora)?

wybierz 1;

w Cassandra, przy użyciu sterownika Hector. Próbowałem takich rzeczy jak spojrzenie na Cluster.getKnownPoolHosts() i .getConnectionManager(). GetActivePools(). Wygląda jednak na to, że ich status nie jest stale aktualizowany, tylko gdy faktycznie próbuję uzyskać dostęp do Cassandry za pomocą zapytania.

Chciałbym, aby moja kontrola stanu była niezależna od jakichkolwiek kluczowych obszarów lub systemów CF użytkowników, które muszą istnieć, więc po prostu "fikcyjne" zapytanie wydaje się trudne (wbrew czemu?). I oczywiście nie powinno to zająć dużo pamięci ani generować żadnego znaczącego obciążenia.

Czy mogę zmusić Hectora w jakiś sposób do zaktualizowania statusu puli połączeń bez uruchamiania prawdziwego zapytania?

(BTW: CQL nawet nie akceptują „SELECT 1” jako ważnego zapytania.)

+0

znalazłeś odpowiedź na to pytanie? Próbuję zrobić to samo –

+0

Tak, znalazłem podejście, które wydaje się działać dobrze dla mnie. Zobacz odpowiedź poniżej. – HansMari

Odpowiedz

4

Rozwiązanie obecnie używam, a co wydaje się być najbardziej wytrzymałe tak daleko (testowane z Cassandrą 1.1 i 1.2) jest proste zapytanie na „system”:

Query<String> query = Query.selectQuery("*", "system", null, 1, consistencyLevel, StringSerializer.get());

to nie jest dokładnie to, co chciałem, ponieważ jest to „prawdziwy” kwerendy, ale z drugiej strony nie daje żadnych fałszywych alarmów.

+0

Mogę się mylić, ale myślę, że to podejście zawsze będzie wywoływać ten sam węzeł - w zależności od consistencyLevel będziesz zawsze wywoływał 1, Q lub wszystkie węzły twojego RF. Jeśli chcesz monitorować, czy połączenie jest aktywne, możesz to zrobić, jeśli chcesz monitorować status dzwonka, użyłbym nodetool wewnątrz twojej aplikacji java. –

+1

Jest to sprawdzanie połączenia, a nie kontrola działania klastra Cassandra. – HansMari

+0

@HansMari, Jak właściwie to robisz? Czy sprawdzasz niektóre właściwości zapytania? – CAMOBAP

13

Z CQL3 używam następujące zapytanie:

SELECT now() FROM system.local; 

Byłoby miło, aby pozbyć klauzuli FROM altogther aby ten ogólny, w przypadku, gdy użytkownik nie ma dostępu do system keyspace lub local rodzina kolumn z jakiegoś powodu. Ale tak jak w przypadku innych odpowiedzi, przynajmniej nie powinno to dawać fałszywych trafień.

+0

Jak faktycznie to robisz? Czy przechwytujesz wyjątek lub badasz obiekt QuerryResult? – CAMOBAP

+0

Tak, tylko sprawdzanie, czy ten nie rzuca wyjątku. Można również sprawdzić, czy zapytanie rzeczywiście zwraca coś, ale uznałem to za niepotrzebne. –

Powiązane problemy