GetAllNodeInfo implements consistent.Persistence.
()
| 185 | |
| 186 | // GetAllNodeInfo implements consistent.Persistence. |
| 187 | func (s *KVServer) GetAllNodeInfo() (nodes []proto.Node, err error) { |
| 188 | var result [][]interface{} |
| 189 | query := "SELECT `node` FROM `dht`;" |
| 190 | _, _, result, err = s.storage.Query(context.Background(), []storage.Query{ |
| 191 | { |
| 192 | Pattern: query, |
| 193 | }, |
| 194 | }) |
| 195 | if err != nil { |
| 196 | log.WithField("query", query).WithError(err).Error("query failed") |
| 197 | return |
| 198 | } |
| 199 | log.Debugf("SQL: %#v\nResults: %#v", query, result) |
| 200 | |
| 201 | nodes = make([]proto.Node, 0, len(result)) |
| 202 | |
| 203 | for _, r := range result { |
| 204 | if len(r) == 0 { |
| 205 | continue |
| 206 | } |
| 207 | nodeBytes, ok := r[0].([]byte) |
| 208 | log.Debugf("nodeBytes: %#v, %#v", nodeBytes, ok) |
| 209 | if !ok { |
| 210 | continue |
| 211 | } |
| 212 | |
| 213 | nodeDec := proto.NewNode() |
| 214 | err = utils.DecodeMsgPack(nodeBytes, nodeDec) |
| 215 | if err != nil { |
| 216 | log.WithError(err).Error("unmarshal node info failed") |
| 217 | continue |
| 218 | } |
| 219 | nodes = append(nodes, *nodeDec) |
| 220 | } |
| 221 | |
| 222 | if len(nodes) > 0 { |
| 223 | err = nil |
| 224 | } |
| 225 | |
| 226 | return |
| 227 | } |
| 228 | |
| 229 | // Stop stops the dht node server and wait for inflight gossip requests. |
| 230 | func (s *KVServer) Stop() { |