Add queue pausing and prevention of small availabilities from clearing the queue (#188)
Co-authored-by: Adam Uhlíř <adam@uhlir.dev>
This commit is contained in:
parent
64c91dd792
commit
560a3c40fa
|
@ -170,10 +170,11 @@ state is validated.
|
||||||
### Sort order
|
### Sort order
|
||||||
|
|
||||||
Slots in the queue should be sorted in the following order:
|
Slots in the queue should be sorted in the following order:
|
||||||
1. Profit (descending)<sup>1</sup>
|
1. Seen flag (`true` flag should be lower than `false`)
|
||||||
2. Collateral required (ascending)
|
2. Profit (descending)<sup>1</sup>
|
||||||
3. Time before expiry (descending)
|
3. Collateral required (ascending)
|
||||||
4. Dataset size (ascending)
|
4. Time before expiry (descending)
|
||||||
|
5. Dataset size (ascending)
|
||||||
|
|
||||||
<sup>1</sup> While profit cannot yet be calculated correctly as this calculation will
|
<sup>1</sup> While profit cannot yet be calculated correctly as this calculation will
|
||||||
involve bandwidth incentives, profit can be estimated as `duration * reward`
|
involve bandwidth incentives, profit can be estimated as `duration * reward`
|
||||||
|
@ -208,6 +209,30 @@ mechanism](https://github.com/codex-storage/codex-research/blob/master/design/ma
|
||||||
If the host is not allowed to fill the slot, the sales process will exit and the
|
If the host is not allowed to fill the slot, the sales process will exit and the
|
||||||
host will process the top slot in the queue.
|
host will process the top slot in the queue.
|
||||||
|
|
||||||
|
#### Preventing continual processing when there are small availabilities
|
||||||
|
If the processed slot cannot continue because there are no availabilities, the
|
||||||
|
slot should be marked as `seen` and put back into the queue. This flag will
|
||||||
|
cause the slot to be ordered lower in the heap queue. If, upon processing
|
||||||
|
a slot, the slot item already has a `seen` flag set, the queue should be
|
||||||
|
paused.
|
||||||
|
|
||||||
|
This serves to prevent availabilities that are small (in available bytes) from
|
||||||
|
emptying the queue.
|
||||||
|
|
||||||
|
#### Pausing the queue
|
||||||
|
When availabilities are modified or removed, and there are no availabilities
|
||||||
|
left, the queue should be paused.
|
||||||
|
|
||||||
|
A paused queue will wait until it is unpaused before continuing to process items
|
||||||
|
in the queue. This prevents unnecessarily popping items off the queue.
|
||||||
|
|
||||||
|
#### Unpausing the queue
|
||||||
|
When availabilities are modified or added, the queue should be unpaused if it
|
||||||
|
was paused and any slots in the queue should have their `seen` flag cleared.
|
||||||
|
Additionally, when slots are pushed to the queue, the queue should be unpaused
|
||||||
|
if it was paused, however the `seen` flags of existing queue items should not be
|
||||||
|
cleared.
|
||||||
|
|
||||||
#### Queue workers
|
#### Queue workers
|
||||||
Each time an item in the queue is processed, it is assigned to a workers. The
|
Each time an item in the queue is processed, it is assigned to a workers. The
|
||||||
number of allowed workers can be specified during queue creation. Specifying a
|
number of allowed workers can be specified during queue creation. Specifying a
|
||||||
|
|
Loading…
Reference in New Issue