Skip to content

Commit

Permalink
Replace in memory auction vector with HashMap
Browse files Browse the repository at this point in the history
  • Loading branch information
danimhr committed Feb 21, 2025
1 parent 1e6bb2d commit 50164ab
Show file tree
Hide file tree
Showing 7 changed files with 31 additions and 15 deletions.
15 changes: 10 additions & 5 deletions auction-server/src/auction/repository/add_auction.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,15 @@ use {
};

impl<T: ChainTrait> Repository<T> {
#[tracing::instrument(skip_all)]
async fn add_in_memory_auction(&self, auction: entities::Auction<T>) {
self.in_memory_store
.auctions
.write()
.await
.insert(auction.id, auction);
}

#[tracing::instrument(skip_all, name = "add_auction_repo", fields(auction_id))]
pub async fn add_auction(
&self,
Expand All @@ -37,11 +46,7 @@ impl<T: ChainTrait> Repository<T> {

self.remove_in_memory_pending_bids(auction.bids.as_slice())
.await;
self.in_memory_store
.auctions
.write()
.await
.push(auction.clone());
self.add_in_memory_auction(auction.clone()).await;
Ok(auction)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,11 @@ impl<T: ChainTrait> Repository<T> {
&self,
auction_id: entities::AuctionId,
) -> Option<entities::Auction<T>> {
self.get_in_memory_auctions()
self.in_memory_store
.auctions
.read()
.await
.into_iter()
.find(|auction| auction.id == auction_id)
.get(&auction_id)
.cloned()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,12 @@ use {

impl<T: ChainTrait> Repository<T> {
pub async fn get_in_memory_auctions(&self) -> Vec<entities::Auction<T>> {
self.in_memory_store.auctions.read().await.clone()
self.in_memory_store
.auctions
.read()
.await
.values()
.cloned()
.collect()
}
}
4 changes: 2 additions & 2 deletions auction-server/src/auction/repository/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ pub struct ChainStoreEvm {}
#[derive(Debug)]
pub struct InMemoryStore<T: ChainTrait> {
pub pending_bids: RwLock<HashMap<entities::PermissionKey<T>, Vec<entities::Bid<T>>>>,
pub auctions: RwLock<Vec<entities::Auction<T>>>,
pub auctions: RwLock<HashMap<entities::AuctionId, entities::Auction<T>>>,

pub auction_lock: Mutex<HashMap<entities::PermissionKey<T>, entities::AuctionLock>>,
pub bid_lock: Mutex<HashMap<entities::BidId, entities::BidLock>>,
Expand All @@ -79,7 +79,7 @@ impl<T: ChainTrait> Default for InMemoryStore<T> {
fn default() -> Self {
Self {
pending_bids: RwLock::new(HashMap::new()),
auctions: RwLock::new(Vec::new()),
auctions: RwLock::new(HashMap::new()),
auction_lock: Mutex::new(HashMap::new()),
bid_lock: Mutex::new(HashMap::new()),
chain_store: T::ChainStore::default(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,10 @@ impl<T: ChainTrait> Repository<T> {
#[tracing::instrument(skip_all, fields(auction_id))]
pub async fn remove_in_memory_auction(&self, auction_id: entities::AuctionId) {
tracing::Span::current().record("auction_id", auction_id.to_string());
let mut write_guard = self.in_memory_store.auctions.write().await;
write_guard.retain(|a| a.id != auction_id);
self.in_memory_store
.auctions
.write()
.await
.remove(&auction_id);
}
}
2 changes: 1 addition & 1 deletion auction-server/src/auction/repository/update_bid_status.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ impl<T: ChainTrait> Repository<T> {
) {
if let Some(auction_id) = new_status.get_auction_id() {
let mut write_guard = self.in_memory_store.auctions.write().await;
if let Some(auction) = write_guard.iter_mut().find(|a| a.id == auction_id) {
if let Some(auction) = write_guard.get_mut(&auction_id) {
let bid_index = auction.bids.iter().position(|b| b.id == bid.id);
if let Some(index) = bid_index {
auction.bids[index].status = new_status;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ impl<T: ChainTrait> Repository<T> {
pub async fn update_in_memory_auction(&self, auction: entities::Auction<T>) {
tracing::Span::current().record("auction_id", auction.id.to_string());
let mut write_gaurd = self.in_memory_store.auctions.write().await;
match write_gaurd.iter_mut().find(|a| a.id == auction.id) {
match write_gaurd.get_mut(&auction.id) {
Some(a) => {
*a = auction;
}
Expand Down

0 comments on commit 50164ab

Please sign in to comment.