respect shutdown signals when sleeping in miner code (#1617)
This commit is contained in:
parent
c807469a5a
commit
b2dda08368
@ -137,6 +137,15 @@ func (m *Miner) Unregister(ctx context.Context, addr address.Address) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m *Miner) niceSleep(d time.Duration) bool {
|
||||||
|
select {
|
||||||
|
case <-time.After(d):
|
||||||
|
return true
|
||||||
|
case <-m.stop:
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (m *Miner) mine(ctx context.Context) {
|
func (m *Miner) mine(ctx context.Context) {
|
||||||
ctx, span := trace.StartSpan(ctx, "/mine")
|
ctx, span := trace.StartSpan(ctx, "/mine")
|
||||||
defer span.End()
|
defer span.End()
|
||||||
@ -163,7 +172,7 @@ eventLoop:
|
|||||||
prebase, err := m.GetBestMiningCandidate(ctx)
|
prebase, err := m.GetBestMiningCandidate(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Errorf("failed to get best mining candidate: %s", err)
|
log.Errorf("failed to get best mining candidate: %s", err)
|
||||||
time.Sleep(time.Second * 5)
|
m.niceSleep(time.Second * 5)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -181,7 +190,7 @@ eventLoop:
|
|||||||
}
|
}
|
||||||
if base.TipSet.Equals(lastBase.TipSet) && lastBase.NullRounds == base.NullRounds {
|
if base.TipSet.Equals(lastBase.TipSet) && lastBase.NullRounds == base.NullRounds {
|
||||||
log.Warnf("BestMiningCandidate from the previous round: %s (nulls:%d)", lastBase.TipSet.Cids(), lastBase.NullRounds)
|
log.Warnf("BestMiningCandidate from the previous round: %s (nulls:%d)", lastBase.TipSet.Cids(), lastBase.NullRounds)
|
||||||
time.Sleep(build.BlockDelay * time.Second)
|
m.niceSleep(build.BlockDelay * time.Second)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
lastBase = *base
|
lastBase = *base
|
||||||
@ -204,7 +213,10 @@ eventLoop:
|
|||||||
if len(blks) != 0 {
|
if len(blks) != 0 {
|
||||||
btime := time.Unix(int64(blks[0].Header.Timestamp), 0)
|
btime := time.Unix(int64(blks[0].Header.Timestamp), 0)
|
||||||
if time.Now().Before(btime) {
|
if time.Now().Before(btime) {
|
||||||
time.Sleep(time.Until(btime))
|
if !m.niceSleep(time.Until(btime)) {
|
||||||
|
log.Warnf("received interrupt while waiting to broadcast block, will shutdown after block is sent out")
|
||||||
|
time.Sleep(time.Until(btime))
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
log.Warnw("mined block in the past", "block-time", btime,
|
log.Warnw("mined block in the past", "block-time", btime,
|
||||||
"time", time.Now(), "duration", time.Since(btime))
|
"time", time.Now(), "duration", time.Since(btime))
|
||||||
@ -214,7 +226,7 @@ eventLoop:
|
|||||||
for _, b := range blks {
|
for _, b := range blks {
|
||||||
_, notOk := mWon[b.Header.Miner]
|
_, notOk := mWon[b.Header.Miner]
|
||||||
if notOk {
|
if notOk {
|
||||||
log.Errorw("2 blocks for the same miner. Throwing hands in the air. Report this. It is important.", "bloks", blks)
|
log.Errorw("2 blocks for the same miner. Throwing hands in the air. Report this. It is important.", "blocks", blks)
|
||||||
continue eventLoop
|
continue eventLoop
|
||||||
}
|
}
|
||||||
mWon[b.Header.Miner] = struct{}{}
|
mWon[b.Header.Miner] = struct{}{}
|
||||||
|
@ -91,7 +91,7 @@ func (a *StateAPI) StateMinerDeadlines(ctx context.Context, m address.Address, t
|
|||||||
return stmgr.GetMinerDeadlines(ctx, a.StateManager, ts, m)
|
return stmgr.GetMinerDeadlines(ctx, a.StateManager, ts, m)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *StateAPI) StateMinerProvingDeadline(ctx context.Context, addr address.Address, tsk types.TipSetKey) (*miner.DeadlineInfo, error) {
|
func (a *StateAPI) StateMinerProvingDeadline(ctx context.Context, addr address.Address, tsk types.TipSetKey) (*miner.DeadlineInfo, error) {
|
||||||
ts, err := a.Chain.GetTipSetFromKey(tsk)
|
ts, err := a.Chain.GetTipSetFromKey(tsk)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, xerrors.Errorf("loading tipset %s: %w", tsk, err)
|
return nil, xerrors.Errorf("loading tipset %s: %w", tsk, err)
|
||||||
|
Loading…
Reference in New Issue
Block a user