|
1 | 1 | package v3_0
|
2 | 2 |
|
3 | 3 | import (
|
| 4 | + "net" |
| 5 | + "strconv" |
| 6 | + |
4 | 7 | "github.com/facebook/fbthrift/thrift/lib/go/thrift"
|
| 8 | + |
| 9 | + nerrors "github.com/vesoft-inc/nebula-http-gateway/ccore/nebula/errors" |
| 10 | + nthrift "github.com/vesoft-inc/nebula-http-gateway/ccore/nebula/internal/thrift/v3_0" |
5 | 11 | "github.com/vesoft-inc/nebula-http-gateway/ccore/nebula/internal/thrift/v3_0/meta"
|
6 | 12 | "github.com/vesoft-inc/nebula-http-gateway/ccore/nebula/types"
|
7 | 13 | )
|
@@ -43,3 +49,114 @@ func (c *defaultMetaClient) Close() error {
|
43 | 49 | }
|
44 | 50 | return nil
|
45 | 51 | }
|
| 52 | + |
| 53 | +func (c *defaultMetaClient) AddHosts(endpoints []string) error { |
| 54 | + hostsToAdd := make([]*nthrift.HostAddr, 0, len(endpoints)) |
| 55 | + for _, ep := range endpoints { |
| 56 | + host, portStr, err := net.SplitHostPort(ep) |
| 57 | + if err != nil { |
| 58 | + return err |
| 59 | + } |
| 60 | + |
| 61 | + port, err := strconv.Atoi(portStr) |
| 62 | + if err != nil { |
| 63 | + return err |
| 64 | + } |
| 65 | + |
| 66 | + hostsToAdd = append(hostsToAdd, &nthrift.HostAddr{ |
| 67 | + Host: host, |
| 68 | + Port: nthrift.Port(port), |
| 69 | + }) |
| 70 | + } |
| 71 | + |
| 72 | + req := &meta.AddHostsReq{ |
| 73 | + Hosts: hostsToAdd, |
| 74 | + } |
| 75 | + resp, err := c.meta.AddHosts(req) |
| 76 | + if err != nil { |
| 77 | + return err |
| 78 | + } |
| 79 | + return codeErrorIfHappened(resp.Code, nil) |
| 80 | +} |
| 81 | + |
| 82 | +func (c *defaultMetaClient) DropHosts(endpoints []string) error { |
| 83 | + hostsToDrop := make([]*nthrift.HostAddr, 0, len(endpoints)) |
| 84 | + for _, ep := range endpoints { |
| 85 | + host, portStr, err := net.SplitHostPort(ep) |
| 86 | + if err != nil { |
| 87 | + return err |
| 88 | + } |
| 89 | + |
| 90 | + port, err := strconv.Atoi(portStr) |
| 91 | + if err != nil { |
| 92 | + return err |
| 93 | + } |
| 94 | + |
| 95 | + hostsToDrop = append(hostsToDrop, &nthrift.HostAddr{ |
| 96 | + Host: host, |
| 97 | + Port: nthrift.Port(port), |
| 98 | + }) |
| 99 | + } |
| 100 | + |
| 101 | + req := &meta.DropHostsReq{ |
| 102 | + Hosts: hostsToDrop, |
| 103 | + } |
| 104 | + resp, err := c.meta.DropHosts(req) |
| 105 | + if err != nil { |
| 106 | + return err |
| 107 | + } |
| 108 | + return codeErrorIfHappened(resp.Code, nil) |
| 109 | +} |
| 110 | + |
| 111 | +func (c *defaultMetaClient) ListSpaces() (types.Spaces, error) { |
| 112 | + req := meta.NewListSpacesReq() |
| 113 | + |
| 114 | + resp, err := c.meta.ListSpaces(req) |
| 115 | + if err != nil { |
| 116 | + return nil, err |
| 117 | + } |
| 118 | + |
| 119 | + if err := codeErrorIfHappened(resp.Code, nil); err != nil { |
| 120 | + return nil, err |
| 121 | + } |
| 122 | + |
| 123 | + return newSpacesWrapper(resp.Spaces), nil |
| 124 | +} |
| 125 | + |
| 126 | +func (c *defaultMetaClient) Balance(req types.BalanceReq) (types.Balancer, error) { |
| 127 | + paras := make([][]byte, 0) |
| 128 | + |
| 129 | + var cmd meta.AdminCmd |
| 130 | + switch req.Cmd { |
| 131 | + case types.BalanceLeader: |
| 132 | + cmd = meta.AdminCmd_LEADER_BALANCE |
| 133 | + case types.BalanceData: |
| 134 | + cmd = meta.AdminCmd_DATA_BALANCE |
| 135 | + case types.BalanceDataRemove: |
| 136 | + cmd = meta.AdminCmd_DATA_BALANCE |
| 137 | + for _, ep := range req.HostsToRemove { |
| 138 | + paras = append(paras, []byte(ep)) |
| 139 | + } |
| 140 | + default: |
| 141 | + return nil, nerrors.ErrUnsupported |
| 142 | + } |
| 143 | + |
| 144 | + paras = append(paras, []byte(req.Space)) |
| 145 | + |
| 146 | + metaReq := &meta.AdminJobReq{ |
| 147 | + Op: meta.AdminJobOp_ADD, |
| 148 | + Cmd: cmd, |
| 149 | + Paras: paras, |
| 150 | + } |
| 151 | + |
| 152 | + resp, err := c.meta.RunAdminJob(metaReq) |
| 153 | + if err != nil { |
| 154 | + return nil, err |
| 155 | + } |
| 156 | + |
| 157 | + if err := codeErrorIfHappened(resp.Code, nil); err != nil { |
| 158 | + return nil, err |
| 159 | + } |
| 160 | + |
| 161 | + return newBalancerWrap(c.meta, req.Space, resp.Result_.JobID), nil |
| 162 | +} |
0 commit comments