diff --git a/api/api_storage.go b/api/api_storage.go index f6e8c7afa..a53efe41a 100644 --- a/api/api_storage.go +++ b/api/api_storage.go @@ -6,6 +6,7 @@ import ( "github.com/filecoin-project/go-address" "github.com/filecoin-project/go-fil-markets/storagemarket" "github.com/filecoin-project/lotus/chain/types" + "github.com/filecoin-project/sector-storage/fsutil" "github.com/filecoin-project/sector-storage/stores" "github.com/filecoin-project/sector-storage/storiface" "github.com/filecoin-project/specs-actors/actors/abi" @@ -49,7 +50,7 @@ type StorageMiner interface { StorageList(ctx context.Context) (map[stores.ID][]stores.Decl, error) StorageLocal(ctx context.Context) (map[stores.ID]string, error) - StorageStat(ctx context.Context, id stores.ID) (stores.FsStat, error) + StorageStat(ctx context.Context, id stores.ID) (fsutil.FsStat, error) // WorkerConnect tells the node to connect to workers RPC WorkerConnect(context.Context, string) error diff --git a/api/apistruct/struct.go b/api/apistruct/struct.go index 4eee598f7..2f7d17539 100644 --- a/api/apistruct/struct.go +++ b/api/apistruct/struct.go @@ -2,15 +2,17 @@ package apistruct import ( "context" - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/go-fil-markets/storagemarket" - "github.com/filecoin-project/go-jsonrpc/auth" - "github.com/ipfs/go-cid" - "github.com/libp2p/go-libp2p-core/network" - "github.com/libp2p/go-libp2p-core/peer" "io" "time" + "github.com/ipfs/go-cid" + "github.com/libp2p/go-libp2p-core/network" + "github.com/libp2p/go-libp2p-core/peer" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-fil-markets/storagemarket" + "github.com/filecoin-project/go-jsonrpc/auth" + "github.com/filecoin-project/sector-storage/fsutil" "github.com/filecoin-project/sector-storage/sealtasks" "github.com/filecoin-project/sector-storage/stores" "github.com/filecoin-project/sector-storage/storiface" @@ -218,8 +220,8 @@ type StorageMinerStruct struct { StorageList func(context.Context) (map[stores.ID][]stores.Decl, error) `perm:"admin"` StorageLocal func(context.Context) (map[stores.ID]string, error) `perm:"admin"` - StorageStat func(context.Context, stores.ID) (stores.FsStat, error) `perm:"admin"` - StorageAttach func(context.Context, stores.StorageInfo, stores.FsStat) error `perm:"admin"` + StorageStat func(context.Context, stores.ID) (fsutil.FsStat, error) `perm:"admin"` + StorageAttach func(context.Context, stores.StorageInfo, fsutil.FsStat) error `perm:"admin"` StorageDeclareSector func(context.Context, stores.ID, abi.SectorID, stores.SectorFileType, bool) error `perm:"admin"` StorageDropSector func(context.Context, stores.ID, abi.SectorID, stores.SectorFileType) error `perm:"admin"` StorageFindSector func(context.Context, abi.SectorID, stores.SectorFileType, bool) ([]stores.SectorStorageInfo, error) `perm:"admin"` @@ -833,7 +835,7 @@ func (c *StorageMinerStruct) WorkerStats(ctx context.Context) (map[uint64]storif return c.Internal.WorkerStats(ctx) } -func (c *StorageMinerStruct) StorageAttach(ctx context.Context, si stores.StorageInfo, st stores.FsStat) error { +func (c *StorageMinerStruct) StorageAttach(ctx context.Context, si stores.StorageInfo, st fsutil.FsStat) error { return c.Internal.StorageAttach(ctx, si, st) } @@ -857,7 +859,7 @@ func (c *StorageMinerStruct) StorageLocal(ctx context.Context) (map[stores.ID]st return c.Internal.StorageLocal(ctx) } -func (c *StorageMinerStruct) StorageStat(ctx context.Context, id stores.ID) (stores.FsStat, error) { +func (c *StorageMinerStruct) StorageStat(ctx context.Context, id stores.ID) (fsutil.FsStat, error) { return c.Internal.StorageStat(ctx, id) } diff --git a/cmd/lotus-bench/main.go b/cmd/lotus-bench/main.go index db31ecbb6..1c1c13cf6 100644 --- a/cmd/lotus-bench/main.go +++ b/cmd/lotus-bench/main.go @@ -612,7 +612,7 @@ func runSeals(sb *ffiwrapper.Sealer, sbfs *basicfs.Provider, numSectors int, par if !skipunseal { log.Infof("[%d] Unsealing sector", i) { - p, done, err := sbfs.AcquireSector(context.TODO(), abi.SectorID{Miner: mid, Number: 1}, stores.FTUnsealed, stores.FTNone, true) + p, done, err := sbfs.AcquireSector(context.TODO(), abi.SectorID{Miner: mid, Number: 1}, stores.FTUnsealed, stores.FTNone, stores.PathSealing) if err != nil { return xerrors.Errorf("acquire unsealed sector for removing: %w", err) } diff --git a/cmd/lotus-seed/seed/seed.go b/cmd/lotus-seed/seed/seed.go index c6fd2b9a8..9fdf9efbf 100644 --- a/cmd/lotus-seed/seed/seed.go +++ b/cmd/lotus-seed/seed/seed.go @@ -186,7 +186,7 @@ func presealSector(sb *ffiwrapper.Sealer, sbfs *basicfs.Provider, sid abi.Sector } func presealSectorFake(sbfs *basicfs.Provider, sid abi.SectorID, spt abi.RegisteredSealProof, ssize abi.SectorSize) (*genesis.PreSeal, error) { - paths, done, err := sbfs.AcquireSector(context.TODO(), sid, 0, stores.FTSealed|stores.FTCache, true) + paths, done, err := sbfs.AcquireSector(context.TODO(), sid, 0, stores.FTSealed|stores.FTCache, stores.PathSealing) if err != nil { return nil, xerrors.Errorf("acquire unsealed sector: %w", err) } diff --git a/cmd/lotus-storage-miner/storage.go b/cmd/lotus-storage-miner/storage.go index 4ab46fdae..5abe6c889 100644 --- a/cmd/lotus-storage-miner/storage.go +++ b/cmd/lotus-storage-miner/storage.go @@ -18,11 +18,12 @@ import ( "golang.org/x/xerrors" "github.com/filecoin-project/go-address" + "github.com/filecoin-project/sector-storage/fsutil" + "github.com/filecoin-project/sector-storage/stores" "github.com/filecoin-project/specs-actors/actors/abi" "github.com/filecoin-project/lotus/chain/types" lcli "github.com/filecoin-project/lotus/cli" - "github.com/filecoin-project/sector-storage/stores" ) const metaFile = "sectorstore.json" @@ -145,7 +146,7 @@ var storageListCmd = &cli.Command{ type fsInfo struct { stores.ID sectors []stores.Decl - stat stores.FsStat + stat fsutil.FsStat } sorted := make([]fsInfo, 0, len(st)) @@ -197,13 +198,13 @@ var storageListCmd = &cli.Command{ percCol = color.FgYellow } - var barCols = uint64(50) + var barCols = int64(50) set := (st.Capacity - st.Available) * barCols / st.Capacity bar := strings.Repeat("|", int(set)) + strings.Repeat(" ", int(barCols-set)) fmt.Printf("\t[%s] %s/%s %s\n", color.New(percCol).Sprint(bar), - types.SizeStr(types.NewInt(st.Capacity-st.Available)), - types.SizeStr(types.NewInt(st.Capacity)), + types.SizeStr(types.NewInt(uint64(st.Capacity-st.Available))), + types.SizeStr(types.NewInt(uint64(st.Capacity))), color.New(percCol).Sprintf("%d%%", usedPercent)) fmt.Printf("\t%s; %s; %s\n", color.YellowString("Unsealed: %d", cnt[0]), diff --git a/node/impl/storminer.go b/node/impl/storminer.go index 322ba09b1..8fcd2d2b0 100644 --- a/node/impl/storminer.go +++ b/node/impl/storminer.go @@ -3,6 +3,7 @@ package impl import ( "context" "encoding/json" + "github.com/filecoin-project/sector-storage/fsutil" "github.com/ipfs/go-cid" "golang.org/x/xerrors" "net/http" @@ -175,7 +176,7 @@ func (sm *StorageMinerAPI) SectorsRefs(context.Context) (map[string][]api.Sealed return out, nil } -func (sm *StorageMinerAPI) StorageStat(ctx context.Context, id stores.ID) (stores.FsStat, error) { +func (sm *StorageMinerAPI) StorageStat(ctx context.Context, id stores.ID) (fsutil.FsStat, error) { return sm.StorageMgr.FsStat(ctx, id) } diff --git a/node/repo/fsrepo.go b/node/repo/fsrepo.go index b223731d9..6342a918c 100644 --- a/node/repo/fsrepo.go +++ b/node/repo/fsrepo.go @@ -4,6 +4,7 @@ import ( "bytes" "encoding/json" "fmt" + "github.com/filecoin-project/sector-storage/fsutil" "io" "io/ioutil" "os" @@ -340,8 +341,16 @@ func (fsr *fsLockedRepo) SetStorage(c func(*stores.StorageConfig)) error { return config.WriteStorageFile(fsr.join(fsStorageConfig), sc) } -func (fsr *fsLockedRepo) Stat(path string) (stores.FsStat, error) { - return stores.Stat(path) +func (fsr *fsLockedRepo) Stat(path string) (fsutil.FsStat, error) { + return fsutil.Statfs(path) +} + +func (fsr *fsLockedRepo) DiskUsage(path string) (int64, error) { + si, err := fsutil.FileSize(path) + if err != nil { + return 0, err + } + return si.OnDisk, nil } func (fsr *fsLockedRepo) SetAPIEndpoint(ma multiaddr.Multiaddr) error { diff --git a/node/repo/interface.go b/node/repo/interface.go index 5950f813f..5dc4c3c88 100644 --- a/node/repo/interface.go +++ b/node/repo/interface.go @@ -2,6 +2,7 @@ package repo import ( "errors" + "github.com/filecoin-project/sector-storage/fsutil" "github.com/filecoin-project/sector-storage/stores" @@ -42,7 +43,8 @@ type LockedRepo interface { GetStorage() (stores.StorageConfig, error) SetStorage(func(*stores.StorageConfig)) error - Stat(path string) (stores.FsStat, error) + Stat(path string) (fsutil.FsStat, error) + DiskUsage(path string) (int64, error) // SetAPIEndpoint sets the endpoint of the current API // so it can be read by API clients diff --git a/node/repo/memrepo.go b/node/repo/memrepo.go index 399b239c1..818f34745 100644 --- a/node/repo/memrepo.go +++ b/node/repo/memrepo.go @@ -2,6 +2,7 @@ package repo import ( "encoding/json" + "github.com/filecoin-project/sector-storage/fsutil" "io/ioutil" "os" "path/filepath" @@ -77,8 +78,17 @@ func (lmem *lockedMemRepo) SetStorage(c func(*stores.StorageConfig)) error { return nil } -func (lmem *lockedMemRepo) Stat(path string) (stores.FsStat, error) { - return stores.Stat(path) +func (lmem *lockedMemRepo) Stat(path string) (fsutil.FsStat, error) { + return fsutil.Statfs(path) +} + + +func (lmem *lockedMemRepo) DiskUsage(path string) (int64, error) { + si, err := fsutil.FileSize(path) + if err != nil { + return 0, err + } + return si.OnDisk, nil } func (lmem *lockedMemRepo) Path() string {