2017-03-14 4 views
1

Der Datastax C/C++ - Treiber verfügt über eine Blacklist-Filterfunktionalität als Teil seiner Load-Balancing-Steuerelemente.Datastax Cassandra C/C++ - Treiber cass_cluster_set_blacklist_filtering-Funktionalität

https://docs.datastax.com/en/developer/cpp-driver/2.5/topics/configuration/

mich korrigieren, wenn ich etwas fehlt, aber mein Verständnis ist, dass ein CQL Client zu der schwarzen Liste Hosts keine Verbindung herstellen können.

Ich bin mit C/C++ Treiber v2.5 und dem unten stehenden Codeblock und zu versuchen, zu einem Cluster mit verbinden:

CassCluster* cluster = cass_cluster_new(); 
CassSession* session = cass_session_new(); 
const char* hosts = "192.168.57.101"; 
cass_cluster_set_contact_points(cluster, hosts); 
cass_cluster_set_blacklist_filtering(cluster, hosts); 
CassFuture* connect_future = cass_session_connect(session, cluster); 

In diesem Codeblock den Host, der an der CQL Client versucht, eine Verbindung ist als schwarze Liste gesetzt. Der CQL-Client scheint jedoch eine Verbindung mit diesem Host herzustellen und alle Abfragen auszuführen. Stimmt etwas mit dem obigen Codeblock nicht? Wenn nicht, ist dies das erwartete Verhalten? Verhält es sich anders, weil es ein Multinode-Cluster ist und eine Verbindung zu den anderen Peers herstellt?

Jede Hilfe wird geschätzt.

Danke im Voraus

Antwort

0

Da Sie sind nur ein Kontaktpunkt liefern, dass die IP-Adresse den Steueranschluss in den Cluster zu schaffen verwendet wird. Sobald diese Steuerverbindung hergestellt ist und die Peers-Tabelle gelesen wird, um andere im Cluster verfügbare Knoten zu bestimmen, werden Verbindungen zu diesen anderen Knoten hergestellt. An diesem Punkt werden alle Anfragen an diese anderen Knoten weitergeleitet und nicht an Ihren Kontaktpunkt für die Erst-/Blacklist. Die Verbindung zum ursprünglichen Kontaktpunkt bleibt jedoch bestehen, da es sich um die Steuerverbindung zum Cluster handelt.

Um einen besseren Einblick in die Vorgänge im Treiber zu erhalten, können Sie die Protokollierung des Treibers aktivieren. Hier ist ein Beispiel Protokollierung über die Konsole zu aktivieren:

void on_log(const CassLogMessage* message, void* data) { 
    fprintf(stderr, "%u.%03u [%s] (%s:%d:%s): %s\n", 
    (unsigned int) (message->time_ms/1000), 
    (unsigned int) (message->time_ms % 1000), 
    cass_log_level_string(message->severity), 
    message->file, message->line, message->function, 
    message->message); 
} 

/* Log configuration *MUST* be done before any other driver call */ 
cass_log_set_level(CASS_LOG_TRACE); 
cass_log_set_callback(on_log, NULL); 

Um die zusätzliche Verbindung auf einem Knoten zu reduzieren, die Sie kann die schwarze Liste gesetzt werden eine andere Kontaktpunkt in den Cluster liefern, die nicht der gleiche wie der Knoten (oder Knoten), die auf der schwarzen Liste stehen.

+0

Vielen Dank für den Vorschlag. Die Blacklist-Richtlinie wird vom C/C++ - Treiber unterstützt. Es gibt auch die Whitelist-Richtlinie, die vom C/C++ - Treiber und anderen Sprachentreibern unterstützt wird. Mit der Whitelist-Richtlinie des C/C++ - Treibers stellt der Client eine Verbindung zu einem Knoten her, auch wenn er nicht in der Whitelist enthalten ist, aber alle Daten auf den Whitelist-Hosts speichert (funktioniert genauso wie die Blacklist). Mit Whitelist-Richtlinie des Python-Treibers stellt der Client keine Verbindung zu Knoten her, die nicht in der Whitelist enthalten sind. Also nehme ich an, dass Datenstaxtreiber verschiedener Sprachen unterschiedliche Implementierungen der Whitelist-Richtlinie haben können. –

+0

@MariosBraho Sie haben Recht, der Python-Treiber respektiert die Whitelist-Hosts und stellt keine Verbindung zum Host her. Ich habe ein Ticket auf dem DataStax C/C++ Jira Board erstellt, wenn Sie es verfolgen möchten; https://datastax-oss.atlassian.net/browse/CPP-447. – Fero

Verwandte Themen