Skip to content

Commit d2ed618

Browse files
committed
perf: Use papaya over dashmap
1 parent 57040f8 commit d2ed618

File tree

14 files changed

+295
-514
lines changed

14 files changed

+295
-514
lines changed

Cargo.lock

+86
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

+2
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,8 @@ libflate = "2.1.0"
158158
form_urlencoded = "1.2.1"
159159
enum_dispatch = "0.3.13"
160160
gxhash = "3.4.1"
161+
papaya = { version = "0.1.3", features = ["serde"] }
162+
seize = "0.4.5"
161163

162164
[dependencies.hyper-util]
163165
version = "0.1"

benches/cluster_map.rs

+3-8
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@ mod serde {
1717
fn serialize_to_protobuf(cm: &ClusterMap) -> Vec<Any> {
1818
let mut resources = Vec::new();
1919

20-
for cluster in cm.iter() {
20+
for (key, cluster) in cm.pin().iter() {
2121
resources.push(
2222
Resource::Cluster(Cluster {
23-
locality: cluster.key().clone().map(From::from),
23+
locality: key.clone().map(From::from),
2424
endpoints: cluster
2525
.endpoints
2626
.iter()
@@ -110,12 +110,7 @@ mod ops {
110110
use shared::{gen_cluster_map, GenCluster};
111111

112112
fn compute_hash<const S: u64>(gc: &GenCluster) -> usize {
113-
let mut total_endpoints = 0;
114-
115-
for kv in gc.cm.iter() {
116-
total_endpoints += kv.endpoints.len();
117-
}
118-
113+
let total_endpoints = gc.cm.pin().values().map(|v| v.endpoints.len()).sum();
119114
assert_eq!(total_endpoints, gc.total_endpoints);
120115
total_endpoints
121116
}

benches/shared.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -676,7 +676,7 @@ pub fn gen_cluster_map<const S: u64>(token_kind: TokenKind) -> GenCluster {
676676

677677
// Now actually insert the endpoints, now that the order of keys is established,
678678
// annoying, but note we split out iteration versus insertion, otherwise we deadlock
679-
let keys: Vec<_> = cm.iter().map(|kv| kv.key().clone()).collect();
679+
let keys: Vec<_> = cm.pin().iter().map(|(key, _)| key.clone()).collect();
680680
let mut sets = std::collections::BTreeMap::new();
681681

682682
let mut token_generator = match token_kind {

benches/token_router.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ fn token_router(b: Bencher, token_kind: &str) {
1414
let cm = std::sync::Arc::new(gc.cm);
1515

1616
// Calculate the amount of bytes for all the tokens
17-
for eps in cm.iter() {
18-
for ep in &eps.value().endpoints {
17+
for eps in cm.pin().values() {
18+
for ep in &eps.endpoints {
1919
for tok in &ep.metadata.known.tokens {
2020
tokens.push(tok.clone());
2121
}

crates/test/tests/mesh.rs

+3-2
Original file line numberDiff line numberDiff line change
@@ -189,8 +189,9 @@ trace_test!(datacenter_discovery, {
189189
#[track_caller]
190190
fn assert_config(config: &quilkin::Config, datacenter: &quilkin::config::Datacenter) {
191191
let dcs = config.datacenters().read();
192-
let ipv4_dc = dcs.get(&std::net::Ipv4Addr::LOCALHOST.into());
193-
let ipv6_dc = dcs.get(&std::net::Ipv6Addr::LOCALHOST.into());
192+
let pin = dcs.pin();
193+
let ipv4_dc = pin.get(&std::net::Ipv4Addr::LOCALHOST.into());
194+
let ipv6_dc = pin.get(&std::net::Ipv6Addr::LOCALHOST.into());
194195

195196
match (ipv4_dc, ipv6_dc) {
196197
(Some(dc), None) => assert_eq!(&*dc, datacenter),

deny.toml

+1
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ allow = ["Apache-2.0", "MIT", "ISC", "BSD-3-Clause", "Unicode-3.0"]
6060
exceptions = [
6161
{ crate = "adler32", allow = ["Zlib"] },
6262
{ crate = "foldhash", allow = ["Zlib"] },
63+
{ crate = "atomic-wait", allow = ["BSD-2-Clause"] },
6364
# This license should not really be used for code, but here we are
6465
{ crate = "notify", allow = ["CC0-1.0"] },
6566
{ crate = "ring", allow = ["OpenSSL"] },

0 commit comments

Comments
 (0)