Skip to content

Commit 80a38e8

Browse files
committed
sales: keep track of slot queue item in sales agent
1 parent 3e17207 commit 80a38e8

File tree

4 files changed

+22
-23
lines changed

4 files changed

+22
-23
lines changed

codex/sales.nim

Lines changed: 9 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -148,26 +148,12 @@ proc cleanUp(
148148

149149
# Re-add items back into the queue to prevent small availabilities from
150150
# draining the queue. Seen items will be ordered last.
151-
if data.slotIndex <= uint16.high.uint64 and reprocessSlot and request =? data.request:
152-
let res =
153-
await noCancel sales.context.market.slotCollateral(data.requestId, data.slotIndex)
154-
if res.isErr:
155-
error "Failed to re-add item back to the slot queue: unable to calculate collateral",
156-
error = res.error.msg
157-
else:
158-
let collateral = res.get()
159-
let queue = sales.context.slotQueue
160-
var seenItem = SlotQueueItem.init(
161-
data.requestId,
162-
data.slotIndex.uint16,
163-
data.ask,
164-
request.expiry,
165-
seen = true,
166-
collateral = collateral,
167-
)
168-
trace "pushing ignored item to queue, marked as seen"
169-
if err =? queue.push(seenItem).errorOption:
170-
error "failed to readd slot to queue", errorType = $(type err), error = err.msg
151+
if reprocessSlot and request =? data.request and var item =? agent.data.slotQueueItem:
152+
let queue = sales.context.slotQueue
153+
item.seen = true
154+
trace "pushing ignored item to queue, marked as seen"
155+
if err =? queue.push(item).errorOption:
156+
error "failed to readd slot to queue", errorType = $(type err), error = err.msg
171157

172158
let fut = sales.remove(agent)
173159
sales.trackedFutures.track(fut)
@@ -181,8 +167,9 @@ proc processSlot(
181167
) {.async: (raises: [CancelledError]).} =
182168
debug "Processing slot from queue", requestId = item.requestId, slot = item.slotIndex
183169

184-
let agent =
185-
newSalesAgent(sales.context, item.requestId, item.slotIndex, none StorageRequest)
170+
let agent = newSalesAgent(
171+
sales.context, item.requestId, item.slotIndex, none StorageRequest, some item
172+
)
186173

187174
let completed = newAsyncEvent()
188175

codex/sales/salesagent.nim

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import ./statemachine
1111
import ./salescontext
1212
import ./salesdata
1313
import ./reservations
14+
import ./slotqueue
1415

1516
export reservations
1617

@@ -42,10 +43,16 @@ proc newSalesAgent*(
4243
requestId: RequestId,
4344
slotIndex: uint64,
4445
request: ?StorageRequest,
46+
slotQueueItem = SlotQueueItem.none,
4547
): SalesAgent =
4648
var agent = SalesAgent.new()
4749
agent.context = context
48-
agent.data = SalesData(requestId: requestId, slotIndex: slotIndex, request: request)
50+
agent.data = SalesData(
51+
requestId: requestId,
52+
slotIndex: slotIndex,
53+
request: request,
54+
slotQueueItem: slotQueueItem,
55+
)
4956
return agent
5057

5158
proc retrieveRequest*(agent: SalesAgent) {.async.} =

codex/sales/salesdata.nim

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import pkg/chronos
22
import ../contracts/requests
33
import ../market
44
import ./reservations
5+
import ./slotqueue
56

67
type SalesData* = ref object
78
requestId*: RequestId
@@ -10,3 +11,4 @@ type SalesData* = ref object
1011
slotIndex*: uint64
1112
cancelled*: Future[void]
1213
reservation*: ?Reservation
14+
slotQueueItem*: ?SlotQueueItem

codex/sales/slotqueue.nim

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,9 @@ proc collateralPerByte*(self: SlotQueueItem): UInt256 =
196196
proc seen*(self: SlotQueueItem): bool =
197197
self.seen
198198

199+
proc `seen=`*(self: var SlotQueueItem, seen: bool) =
200+
self.seen = seen
201+
199202
proc running*(self: SlotQueue): bool =
200203
self.running
201204

0 commit comments

Comments
 (0)