Keep Peer Caching + Resource Verification.

This commit is contained in:
mr
2026-02-09 13:28:00 +01:00
parent 1c0b2b4312
commit fa914958b6
14 changed files with 221 additions and 133 deletions

View File

@@ -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
}