From 7f59d7dae509b97dc2630d13e3b22735bd5eb58b Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Wed, 3 May 2023 15:13:19 -0400 Subject: [PATCH] Temporarily replace generational-arena with a fake version. This fake version is completely silly, but it will do the job until we figure out our MPL2 concerns. --- Cargo.lock | 80 ++++++++++++----------------- crates/arti-rpcserver/Cargo.toml | 4 +- crates/arti-rpcserver/src/objmap.rs | 78 +++++++++++++++++++++++++++- 3 files changed, 112 insertions(+), 50 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d204fef81..8733ff615 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -23,7 +23,7 @@ version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "433cfd6710c9986c576a25ca913c39d66a6474107b406f34f91d4a8923395241" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "cipher", "cpufeatures", "zeroize", @@ -96,7 +96,7 @@ dependencies = [ "arti-client", "arti-rpcserver", "async-ctrlc", - "cfg-if 1.0.0", + "cfg-if", "clap", "config", "derive_builder_fork_arti", @@ -159,7 +159,7 @@ name = "arti-client" version = "0.9.0" dependencies = [ "anyhow", - "cfg-if 1.0.0", + "cfg-if", "derive_builder_fork_arti", "derive_more", "directories", @@ -236,7 +236,6 @@ dependencies = [ "erased-serde", "futures", "futures-await-test", - "generational-arena", "pin-project", "serde", "serde_json", @@ -257,7 +256,7 @@ dependencies = [ "arti", "arti-client", "async-trait", - "cfg-if 1.0.0", + "cfg-if", "clap", "config", "futures", @@ -365,7 +364,7 @@ checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" dependencies = [ "async-lock", "autocfg", - "cfg-if 1.0.0", + "cfg-if", "concurrent-queue", "futures-lite", "log", @@ -408,7 +407,7 @@ dependencies = [ "async-lock", "autocfg", "blocking", - "cfg-if 1.0.0", + "cfg-if", "event-listener", "futures-lite", "rustix 0.37.17", @@ -542,7 +541,7 @@ checksum = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca" dependencies = [ "addr2line", "cc", - "cfg-if 1.0.0", + "cfg-if", "libc", "miniz_oxide 0.6.2", "object", @@ -666,12 +665,6 @@ dependencies = [ "jobserver", ] -[[package]] -name = "cfg-if" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" - [[package]] name = "cfg-if" version = "1.0.0" @@ -814,7 +807,7 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", ] [[package]] @@ -823,7 +816,7 @@ version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "crossbeam-utils", ] @@ -833,7 +826,7 @@ version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d1cfb3ea8a53f37c40dea2c7bedcbd88bdfae54f5e2175d6ecaff1c988353add" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "crossbeam-utils", ] @@ -843,7 +836,7 @@ version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", ] [[package]] @@ -1028,7 +1021,7 @@ version = "5.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "907076dfda823b0b36d2a1bb5f90c96660a5bbcd7729e10727f07858f22c4edc" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "hashbrown", "lock_api", "once_cell", @@ -1324,7 +1317,7 @@ version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5cbc844cecaee9d4443931972e1289c8ff485cb4cc2767cb03ca139ed6885153" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "libc", "redox_syscall 0.2.16", "windows-sys 0.48.0", @@ -1550,15 +1543,6 @@ dependencies = [ "slab", ] -[[package]] -name = "generational-arena" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e1d3b771574f62d0548cee0ad9057857e9fc25d7a3335f140c84f6acd0bf601" -dependencies = [ - "cfg-if 0.1.10", -] - [[package]] name = "generic-array" version = "0.14.7" @@ -1575,7 +1559,7 @@ version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "libc", "wasi 0.9.0+wasi-snapshot-preview1", ] @@ -1586,7 +1570,7 @@ version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "js-sys", "libc", "wasi 0.11.0+wasi-snapshot-preview1", @@ -1885,7 +1869,7 @@ version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", ] [[package]] @@ -2055,7 +2039,7 @@ version = "0.4.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "value-bag", ] @@ -2212,7 +2196,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a" dependencies = [ "bitflags 1.3.2", - "cfg-if 1.0.0", + "cfg-if", "libc", "static_assertions", ] @@ -2391,7 +2375,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "01b8574602df80f7b85fdfc5392fa884a4e3b3f4f35402c070ab34c3d3f78d56" dependencies = [ "bitflags 1.3.2", - "cfg-if 1.0.0", + "cfg-if", "foreign-types", "libc", "once_cell", @@ -2472,7 +2456,7 @@ version = "0.9.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "libc", "redox_syscall 0.2.16", "smallvec", @@ -2627,7 +2611,7 @@ checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" dependencies = [ "autocfg", "bitflags 1.3.2", - "cfg-if 1.0.0", + "cfg-if", "concurrent-queue", "libc", "log", @@ -3081,7 +3065,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1da19961cf7993af1accc104121777a15cb97e666dbc7727673ca82c9436cda" dependencies = [ "anyhow", - "cfg-if 1.0.0", + "cfg-if", "libc", "rustix 0.36.13", "thiserror", @@ -3245,7 +3229,7 @@ version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "cpufeatures", "digest 0.10.6", "sha1-asm", @@ -3267,7 +3251,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" dependencies = [ "block-buffer 0.9.0", - "cfg-if 1.0.0", + "cfg-if", "cpufeatures", "digest 0.9.0", "opaque-debug", @@ -3279,7 +3263,7 @@ version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "cpufeatures", "digest 0.10.6", ] @@ -3521,7 +3505,7 @@ version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "fastrand", "redox_syscall 0.3.5", "rustix 0.37.17", @@ -3580,7 +3564,7 @@ version = "1.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "once_cell", ] @@ -4255,7 +4239,7 @@ version = "0.7.0" dependencies = [ "base64ct", "by_address", - "cfg-if 1.0.0", + "cfg-if", "derive_builder_fork_arti", "derive_more", "educe", @@ -4582,7 +4566,7 @@ version = "0.1.36" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2fce9567bd60a67d08a16488756721ba392f24f29006402881e43b19aac64307" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -4690,7 +4674,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4f7f83d1e4a0e4358ac54c5c3681e5d7da5efc5a7a632c90bb6d6669ddd9bc26" dependencies = [ "async-trait", - "cfg-if 1.0.0", + "cfg-if", "data-encoding", "enum-as-inner", "futures-channel", @@ -4909,7 +4893,7 @@ version = "0.2.84" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "wasm-bindgen-macro", ] @@ -4934,7 +4918,7 @@ version = "0.4.34" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "js-sys", "wasm-bindgen", "web-sys", diff --git a/crates/arti-rpcserver/Cargo.toml b/crates/arti-rpcserver/Cargo.toml index 8e0e4e301..b9ba0893d 100644 --- a/crates/arti-rpcserver/Cargo.toml +++ b/crates/arti-rpcserver/Cargo.toml @@ -21,7 +21,9 @@ asynchronous-codec = { version = "0.6.0", features = ["json"] } bytes = "1" erased-serde = "0.3.25" futures = "0.3.14" -generational-arena = "0.2.8" +# I hope we can use this again, assuming our MPL-2.0 issues get straightened +# out. +# generational-arena = "0.2.8" pin-project = "1" serde = { version = "1.0.103", features = ["derive"] } serde_json = "1.0.50" diff --git a/crates/arti-rpcserver/src/objmap.rs b/crates/arti-rpcserver/src/objmap.rs index dbdc2bde9..6ac65c70c 100644 --- a/crates/arti-rpcserver/src/objmap.rs +++ b/crates/arti-rpcserver/src/objmap.rs @@ -8,9 +8,85 @@ use std::any; use std::collections::HashMap; use std::sync::{Arc, Weak}; -use generational_arena::Arena; +use fake_generational_arena::{self as generational_arena, FakeArena as Arena}; +// use generational_arena::Arena; use tor_rpcbase as rpc; +/// Fake implementation of `generational_arena` while we sort out which MPL-2.0 +/// they meant. +/// +/// (See issue #845) +/// +/// TODO RPC: Replace this with `generational_arena` if they agree with us that +/// they meant "no exhibit B", or with something else if they don't. +mod fake_generational_arena { + #![allow(missing_docs, unreachable_pub)] + #![allow(clippy::missing_docs_in_private_items)] + use std::collections::HashMap; + #[derive(Copy, Clone, Debug, Eq, PartialEq)] + pub(crate) struct Index(u64); + #[derive(Clone, Debug)] + pub(crate) struct FakeArena { + nextkey: u64, + map: HashMap, + } + + impl Index { + pub fn into_raw_parts(self) -> (usize, u64) { + (0, self.0) + } + pub fn from_raw_parts(_: usize, idx: u64) -> Self { + Self(idx) + } + } + impl FakeArena { + pub fn new() -> Self { + Self { + nextkey: 0, + map: HashMap::new(), + } + } + pub fn capacity(&self) -> usize { + self.map.capacity() + } + pub fn len(&self) -> usize { + self.map.len() + } + pub fn reserve(&mut self, additional: usize) { + self.map.reserve(additional); + } + pub fn get(&self, index: Index) -> Option<&T> { + self.map.get(&index.0) + } + pub fn get_mut(&mut self, index: Index) -> Option<&mut T> { + self.map.get_mut(&index.0) + } + pub fn insert(&mut self, value: T) -> Index { + let key = self.nextkey; + self.nextkey += 1; + self.map.insert(key, value); + Index(key) + } + pub fn remove(&mut self, index: Index) -> Option { + self.map.remove(&index.0) + } + pub fn iter(&self) -> impl Iterator { + self.map.iter().map(|(idx, val)| (Index(*idx), val)) + } + pub fn retain(&mut self, mut func: F) + where + F: FnMut(Index, &T) -> bool, + { + self.map.retain(|k, v| func(Index(*k), v)); + } + } + impl Default for FakeArena { + fn default() -> Self { + Self::new() + } + } +} + /// Strong or weak reference to an Object. enum ObjRef { /// A strong reference