MCPcopy Index your code
hub / github.com/CovenantSQL/CovenantSQL / getUpstream

Method getUpstream

sqlchain/observer/service.go:369–431  ·  view source on GitHub ↗
(dbID proto.DatabaseID)

Source from the content-addressed store, hash-verified

367}
368
369func (s *Service) getUpstream(dbID proto.DatabaseID) (instance *types.ServiceInstance, err error) {
370 log.WithField("db", dbID).Debug("get peers info for database")
371
372 if iInstance, exists := s.upstreamServers.Load(dbID); exists {
373 instance = iInstance.(*types.ServiceInstance)
374 return
375 }
376
377 curBP, err := mux.GetCurrentBP()
378 if err != nil {
379 return
380 }
381
382 privateKey, err := kms.GetLocalPrivateKey()
383 if err != nil {
384 return
385 }
386
387 var (
388 req = &types.QuerySQLChainProfileReq{
389 DBID: dbID,
390 }
391 resp = &types.QuerySQLChainProfileResp{}
392 )
393 // get peers list from block producer
394 if err = s.caller.CallNode(
395 curBP, route.MCCQuerySQLChainProfile.String(), req, resp,
396 ); err != nil {
397 return
398 }
399
400 // Build server instance from sqlchain profile
401 var (
402 profile = resp.Profile
403 nodeids = make([]proto.NodeID, len(profile.Miners))
404 peers *proto.Peers
405 genesis = &types.Block{}
406 )
407 for i, v := range profile.Miners {
408 nodeids[i] = v.NodeID
409 }
410 peers = &proto.Peers{
411 PeersHeader: proto.PeersHeader{
412 Leader: nodeids[0],
413 Servers: nodeids[:],
414 },
415 }
416 if err = peers.Sign(privateKey); err != nil {
417 return
418 }
419 if err = utils.DecodeMsgPack(profile.EncodedGenesis, genesis); err != nil {
420 return
421 }
422 instance = &types.ServiceInstance{
423 DatabaseID: profile.ID,
424 Peers: peers,
425 ResourceMeta: profile.Meta,
426 GenesisBlock: genesis,

Callers 2

addBlockMethod · 0.95
minerRequestMethod · 0.95

Calls 8

WithFieldFunction · 0.92
GetCurrentBPFunction · 0.92
GetLocalPrivateKeyFunction · 0.92
DecodeMsgPackFunction · 0.92
DebugMethod · 0.80
CallNodeMethod · 0.80
SignMethod · 0.65
StringMethod · 0.45

Tested by

no test coverage detected