@@ -95,7 +95,11 @@ func (o *migrateOptions) Config() (*migrateConfig, error) {
95
95
c .be = backend .NewDefaultBackend (GetLogger (), dbPath )
96
96
97
97
walPath := datadir .ToWALDir (o .dataDir )
98
- w , err := wal .OpenForRead (c .lg , walPath , walpb.Snapshot {})
98
+ lastSnapshot , err := getLastSnapshotIndex (walPath )
99
+ if err != nil {
100
+ return nil , fmt .Errorf (`failed to find last snapshot: %v` , err )
101
+ }
102
+ w , err := wal .OpenForRead (c .lg , walPath , walpb.Snapshot {Index : lastSnapshot })
99
103
if err != nil {
100
104
return nil , fmt .Errorf (`failed to open wal: %v` , err )
101
105
}
@@ -156,3 +160,16 @@ func migrateForce(lg *zap.Logger, tx backend.BatchTx, target *semver.Version) {
156
160
func storageVersionToString (ver * semver.Version ) string {
157
161
return fmt .Sprintf ("%d.%d" , ver .Major , ver .Minor )
158
162
}
163
+
164
+ func getLastSnapshotIndex (walPath string ) (uint64 , error ) {
165
+ walSnaps , err := wal .ValidSnapshotEntries (nil , walPath )
166
+ if err != nil {
167
+ return 0 , err
168
+ }
169
+ if len (walSnaps ) == 0 {
170
+ return 0 , fmt .Errorf ("no valid snapshot entries found" )
171
+ }
172
+
173
+ snapshot := walSnaps [len (walSnaps )- 1 ]
174
+ return snapshot .Index , nil
175
+ }
0 commit comments