add a weigher function to sized caches
This commit is contained in:
parent
b6275aff1e
commit
a7761a0430
2
TODO.md
2
TODO.md
@ -167,6 +167,8 @@ These are roughly in order of completition
|
|||||||
- since users are actively using our service, we will need to support both
|
- since users are actively using our service, we will need to support both
|
||||||
- [ ] Ulid instead of Uuid for database ids
|
- [ ] Ulid instead of Uuid for database ids
|
||||||
- might have to use Uuid in sea-orm and then convert to Ulid on display
|
- might have to use Uuid in sea-orm and then convert to Ulid on display
|
||||||
|
- [ ] database migration to change user_keys.requests_per_minute to bigint (max of 18446744073709551615)
|
||||||
|
- [ ] change user creation script to have a "unlimited requests per minute" flag that sets it to 18446744073709551615
|
||||||
|
|
||||||
## V1
|
## V1
|
||||||
|
|
||||||
|
@ -30,6 +30,7 @@ use sea_orm::DatabaseConnection;
|
|||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
use serde_json::json;
|
use serde_json::json;
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
|
use std::mem::size_of_val;
|
||||||
use std::net::IpAddr;
|
use std::net::IpAddr;
|
||||||
use std::pin::Pin;
|
use std::pin::Pin;
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
@ -62,7 +63,8 @@ pub type AnyhowJoinHandle<T> = JoinHandle<anyhow::Result<T>>;
|
|||||||
pub struct UserCacheValue {
|
pub struct UserCacheValue {
|
||||||
pub expires_at: Instant,
|
pub expires_at: Instant,
|
||||||
pub user_id: u64,
|
pub user_id: u64,
|
||||||
pub user_count_per_period: u64,
|
/// if None, allow unlimited queries
|
||||||
|
pub user_count_per_period: Option<u64>,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// The application
|
/// The application
|
||||||
@ -269,7 +271,7 @@ impl Web3ProxyApp {
|
|||||||
// TODO: these blocks don't have full transactions, but they do have rather variable amounts of transaction hashes
|
// TODO: these blocks don't have full transactions, but they do have rather variable amounts of transaction hashes
|
||||||
let block_map = Cache::builder()
|
let block_map = Cache::builder()
|
||||||
.max_capacity(10_000)
|
.max_capacity(10_000)
|
||||||
.weigher()
|
.weigher(|_k, v| size_of_val(v) as u32)
|
||||||
.build_with_hasher(ahash::RandomState::new());
|
.build_with_hasher(ahash::RandomState::new());
|
||||||
|
|
||||||
let (balanced_rpcs, balanced_handle) = Web3Connections::spawn(
|
let (balanced_rpcs, balanced_handle) = Web3Connections::spawn(
|
||||||
@ -345,7 +347,7 @@ impl Web3ProxyApp {
|
|||||||
// TODO: max_capacity from config
|
// TODO: max_capacity from config
|
||||||
let response_cache = Cache::builder()
|
let response_cache = Cache::builder()
|
||||||
.max_capacity(10_000)
|
.max_capacity(10_000)
|
||||||
.weigher()
|
.weigher(|k, v| (size_of_val(k) + size_of_val(v)) as u32)
|
||||||
.build_with_hasher(ahash::RandomState::new());
|
.build_with_hasher(ahash::RandomState::new());
|
||||||
|
|
||||||
// all the users are the same size, so no need for a weigher
|
// all the users are the same size, so no need for a weigher
|
||||||
|
Loading…
Reference in New Issue
Block a user