@@ -16,8 +16,8 @@ import ./sales/statemachine
16
16
import ./ sales/ slotqueue
17
17
import ./ sales/ states/ preparing
18
18
import ./ sales/ states/ unknown
19
- import ./ utils/ then
20
19
import ./ utils/ trackedfutures
20
+ import ./ utils/ exceptions
21
21
22
22
# # Sales holds a list of available storage that it may sell.
23
23
# #
@@ -325,7 +325,7 @@ proc onSlotFreed(sales: Sales,
325
325
326
326
trace " slot freed, adding to queue"
327
327
328
- proc addSlotToQueue () {.async .} =
328
+ proc addSlotToQueue () {.async : (raises: []) .} =
329
329
let context = sales.context
330
330
let market = context.market
331
331
let queue = context.slotQueue
@@ -336,25 +336,22 @@ proc onSlotFreed(sales: Sales,
336
336
trace " no existing request metadata, getting request info from contract"
337
337
# if there's no existing slot for that request, retrieve the request
338
338
# from the contract.
339
- without request =? await market.getRequest (requestId):
340
- error " unknown request in contract"
341
- return
342
-
343
- found = SlotQueueItem .init (request, slotIndex.truncate (uint16 ))
339
+ try :
340
+ without request =? await market.getRequest (requestId):
341
+ error " unknown request in contract"
342
+ return
343
+
344
+ found = SlotQueueItem .init (request, slotIndex.truncate (uint16 ))
345
+ except CancelledError :
346
+ discard # do not propagate as addSlotToQueue was asyncSpawned
347
+ except CatchableError as e:
348
+ error " failed to get request from contract and add slots to queue" ,
349
+ error = e.msgDetail
344
350
345
351
if err =? queue.push (found).errorOption:
346
- raise err
352
+ error " failed to push slot items to queue " , error = err.msgDetail
347
353
348
- addSlotToQueue ()
349
- .track (sales)
350
- .catch (proc (err: ref CatchableError ) =
351
- if err of SlotQueueItemExistsError :
352
- error " Failed to push item to queue becaue it already exists"
353
- elif err of QueueNotRunningError :
354
- warn " Failed to push item to queue becaue queue is not running"
355
- else :
356
- warn " Error adding request to SlotQueue" , error = err.msg
357
- )
354
+ asyncSpawn addSlotToQueue ().track (sales)
358
355
359
356
proc subscribeRequested (sales: Sales ) {.async .} =
360
357
let context = sales.context
@@ -482,7 +479,7 @@ proc subscribeSlotReservationsFull(sales: Sales) {.async.} =
482
479
except CatchableError as e:
483
480
error " Unable to subscribe to slot filled events" , msg = e.msg
484
481
485
- proc startSlotQueue (sales: Sales ) {. async .} =
482
+ proc startSlotQueue (sales: Sales ) =
486
483
let slotQueue = sales.context.slotQueue
487
484
let reservations = sales.context.reservations
488
485
@@ -518,7 +515,7 @@ proc unsubscribe(sales: Sales) {.async.} =
518
515
519
516
proc start * (sales: Sales ) {.async .} =
520
517
await sales.load ()
521
- await sales.startSlotQueue ()
518
+ sales.startSlotQueue ()
522
519
await sales.subscribe ()
523
520
sales.running = true
524
521
0 commit comments