Skip to content

Commit 0f7b842

Browse files
authored
Merge branch 'master' into ci_fail_fast_false
2 parents f940b00 + 0511e17 commit 0f7b842

21 files changed

+289
-112
lines changed

.github/workflows/ci.yaml

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1765,6 +1765,138 @@ jobs:
17651765
name: db2_12.1_integration_test_reports_${{ matrix.mode.label }}
17661766
path: core/build/reports/tests/integrationTestJdbc
17671767

1768+
integration-test-for-alloydb-15:
1769+
name: AlloyDB 15 integration test (${{ matrix.mode.label }})
1770+
runs-on: ubuntu-latest
1771+
1772+
services:
1773+
alloydb:
1774+
image: google/alloydbomni:15
1775+
env:
1776+
POSTGRES_USER: postgres
1777+
POSTGRES_PASSWORD: postgres
1778+
POSTGRES_INITDB_ARGS: "--icu-locale=en-US-u-va-posix"
1779+
ports:
1780+
- 5432:5432
1781+
1782+
strategy:
1783+
fail-fast: false
1784+
matrix:
1785+
mode:
1786+
- label: default
1787+
group_commit_enabled: false
1788+
- label: with_group_commit
1789+
group_commit_enabled: true
1790+
1791+
steps:
1792+
- uses: actions/checkout@v4
1793+
1794+
- name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }})
1795+
uses: actions/setup-java@v4
1796+
with:
1797+
java-version: ${{ env.JAVA_VERSION }}
1798+
distribution: ${{ env.JAVA_VENDOR }}
1799+
1800+
- name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test
1801+
uses: actions/setup-java@v4
1802+
if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}}
1803+
with:
1804+
java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}
1805+
distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}
1806+
1807+
- name: Login to Oracle container registry
1808+
uses: docker/login-action@v3
1809+
if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }}
1810+
with:
1811+
registry: container-registry.oracle.com
1812+
username: ${{ secrets.OCR_USERNAME }}
1813+
password: ${{ secrets.OCR_TOKEN }}
1814+
1815+
- name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test
1816+
if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }}
1817+
run: |
1818+
container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}")
1819+
docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id"
1820+
1821+
- name: Setup Gradle
1822+
uses: gradle/actions/setup-gradle@v4
1823+
1824+
- name: Execute Gradle 'integrationTestJdbc' task
1825+
run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:postgresql://localhost:5432/ -Dscalardb.jdbc.username=postgres -Dscalardb.jdbc.password=postgres ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }}
1826+
1827+
- name: Upload Gradle test reports
1828+
if: always()
1829+
uses: actions/upload-artifact@v4
1830+
with:
1831+
name: alloydb_15_integration_test_reports_${{ matrix.mode.label }}
1832+
path: core/build/reports/tests/integrationTestJdbc
1833+
1834+
integration-test-for-alloydb-16:
1835+
name: AlloyDB 16 integration test (${{ matrix.mode.label }})
1836+
runs-on: ubuntu-latest
1837+
1838+
services:
1839+
alloydb:
1840+
image: google/alloydbomni:16
1841+
env:
1842+
POSTGRES_USER: postgres
1843+
POSTGRES_PASSWORD: postgres
1844+
POSTGRES_INITDB_ARGS: "--icu-locale=en-US-u-va-posix"
1845+
ports:
1846+
- 5432:5432
1847+
1848+
strategy:
1849+
fail-fast: false
1850+
matrix:
1851+
mode:
1852+
- label: default
1853+
group_commit_enabled: false
1854+
- label: with_group_commit
1855+
group_commit_enabled: true
1856+
1857+
steps:
1858+
- uses: actions/checkout@v4
1859+
1860+
- name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }})
1861+
uses: actions/setup-java@v4
1862+
with:
1863+
java-version: ${{ env.JAVA_VERSION }}
1864+
distribution: ${{ env.JAVA_VENDOR }}
1865+
1866+
- name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test
1867+
uses: actions/setup-java@v4
1868+
if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}}
1869+
with:
1870+
java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}
1871+
distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}
1872+
1873+
- name: Login to Oracle container registry
1874+
uses: docker/login-action@v3
1875+
if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }}
1876+
with:
1877+
registry: container-registry.oracle.com
1878+
username: ${{ secrets.OCR_USERNAME }}
1879+
password: ${{ secrets.OCR_TOKEN }}
1880+
1881+
- name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test
1882+
if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }}
1883+
run: |
1884+
container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}")
1885+
docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id"
1886+
1887+
- name: Setup Gradle
1888+
uses: gradle/actions/setup-gradle@v4
1889+
1890+
- name: Execute Gradle 'integrationTestJdbc' task
1891+
run: ./gradlew integrationTestJdbc -Dscalardb.jdbc.url=jdbc:postgresql://localhost:5432/ -Dscalardb.jdbc.username=postgres -Dscalardb.jdbc.password=postgres ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }}
1892+
1893+
- name: Upload Gradle test reports
1894+
if: always()
1895+
uses: actions/upload-artifact@v4
1896+
with:
1897+
name: alloydb_16_integration_test_reports_${{ matrix.mode.label }}
1898+
path: core/build/reports/tests/integrationTestJdbc
1899+
17681900
integration-test-for-multi-storage:
17691901
name: Multi-storage integration test (${{ matrix.mode.label }})
17701902
runs-on: ubuntu-latest

build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ subprojects {
3939
yugabyteDriverVersion = '42.7.3-yb-4'
4040
db2DriverVersion = '12.1.2.0'
4141
mariadDbDriverVersion = '3.5.6'
42+
alloyDbJdbcConnectorVersion = '1.2.6'
4243
picocliVersion = '4.7.7'
4344
commonsTextVersion = '1.14.0'
4445
junitVersion = '5.14.0'

core/build.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,8 @@ dependencies {
173173
implementation ("org.mariadb.jdbc:mariadb-java-client:${mariadDbDriverVersion}") {
174174
exclude group: 'org.slf4j', module: 'slf4j-api'
175175
}
176+
// The Java connector library used to establish simply a secure connection to AlloyDB on GCP
177+
implementation("com.google.cloud:alloydb-jdbc-connector:${alloyDbJdbcConnectorVersion}")
176178
implementation "org.apache.commons:commons-text:${commonsTextVersion}"
177179
testImplementation platform("org.junit:junit-bom:${junitVersion}")
178180
testImplementation 'org.junit.jupiter:junit-jupiter'

core/src/integration-test/java/com/scalar/db/storage/cassandra/CassandraEnv.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@ public static Properties getProperties(String testName) {
3737
DatabaseConfig.SYSTEM_NAMESPACE_NAME,
3838
DatabaseConfig.DEFAULT_SYSTEM_NAMESPACE_NAME + "_" + testName);
3939

40+
// Metadata cache expiration time
41+
properties.setProperty(DatabaseConfig.METADATA_CACHE_EXPIRATION_TIME_SECS, "1");
42+
4043
return properties;
4144
}
4245

core/src/integration-test/java/com/scalar/db/storage/cosmos/CosmosEnv.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@ public static Properties getProperties(String testName) {
3232
DatabaseConfig.SYSTEM_NAMESPACE_NAME,
3333
DatabaseConfig.DEFAULT_SYSTEM_NAMESPACE_NAME + "_" + testName);
3434

35+
// Metadata cache expiration time
36+
properties.setProperty(DatabaseConfig.METADATA_CACHE_EXPIRATION_TIME_SECS, "1");
37+
3538
return properties;
3639
}
3740

core/src/integration-test/java/com/scalar/db/storage/dynamo/DynamoEnv.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,9 @@ public static Properties getProperties(String testName) {
5252
DatabaseConfig.SYSTEM_NAMESPACE_NAME,
5353
DatabaseConfig.DEFAULT_SYSTEM_NAMESPACE_NAME + "_" + testName);
5454

55+
// Metadata cache expiration time
56+
properties.setProperty(DatabaseConfig.METADATA_CACHE_EXPIRATION_TIME_SECS, "1");
57+
5558
return properties;
5659
}
5760

core/src/integration-test/java/com/scalar/db/storage/jdbc/ConsensusCommitAdminIntegrationTestWithJdbcDatabase.java

Lines changed: 26 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import static org.assertj.core.api.Assertions.assertThatCode;
55
import static org.assertj.core.api.Assertions.catchThrowable;
66

7+
import com.google.common.util.concurrent.Uninterruptibles;
78
import com.scalar.db.api.DistributedTransactionManager;
89
import com.scalar.db.api.Insert;
910
import com.scalar.db.api.InsertBuilder;
@@ -28,6 +29,7 @@
2829
import java.util.List;
2930
import java.util.Map;
3031
import java.util.Properties;
32+
import java.util.concurrent.TimeUnit;
3133
import org.junit.jupiter.api.Test;
3234
import org.junit.jupiter.api.condition.DisabledIf;
3335
import org.junit.jupiter.api.condition.EnabledIf;
@@ -329,8 +331,8 @@ public void alterColumnType_WideningConversion_ShouldAlterColumnTypesCorrectly()
329331
@Test
330332
@EnabledIf("isOracle")
331333
public void alterColumnType_Oracle_WideningConversion_ShouldAlterColumnTypesCorrectly()
332-
throws ExecutionException, IOException, TransactionException {
333-
try {
334+
throws ExecutionException, TransactionException {
335+
try (DistributedTransactionManager manager = transactionFactory.getTransactionManager()) {
334336
// Arrange
335337
Map<String, String> options = getCreationOptions();
336338
TableMetadata.Builder currentTableMetadataBuilder =
@@ -346,23 +348,24 @@ public void alterColumnType_Oracle_WideningConversion_ShouldAlterColumnTypesCorr
346348

347349
int expectedColumn3Value = 1;
348350
float expectedColumn4Value = 4.0f;
349-
try (DistributedTransactionManager manager = transactionFactory.getTransactionManager()) {
350-
InsertBuilder.Buildable insert =
351-
Insert.newBuilder()
352-
.namespace(namespace1)
353-
.table(TABLE4)
354-
.partitionKey(Key.ofInt("c1", 1))
355-
.clusteringKey(Key.ofInt("c2", 2))
356-
.intValue("c3", expectedColumn3Value)
357-
.floatValue("c4", expectedColumn4Value);
358-
transactionalInsert(manager, insert.build());
359-
}
351+
InsertBuilder.Buildable insert =
352+
Insert.newBuilder()
353+
.namespace(namespace1)
354+
.table(TABLE4)
355+
.partitionKey(Key.ofInt("c1", 1))
356+
.clusteringKey(Key.ofInt("c2", 2))
357+
.intValue("c3", expectedColumn3Value)
358+
.floatValue("c4", expectedColumn4Value);
359+
transactionalInsert(manager, insert.build());
360360

361361
// Act
362362
admin.alterColumnType(namespace1, TABLE4, "c3", DataType.BIGINT);
363363
Throwable exception =
364364
catchThrowable(() -> admin.alterColumnType(namespace1, TABLE4, "c4", DataType.DOUBLE));
365365

366+
// Wait for cache expiry
367+
Uninterruptibles.sleepUninterruptibly(1, TimeUnit.SECONDS);
368+
366369
// Assert
367370
assertThat(exception).isInstanceOf(UnsupportedOperationException.class);
368371
TableMetadata.Builder expectedTableMetadataBuilder =
@@ -376,18 +379,16 @@ public void alterColumnType_Oracle_WideningConversion_ShouldAlterColumnTypesCorr
376379
TableMetadata expectedTableMetadata = expectedTableMetadataBuilder.build();
377380
assertThat(admin.getTableMetadata(namespace1, TABLE4)).isEqualTo(expectedTableMetadata);
378381

379-
try (DistributedTransactionManager manager = transactionFactory.getTransactionManager()) {
380-
Scan scan =
381-
Scan.newBuilder()
382-
.namespace(namespace1)
383-
.table(TABLE4)
384-
.partitionKey(Key.ofInt("c1", 1))
385-
.build();
386-
List<Result> results = transactionalScan(manager, scan);
387-
assertThat(results).hasSize(1);
388-
Result result = results.get(0);
389-
assertThat(result.getBigInt("c3")).isEqualTo(expectedColumn3Value);
390-
}
382+
Scan scan =
383+
Scan.newBuilder()
384+
.namespace(namespace1)
385+
.table(TABLE4)
386+
.partitionKey(Key.ofInt("c1", 1))
387+
.build();
388+
List<Result> results = transactionalScan(manager, scan);
389+
assertThat(results).hasSize(1);
390+
Result result = results.get(0);
391+
assertThat(result.getBigInt("c3")).isEqualTo(expectedColumn3Value);
391392
} finally {
392393
admin.dropTable(namespace1, TABLE4, true);
393394
}

core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcAdminIntegrationTest.java

Lines changed: 26 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import static org.assertj.core.api.Assertions.assertThatCode;
55
import static org.assertj.core.api.Assertions.catchThrowable;
66

7+
import com.google.common.util.concurrent.Uninterruptibles;
78
import com.scalar.db.api.DistributedStorage;
89
import com.scalar.db.api.DistributedStorageAdminIntegrationTestBase;
910
import com.scalar.db.api.Put;
@@ -28,6 +29,7 @@
2829
import java.util.List;
2930
import java.util.Map;
3031
import java.util.Properties;
32+
import java.util.concurrent.TimeUnit;
3133
import org.junit.jupiter.api.Test;
3234
import org.junit.jupiter.api.condition.DisabledIf;
3335
import org.junit.jupiter.api.condition.EnabledIf;
@@ -398,7 +400,7 @@ public void alterColumnType_WideningConversion_ShouldAlterColumnTypesCorrectly()
398400
@EnabledIf("isOracle")
399401
public void alterColumnType_Oracle_WideningConversion_ShouldAlterColumnTypesCorrectly()
400402
throws ExecutionException, IOException {
401-
try {
403+
try (DistributedStorage storage = storageFactory.getStorage()) {
402404
// Arrange
403405
Map<String, String> options = getCreationOptions();
404406
TableMetadata.Builder currentTableMetadataBuilder =
@@ -414,17 +416,15 @@ public void alterColumnType_Oracle_WideningConversion_ShouldAlterColumnTypesCorr
414416

415417
int expectedColumn3Value = 1;
416418
float expectedColumn4Value = 4.0f;
417-
try (DistributedStorage storage = storageFactory.getStorage()) {
418-
PutBuilder.Buildable put =
419-
Put.newBuilder()
420-
.namespace(getNamespace1())
421-
.table(getTable4())
422-
.partitionKey(Key.ofInt(getColumnName1(), 1))
423-
.clusteringKey(Key.ofInt(getColumnName2(), 2))
424-
.intValue(getColumnName3(), expectedColumn3Value)
425-
.floatValue(getColumnName4(), expectedColumn4Value);
426-
storage.put(put.build());
427-
}
419+
PutBuilder.Buildable put =
420+
Put.newBuilder()
421+
.namespace(getNamespace1())
422+
.table(getTable4())
423+
.partitionKey(Key.ofInt(getColumnName1(), 1))
424+
.clusteringKey(Key.ofInt(getColumnName2(), 2))
425+
.intValue(getColumnName3(), expectedColumn3Value)
426+
.floatValue(getColumnName4(), expectedColumn4Value);
427+
storage.put(put.build());
428428

429429
// Act
430430
admin.alterColumnType(getNamespace1(), getTable4(), getColumnName3(), DataType.BIGINT);
@@ -434,6 +434,9 @@ public void alterColumnType_Oracle_WideningConversion_ShouldAlterColumnTypesCorr
434434
admin.alterColumnType(
435435
getNamespace1(), getTable4(), getColumnName4(), DataType.DOUBLE));
436436

437+
// Wait for cache expiry
438+
Uninterruptibles.sleepUninterruptibly(1, TimeUnit.SECONDS);
439+
437440
// Assert
438441
assertThat(exception).isInstanceOf(UnsupportedOperationException.class);
439442
TableMetadata.Builder expectedTableMetadataBuilder =
@@ -448,19 +451,17 @@ public void alterColumnType_Oracle_WideningConversion_ShouldAlterColumnTypesCorr
448451
assertThat(admin.getTableMetadata(getNamespace1(), getTable4()))
449452
.isEqualTo(expectedTableMetadata);
450453

451-
try (DistributedStorage storage = storageFactory.getStorage()) {
452-
Scan scan =
453-
Scan.newBuilder()
454-
.namespace(getNamespace1())
455-
.table(getTable4())
456-
.partitionKey(Key.ofInt(getColumnName1(), 1))
457-
.build();
458-
try (Scanner scanner = storage.scan(scan)) {
459-
List<Result> results = scanner.all();
460-
assertThat(results).hasSize(1);
461-
Result result = results.get(0);
462-
assertThat(result.getBigInt(getColumnName3())).isEqualTo(expectedColumn3Value);
463-
}
454+
Scan scan =
455+
Scan.newBuilder()
456+
.namespace(getNamespace1())
457+
.table(getTable4())
458+
.partitionKey(Key.ofInt(getColumnName1(), 1))
459+
.build();
460+
try (Scanner scanner = storage.scan(scan)) {
461+
List<Result> results = scanner.all();
462+
assertThat(results).hasSize(1);
463+
Result result = results.get(0);
464+
assertThat(result.getBigInt(getColumnName3())).isEqualTo(expectedColumn3Value);
464465
}
465466
} finally {
466467
admin.dropTable(getNamespace1(), getTable4(), true);

core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcEnv.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@ public static Properties getProperties(String testName) {
3737
DatabaseConfig.SYSTEM_NAMESPACE_NAME,
3838
DatabaseConfig.DEFAULT_SYSTEM_NAMESPACE_NAME + "_" + testName);
3939

40+
// Metadata cache expiration time
41+
properties.setProperty(DatabaseConfig.METADATA_CACHE_EXPIRATION_TIME_SECS, "1");
42+
4043
return properties;
4144
}
4245

0 commit comments

Comments
 (0)