2.3.12 Ndb_cluster_connection 类

本节提供有关 Ndb_cluster_connection该类的信息,该类模拟管理服务器 ( ndb_mgmd ) 与一组数据节点的连接。

Ndb_cluster_connection 类概述

家长班

没有任何

儿童班

没有任何

描述

NDB 应用程序应该从创建单个Ndb_cluster_connection对象开始,并且通常使用单个 Ndb_cluster_connection. 当 connect() 调用此对象的方法时,应用程序连接到集群管理服务器。通过使用该 wait_until_ready() 方法,可以等待连接到达一个或多个数据节点。

的实例Ndb_cluster_connection用于创建Ndb 对象。在 NDB 7.3.8 之前,可以删除 Ndb_cluster_connection用于创建给定实例的,Ndb而无需先删除依赖Ndb对象。(漏洞#19999242)

方法

下表列出了该类的公共方法以及每个方法的用途或用途:

表 2.32 Ndb_cluster_connection 类方法和说明

姓名 描述
Ndb_cluster_connection() 构造函数;创建与数据节点集群的连接。
connect() 连接到集群管理服务器。
get_auto_reconnect() 使用此获取 API 节点的自动重新连接设置 Ndb_cluster_connection
get_latest_error() 最近的连接尝试是否成功。
get_latest_error_msg() 如果最近的连接尝试失败,请提供原因。
get_max_adaptive_send_time() 在自适应发送强制发送所有未决信号之前超时。
get_num_recv_threads() 获取接收线程数。
get_next_ndb_object() 用于遍历多个Ndb 对象。
get_recv_thread_activation_threshold() 获取绑定接收线程的激活级别。
get_system_name() 获取集群的系统名称。
lock_ndb_objects() 禁止创建新Ndb 对象。
set_auto_reconnect() 使用此启用或禁用 API 节点的自动重新连接 Ndb_cluster_connection
set_data_node_neighbour() 为最佳事务协调器放置设置邻居节点
set_max_adaptive_send_time() 将超时设置为在自适应发送强制发送所有未决信号之前过去。
set_name() 提供连接的名称
set_num_recv_threads() 设置要绑定的接收线程数。
set_recv_thread_cpu() 设置一个或多个 CPU 来绑定接收线程。
set_optimized_node_selection() 用于控制节点选择行为。
set_service_uri() ndbinfo.processes 在表中设置用于发布的 URI
set_timeout() 设置连接超时
unlock_ndb_objects() 允许创建新Ndb 对象。
unset_recv_thread_cpu() 取消设置接收线程与一个或多个 CPU 的绑定。
wait_until_ready() 等到与一个或多个数据节点的连接成功。

Ndb_cluster_connection 类构造函数

描述

此方法创建到 NDB Cluster 的连接,即到数据节点的集群。此方法返回的对象是实例化 Ndb对象所必需的。因此,每个 NDB API 应用程序都需要使用 Ndb_cluster_connection.

签名

Ndb_cluster_connection有两个构造函数。其中第一个显示在这里:

Ndb_cluster_connection
    (
      const char* connection_string = 0
    )

除了连接字符串参数之外,第二个构造函数还采用节点 ID。它的签名和参数显示在这里:

Ndb_cluster_connection
    (
      const char* connection_string,
      int force_api_nodeid
    )
参数

构造函数的第一个版本需要一个 connection_string参数,指向管理服务器的位置。

构造函数的第二个版本采用两个参数,a 和此 API 节点要使用connection_string的节点 ID ( )。force_api_nodeid此节点 ID 覆盖connection_string 参数中设置的任何节点 ID 值。

返回值

的实例Ndb_cluster_connection

Ndb_cluster_connection::connect()

描述

此方法连接到集群管理服务器。

签名
int connect
    (
      int retries = 30,
      int delay   = 1,
      int verbose = 0
    )
参数

此方法采用三个参数,所有参数都是可选的:

  • retries指定失败时重试连接的次数。默认值为 30。

    0意味着在失败的情况下不会进行额外的连接尝试;使用负值retries 会导致无限期地重复连接尝试。

  • 表示重新连接尝试之间的delay秒数;默认是1第二个。

  • verbose指示该方法是否应输出其进度报告,并 1导致启用此报告;默认值为0(禁用报告)。

返回值

此方法返回一个int,它可以具有以下 3 个值之一:

  • 0:连接尝试成功。

  • 1:表示可恢复错误。

  • -1:表示不可恢复的错误。

Ndb_cluster_connection::get_auto_reconnect()

描述

此方法检索给定 的当前 AutoReconnect设置 Ndb_cluster_connection。有关更多详细信息,请参阅 Ndb_cluster_connection::set_auto_reconnect()

签名
int get_auto_reconnect
    (
      void
    )
参数

没有

返回值

整数值01,对应 AutoReconnect于对此连接有效的当前设置。0 强制 API 节点使用到集群的新连接,同时1允许 API 节点重用现有连接。

Ndb_cluster_connection::get_latest_error()

描述

此方法可用于确定 this 最近的 connect() 尝试 是否Ndb_cluster_connection 成功。如果连接成功, get_latest_error()返回 0;否则,它返回 1。如果连接尝试失败,则使用 Ndb_cluster_connection::get_latest_error_msg() 获取给出失败原因的错误消息。

签名
int get_latest_error
    (
      void
    ) const
参数

没有

返回值

10。返回值1表示最近一次连接尝试失败;如果尝试成功, 0则返回 a。

Ndb_cluster_connection::get_latest_error_msg()

描述

如果此方法最近的连接尝试 Ndb_cluster_connection 失败(由调用 确定 get_latest_error()),此方法会提供一条错误消息,提供有关失败原因的信息。

签名
const char* get_latest_error_msg
    (
      void
    ) const
参数

没有

返回值

包含描述失败的错误消息的字符串 Ndb_cluster_connection::connect()。如果最近的连接尝试成功,则返回一个空字符串。

Ndb_cluster_connection::get_max_adaptive_send_time()

描述

获取在自适应发送机制强制发送所有未决信号之前允许流逝的最短时间(以毫秒为单位)。

签名
Uint32 get_max_adaptive_send_time
    (

    )
参数

没有

返回值

以毫秒数表示的等待时间。这应该始终是 0 到 10 之间的值,包括 0 和 10。

Ndb_cluster_connection::get_next_ndb_object()

描述

此方法用于迭代一组 Ndb对象,一次检索一个对象。

签名
const Ndb* get_next_ndb_object
    (
      const Ndb* p
    )
参数

此方法采用单个参数,一个指向要 Ndb检索的最后一个对象的指针或NULL.

返回值

返回下一个Ndb 对象,或者NULL如果没有更多 Ndb对象可用。

遍历 Ndb 对象。  要检索所有现有Ndb 对象,请执行以下三个步骤:

  1. 调用 lock_ndb_objects() 方法。这会阻止创建任何新实例, Ndb直到 unlock_ndb_objects() 调用该方法。

  2. 通过传递给 检索第一个可用 Ndb对象 。您可以通过将第一次调用检索到的指针传递给下一次调用来 检索第二个对象 ,依此类推。当使用指向最后一个可用 实例的指针时,该方法返回。 NULLget_next_ndb_object()Ndbget_next_ndb_object()NdbNULL

  3. 检索到所有需要 的对象后,您应该通过调用该 方法 Ndb重新启用对象创建。Ndbunlock_ndb_objects()

Ndb_cluster_connection::get_num_recv_threads()

描述

获取接收线程的数量。

签名
int get_num_recv_threads
    (
      void
    ) const
参数

没有

返回值

接收器线程的数量。

Ndb_cluster_connection::get_recv_thread_activation_threshold()

描述

获取用于激活由 绑定的接收器线程的级别集 set_recv_thread_cpu()

签名
int get_recv_thread_activation_threshold
    (
      void
    ) const
参数

没有

返回值

整数阈值。有关解释此值的信息, 请参阅 Ndb_cluster_connection::set_recv_thread_activation_threshold() 。

Ndb_cluster_connection::get_system_name()

描述

从集群配置中获取系统名称。这是 Name集群 config.ini配置文件中设置的系统配置参数的值。

签名
const char* get_system_name
    (
      void
    ) const
参数

没有

返回值

集群系统名称。如果未在集群配置文件中设置,则这是一个 以管理服务器启动时间 为形式 (例如, )生成的值。MC_timestampMC_20170426182343

ndb_cluster_connection::lock_ndb_objects()

描述

调用此方法可防止创建Ndb该类的新实例。必须在使用 迭代多个 Ndb对象 之前调用此方法get_next_ndb_object()

签名
void lock_ndb_objects
    (
      void
    ) const

此方法const从 NDB 7.3.15 和 7.4.13(缺陷 #23709232)开始。

有关详细信息,请参阅 Ndb_cluster_connection::get_next_ndb_object()

参数

没有

返回值

没有

Ndb_cluster_connection::set_auto_reconnect()

描述

与集群断开连接的 API 节点将被迫使用新的连接对象重新连接,除非通过AutoReconnect = 1config.ini文件中设置或使用 1 作为输入值调用此方法来覆盖此行为。AutoReconnect 调用值为 0 的方法与将配置参数(也在那些 NDB Cluster 版本中引入)设置为 0 具有相同的效果;也就是说,API 节点被迫创建新的连接。

重要的

AutoReconnect调用时,此方法会覆盖文件中所做的 任何设置 config.ini

有关更多信息,请参阅 在 NDB Cluster 中定义 SQL 和其他 API 节点

签名
void set_auto_reconnect
    (
      int value
    )
参数

0 或 1的 A value,它确定 API 节点重新连接行为。0 强制 API 节点使用新连接(Ndb_cluster_connection 对象);1 允许 API 节点重新使用现有的集群连接。

返回值

没有

Ndb_cluster_connection::set_data_node_neighbour()

描述

设置连接的数据节点邻居,用于事务协调器的最佳放置。此方法在创建 之后 Ndb_cluster_connection但在启动任何查询线程之前使用。这是因为此方法可能会更改 Ndb_cluster_connection使用它的线程共享的内部状态。这种状态不是线程安全的;更改它会导致在更改时选择非最佳节点。

您可以使用 ndb_data_node_neighbour 服务器系统变量为 NDB Cluster SQL 节点设置数据节点邻居。

NDB 7.5 中添加了此方法。

签名
void set_data_node_neighbour
    (
      Uint32 neighbour_node
    )
参数

要用作邻居的节点的 ID。

返回值

没有

Ndb_cluster_connection::set_max_adaptive_send_time()

描述

设置在自适应发送机制强制发送所有未决信号之前允许流逝的最短时间(以毫秒为单位)。

签名
void set_max_adaptive_send_time
    (
      Uint32 milliseconds
    )
参数

等待时间(以毫秒为单位)。范围是 0-10,默认值为 10。

返回值

没有

Ndb_cluster_connection::set_name()

描述

设置连接的名称。如果指定了名称,则会在集群日志中报告。

签名
void set_name
    (
      const char* name
    )
参数

name用作连接的标识符 。

返回值

没有

Ndb_cluster_connection::set_num_recv_threads()

描述

设置绑定到 CPU(或多个 CPU)的接收器线程数,该 CPU set_recv_thread_cpu() 由 和 设置的阈值确定 set_recv_thread_activation_threshold()

应在尝试连接到任何其他节点之前调用此方法。

签名
int set_num_recv_threads
    (
      Uint32 num_recv_threads
    )
参数

接收线程的数量。唯一支持的值是 1.

返回值

-1表示错误;任何其他值都表示成功。

Ndb_cluster_connection::set_optimized_node_selection()

描述

此方法可用于覆盖该 connect()方法关于应首先连接到哪个节点的默认行为。

签名
void set_optimized_node_selection
    (
      int value
    )
参数

一个整数value

返回值

没有

Ndb_cluster_connection::set_recv_thread_activation_threshold()

描述

设置激活由 绑定的接收线程的级别 set_recv_thread_cpu()。在这个级别以下,普通用户线程用于接收信号。

签名
int set_recv_thread_activation_threshold
    (
      Uint32 threshold
    )
参数

一个整threshold数值。16 或更高意味着接收线程从不用作接收器。0 表示接收线程始终处于活动状态,并保留轮询权供其独占使用,从而有效地阻止所有用户线程成为接收者。在这种情况下,应注意确保接收线程不会与用户线程竞争 CPU 资源;最好将其锁定到一个 CPU 以供其独占使用。默认值为 8。

返回值

-1表示错误;任何其他值都表示成功。

Ndb_cluster_connection::set_service_uri()

描述

从 NDB 7.5.7 开始,此方法可用于创建一个 URI,用于在表service_URI 中应用程序行的列中 发布ndbinfo.processes

如果在调用之前调用此方法 connect(),则服务 URI 会在连接后立即发布;否则,它会在最多延迟 HeartbeatIntervalDbApi 几毫秒后发布。

签名
int set_service_uri
    (
      const char* scheme,
      const char* host,
      int port,
      const char* path
    )
参数

此方法采用此处列出的参数:

  • 方案:URI 方案。这仅限于小写字母、数字和字符 ., +, 和 -(句点、加号和破折号)。最大长度为 16 个字符;超过此限制的任何字符都将被截断。

  • host:URI 网络地址或主机名。最大长度为 48 个字符(足以用于 IPv6 网络地址);超过此限制的任何字符都将被截断。如果为空,则每个数据节点都会报告从其自身连接到该节点的网络地址。使用多个传输器或网络地址连接到不同数据节点的 anNdb_cluster_connection 反映在 ndbinfo.processes 表中的多行中。

  • port: URI 端口。如果它等于 0,则不发布。

  • path: URI 路径,可能后跟以 开头的查询字符串 ?。路径和查询的最大组合长度不得超过 128 个字符;如果更长,它将被截断到这个长度。

    路径不能以双斜杠 ( ) 开头//

返回值

0 表示成功,1 表示语法错误。

Ndb_cluster_connection::set_recv_thread_cpu()

描述

设置接收器线程应绑定到的 CPU 或 CPU。通过调用 设置激活接收器线程作为接收器的级别 set_recv_thread_activation_threshold()。通过调用取消设置此接收器线程的绑定 unset_recv_thread_cpu()

签名
int set_recv_thread_cpu
    (
      Uint16* cpuid_array,
      Uint32 array_len,
      Uint32 recv_thread_id = 0
    )
参数

此方法采用三个参数,列于此处:

  • 接收线程应绑定到的一个或多个 CPU ID 的数组

  • 这个数组的长度

  • 要绑定的接收线程的线程 ID。默认值为0

返回值

-1表示错误;任何其他值都表示成功。

Ndb_cluster_connection::set_timeout()

描述

用于设置连接超时,以限制我们在连接时可能阻塞的时间量。

该方法实际上是 MGM API 函数的包装器 ndb_mgm_set_timeout()

签名
int set_timeout
    (
      int timeout_ms
    )
参数

超时的长度,以毫秒 ( timeout_ms) 为单位。目前,只接受 1000 的倍数。

返回值

0 成功;任何其他值表示失败。

Ndb_cluster_connection::unlock_ndb_objects()

描述

此方法撤消该方法的效果 lock_ndb_objects() ,从而可以创建 的新实例 Ndbunlock_ndb_objects() 应在 Ndb使用该方法完成检索对象 后调用get_next_ndb_object()

签名
void unlock_ndb_objects
    (
      void
    ) const

此方法const从 NDB 7.3.15 和 7.4.13(缺陷 #23709232)开始。

有关详细信息,请参阅 Ndb_cluster_connection::get_next_ndb_object()

参数

没有

返回值

没有

Ndb_cluster_connection::unset_recv_thread_cpu()

描述

使用 取消设置接收器线程绑定到的一个或多个 CPU set_recv_thread_cpu()

签名
int unset_recv_thread_cpu
    (
      Uint32 recv_thread_id
    )
参数

要解除绑定的接收方线程的线程 ID。

返回值

-1表示错误;任何其他值都表示成功。

Ndb_cluster_connection::wait_until_ready()

描述

需要此方法来建立与数据节点的连接。它一直等到与一个或多个数据节点的请求连接成功,或者直到满足超时条件。

签名
int wait_until_ready
    (
      int timeoutBefore,
      int timeoutAfter
    )
参数

这个方法有两个参数:

  • timeoutBefore确定在检测到第一个“活动节点之前等待的秒数 。如果超过此时间量而未检测到活动节点,则该方法会立即返回负值。

  • timeoutAfter确定在检测到第一个“活动节点后等待所有节点变为活动状态的秒数 。如果在所有节点都未激活的情况下超过此时间量,则该方法会立即返回一个大于零的值。

返回值

wait_until_ready()返回一个 int,其值解释如下:

  • = 0:所有节点都是 的”

  • > 0: 至少有一个节点是 的”(但是不知道是否 所有节点都)。

  • < 0: 发生错误。