@@ -189,6 +189,25 @@ matrix.addAxis({
189189 ]
190190} ) ;
191191
192+ matrix . addAxis ( {
193+ name : 'autosave' ,
194+ title : x => x . value === 'never' ? '' : 'autosave ' + x . value ,
195+ values : [
196+ { value : 'always' , weight : 5 } ,
197+ { value : 'never' , weight : 30 } ,
198+ { value : 'conservative' , weight : 5 } ,
199+ ]
200+ } ) ;
201+
202+ matrix . addAxis ( {
203+ name : 'cleanupSavepoints' ,
204+ title : x => x . value === 'true' ? 'cleanupSavepoints' : '' ,
205+ values : [
206+ { value : 'true' , weight : 5 } ,
207+ { value : 'false' , weight : 5 } ,
208+ ]
209+ } ) ;
210+
192211matrix . addAxis ( {
193212 name : 'check_anorm_sbt' ,
194213 values : [
@@ -233,7 +252,8 @@ matrix.setNamePattern([
233252 'java_version' , 'java_distribution' , 'pg_version' , 'query_mode' , 'scram' , 'ssl' , 'hash' , 'os' ,
234253 'server_tz' , 'tz' , 'locale' ,
235254 'check_anorm_sbt' , 'gss' , 'replication' , 'slow_tests' ,
236- 'adaptive_fetch' , 'rewrite_batch_inserts' , 'query_timeout'
255+ 'adaptive_fetch' , 'rewrite_batch_inserts' , 'query_timeout' ,
256+ 'autosave' , 'cleanupSavepoints'
237257] ) ;
238258
239259// We take EA builds from Oracle
@@ -252,6 +272,8 @@ matrix.imply({java_distribution: {value: 'oracle'}}, {java_version: v => v === e
252272// TODO: Semeru does not ship Java 21 builds yet
253273matrix . exclude ( { java_distribution : { value : 'semeru' } , java_version : '21' } )
254274matrix . exclude ( { gss : { value : 'yes' } , os : [ 'windows-latest' , 'macos-latest' ] } )
275+ // cleanupSavepoints is not relevant when autosave=never
276+ matrix . imply ( { autosave : { value : 'never' } } , { cleanupSavepoints : { value : 'false' } } ) ;
255277
256278// The most rare features should be generated the first
257279// For instance, we have a lot of PostgreSQL versions, so we generate the minimal the first
@@ -292,6 +314,8 @@ for (let ssl of matrix.axisByName.ssl.values) {
292314for ( let replication of matrix . axisByName . replication . values ) {
293315 matrix . generateRow ( { replication : replication } ) ;
294316}
317+ // Ensure at least one job with autosave=always
318+ matrix . generateRow ( { autosave : { value : 'always' } } ) ;
295319const include = matrix . generateRows ( process . env . MATRIX_JOBS || 5 ) ;
296320if ( include . length === 0 ) {
297321 throw new Error ( 'Matrix list is empty' ) ;
@@ -337,6 +361,8 @@ include.forEach(v => {
337361 v . adaptive_fetch = v . adaptive_fetch . value ;
338362 v . rewrite_batch_inserts = v . rewrite_batch_inserts . value ;
339363 v . query_timeout = v . query_timeout . value ;
364+ v . autosave = v . autosave . value ;
365+ v . cleanupSavepoints = v . cleanupSavepoints . value ;
340366
341367 let includeTestTags = [ ] ;
342368 // See https://junit.org/junit5/docs/current/user-guide/#running-tests-tag-expressions
@@ -405,6 +431,12 @@ include.forEach(v => {
405431 if ( v . query_timeout ) {
406432 testJvmArgs . push ( `-DqueryTimeout=${ v . query_timeout } ` ) ;
407433 }
434+ if ( v . autosave !== 'never' ) {
435+ testJvmArgs . push ( `-Dautosave=${ v . autosave } ` ) ;
436+ }
437+ if ( v . cleanupSavepoints === 'true' ) {
438+ testJvmArgs . push ( '-DcleanupSavepoints=true' ) ;
439+ }
408440 v . extraJvmArgs = jvmArgs . join ( ' ' ) ;
409441 v . testExtraJvmArgs = testJvmArgs . join ( ' ::: ' ) ;
410442 delete v . hash ;
0 commit comments