@@ -134,8 +134,20 @@ func prev(version roachpb.Version) roachpb.Version {
134
134
if version .Minor > 1 {
135
135
return roachpb.Version {Major : version .Major , Minor : version .Minor - 1 }
136
136
}
137
- // Here we assume that there's going to only be 2 releases per year.
138
- // Otherwise we'd need to keep some history of what releases we've had.
137
+
138
+ // version is the first release of that year, e.g. MM.1
139
+
140
+ v25_1 := roachpb.Version {Major : 25 , Minor : 1 }
141
+ if v25_1 .Equal (version ) {
142
+ // For 2024, we had 3 releases that year.
143
+ return roachpb.Version {Major : 24 , Minor : 3 }
144
+ }
145
+ if v25_1 .Less (version ) {
146
+ // 2025 onwards, we had 4 releases per year.
147
+ return roachpb.Version {Major : version .Major - 1 , Minor : 4 }
148
+ }
149
+
150
+ // Prior to 2024, we had 2 releases per year.
139
151
return roachpb.Version {Major : version .Major - 1 , Minor : 2 }
140
152
}
141
153
@@ -157,6 +169,50 @@ func prev(version roachpb.Version) roachpb.Version {
157
169
}
158
170
}
159
171
172
+ func TestPrev (t * testing.T ) {
173
+ defer leaktest .AfterTest (t )()
174
+ defer log .Scope (t ).Close (t )
175
+
176
+ tests := []struct {
177
+ this , prev roachpb.Version
178
+ }{
179
+ // releases 2025+: 4 releases per year.
180
+ {
181
+ this : roachpb.Version {Major : 28 , Minor : 4 },
182
+ prev : roachpb.Version {Major : 28 , Minor : 3 },
183
+ },
184
+ {
185
+ this : roachpb.Version {Major : 28 , Minor : 1 },
186
+ prev : roachpb.Version {Major : 27 , Minor : 4 },
187
+ },
188
+ {
189
+ this : roachpb.Version {Major : 26 , Minor : 1 },
190
+ prev : roachpb.Version {Major : 25 , Minor : 4 },
191
+ },
192
+ // releases 2024: 3 releases per year.
193
+ {
194
+ this : roachpb.Version {Major : 25 , Minor : 1 },
195
+ prev : roachpb.Version {Major : 24 , Minor : 3 },
196
+ },
197
+ // releases 2019-2023: Calendar versioning, with 2 releases per year
198
+ {
199
+ this : roachpb.Version {Major : 24 , Minor : 1 },
200
+ prev : roachpb.Version {Major : 23 , Minor : 2 },
201
+ },
202
+ {
203
+ this : roachpb.Version {Major : 21 , Minor : 1 },
204
+ prev : roachpb.Version {Major : 20 , Minor : 2 },
205
+ },
206
+ }
207
+ for _ , test := range tests {
208
+ t .Run ("" , func (t * testing.T ) {
209
+ if p := prev (test .this ); p != test .prev {
210
+ t .Errorf ("expected %s, got %s" , test .prev , p )
211
+ }
212
+ })
213
+ }
214
+ }
215
+
160
216
func TestClusterVersionPersistedOnJoin (t * testing.T ) {
161
217
defer leaktest .AfterTest (t )()
162
218
defer log .Scope (t ).Close (t )
0 commit comments