getSlave()

名称

getSlave - 获取当前分区组的备节点。

语法

rg.getSlave([positions])

类别

Replica Group

描述

获取当前分区组的备节点。

参数

  • positions ( Int32选填 )

    节点位置。目前,节点位置定义为该节点在 catalog 元数据的 “Group” 数组中的位置。其起始值为1,范围为[1,7]。最多只能输入7个不重复的、有效节点位置。若指定的节点位置大于分区组的节点数,这些节点位置将按照公式 (position - 1) % nodeCount + 1 进行转换。

返回值

成功:返回 SdbNode 对象。

失败:抛出异常。

Note:

  1. 当分区组只有一个节点,不管是否指定节点位置,直接返回唯一的节点对象,即使该节点为主节点。
  2. 当分区组有多个节点,在不指定节点位置的情况下,返回的节点必为备节点。
  3. 当分区组有多个节点,在指定节点位置的情况下,若节点位置包含备节点,则随机返回包含的备节点;若节点位置只包含主节点,则返回主节点。

错误

getSlave()函数常见异常如下:

错误码错误类型描述解决方法
-6SDB_INVALIDARG参数错误。输入的节点位置参数有误。
-10SDB_SYS系统错误。一般由 catalog 元素数据变更后,驱动无法解析元数据导致。
-154SDB_CLS_GRP_NOT_EXIST分区组不存在。检查分区组是否存在。
-158SDB_CLS_EMPTY_GROUP分区组为空。检查分区组是否包含任何节点。

当异常抛出时,可以通过getLastError()获取错误码, 或通过getLastErrMsg()获取错误信息。 可以参考常见错误处理指南了解更多内容。

版本

  • v2.10加入节点位置参数,用于获取指定位置的备节点。
  • v1.0 添加此接口。

示例

  1. 获取 group1 分区组的备节点。

    1. > var rg = db.getRG("group1")
    2. > rg.getSlave()
    3. hostname1:42000
  2. group1 分区组信息如下:

    1. > db.list(SDB_LIST_GROUPS, {"GroupName":"group1"})
    2. {
    3. "Group": [
    4. {
    5. "HostName": "hostname1",
    6. "Status": 1,
    7. "dbpath": "/sequoiadb/database/40000/",
    8. "Service": [
    9. {
    10. "Type": 0,
    11. "Name": "40000"
    12. },
    13. {
    14. "Type": 1,
    15. "Name": "40001"
    16. },
    17. {
    18. "Type": 2,
    19. "Name": "40002"
    20. }
    21. ],
    22. "NodeID": 1001
    23. },
    24. {
    25. "HostName": "hostname1",
    26. "Status": 1,
    27. "dbpath": "/sequoiadb/database/41000/",
    28. "Service": [
    29. {
    30. "Type": 0,
    31. "Name": "41000"
    32. },
    33. {
    34. "Type": 1,
    35. "Name": "41001"
    36. },
    37. {
    38. "Type": 2,
    39. "Name": "41002"
    40. }
    41. ],
    42. "NodeID": 1002
    43. },
    44. {
    45. "HostName": "hostname1",
    46. "Status": 1,
    47. "dbpath": "/sequoiadb/database/42000/",
    48. "Service": [
    49. {
    50. "Type": 0,
    51. "Name": "42000"
    52. },
    53. {
    54. "Type": 1,
    55. "Name": "42001"
    56. },
    57. {
    58. "Type": 2,
    59. "Name": "42002"
    60. }
    61. ],
    62. "NodeID": 1003
    63. }
    64. ],
    65. "GroupID": 1001,
    66. "GroupName": "group1",
    67. "PrimaryNode": 1002,
    68. "Role": 0,
    69. "SecretID": 1425460557,
    70. "Status": 1,
    71. "Version": 7,
    72. "_id": {
    73. "$oid": "5a045460c517f3cf06a32976"
    74. }
    75. }

    其中,节点为:
    hostname1:40000(备节点,节点位置为1);
    hostname1:41000(主节点,节点位置为2);
    hostname1:42000(备节点,节点位置为3);
    从 group1 分区组中,随机获取位置1和位置2节点中的备节点:

    1. > var rg = db.getRG("group1")
    2. > rg.getSlave(1,2)
    3. hostname1:40000