本节提供有关
Ndb_cluster_connection
该类的信息,该类模拟管理服务器 ( ndb_mgmd ) 与一组数据节点的连接。
- 家长班
没有任何
- 儿童班
没有任何
- 描述
-
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
在表中设置用于发布的 URIset_timeout()
设置连接超时 unlock_ndb_objects()
允许创建新 Ndb
对象。unset_recv_thread_cpu()
取消设置接收线程与一个或多个 CPU 的绑定。 wait_until_ready()
等到与一个或多个数据节点的连接成功。
- 描述
此方法创建到 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
。
- 描述
此方法连接到集群管理服务器。
- 签名
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:表示不可恢复的错误。
- 描述
此方法检索给定 的当前
AutoReconnect
设置Ndb_cluster_connection
。有关更多详细信息,请参阅 Ndb_cluster_connection::set_auto_reconnect()。- 签名
int get_auto_reconnect ( void )
- 参数
没有。
- 返回值
整数值
0
或1
,对应AutoReconnect
于对此连接有效的当前设置。0
强制 API 节点使用到集群的新连接,同时1
允许 API 节点重用现有连接。
- 描述
此方法可用于确定 this 最近的
connect()
尝试 是否Ndb_cluster_connection
成功。如果连接成功,get_latest_error()
返回0
;否则,它返回1
。如果连接尝试失败,则使用Ndb_cluster_connection::get_latest_error_msg()
获取给出失败原因的错误消息。- 签名
int get_latest_error ( void ) const
- 参数
没有。
- 返回值
1
或0
。返回值1
表示最近一次连接尝试失败;如果尝试成功,0
则返回 a。
- 描述
如果此方法最近的连接尝试
Ndb_cluster_connection
失败(由调用 确定get_latest_error()
),此方法会提供一条错误消息,提供有关失败原因的信息。- 签名
const char* get_latest_error_msg ( void ) const
- 参数
没有。
- 返回值
包含描述失败的错误消息的字符串
Ndb_cluster_connection::connect()
。如果最近的连接尝试成功,则返回一个空字符串。
- 描述
获取在自适应发送机制强制发送所有未决信号之前允许流逝的最短时间(以毫秒为单位)。
- 签名
Uint32 get_max_adaptive_send_time ( )
- 参数
没有。
- 返回值
以毫秒数表示的等待时间。这应该始终是 0 到 10 之间的值,包括 0 和 10。
遍历 Ndb 对象。
要检索所有现有Ndb
对象,请执行以下三个步骤:
调用
lock_ndb_objects()
方法。这会阻止创建任何新实例,Ndb
直到unlock_ndb_objects()
调用该方法。通过传递给 检索第一个可用
Ndb
对象 。您可以通过将第一次调用检索到的指针传递给下一次调用来 检索第二个对象 ,依此类推。当使用指向最后一个可用 实例的指针时,该方法返回。NULL
get_next_ndb_object()
Ndb
get_next_ndb_object()
Ndb
NULL
检索到所有需要 的对象后,您应该通过调用该 方法
Ndb
重新启用对象创建。Ndb
unlock_ndb_objects()
- 描述
获取用于激活由 绑定的接收器线程的级别集
set_recv_thread_cpu()
。- 签名
int get_recv_thread_activation_threshold ( void ) const
- 参数
没有。
- 返回值
整数阈值。有关解释此值的信息, 请参阅 Ndb_cluster_connection::set_recv_thread_activation_threshold() 。
- 描述
从集群配置中获取系统名称。这是
Name
集群config.ini
配置文件中设置的系统配置参数的值。- 签名
const char* get_system_name ( void ) const
- 参数
没有。
- 返回值
集群系统名称。如果未在集群配置文件中设置,则这是一个 以管理服务器启动时间 为形式 (例如, )生成的值。
MC_
timestamp
MC_20170426182343
- 描述
调用此方法可防止创建
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()。
- 参数
没有。
- 返回值
没有。
- 描述
与集群断开连接的 API 节点将被迫使用新的连接对象重新连接,除非通过
AutoReconnect = 1
在config.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
但在启动任何查询线程之前使用。这是因为此方法可能会更改Ndb_cluster_connection
使用它的线程共享的内部状态。这种状态不是线程安全的;更改它会导致在更改时选择非最佳节点。您可以使用
ndb_data_node_neighbour
服务器系统变量为 NDB Cluster SQL 节点设置数据节点邻居。NDB 7.5 中添加了此方法。
- 签名
void set_data_node_neighbour ( Uint32 neighbour_node )
- 参数
要用作邻居的节点的 ID。
- 返回值
没有。
- 描述
设置在自适应发送机制强制发送所有未决信号之前允许流逝的最短时间(以毫秒为单位)。
- 签名
void set_max_adaptive_send_time ( Uint32 milliseconds )
- 参数
等待时间(以毫秒为单位)。范围是 0-10,默认值为 10。
- 返回值
没有。
- 描述
-
设置绑定到 CPU(或多个 CPU)的接收器线程数,该 CPU
set_recv_thread_cpu()
由 和 设置的阈值确定set_recv_thread_activation_threshold()
。应在尝试连接到任何其他节点之前调用此方法。
- 签名
int set_num_recv_threads ( Uint32 num_recv_threads )
- 参数
接收线程的数量。唯一支持的值是
1
.- 返回值
-1
表示错误;任何其他值都表示成功。
- 描述
此方法可用于覆盖该
connect()
方法关于应首先连接到哪个节点的默认行为。- 签名
void set_optimized_node_selection ( int value )
- 参数
一个整数
value
。- 返回值
没有。
- 描述
设置激活由 绑定的接收线程的级别
set_recv_thread_cpu()
。在这个级别以下,普通用户线程用于接收信号。- 签名
int set_recv_thread_activation_threshold ( Uint32 threshold )
- 参数
一个整
threshold
数值。16 或更高意味着接收线程从不用作接收器。0 表示接收线程始终处于活动状态,并保留轮询权供其独占使用,从而有效地阻止所有用户线程成为接收者。在这种情况下,应注意确保接收线程不会与用户线程竞争 CPU 资源;最好将其锁定到一个 CPU 以供其独占使用。默认值为 8。- 返回值
-1
表示错误;任何其他值都表示成功。
- 描述
-
从 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 表示语法错误。
- 描述
设置接收器线程应绑定到的 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
表示错误;任何其他值都表示成功。
- 描述
-
用于设置连接超时,以限制我们在连接时可能阻塞的时间量。
该方法实际上是 MGM API 函数的包装器
ndb_mgm_set_timeout()
。 - 签名
int set_timeout ( int timeout_ms )
- 参数
超时的长度,以毫秒 (
timeout_ms
) 为单位。目前,只接受 1000 的倍数。- 返回值
0 成功;任何其他值表示失败。
- 描述
此方法撤消该方法的效果
lock_ndb_objects()
,从而可以创建 的新实例Ndb
。unlock_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()。
- 参数
没有。
- 返回值
没有。
- 描述
使用 取消设置接收器线程绑定到的一个或多个 CPU
set_recv_thread_cpu()
。- 签名
int unset_recv_thread_cpu ( Uint32 recv_thread_id )
- 参数
要解除绑定的接收方线程的线程 ID。
- 返回值
-1
表示错误;任何其他值都表示成功。
- 描述
需要此方法来建立与数据节点的连接。它一直等到与一个或多个数据节点的请求连接成功,或者直到满足超时条件。
- 签名
int wait_until_ready ( int timeoutBefore, int timeoutAfter )
- 参数
-
这个方法有两个参数:
timeoutBefore
确定在检测到第一个“活动”节点之前等待的秒数 。如果超过此时间量而未检测到活动节点,则该方法会立即返回负值。timeoutAfter
确定在检测到第一个“活动”节点后等待所有节点变为活动状态的秒数 。如果在所有节点都未激活的情况下超过此时间量,则该方法会立即返回一个大于零的值。
- 返回值
-
wait_until_ready()
返回一个int
,其值解释如下:= 0
:所有节点都是 “活的”。> 0
: 至少有一个节点是 “活的”(但是不知道是否 所有节点都“活”)。< 0
: 发生错误。