164 lines
3.6 KiB
Go
164 lines
3.6 KiB
Go
package sealtasks
|
|
|
|
import (
|
|
"fmt"
|
|
"strconv"
|
|
"strings"
|
|
|
|
"golang.org/x/xerrors"
|
|
|
|
"github.com/filecoin-project/go-state-types/abi"
|
|
)
|
|
|
|
type TaskType string
|
|
|
|
const (
|
|
TTDataCid TaskType = "seal/v0/datacid"
|
|
TTAddPiece TaskType = "seal/v0/addpiece"
|
|
TTPreCommit1 TaskType = "seal/v0/precommit/1"
|
|
TTPreCommit2 TaskType = "seal/v0/precommit/2"
|
|
TTCommit1 TaskType = "seal/v0/commit/1"
|
|
TTCommit2 TaskType = "seal/v0/commit/2"
|
|
|
|
TTFinalize TaskType = "seal/v0/finalize"
|
|
TTFinalizeUnsealed TaskType = "seal/v0/finalizeunsealed"
|
|
|
|
TTFetch TaskType = "seal/v0/fetch"
|
|
TTUnseal TaskType = "seal/v0/unseal"
|
|
|
|
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"
|
|
)
|
|
|
|
var order = map[TaskType]int{
|
|
TTRegenSectorKey: 11, // least priority
|
|
TTDataCid: 10,
|
|
TTAddPiece: 9,
|
|
TTReplicaUpdate: 8,
|
|
TTProveReplicaUpdate2: 7,
|
|
TTProveReplicaUpdate1: 6,
|
|
TTPreCommit1: 5,
|
|
TTPreCommit2: 4,
|
|
TTCommit2: 3,
|
|
TTCommit1: 2,
|
|
TTUnseal: 1,
|
|
|
|
TTFetch: -1,
|
|
TTDownloadSector: -2,
|
|
TTFinalize: -3,
|
|
TTFinalizeUnsealed: -4,
|
|
|
|
TTGenerateWindowPoSt: -5,
|
|
TTGenerateWinningPoSt: -6, // most priority
|
|
}
|
|
|
|
var shortNames = map[TaskType]string{
|
|
TTDataCid: "DC",
|
|
TTAddPiece: "AP",
|
|
|
|
TTPreCommit1: "PC1",
|
|
TTPreCommit2: "PC2",
|
|
TTCommit1: "C1",
|
|
TTCommit2: "C2",
|
|
|
|
TTFinalize: "FIN",
|
|
TTFinalizeUnsealed: "FUS",
|
|
|
|
TTFetch: "GET",
|
|
TTUnseal: "UNS",
|
|
|
|
TTReplicaUpdate: "RU",
|
|
TTProveReplicaUpdate1: "PR1",
|
|
TTProveReplicaUpdate2: "PR2",
|
|
TTRegenSectorKey: "GSK",
|
|
TTFinalizeReplicaUpdate: "FRU",
|
|
|
|
TTDownloadSector: "DL",
|
|
|
|
TTGenerateWindowPoSt: "WDP",
|
|
TTGenerateWinningPoSt: "WNP",
|
|
}
|
|
|
|
const (
|
|
WorkerSealing = "Sealing"
|
|
WorkerWinningPoSt = "WinPost"
|
|
WorkerWindowPoSt = "WdPoSt"
|
|
)
|
|
|
|
func (a TaskType) WorkerType() string {
|
|
switch a {
|
|
case TTGenerateWinningPoSt:
|
|
return WorkerWinningPoSt
|
|
case TTGenerateWindowPoSt:
|
|
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
|
|
}
|
|
|
|
func (a TaskType) Less(b TaskType) bool {
|
|
return order[a] < order[b]
|
|
}
|
|
|
|
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)
|
|
}
|