Keep Peer Caching + Resource Verification.
This commit is contained in:
@@ -11,10 +11,12 @@ import (
|
||||
"oc-discovery/daemons/node/indexer"
|
||||
"oc-discovery/daemons/node/pubsub"
|
||||
"oc-discovery/daemons/node/stream"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
oclib "cloud.o-forge.io/core/oc-lib"
|
||||
"cloud.o-forge.io/core/oc-lib/models/peer"
|
||||
"cloud.o-forge.io/core/oc-lib/tools"
|
||||
"github.com/google/uuid"
|
||||
"github.com/libp2p/go-libp2p"
|
||||
pubsubs "github.com/libp2p/go-libp2p-pubsub"
|
||||
@@ -30,6 +32,9 @@ type Node struct {
|
||||
StreamService *stream.StreamService
|
||||
PeerID pp.ID
|
||||
isIndexer bool
|
||||
|
||||
Mu sync.RWMutex
|
||||
Peers map[pp.ID]bool
|
||||
}
|
||||
|
||||
func InitNode(isNode bool, isIndexer bool) (*Node, error) {
|
||||
@@ -38,7 +43,7 @@ func InitNode(isNode bool, isIndexer bool) (*Node, error) {
|
||||
}
|
||||
logger := oclib.GetLogger()
|
||||
logger.Info().Msg("retrieving private key...")
|
||||
priv, err := common.LoadKeyFromFilePrivate() // your node private key
|
||||
priv, err := tools.LoadKeyFromFilePrivate() // your node private key
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -60,6 +65,7 @@ func InitNode(isNode bool, isIndexer bool) (*Node, error) {
|
||||
return nil, errors.New("no host no node")
|
||||
}
|
||||
node := &Node{
|
||||
Peers: map[pp.ID]bool{},
|
||||
PeerID: h.ID(),
|
||||
isIndexer: isIndexer,
|
||||
LongLivedStreamRecordedService: common.NewStreamRecordedService[interface{}](h, 1000, false),
|
||||
@@ -95,13 +101,42 @@ func InitNode(isNode bool, isIndexer bool) (*Node, error) {
|
||||
}
|
||||
}
|
||||
node.SubscribeToSearch(node.PS, &f)
|
||||
ff := func(ctx context.Context, evt common.TopicNodeActivityPub, _ string) {
|
||||
node.Mu.Lock()
|
||||
defer node.Mu.Unlock()
|
||||
if pid, err := pp.Decode(evt.PeerID); err == nil {
|
||||
if _, ok := node.Peers[pid]; !ok {
|
||||
node.Peers[pid] = evt.NodeActivity == peer.ONLINE.EnumIndex()
|
||||
m := map[string]interface{}{
|
||||
"id": evt.DID,
|
||||
"state": evt.NodeActivity,
|
||||
}
|
||||
if b, err := json.Marshal(m); err == nil {
|
||||
go tools.NewNATSCaller().SetNATSPub(tools.CREATE_PEER, tools.NATSResponse{
|
||||
FromApp: "oc-discovery",
|
||||
Datatype: tools.PEER,
|
||||
Method: int(tools.CREATE_PEER),
|
||||
Payload: b,
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
node.SubscribeToNodeActivity(node.PS, &ff)
|
||||
access := oclib.NewRequestAdmin(oclib.LibDataEnum(oclib.PEER), nil)
|
||||
peers := access.LoadAll(false)
|
||||
for _, p := range peers.Data { // fill cache.
|
||||
if pid, err := pp.Decode(p.(*peer.Peer).PeerID); err == nil {
|
||||
node.Peers[pid] = p.(*peer.Peer).State == peer.ONLINE
|
||||
}
|
||||
}
|
||||
}
|
||||
if isIndexer {
|
||||
logger.Info().Msg("generate opencloud indexer...")
|
||||
node.IndexerService = indexer.NewIndexerService(node.Host, ps, 5)
|
||||
}
|
||||
logger.Info().Msg("connect to NATS")
|
||||
ListenNATS(*node)
|
||||
ListenNATS(node)
|
||||
logger.Info().Msg("Node is actually running.")
|
||||
return node, nil
|
||||
}
|
||||
@@ -118,7 +153,7 @@ func (d *Node) Close() {
|
||||
func (d *Node) publishPeerRecord(
|
||||
rec *indexer.PeerRecord,
|
||||
) error {
|
||||
priv, err := common.LoadKeyFromFilePrivate() // your node private key
|
||||
priv, err := tools.LoadKeyFromFilePrivate() // your node private key
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -203,11 +238,11 @@ func (d *Node) claimInfo(
|
||||
return nil, errors.New("no endpoint found for peer")
|
||||
}
|
||||
peerID := uuid.New().String()
|
||||
priv, err := common.LoadKeyFromFilePrivate()
|
||||
priv, err := tools.LoadKeyFromFilePrivate()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
pub, err := common.LoadKeyFromFilePublic()
|
||||
pub, err := tools.LoadKeyFromFilePublic()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user