solana
solana copied to clipboard
Add gossip notifications / cluster node notifications to geyser
Problem
See issue #32934
Summary of Changes
This PR is a POC to add cluster node's info to the Geyzer plugin notification.
The LegacyContactInfo received on GOSSIP network are forwarded with the Geyzer interface to a client subscriber.
The PR contains:
- the entry point in crds.rs to notify LegacyContactInfo updates and removals,
- the Geyzer plugin interface update to add LegacyContactInfo notification and notification entry point.
- the processing of the updates by the geyzer_plugin_manager.
A GRPC Yellowstone plugin update has been done to test the process and see the notified data volume. You can see the PR here.
An example of client can be found here. It subscribes to the Cluster info node notification and call from time to time the RPC get_cluster_nodes to compare with the notified data.
Early results
The test has been done on Testnet cluster with the Solana version 1.17.5 and Yellowstone plugin 1.11.0+solana.1.17.5.
Comparison with RPC call
It takes a few second for the plugin to get the majority of the Testnet cluster nodes and after 30s there's less than 10 nodes in error when comparing with the RPC call (around 3000 nodes in the cluster).
After a few minutes, Geyzer and RPC has the same list of cluster's nodes. From time to time they can have some difference (a few nodes) from one part or the other depending on the notification time propagation of update or removal.
Data volume
I use Tcpdump to monitor the packet send between the validator grpc server and the client to build the get_cluster_nodes RPC call nodes list.
This graphic is an example of network activity and bandwidth use. The volume of data transmitted is between 0,5 Mbits/s and 3 Mbits/s.
I've done some monitoring of the network connection between the grpc server and the client for the cluster node info notification.
This is the graphic of the data transferred between the validator grpc server and the client to build the get_cluster_nodes RPC call nodes list.
v1.17 is nearly at the end of its stabilization and only accepting PRs for bug fixes. Please consider opening this PR against master instead.
v1.17 is nearly at the end of its stabilization and only accepting PRs for bug fixes. Please consider opening this PR against master instead.
I've used the 1.17 to have the grpc geyzer plugin compatible in version. I've created this PR first to do a test to validate the concept. It wasn't intended to be merged.
If it seems to you interesting, I can move my change to the current master and try to adapt the grpc plugin to work with it.
I've created a new PR to start from master. I've issues with master rebase so I apply the commit to master branch directly and use a new branch. The new PR is #34713