@@ -1052,3 +1052,60 @@ func TestValidSnapshotEntries(t *testing.T) {
1052
1052
t .Errorf ("expected walSnaps %+v, got %+v" , expected , walSnaps )
1053
1053
}
1054
1054
}
1055
+
1056
+ // TestValidSnapshotEntriesAfterPurgeWal ensure that there are many wal files, and after cleaning the first wal file,
1057
+ // it can work well.
1058
+ func TestValidSnapshotEntriesAfterPurgeWal (t * testing.T ) {
1059
+ oldSegmentSizeBytes := SegmentSizeBytes
1060
+ SegmentSizeBytes = 64
1061
+ defer func () {
1062
+ SegmentSizeBytes = oldSegmentSizeBytes
1063
+ }()
1064
+ p , err := ioutil .TempDir (os .TempDir (), "waltest" )
1065
+ if err != nil {
1066
+ t .Fatal (err )
1067
+ }
1068
+ defer os .RemoveAll (p )
1069
+ snap0 := walpb.Snapshot {Index : 0 , Term : 0 }
1070
+ snap1 := walpb.Snapshot {Index : 1 , Term : 1 }
1071
+ state1 := raftpb.HardState {Commit : 1 , Term : 1 }
1072
+ snap2 := walpb.Snapshot {Index : 2 , Term : 1 }
1073
+ snap3 := walpb.Snapshot {Index : 3 , Term : 2 }
1074
+ state2 := raftpb.HardState {Commit : 3 , Term : 2 }
1075
+ func () {
1076
+ w , err := Create (zap .NewExample (), p , nil )
1077
+ if err != nil {
1078
+ t .Fatal (err )
1079
+ }
1080
+ defer w .Close ()
1081
+
1082
+ // snap0 is implicitly created at index 0, term 0
1083
+ if err = w .SaveSnapshot (snap1 ); err != nil {
1084
+ t .Fatal (err )
1085
+ }
1086
+ if err = w .Save (state1 , nil ); err != nil {
1087
+ t .Fatal (err )
1088
+ }
1089
+ if err = w .SaveSnapshot (snap2 ); err != nil {
1090
+ t .Fatal (err )
1091
+ }
1092
+ if err = w .SaveSnapshot (snap3 ); err != nil {
1093
+ t .Fatal (err )
1094
+ }
1095
+ for i := 0 ; i < 128 ; i ++ {
1096
+ if err = w .Save (state2 , nil ); err != nil {
1097
+ t .Fatal (err )
1098
+ }
1099
+ }
1100
+
1101
+ }()
1102
+ files , _ , err := selectWALFiles (nil , p , snap0 )
1103
+ if err != nil {
1104
+ t .Fatal (err )
1105
+ }
1106
+ os .Remove (p + "/" + files [0 ])
1107
+ _ , err = ValidSnapshotEntries (zap .NewExample (), p )
1108
+ if err != nil {
1109
+ t .Fatal (err )
1110
+ }
1111
+ }
0 commit comments