lotus/storage/sealer/sealtasks/task.go

161 lines
3.4 KiB
Go
Raw Normal View History

2020-03-23 11:40:02 +00:00
package sealtasks
import (
"fmt"
"strconv"
"strings"
2022-05-25 15:30:00 +00:00
"golang.org/x/xerrors"
"github.com/filecoin-project/go-state-types/abi"
)
2020-03-23 11:40:02 +00:00
type TaskType string
const (
2022-04-26 16:22:52 +00:00
TTDataCid TaskType = "seal/v0/datacid"
2020-03-23 11:40:02 +00:00
TTAddPiece TaskType = "seal/v0/addpiece"
TTPreCommit1 TaskType = "seal/v0/precommit/1"
TTPreCommit2 TaskType = "seal/v0/precommit/2"
TTCommit1 TaskType = "seal/v0/commit/1"
2020-03-23 11:40:02 +00:00
TTCommit2 TaskType = "seal/v0/commit/2"
TTFinalize TaskType = "seal/v0/finalize"
2020-04-27 12:55:37 +00:00
TTFetch TaskType = "seal/v0/fetch"
TTUnseal TaskType = "seal/v0/unseal"
2022-02-02 20:23:35 +00:00
TTReplicaUpdate TaskType = "seal/v0/replicaupdate"
TTProveReplicaUpdate1 TaskType = "seal/v0/provereplicaupdate/1"
TTProveReplicaUpdate2 TaskType = "seal/v0/provereplicaupdate/2"
TTRegenSectorKey TaskType = "seal/v0/regensectorkey"
TTFinalizeReplicaUpdate TaskType = "seal/v0/finalize/replicaupdate"
TTDownloadSector TaskType = "seal/v0/download/sector"
TTGenerateWindowPoSt TaskType = "post/v0/windowproof"
TTGenerateWinningPoSt TaskType = "post/v0/winningproof"
2020-03-23 11:40:02 +00:00
)
2020-05-07 23:38:05 +00:00
var order = map[TaskType]int{
2022-04-26 16:22:52 +00:00
TTRegenSectorKey: 11, // least priority
TTDataCid: 10,
TTAddPiece: 9,
TTReplicaUpdate: 8,
TTProveReplicaUpdate2: 7,
TTProveReplicaUpdate1: 6,
TTPreCommit1: 5,
TTPreCommit2: 4,
TTCommit2: 3,
TTCommit1: 2,
TTUnseal: 1,
2022-01-14 13:11:04 +00:00
TTFetch: -1,
TTDownloadSector: -2,
TTFinalize: -3,
TTGenerateWindowPoSt: -4,
TTGenerateWinningPoSt: -5, // most priority
2020-05-07 23:38:05 +00:00
}
2020-07-21 18:01:25 +00:00
var shortNames = map[TaskType]string{
2022-04-26 16:22:52 +00:00
TTDataCid: "DC",
2020-12-09 11:22:21 +00:00
TTAddPiece: "AP",
2020-07-21 18:01:25 +00:00
TTPreCommit1: "PC1",
TTPreCommit2: "PC2",
2020-12-09 11:22:21 +00:00
TTCommit1: "C1",
TTCommit2: "C2",
2020-07-21 18:01:25 +00:00
TTFinalize: "FIN",
TTFetch: "GET",
TTUnseal: "UNS",
2022-02-02 20:23:35 +00:00
TTReplicaUpdate: "RU",
TTProveReplicaUpdate1: "PR1",
TTProveReplicaUpdate2: "PR2",
TTRegenSectorKey: "GSK",
TTFinalizeReplicaUpdate: "FRU",
TTDownloadSector: "DL",
TTGenerateWindowPoSt: "WDP",
TTGenerateWinningPoSt: "WNP",
2020-07-21 18:01:25 +00:00
}
2022-03-24 22:28:45 +00:00
const (
WorkerSealing = "Sealing"
WorkerWinningPoSt = "WinPost"
WorkerWindowPoSt = "WdPoSt"
)
func (a TaskType) WorkerType() string {
switch a {
2022-03-25 22:54:59 +00:00
case TTGenerateWinningPoSt:
2022-03-24 22:28:45 +00:00
return WorkerWinningPoSt
2022-03-25 22:54:59 +00:00
case TTGenerateWindowPoSt:
2022-03-24 22:28:45 +00:00
return WorkerWindowPoSt
default:
return WorkerSealing
}
}
// SectorSized returns true if the task operates on a specific sector size
func (a TaskType) SectorSized() bool {
return a != TTDataCid
}
func (a TaskType) MuchLess(b TaskType) (bool, bool) {
oa, ob := order[a], order[b]
oneNegative := oa^ob < 0
return oneNegative, oa < ob
}
2020-05-07 23:38:05 +00:00
func (a TaskType) Less(b TaskType) bool {
return order[a] < order[b]
}
2020-07-21 18:01:25 +00:00
func (a TaskType) Short() string {
n, ok := shortNames[a]
if !ok {
return "UNK"
}
return n
}
type SealTaskType struct {
TaskType
abi.RegisteredSealProof
}
func (a TaskType) SealTask(spt abi.RegisteredSealProof) SealTaskType {
return SealTaskType{
TaskType: a,
RegisteredSealProof: spt,
}
}
func SttFromString(s string) (SealTaskType, error) {
var res SealTaskType
sub := strings.SplitN(s, ":", 2)
if len(sub) != 2 {
return res, xerrors.Errorf("seal task type string invalid")
}
res.TaskType = TaskType(sub[1])
spt, err := strconv.ParseInt(sub[0], 10, 64)
if err != nil {
return SealTaskType{}, err
}
res.RegisteredSealProof = abi.RegisteredSealProof(spt)
return res, nil
}
func (a SealTaskType) String() string {
return fmt.Sprintf("%d:%s", a.RegisteredSealProof, a.TaskType)
}