mirror of
https://github.com/tendermint/tendermint.git
synced 2026-09-19 06:31:57 +00:00
service: change stop interface (#7816)
This commit is contained in:
@@ -915,15 +915,9 @@ type mockTicker struct {
|
||||
fired bool
|
||||
}
|
||||
|
||||
func (m *mockTicker) Start(context.Context) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *mockTicker) Stop() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *mockTicker) IsRunning() bool { return false }
|
||||
func (m *mockTicker) Start(context.Context) error { return nil }
|
||||
func (m *mockTicker) Stop() {}
|
||||
func (m *mockTicker) IsRunning() bool { return false }
|
||||
|
||||
func (m *mockTicker) ScheduleTimeout(ti timeoutInfo) {
|
||||
m.mtx.Lock()
|
||||
@@ -941,8 +935,6 @@ func (m *mockTicker) Chan() <-chan timeoutInfo {
|
||||
return m.c
|
||||
}
|
||||
|
||||
func (*mockTicker) SetLogger(log.Logger) {}
|
||||
|
||||
func newPersistentKVStore(t *testing.T, logger log.Logger) abci.Application {
|
||||
t.Helper()
|
||||
|
||||
|
||||
@@ -219,11 +219,7 @@ func (r *Reactor) OnStart(ctx context.Context) error {
|
||||
func (r *Reactor) OnStop() {
|
||||
r.unsubscribeFromBroadcastEvents()
|
||||
|
||||
if err := r.state.Stop(); err != nil {
|
||||
if !errors.Is(err, service.ErrAlreadyStopped) {
|
||||
r.logger.Error("failed to stop consensus state", "err", err)
|
||||
}
|
||||
}
|
||||
r.state.Stop()
|
||||
|
||||
if !r.WaitSync() {
|
||||
r.state.Wait()
|
||||
|
||||
@@ -142,9 +142,7 @@ func newPlayback(fileName string, fp *os.File, cs *State, genState sm.State) *pl
|
||||
|
||||
// go back count steps by resetting the state and running (pb.count - count) steps
|
||||
func (pb *playback) replayReset(ctx context.Context, count int, newStepSub eventbus.Subscription) error {
|
||||
if err := pb.cs.Stop(); err != nil {
|
||||
return err
|
||||
}
|
||||
pb.cs.Stop()
|
||||
pb.cs.Wait()
|
||||
|
||||
newCS := NewState(ctx, pb.cs.logger, pb.cs.config, pb.genesisState.Copy(), pb.cs.blockExec,
|
||||
|
||||
@@ -79,9 +79,7 @@ func startNewStateAndWaitForBlock(ctx context.Context, t *testing.T, consensusRe
|
||||
|
||||
require.NoError(t, cs.Start(ctx))
|
||||
defer func() {
|
||||
if err := cs.Stop(); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
cs.Stop()
|
||||
}()
|
||||
t.Cleanup(cs.Wait)
|
||||
// This is just a signal that we haven't halted; its not something contained
|
||||
@@ -208,7 +206,7 @@ LOOP:
|
||||
startNewStateAndWaitForBlock(ctx, t, consensusReplayConfig, cs.Height, blockDB, stateStore)
|
||||
|
||||
// stop consensus state and transactions sender (initFn)
|
||||
cs.Stop() //nolint:errcheck // Logging this error causes failure
|
||||
cs.Stop()
|
||||
cancel()
|
||||
|
||||
// if we reached the required height, exit
|
||||
@@ -292,7 +290,7 @@ func (w *crashingWAL) SearchForEndHeight(
|
||||
}
|
||||
|
||||
func (w *crashingWAL) Start(ctx context.Context) error { return w.next.Start(ctx) }
|
||||
func (w *crashingWAL) Stop() error { return w.next.Stop() }
|
||||
func (w *crashingWAL) Stop() { w.next.Stop() }
|
||||
func (w *crashingWAL) Wait() { w.next.Wait() }
|
||||
|
||||
//------------------------------------------------------------------------------------------
|
||||
|
||||
@@ -396,10 +396,7 @@ func (cs *State) OnStart(ctx context.Context) error {
|
||||
cs.logger.Error("the WAL file is corrupted; attempting repair", "err", err)
|
||||
|
||||
// 1) prep work
|
||||
if err := cs.wal.Stop(); err != nil {
|
||||
|
||||
return err
|
||||
}
|
||||
cs.wal.Stop()
|
||||
|
||||
repairAttempted = true
|
||||
|
||||
@@ -494,19 +491,11 @@ func (cs *State) OnStop() {
|
||||
close(cs.onStopCh)
|
||||
|
||||
if cs.evsw.IsRunning() {
|
||||
if err := cs.evsw.Stop(); err != nil {
|
||||
if !errors.Is(err, service.ErrAlreadyStopped) {
|
||||
cs.logger.Error("failed trying to stop eventSwitch", "error", err)
|
||||
}
|
||||
}
|
||||
cs.evsw.Stop()
|
||||
}
|
||||
|
||||
if cs.timeoutTicker.IsRunning() {
|
||||
if err := cs.timeoutTicker.Stop(); err != nil {
|
||||
if !errors.Is(err, service.ErrAlreadyStopped) {
|
||||
cs.logger.Error("failed trying to stop timeoutTicket", "error", err)
|
||||
}
|
||||
}
|
||||
cs.timeoutTicker.Stop()
|
||||
}
|
||||
// WAL is stopped in receiveRoutine.
|
||||
}
|
||||
@@ -515,6 +504,7 @@ func (cs *State) OnStop() {
|
||||
// NOTE: be sure to Stop() the event switch and drain
|
||||
// any event channels or this may deadlock
|
||||
func (cs *State) Wait() {
|
||||
cs.evsw.Wait()
|
||||
<-cs.done
|
||||
}
|
||||
|
||||
@@ -840,12 +830,7 @@ func (cs *State) receiveRoutine(ctx context.Context, maxSteps int) {
|
||||
// priv_val tracks LastSig
|
||||
|
||||
// close wal now that we're done writing to it
|
||||
if err := cs.wal.Stop(); err != nil {
|
||||
if !errors.Is(err, service.ErrAlreadyStopped) {
|
||||
cs.logger.Error("failed trying to stop WAL", "error", err)
|
||||
}
|
||||
}
|
||||
|
||||
cs.wal.Stop()
|
||||
cs.wal.Wait()
|
||||
close(cs.done)
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@ var (
|
||||
// The timeoutInfo.Duration may be non-positive.
|
||||
type TimeoutTicker interface {
|
||||
Start(context.Context) error
|
||||
Stop() error
|
||||
Stop()
|
||||
IsRunning() bool
|
||||
Chan() <-chan timeoutInfo // on which to receive a timeout
|
||||
ScheduleTimeout(ti timeoutInfo) // reset the timer
|
||||
|
||||
@@ -67,7 +67,7 @@ type WAL interface {
|
||||
|
||||
// service methods
|
||||
Start(context.Context) error
|
||||
Stop() error
|
||||
Stop()
|
||||
Wait()
|
||||
}
|
||||
|
||||
@@ -164,15 +164,9 @@ func (wal *BaseWAL) FlushAndSync() error {
|
||||
func (wal *BaseWAL) OnStop() {
|
||||
wal.flushTicker.Stop()
|
||||
if err := wal.FlushAndSync(); err != nil {
|
||||
if !errors.Is(err, service.ErrAlreadyStopped) {
|
||||
wal.logger.Error("error on flush data to disk", "error", err)
|
||||
}
|
||||
}
|
||||
if err := wal.group.Stop(); err != nil {
|
||||
if !errors.Is(err, service.ErrAlreadyStopped) {
|
||||
wal.logger.Error("error trying to stop wal", "error", err)
|
||||
}
|
||||
wal.logger.Error("error on flush data to disk", "error", err)
|
||||
}
|
||||
wal.group.Stop()
|
||||
wal.group.Close()
|
||||
}
|
||||
|
||||
@@ -438,5 +432,5 @@ func (nilWAL) SearchForEndHeight(height int64, options *WALSearchOptions) (rd io
|
||||
return nil, false, nil
|
||||
}
|
||||
func (nilWAL) Start(context.Context) error { return nil }
|
||||
func (nilWAL) Stop() error { return nil }
|
||||
func (nilWAL) Stop() {}
|
||||
func (nilWAL) Wait() {}
|
||||
|
||||
@@ -102,14 +102,10 @@ func WALGenerateNBlocks(ctx context.Context, t *testing.T, logger log.Logger, wr
|
||||
|
||||
select {
|
||||
case <-numBlocksWritten:
|
||||
if err := consensusState.Stop(); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
consensusState.Stop()
|
||||
return nil
|
||||
case <-time.After(1 * time.Minute):
|
||||
if err := consensusState.Stop(); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
consensusState.Stop()
|
||||
return fmt.Errorf("waited too long for tendermint to produce %d blocks (grep logs for `wal_generator`)", numBlocks)
|
||||
}
|
||||
}
|
||||
@@ -219,5 +215,5 @@ func (w *byteBufferWAL) SearchForEndHeight(
|
||||
}
|
||||
|
||||
func (w *byteBufferWAL) Start(context.Context) error { return nil }
|
||||
func (w *byteBufferWAL) Stop() error { return nil }
|
||||
func (w *byteBufferWAL) Stop() {}
|
||||
func (w *byteBufferWAL) Wait() {}
|
||||
|
||||
@@ -3,7 +3,6 @@ package consensus
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"errors"
|
||||
"path/filepath"
|
||||
|
||||
"testing"
|
||||
@@ -17,7 +16,6 @@ import (
|
||||
"github.com/tendermint/tendermint/internal/consensus/types"
|
||||
"github.com/tendermint/tendermint/internal/libs/autofile"
|
||||
"github.com/tendermint/tendermint/libs/log"
|
||||
"github.com/tendermint/tendermint/libs/service"
|
||||
tmtime "github.com/tendermint/tendermint/libs/time"
|
||||
tmtypes "github.com/tendermint/tendermint/types"
|
||||
)
|
||||
@@ -191,11 +189,7 @@ func TestWALPeriodicSync(t *testing.T) {
|
||||
|
||||
require.NoError(t, wal.Start(ctx))
|
||||
t.Cleanup(func() {
|
||||
if err := wal.Stop(); err != nil {
|
||||
if !errors.Is(err, service.ErrAlreadyStopped) {
|
||||
t.Error(err)
|
||||
}
|
||||
}
|
||||
wal.Stop()
|
||||
wal.Wait()
|
||||
})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user