* Use RwLock instead of Mutex in QUIC connection cache
* replace LruCache with HashMap
* fix tests
* fix tests
* refactor
* add cache eviction for a random connection on reaching upperbound
* cleanup
* fix: when creating new cluster URLs, don't carry the fragment forward
* feat: added a utility that computes a transaction's URL fragment
* feat: introduced a React context you can use to scroll to elements
* feat: you can now deep link to a particular transaction in Explorer
In preparation of the upcoming changes to shred struct, the added
hard-coded tests in this commit ensure that shreds are backward
compatible when serialized and de-serialized.
* chore: upgrade Explorer React typedefs to match installed version of React
* fix: a stream player materializing no longer re-renders the VideoArtContent
* chore: upgrade Sentry React for compatibility with React 18 types
#### Summary of Changes
This PR replaces the use of thread_rng in RocksDB perf metric samples by
AtomicU32 with Ordering::Relaxed to improve the performance of determining
whether to sample the current RocksDB's read/write perf metric.
The extra wrapping and indirection by the Session struct is not used in
any form. The commit removes Session and instead uses Reed-Solomon
constructs directly.
#### Problem
Currently, the number of RocksDB perf samples is controlled by an env arg
which is later handled using a lazy_static variable. However, there is a known
performance overhead of using lazy_static as mentioned in
https://github.com/solana-labs/solana/pull/6472.
#### Summary of Changes
Instead, this PR uses a hidden validator argument, --rocksdb-perf-sample-interval,
for controlling how often RocksDB read/write performance sample is collected.
* cli: Display feature activation epoch instead of slot
* cli: Always display feature statuses for specific queries
* cli: Add epoch column and show epoch for pending features
* cli: Remove epoch column and clarify statuses
* skip serializing bookkeeping fields
* Add activation slot to feature status table
Removed Default implementation for ShredType. ShredType should always be
explicitly specified, and not rely on default values.
Simplified single-arg Shred Error variants to use shorter syntax.
Renamed erasure blocks to shards, to be consistent with reed_solomon
crate and not to confuse with FEC blocks.
#### Problem
The RocksDB wrapper,`Rocks`, under blockstore_db is currently implemented
as a tuple with unnamed fields. Accessing its fields requires syntax like `self.0`
which limits readability.
#### Summary of Changes
This PR converts Rocks from tuple to struct so that it has more human-readable
fields.
* chore: create a first-class type to distinguish client subscription ids from server subscription ids
* chore: add fast-stable-stringify as a dependency to web3.js
* fix: reimplement the subscription tracker as a state machine
* test: updated tests to recognize that signatureUnsubscribe happens synchronously
* chore: add sinon-chai so that we can make assertions on calling spies
* test: coverage for the full range of subscription state transitions
* fix: special case auto-disposing subscriptions like signatureSubscribe
* fix: document Subscription type (SQUASH THIS)
* fix: strict undefined checks (SQUASH THIS)
* fix: naming (SQUASH THIS)
* fix: move defaulting to source (SQUASH THIS)
* fix: build RPC args first, then produce the subscription topic hash (SQUASH THIS)
* fix: dispose handles no longer track whether they've been called (SQUASH THIS)
* fix: shore up the auto-disposing sub tests now that double-free doesn't fatal (SQUASH THIS)
* fix: write documentation explaining how and why to apply a default commitment (SQUASH THIS)
* fix: skip subscriptions that have been deleted when recursing (SQUASH THIS)
* fix: bail on async responses when the connection has been recycled (SQUASH THIS)
* fix: typo in comment (SQUASH THIS)
* chore: comment on why notification callbacks are ts-ignored
* chore: start all the new stuff out as private members of the Connection class