From abfda616c116687810205765bd6229c1014b40ac Mon Sep 17 00:00:00 2001 From: pk910 Date: Wed, 12 Feb 2025 23:31:25 +0100 Subject: [PATCH 1/2] update client versions --- clients/execution/client.go | 46 ++++++++++++++++---------------- clients/execution/clientlogic.go | 46 ++++++++++++++++---------------- 2 files changed, 46 insertions(+), 46 deletions(-) diff --git a/clients/execution/client.go b/clients/execution/client.go index 2ed72b4a..1901dab5 100644 --- a/clients/execution/client.go +++ b/clients/execution/client.go @@ -21,29 +21,29 @@ type ClientConfig struct { } type Client struct { - pool *Pool - clientIdx uint16 - endpointConfig *ClientConfig - clientCtx context.Context - clientCtxCancel context.CancelFunc - rpcClient *rpc.ExecutionClient - logger *logrus.Entry - isOnline bool - isSyncing bool - versionStr string - clientType ClientType - lastEvent time.Time - lastFilterPoll time.Time - lastPeersUpdate time.Time - blockFilterId rpc.BlockFilterId - retryCounter uint64 - lastError error - headMutex sync.RWMutex - headHash common.Hash - headNumber uint64 - nodeInfo *p2p.NodeInfo - peers []*p2p.PeerInfo - didFetchPeers bool + pool *Pool + clientIdx uint16 + endpointConfig *ClientConfig + clientCtx context.Context + clientCtxCancel context.CancelFunc + rpcClient *rpc.ExecutionClient + logger *logrus.Entry + isOnline bool + isSyncing bool + versionStr string + clientType ClientType + lastEvent time.Time + lastFilterPoll time.Time + lastMetadataUpdate time.Time + blockFilterId rpc.BlockFilterId + retryCounter uint64 + lastError error + headMutex sync.RWMutex + headHash common.Hash + headNumber uint64 + nodeInfo *p2p.NodeInfo + peers []*p2p.PeerInfo + didFetchPeers bool } func (pool *Pool) newPoolClient(clientIdx uint16, endpoint *ClientConfig) (*Client, error) { diff --git a/clients/execution/clientlogic.go b/clients/execution/clientlogic.go index 05cddc93..e0cef017 100644 --- a/clients/execution/clientlogic.go +++ b/clients/execution/clientlogic.go @@ -59,22 +59,13 @@ func (client *Client) checkClient() error { return fmt.Errorf("initialization of execution client failed: %w", err) } - // get node version - nodeVersion, err := client.rpcClient.GetClientVersion(ctx) - if err != nil { - return fmt.Errorf("error while fetching node version: %v", err) - } - - client.versionStr = nodeVersion - client.parseClientVersion(nodeVersion) - - // get peers - err = client.updateNodePeers(ctx) + // get node metadata + err = client.updateNodeMetadata(ctx) if err != nil { - client.logger.Warnf("error updating node peers: %v", err) + client.logger.Warnf("error updating node metadata: %v", err) } - // get & comare chain specs + // get & compare chain specs specs, err := client.rpcClient.GetChainSpec(ctx) if err != nil { return fmt.Errorf("error while fetching specs: %v", err) @@ -100,13 +91,22 @@ func (client *Client) checkClient() error { return nil } -func (client *Client) updateNodePeers(ctx context.Context) error { +func (client *Client) updateNodeMetadata(ctx context.Context) error { ctx, cancel := context.WithTimeout(ctx, 30*time.Second) defer cancel() - client.lastPeersUpdate = time.Now() + client.lastMetadataUpdate = time.Now() + + // get node version + nodeVersion, err := client.rpcClient.GetClientVersion(ctx) + if err != nil { + return fmt.Errorf("error while fetching node version: %v", err) + } + + client.versionStr = nodeVersion + client.parseClientVersion(nodeVersion) - var err error + // get node peers client.nodeInfo, err = client.rpcClient.GetAdminNodeInfo(ctx) if err != nil { client.didFetchPeers = false @@ -173,11 +173,11 @@ func (client *Client) runClientLogic() error { pollTimeout = 12*time.Second - pollTimeout } - peerRefreshTimeout := time.Since(client.lastPeersUpdate) - if peerRefreshTimeout > 5*time.Minute { - peerRefreshTimeout = 0 + metadataRefreshTimeout := time.Since(client.lastMetadataUpdate) + if metadataRefreshTimeout > 5*time.Minute { + metadataRefreshTimeout = 0 } else { - peerRefreshTimeout = 5*time.Minute - peerRefreshTimeout + metadataRefreshTimeout = 5*time.Minute - metadataRefreshTimeout } select { @@ -221,10 +221,10 @@ func (client *Client) runClientLogic() error { } client.lastEvent = time.Now() - case <-time.After(peerRefreshTimeout): - err := client.updateNodePeers(client.clientCtx) + case <-time.After(metadataRefreshTimeout): + err := client.updateNodeMetadata(client.clientCtx) if err != nil { - client.logger.Warnf("error updating node peers: %v", err) + client.logger.Warnf("error updating node metadata: %v", err) } } From 9955904fc5ca33ba713a47dedc1046fa08cdc113 Mon Sep 17 00:00:00 2001 From: pk910 Date: Thu, 13 Feb 2025 00:43:49 +0100 Subject: [PATCH 2/2] refresh cl client metadata too --- clients/consensus/client.go | 2 +- clients/consensus/clientlogic.go | 40 +++++++++++++++++--------------- 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/clients/consensus/client.go b/clients/consensus/client.go index c91131de..013ac9d8 100644 --- a/clients/consensus/client.go +++ b/clients/consensus/client.go @@ -46,7 +46,7 @@ type Client struct { finalizedRoot phase0.Root finalizedEpoch phase0.Epoch lastFinalityUpdateEpoch phase0.Epoch - lastPeerUpdateEpoch phase0.Epoch + lastMetadataUpdate time.Time lastSyncUpdateEpoch phase0.Epoch peers []*v1.Peer blockDispatcher Dispatcher[*v1.BlockEvent] diff --git a/clients/consensus/clientlogic.go b/clients/consensus/clientlogic.go index 09a9a285..f497998f 100644 --- a/clients/consensus/clientlogic.go +++ b/clients/consensus/clientlogic.go @@ -62,18 +62,9 @@ func (client *Client) checkClient() error { return fmt.Errorf("initialization of attestantio/go-eth2-client failed: %w", err) } - // get node version - nodeVersion, err := client.rpcClient.GetNodeVersion(ctx) - if err != nil { - return fmt.Errorf("error while fetching node version: %v", err) - } - - client.versionStr = nodeVersion - client.parseClientVersion(nodeVersion) - - // update node peers - if err = client.updateNodePeers(ctx); err != nil { - return fmt.Errorf("could not get node peers for %s: %v", client.endpointConfig.Name, err) + // update node metadata + if err = client.updateNodeMetadata(ctx); err != nil { + return fmt.Errorf("could not get node metadata for %s: %v", client.endpointConfig.Name, err) } // get & compare genesis @@ -223,12 +214,12 @@ func (client *Client) runClientLogic() error { }() } - if currentEpoch-client.lastPeerUpdateEpoch >= 1 { - client.lastPeerUpdateEpoch = currentEpoch + if time.Since(client.lastMetadataUpdate) >= 5*time.Minute { + client.lastMetadataUpdate = time.Now() go func() { // update node peers - if err = client.updateNodePeers(client.clientCtx); err != nil { - client.logger.Errorf("could not get node peers for %s: %v", client.endpointConfig.Name, err) + if err = client.updateNodeMetadata(client.clientCtx); err != nil { + client.logger.Errorf("could not get node metadata for %s: %v", client.endpointConfig.Name, err) } else { client.logger.WithFields(logrus.Fields{"epoch": currentEpoch, "peers": len(client.peers)}).Debug("updated consensus node peers") } @@ -258,23 +249,34 @@ func (client *Client) updateSynchronizationStatus(ctx context.Context) error { return nil } -func (client *Client) updateNodePeers(ctx context.Context) error { +func (client *Client) updateNodeMetadata(ctx context.Context) error { var cancel context.CancelFunc ctx, cancel = context.WithTimeout(ctx, 30*time.Second) defer cancel() - var err error + client.lastMetadataUpdate = time.Now() + + // get node version + nodeVersion, err := client.rpcClient.GetNodeVersion(ctx) + if err != nil { + return fmt.Errorf("error while fetching node version: %v", err) + } + + client.versionStr = nodeVersion + client.parseClientVersion(nodeVersion) + + // get node identity client.nodeIdentity, err = client.rpcClient.GetNodeIdentity(ctx) if err != nil { return fmt.Errorf("could not get node peer id: %v", err) } + // get node peers peers, err := client.rpcClient.GetNodePeers(ctx) if err != nil { return fmt.Errorf("could not get peers: %v", err) } client.peers = peers - client.lastPeerUpdateEpoch = client.pool.chainState.CurrentEpoch() return nil }