@@ -2,7 +2,9 @@ package abci
2
2
3
3
import (
4
4
"context"
5
+ "errors"
5
6
"fmt"
7
+ "log"
6
8
"os"
7
9
"path/filepath"
8
10
"sync"
@@ -39,22 +41,30 @@ func NewMultiplexer(latestApp servertypes.ABCI, versions Versions, v *viper.Vipe
39
41
versions : versions ,
40
42
}
41
43
42
- // check height from disk
43
- wrapper .lastHeight , _ = wrapper .getLatestHeight (home , v ) // if error assume genesis
44
-
45
- // prepare correct version
46
44
var (
47
45
currentVersion Version
48
- name string
46
+ err error
49
47
)
50
48
49
+ // check height from disk
50
+ wrapper .lastHeight , err = wrapper .getLatestHeight (home , v ) // if error assume genesis
51
+ if err != nil {
52
+ log .Printf ("failed to get latest height from disk, assuming genesis: %v\n " , err )
53
+ }
54
+
55
+ // prepare correct version
51
56
if wrapper .lastHeight == 0 {
52
- currentVersion = versions .GenesisVersion ()
57
+ currentVersion , err = versions .GenesisVersion ()
53
58
} else {
54
- name , currentVersion = versions .GetForHeight (wrapper .lastHeight )
59
+ currentVersion , err = versions .GetForHeight (wrapper .lastHeight )
60
+ }
61
+ if err != nil && errors .Is (err , ErrNoVersionFound ) {
62
+ return wrapper , nil // no version found, assume latest
63
+ } else if err != nil {
64
+ return nil , fmt .Errorf ("failed to get app for height %d: %w" , wrapper .lastHeight , err )
55
65
}
56
66
57
- // prepare client
67
+ // prepare remote app
58
68
grpcAddress := v .GetString (flagGRPCAddress )
59
69
if grpcAddress == "" {
60
70
grpcAddress = "localhost:9090"
@@ -74,11 +84,11 @@ func NewMultiplexer(latestApp servertypes.ABCI, versions Versions, v *viper.Vipe
74
84
}
75
85
76
86
if err := currentVersion .Appd .Run (append (programArgs , currentVersion .StartArgs ... )... ); err != nil {
77
- return nil , fmt .Errorf ("failed to start %s app: %w" , name , err )
87
+ return nil , fmt .Errorf ("failed to start app: %w" , err )
78
88
}
79
89
80
90
if currentVersion .Appd .Pid () == appd .AppdStopped { // should never happen
81
- panic (fmt . Sprintf ( "%s app has not started", name ) )
91
+ panic (" app has not started" )
82
92
}
83
93
}
84
94
@@ -97,7 +107,7 @@ func (m *multiplexer) getLatestHeight(rootDir string, v *viper.Viper) (int64, er
97
107
return height , db .Close ()
98
108
}
99
109
100
- // Helper to get the appropriate app based on height
110
+ // getAppForHeight gets the appropriate app based on height
101
111
func (m * multiplexer ) getAppForHeight (height int64 ) servertypes.ABCI {
102
112
m .mu .Lock ()
103
113
defer m .mu .Unlock ()
0 commit comments