92 lines
1.6 KiB
Go
92 lines
1.6 KiB
Go
package stores
|
|
|
|
import (
|
|
"fmt"
|
|
"golang.org/x/xerrors"
|
|
|
|
"github.com/filecoin-project/specs-actors/actors/abi"
|
|
)
|
|
|
|
const (
|
|
FTUnsealed SectorFileType = 1 << iota
|
|
FTSealed
|
|
FTCache
|
|
)
|
|
|
|
const (
|
|
FTNone SectorFileType = 0
|
|
)
|
|
|
|
type SectorFileType int
|
|
|
|
func (t SectorFileType) String() string {
|
|
switch t {
|
|
case FTUnsealed:
|
|
return "unsealed"
|
|
case FTSealed:
|
|
return "sealed"
|
|
case FTCache:
|
|
return "cache"
|
|
default:
|
|
return fmt.Sprintf("<unknown %d>", t)
|
|
}
|
|
}
|
|
|
|
func (t SectorFileType) Has(singleType SectorFileType) bool {
|
|
return t&singleType == singleType
|
|
}
|
|
|
|
type SectorPaths struct {
|
|
Id abi.SectorID
|
|
|
|
Unsealed string
|
|
Sealed string
|
|
Cache string
|
|
}
|
|
|
|
func ParseSectorID(baseName string) (abi.SectorID, error) {
|
|
var n abi.SectorNumber
|
|
var mid abi.ActorID
|
|
read, err := fmt.Sscanf(baseName, "s-t0%d-%d", &mid, &n)
|
|
if err != nil {
|
|
return abi.SectorID{}, xerrors.Errorf("sscanf sector name ('%s'): %w", baseName, err)
|
|
}
|
|
|
|
if read != 2 {
|
|
return abi.SectorID{}, xerrors.Errorf("parseSectorID expected to scan 2 values, got %d", read)
|
|
}
|
|
|
|
return abi.SectorID{
|
|
Miner: mid,
|
|
Number: n,
|
|
}, nil
|
|
}
|
|
|
|
func SectorName(sid abi.SectorID) string {
|
|
return fmt.Sprintf("s-t0%d-%d", sid.Miner, sid.Number)
|
|
}
|
|
|
|
func PathByType(sps SectorPaths, fileType SectorFileType) string {
|
|
switch fileType {
|
|
case FTUnsealed:
|
|
return sps.Unsealed
|
|
case FTSealed:
|
|
return sps.Sealed
|
|
case FTCache:
|
|
return sps.Cache
|
|
}
|
|
|
|
panic("requested unknown path type")
|
|
}
|
|
|
|
func SetPathByType(sps *SectorPaths, fileType SectorFileType, p string) {
|
|
switch fileType {
|
|
case FTUnsealed:
|
|
sps.Unsealed = p
|
|
case FTSealed:
|
|
sps.Sealed = p
|
|
case FTCache:
|
|
sps.Cache = p
|
|
}
|
|
}
|