Datastax Cassandra C / C ++驱动程序cass_cluster_set_blacklist_filtering功能

时间:2017-03-14 12:45:18

标签: cassandra datastax

Datastax C / C ++驱动程序具有黑名单过滤功能,作为其负载平衡控件的一部分。

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

纠正我如果我遗漏了一些东西,但我的理解是CQL客户端无法连接到列入黑名单的主机。

我正在使用C / C ++驱动程序v2.5和以下代码块并尝试连接到多节点群集:

fas:: [Film] -> String
fas database = [title x | x <- database]

test.hs:55:27: error:
    • Couldn't match type ‘[Char]’ with ‘Char’
      Expected type: Char
        Actual type: String
    • In the expression: title x
      In the expression: [title x | x <- database]
      In an equation for ‘fas’:

          fas database = [title x | x <- database]

在此代码块中,CQL客户端尝试连接的主机将设置为黑名单。但是,CQL客户端似乎连接到此主机并执行任何查询。上面的代码块有问题吗?如果不是这样,这是预期的行为吗?它是否表现不同,因为它是一个多节点集群并与其他节点建立连接?

任何帮助将不胜感激。

提前谢谢

1 个答案:

答案 0 :(得分:0)

由于您只提供一个联系点,因此该IP地址用于建立与群集的控制连接。一旦建立了该控制连接并且读取了对等表以确定集群中可用的其他节点,则与那些其他节点建立连接。此时,所有查询都将路由到其他节点,而不是您的初始/黑名单联系点;但是,与初始接触点的连接将保持不变,因为它是到集群的控制连接。

为了更好地了解驱动程序内部的内容,您可以启用驱动程序中的日志记录。以下是通过控制台启用日志记录的示例:

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);

为了减少将被列入黑名单的节点上的额外连接,您可以为群集提供与将被列入黑名单的节点(或多个节点)不同的联系点。