From 5f36f384facaf6ddb29862c2c07ff72346330684 Mon Sep 17 00:00:00 2001 From: Mark Spanbroek Date: Thu, 13 Mar 2025 13:59:22 +0100 Subject: [PATCH] sales: keep track of slot queue item in sales agent --- codex/sales.nim | 29 +++++++++-------------------- codex/sales/salesagent.nim | 9 ++++++++- codex/sales/salesdata.nim | 2 ++ codex/sales/slotqueue.nim | 3 +++ 4 files changed, 22 insertions(+), 21 deletions(-) diff --git a/codex/sales.nim b/codex/sales.nim index 4d3f1acc..29f3d275 100644 --- a/codex/sales.nim +++ b/codex/sales.nim @@ -155,24 +155,12 @@ proc cleanUp( # Re-add items back into the queue to prevent small availabilities from # draining the queue. Seen items will be ordered last. - let collateral = data.ask.collateralPerSlot().stuint(256) - if reprocessSlot and request =? data.request: - try: - let queue = sales.context.slotQueue - var seenItem = SlotQueueItem.init( - data.requestId, - data.slotIndex.uint16, - data.ask, - request.expiry, - seen = true, - collateral = collateral, - ) - trace "pushing ignored item to queue, marked as seen" - if err =? queue.push(seenItem).errorOption: - error "failed to readd slot to queue", errorType = $(type err), error = err.msg - except MarketError as e: - error "Failed to re-add item back to the slot queue.", error = e.msg - return + if reprocessSlot and request =? data.request and var item =? agent.data.slotQueueItem: + let queue = sales.context.slotQueue + item.seen = true + trace "pushing ignored item to queue, marked as seen" + if err =? queue.push(item).errorOption: + error "failed to readd slot to queue", errorType = $(type err), error = err.msg await sales.remove(agent) @@ -193,8 +181,9 @@ proc filled( proc processSlot(sales: Sales, item: SlotQueueItem, done: Future[void]) = debug "Processing slot from queue", requestId = item.requestId, slot = item.slotIndex - let agent = - newSalesAgent(sales.context, item.requestId, item.slotIndex, none StorageRequest) + let agent = newSalesAgent( + sales.context, item.requestId, item.slotIndex, none StorageRequest, some item + ) agent.onCleanUp = proc( reprocessSlot = false, returnedCollateral = UInt256.none diff --git a/codex/sales/salesagent.nim b/codex/sales/salesagent.nim index 61f3a9d3..ffacc59a 100644 --- a/codex/sales/salesagent.nim +++ b/codex/sales/salesagent.nim @@ -11,6 +11,7 @@ import ./statemachine import ./salescontext import ./salesdata import ./reservations +import ./slotqueue export reservations @@ -42,10 +43,16 @@ proc newSalesAgent*( requestId: RequestId, slotIndex: uint64, request: ?StorageRequest, + slotQueueItem = SlotQueueItem.none, ): SalesAgent = var agent = SalesAgent.new() agent.context = context - agent.data = SalesData(requestId: requestId, slotIndex: slotIndex, request: request) + agent.data = SalesData( + requestId: requestId, + slotIndex: slotIndex, + request: request, + slotQueueItem: slotQueueItem, + ) return agent proc retrieveRequest*(agent: SalesAgent) {.async.} = diff --git a/codex/sales/salesdata.nim b/codex/sales/salesdata.nim index de8eccb5..ec16fef1 100644 --- a/codex/sales/salesdata.nim +++ b/codex/sales/salesdata.nim @@ -2,6 +2,7 @@ import pkg/chronos import ../contracts/requests import ../market import ./reservations +import ./slotqueue type SalesData* = ref object requestId*: RequestId @@ -10,3 +11,4 @@ type SalesData* = ref object slotIndex*: uint64 cancelled*: Future[void] reservation*: ?Reservation + slotQueueItem*: ?SlotQueueItem diff --git a/codex/sales/slotqueue.nim b/codex/sales/slotqueue.nim index 60700d44..35192e5c 100644 --- a/codex/sales/slotqueue.nim +++ b/codex/sales/slotqueue.nim @@ -215,6 +215,9 @@ proc collateralPerByte*(self: SlotQueueItem): UInt256 = proc seen*(self: SlotQueueItem): bool = self.seen +proc `seen=`*(self: var SlotQueueItem, seen: bool) = + self.seen = seen + proc running*(self: SlotQueue): bool = self.running