SectorTerminateFlush API
This commit is contained in:
parent
db977a2f91
commit
3522c8d45a
@ -68,8 +68,12 @@ type StorageMiner interface {
|
|||||||
// SectorRemove removes the sector from storage. It doesn't terminate it on-chain, which can
|
// SectorRemove removes the sector from storage. It doesn't terminate it on-chain, which can
|
||||||
// be done with SectorTerminate. Removing and not terminating live sectors will cause additional penalties.
|
// be done with SectorTerminate. Removing and not terminating live sectors will cause additional penalties.
|
||||||
SectorRemove(context.Context, abi.SectorNumber) error
|
SectorRemove(context.Context, abi.SectorNumber) error
|
||||||
// SectorTerminate terminates the sector on-chain, then automatically removes it from storage
|
// SectorTerminate terminates the sector on-chain (adding it to a termination batch first), then
|
||||||
|
// automatically removes it from storage
|
||||||
SectorTerminate(context.Context, abi.SectorNumber) error
|
SectorTerminate(context.Context, abi.SectorNumber) error
|
||||||
|
// SectorTerminateFlush immediately sends a terminate message with sectors batched for termination.
|
||||||
|
// Returns null if message wasn't sent
|
||||||
|
SectorTerminateFlush(ctx context.Context) (*cid.Cid, error)
|
||||||
SectorMarkForUpgrade(ctx context.Context, id abi.SectorNumber) error
|
SectorMarkForUpgrade(ctx context.Context, id abi.SectorNumber) error
|
||||||
|
|
||||||
StorageList(ctx context.Context) (map[stores.ID][]stores.Decl, error)
|
StorageList(ctx context.Context) (map[stores.ID][]stores.Decl, error)
|
||||||
|
@ -315,6 +315,7 @@ type StorageMinerStruct struct {
|
|||||||
SectorsUpdate func(context.Context, abi.SectorNumber, api.SectorState) error `perm:"admin"`
|
SectorsUpdate func(context.Context, abi.SectorNumber, api.SectorState) error `perm:"admin"`
|
||||||
SectorRemove func(context.Context, abi.SectorNumber) error `perm:"admin"`
|
SectorRemove func(context.Context, abi.SectorNumber) error `perm:"admin"`
|
||||||
SectorTerminate func(context.Context, abi.SectorNumber) error `perm:"admin"`
|
SectorTerminate func(context.Context, abi.SectorNumber) error `perm:"admin"`
|
||||||
|
SectorTerminateFlush func(ctx context.Context) (*cid.Cid, error) `perm:"admin"`
|
||||||
SectorMarkForUpgrade func(ctx context.Context, id abi.SectorNumber) error `perm:"admin"`
|
SectorMarkForUpgrade func(ctx context.Context, id abi.SectorNumber) error `perm:"admin"`
|
||||||
|
|
||||||
WorkerConnect func(context.Context, string) error `perm:"admin" retry:"true"` // TODO: worker perm
|
WorkerConnect func(context.Context, string) error `perm:"admin" retry:"true"` // TODO: worker perm
|
||||||
@ -1315,6 +1316,10 @@ func (c *StorageMinerStruct) SectorTerminate(ctx context.Context, number abi.Sec
|
|||||||
return c.Internal.SectorTerminate(ctx, number)
|
return c.Internal.SectorTerminate(ctx, number)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *StorageMinerStruct) SectorTerminateFlush(ctx context.Context) (*cid.Cid, error) {
|
||||||
|
return c.Internal.SectorTerminateFlush(ctx)
|
||||||
|
}
|
||||||
|
|
||||||
func (c *StorageMinerStruct) SectorMarkForUpgrade(ctx context.Context, number abi.SectorNumber) error {
|
func (c *StorageMinerStruct) SectorMarkForUpgrade(ctx context.Context, number abi.SectorNumber) error {
|
||||||
return c.Internal.SectorMarkForUpgrade(ctx, number)
|
return c.Internal.SectorMarkForUpgrade(ctx, number)
|
||||||
}
|
}
|
||||||
|
@ -100,6 +100,7 @@
|
|||||||
* [SectorSetSealDelay](#SectorSetSealDelay)
|
* [SectorSetSealDelay](#SectorSetSealDelay)
|
||||||
* [SectorStartSealing](#SectorStartSealing)
|
* [SectorStartSealing](#SectorStartSealing)
|
||||||
* [SectorTerminate](#SectorTerminate)
|
* [SectorTerminate](#SectorTerminate)
|
||||||
|
* [SectorTerminateFlush](#SectorTerminateFlush)
|
||||||
* [Sectors](#Sectors)
|
* [Sectors](#Sectors)
|
||||||
* [SectorsList](#SectorsList)
|
* [SectorsList](#SectorsList)
|
||||||
* [SectorsListInStates](#SectorsListInStates)
|
* [SectorsListInStates](#SectorsListInStates)
|
||||||
@ -1539,7 +1540,8 @@ Inputs:
|
|||||||
Response: `{}`
|
Response: `{}`
|
||||||
|
|
||||||
### SectorTerminate
|
### SectorTerminate
|
||||||
SectorTerminate terminates the sector on-chain, then automatically removes it from storage
|
SectorTerminate terminates the sector on-chain (adding it to a termination batch first), then
|
||||||
|
automatically removes it from storage
|
||||||
|
|
||||||
|
|
||||||
Perms: admin
|
Perms: admin
|
||||||
@ -1553,6 +1555,17 @@ Inputs:
|
|||||||
|
|
||||||
Response: `{}`
|
Response: `{}`
|
||||||
|
|
||||||
|
### SectorTerminateFlush
|
||||||
|
SectorTerminateFlush immediately sends a terminate message with sectors batched for termination.
|
||||||
|
Returns null if message wasn't sent
|
||||||
|
|
||||||
|
|
||||||
|
Perms: admin
|
||||||
|
|
||||||
|
Inputs: `null`
|
||||||
|
|
||||||
|
Response: `null`
|
||||||
|
|
||||||
## Sectors
|
## Sectors
|
||||||
|
|
||||||
|
|
||||||
|
4
extern/storage-sealing/sealing.go
vendored
4
extern/storage-sealing/sealing.go
vendored
@ -283,6 +283,10 @@ func (m *Sealing) Terminate(ctx context.Context, sid abi.SectorNumber) error {
|
|||||||
return m.sectors.Send(uint64(sid), SectorTerminate{})
|
return m.sectors.Send(uint64(sid), SectorTerminate{})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m *Sealing) TerminateFlush(ctx context.Context) (*cid.Cid, error) {
|
||||||
|
return m.terminator.Flush(ctx)
|
||||||
|
}
|
||||||
|
|
||||||
// Caller should NOT hold m.unsealedInfoMap.lk
|
// Caller should NOT hold m.unsealedInfoMap.lk
|
||||||
func (m *Sealing) StartPacking(sectorID abi.SectorNumber) error {
|
func (m *Sealing) StartPacking(sectorID abi.SectorNumber) error {
|
||||||
// locking here ensures that when the SectorStartPacking event is sent, the sector won't be picked up anywhere else
|
// locking here ensures that when the SectorStartPacking event is sent, the sector won't be picked up anywhere else
|
||||||
|
34
extern/storage-sealing/terminate_batch.go
vendored
34
extern/storage-sealing/terminate_batch.go
vendored
@ -46,7 +46,8 @@ type TerminateBatcher struct {
|
|||||||
|
|
||||||
waiting map[SectorLocation][]chan cid.Cid
|
waiting map[SectorLocation][]chan cid.Cid
|
||||||
|
|
||||||
notify, force, stop, stopped chan struct{}
|
notify, stop, stopped chan struct{}
|
||||||
|
force chan chan *cid.Cid
|
||||||
lk sync.Mutex
|
lk sync.Mutex
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -62,7 +63,7 @@ func NewTerminationBatcher(mctx context.Context, maddr address.Address, api Term
|
|||||||
waiting: map[SectorLocation][]chan cid.Cid{},
|
waiting: map[SectorLocation][]chan cid.Cid{},
|
||||||
|
|
||||||
notify: make(chan struct{}, 1),
|
notify: make(chan struct{}, 1),
|
||||||
force: make(chan struct{}),
|
force: make(chan chan *cid.Cid),
|
||||||
stop: make(chan struct{}),
|
stop: make(chan struct{}),
|
||||||
stopped: make(chan struct{}),
|
stopped: make(chan struct{}),
|
||||||
}
|
}
|
||||||
@ -73,7 +74,16 @@ func NewTerminationBatcher(mctx context.Context, maddr address.Address, api Term
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (b *TerminateBatcher) run() {
|
func (b *TerminateBatcher) run() {
|
||||||
|
var forceRes chan *cid.Cid
|
||||||
|
var lastMsg *cid.Cid
|
||||||
|
|
||||||
for {
|
for {
|
||||||
|
if forceRes != nil {
|
||||||
|
forceRes <- lastMsg
|
||||||
|
forceRes = nil
|
||||||
|
}
|
||||||
|
lastMsg = nil
|
||||||
|
|
||||||
var notif, after bool
|
var notif, after bool
|
||||||
select {
|
select {
|
||||||
case <-b.stop:
|
case <-b.stop:
|
||||||
@ -83,7 +93,8 @@ func (b *TerminateBatcher) run() {
|
|||||||
notif = true // send above max
|
notif = true // send above max
|
||||||
case <-time.After(TerminateBatchWait):
|
case <-time.After(TerminateBatchWait):
|
||||||
after = true // send above min
|
after = true // send above min
|
||||||
case <-b.force: // user triggered
|
case fr := <-b.force: // user triggered
|
||||||
|
forceRes = fr
|
||||||
}
|
}
|
||||||
|
|
||||||
dl, err := b.api.StateMinerProvingDeadline(b.mctx, b.maddr, nil)
|
dl, err := b.api.StateMinerProvingDeadline(b.mctx, b.maddr, nil)
|
||||||
@ -163,6 +174,7 @@ func (b *TerminateBatcher) run() {
|
|||||||
b.lk.Unlock()
|
b.lk.Unlock()
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
lastMsg = &mcid
|
||||||
log.Infow("Sent TerminateSectors message", "cid", mcid, "from", from, "terminations", len(params.Terminations))
|
log.Infow("Sent TerminateSectors message", "cid", mcid, "from", from, "terminations", len(params.Terminations))
|
||||||
|
|
||||||
for _, t := range params.Terminations {
|
for _, t := range params.Terminations {
|
||||||
@ -177,6 +189,7 @@ func (b *TerminateBatcher) run() {
|
|||||||
ch <- mcid // buffered
|
ch <- mcid // buffered
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
b.waiting = map[SectorLocation][]chan cid.Cid{}
|
b.waiting = map[SectorLocation][]chan cid.Cid{}
|
||||||
|
|
||||||
b.lk.Unlock()
|
b.lk.Unlock()
|
||||||
@ -224,6 +237,21 @@ func (b *TerminateBatcher) AddTermination(ctx context.Context, s abi.SectorID) (
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (b *TerminateBatcher) Flush(ctx context.Context) (*cid.Cid, error) {
|
||||||
|
resCh := make(chan *cid.Cid, 1)
|
||||||
|
select {
|
||||||
|
case b.force <- resCh:
|
||||||
|
select {
|
||||||
|
case res := <-resCh:
|
||||||
|
return res, nil
|
||||||
|
case <-ctx.Done():
|
||||||
|
return nil, ctx.Err()
|
||||||
|
}
|
||||||
|
case <-ctx.Done():
|
||||||
|
return nil, ctx.Err()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (b *TerminateBatcher) Stop(ctx context.Context) error {
|
func (b *TerminateBatcher) Stop(ctx context.Context) error {
|
||||||
close(b.stop)
|
close(b.stop)
|
||||||
|
|
||||||
|
@ -332,6 +332,10 @@ func (sm *StorageMinerAPI) SectorTerminate(ctx context.Context, id abi.SectorNum
|
|||||||
return sm.Miner.TerminateSector(ctx, id)
|
return sm.Miner.TerminateSector(ctx, id)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (sm *StorageMinerAPI) SectorTerminateFlush(ctx context.Context) (*cid.Cid, error) {
|
||||||
|
return sm.Miner.TerminateFlush(ctx)
|
||||||
|
}
|
||||||
|
|
||||||
func (sm *StorageMinerAPI) SectorMarkForUpgrade(ctx context.Context, id abi.SectorNumber) error {
|
func (sm *StorageMinerAPI) SectorMarkForUpgrade(ctx context.Context, id abi.SectorNumber) error {
|
||||||
return sm.Miner.MarkForUpgrade(id)
|
return sm.Miner.MarkForUpgrade(id)
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,8 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"io"
|
"io"
|
||||||
|
|
||||||
|
"github.com/ipfs/go-cid"
|
||||||
|
|
||||||
"github.com/filecoin-project/go-address"
|
"github.com/filecoin-project/go-address"
|
||||||
"github.com/filecoin-project/go-state-types/abi"
|
"github.com/filecoin-project/go-state-types/abi"
|
||||||
|
|
||||||
@ -48,6 +50,10 @@ func (m *Miner) TerminateSector(ctx context.Context, id abi.SectorNumber) error
|
|||||||
return m.sealing.Terminate(ctx, id)
|
return m.sealing.Terminate(ctx, id)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m *Miner) TerminateFlush(ctx context.Context) (*cid.Cid, error) {
|
||||||
|
return m.sealing.TerminateFlush(ctx)
|
||||||
|
}
|
||||||
|
|
||||||
func (m *Miner) MarkForUpgrade(id abi.SectorNumber) error {
|
func (m *Miner) MarkForUpgrade(id abi.SectorNumber) error {
|
||||||
return m.sealing.MarkForUpgrade(id)
|
return m.sealing.MarkForUpgrade(id)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user