Skip to content

Commit 09c4100

Browse files
committed
Use papaya concurrent hash map
So we can use atomic operations on the hash maps used in storage, and thus avoid the need of using an `RwLock`.
1 parent 4391859 commit 09c4100

File tree

6 files changed

+244
-346
lines changed

6 files changed

+244
-346
lines changed

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ axum = { version = "0.8.1" }
1111
heed = "0.21.0"
1212
indexmap = { version = "2.7.1", features = ["serde"] }
1313
ordered-float = { version = "4.6", features = ["serde"] }
14+
papaya = "0.1.8"
1415
pest = "2.7.15"
1516
pest_derive = "2.7.15"
1617
roaring = { version = "0.10.10", features = ["serde"] }

examples/simple.rs

Lines changed: 19 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@ use delta_search::query::{
99
use delta_search::Engine;
1010
use time::{Date, Month};
1111

12-
#[tokio::main]
13-
async fn main() -> Result<(), Error> {
12+
fn main() -> Result<(), Error> {
1413
println!("Welcome to the simple Player search!");
1514

1615
let michael_jordan = michael_jordan();
@@ -38,27 +37,25 @@ async fn main() -> Result<(), Error> {
3837

3938
let engine = Engine::with_entities(vec![entity]);
4039

41-
let filter_options = engine.options(name, OptionsQueryExecution::new()).await;
40+
let filter_options = engine.options(name, OptionsQueryExecution::new());
4241

4342
println!("Filter possibilities:\n{:?}\n", filter_options);
4443

4544
let query = QueryExecution::new()
4645
.with_filter(CompositeFilter::parse("sport = \"Basketball\"")?)
4746
.with_sort(Sort::new("score").with_direction(SortDirection::DESC));
48-
let players = engine.query(name, query).await;
47+
let players = engine.query(name, query);
4948

5049
println!("Basketball players sorted by score:\n{:?}\n", players);
5150

52-
let players = engine
53-
.query(
54-
name,
55-
QueryExecution::new()
56-
.with_filter(CompositeFilter::parse(
57-
"birth_date >= \"1980-01-01\" && birth_date <= \"1989-12-31\"",
58-
)?)
59-
.with_sort(Sort::new("name").with_direction(SortDirection::ASC)),
60-
)
61-
.await;
51+
let players = engine.query(
52+
name,
53+
QueryExecution::new()
54+
.with_filter(CompositeFilter::parse(
55+
"birth_date >= \"1980-01-01\" && birth_date <= \"1989-12-31\"",
56+
)?)
57+
.with_sort(Sort::new("name").with_direction(SortDirection::ASC)),
58+
);
6259

6360
println!("Players born in the 80s:\n{:?}\n", players);
6461

@@ -71,7 +68,6 @@ async fn main() -> Result<(), Error> {
7168

7269
engine
7370
.store_deltas(name, &delta_scope, &switch_sports)
74-
.await
7571
.unwrap();
7672

7773
let query = QueryExecution::new()
@@ -83,7 +79,7 @@ async fn main() -> Result<(), Error> {
8379
1,
8480
)?));
8581

86-
let players = engine.query(name, query).await?;
82+
let players = engine.query(name, query)?;
8783

8884
println!(
8985
"Basketball players sorted by score after switching sports in 2023:\n{:?}\n",
@@ -97,9 +93,7 @@ async fn main() -> Result<(), Error> {
9793

9894
let delta_scope = DeltaScope::context(0, Date::from_calendar_date(2023, Month::January, 1)?);
9995

100-
engine
101-
.store_deltas(name, &delta_scope, &lower_scores)
102-
.await?;
96+
engine.store_deltas(name, &delta_scope, &lower_scores)?;
10397

10498
let query = QueryExecution::new()
10599
.with_sort(Sort::new("score").with_direction(SortDirection::DESC))
@@ -108,21 +102,19 @@ async fn main() -> Result<(), Error> {
108102
Date::from_calendar_date(2024, Month::January, 1)?,
109103
));
110104

111-
let players = engine.query(name, query).await?;
105+
let players = engine.query(name, query)?;
112106

113107
println!(
114108
"Players sorted by score after decreasing their score by 1:\n{:?}\n",
115109
players
116110
);
117111

118-
engine.remove(name, &david_id).await?;
112+
engine.remove(name, &david_id)?;
119113

120-
let players = engine
121-
.query(
122-
name,
123-
QueryExecution::new().with_filter(CompositeFilter::parse("sport = \"Basketball\"")?),
124-
)
125-
.await?;
114+
let players = engine.query(
115+
name,
116+
QueryExecution::new().with_filter(CompositeFilter::parse("sport = \"Basketball\"")?),
117+
)?;
126118

127119
println!(
128120
"Players playing basketball after deletion:\n{:?}\n",

src/fixtures.rs

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -78,17 +78,16 @@ impl TestRunners {
7878
}
7979
}
8080

81-
pub(crate) async fn start_runner(&self, items: Vec<DataItem>) -> TestPlayerRunner {
82-
let mut runner = self
81+
pub(crate) fn start_runner(&self, items: Vec<DataItem>) -> TestPlayerRunner {
82+
let runner = self
8383
.runners
8484
.lock()
8585
.unwrap()
8686
.pop()
8787
.expect("No storages left - make sure you didn't exceed the test count");
8888

89-
if let Some(entry) = runner.engine.entities.get_mut(&runner.name) {
90-
let mut entity = entry.write().await;
91-
carry_players(items, &mut entity);
89+
if let Some(entity) = runner.engine.entities.pin().get(&runner.name) {
90+
carry_players(items, entity);
9291
}
9392

9493
runner
@@ -122,13 +121,13 @@ pub fn create_player_from_index(index: u64) -> DataItem {
122121
}
123122

124123
pub fn create_players_storage(name: &str, data: Vec<DataItem>) -> EntityStorage {
125-
let mut storage = StorageBuilder::new(name).build().unwrap();
126-
carry_players(data, &mut storage);
124+
let storage = StorageBuilder::new(name).build().unwrap();
125+
carry_players(data, &storage);
127126

128127
storage
129128
}
130129

131-
fn carry_players(items: Vec<DataItem>, storage: &mut EntityStorage) {
130+
fn carry_players(items: Vec<DataItem>, storage: &EntityStorage) {
132131
storage.carry(&items).unwrap();
133132

134133
storage

0 commit comments

Comments
 (0)