Skip to content

Commit af054bc

Browse files
committed
Merge branch 'master' into fix-secondary-index-behavior
2 parents c65d1c3 + f70efe5 commit af054bc

File tree

97 files changed

+8837
-967
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

97 files changed

+8837
-967
lines changed

.github/workflows/ci.yaml

Lines changed: 131 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,136 @@ jobs:
254254
name: cassandra_3.11_integration_test_reports_${{ matrix.mode.label }}
255255
path: core/build/reports/tests/integrationTestCassandra
256256

257+
integration-test-for-cassandra-4-1:
258+
name: Cassandra 4.1 integration test (${{ matrix.mode.label }})
259+
runs-on: ubuntu-latest
260+
261+
services:
262+
cassandra:
263+
image: cassandra:4.1
264+
env:
265+
MAX_HEAP_SIZE: 2048m
266+
HEAP_NEWSIZE: 512m
267+
ports:
268+
- 9042:9042
269+
270+
strategy:
271+
fail-fast: false
272+
matrix:
273+
mode:
274+
- label: default
275+
group_commit_enabled: false
276+
- label: with_group_commit
277+
group_commit_enabled: true
278+
279+
steps:
280+
- uses: actions/checkout@v5
281+
282+
- name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }})
283+
uses: actions/setup-java@v5
284+
with:
285+
java-version: ${{ env.JAVA_VERSION }}
286+
distribution: ${{ env.JAVA_VENDOR }}
287+
288+
- name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test
289+
uses: actions/setup-java@v5
290+
if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}}
291+
with:
292+
java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}
293+
distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}
294+
295+
- name: Login to Oracle container registry
296+
uses: docker/login-action@v3
297+
if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }}
298+
with:
299+
registry: container-registry.oracle.com
300+
username: ${{ secrets.OCR_USERNAME }}
301+
password: ${{ secrets.OCR_TOKEN }}
302+
303+
- name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test
304+
if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }}
305+
run: |
306+
container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}")
307+
docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id"
308+
309+
- name: Setup Gradle
310+
uses: gradle/actions/setup-gradle@v5
311+
312+
- name: Execute Gradle 'integrationTestCassandra' task
313+
run: ./gradlew integrationTestCassandra ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }}
314+
315+
- name: Upload Gradle test reports
316+
if: always()
317+
uses: actions/upload-artifact@v5
318+
with:
319+
name: cassandra_4.1_integration_test_reports_${{ matrix.mode.label }}
320+
path: core/build/reports/tests/integrationTestCassandra
321+
322+
integration-test-for-cassandra-5-0:
323+
name: Cassandra 5.0 integration test (${{ matrix.mode.label }})
324+
runs-on: ubuntu-latest
325+
326+
services:
327+
cassandra:
328+
image: cassandra:5.0
329+
env:
330+
MAX_HEAP_SIZE: 2048m
331+
HEAP_NEWSIZE: 512m
332+
ports:
333+
- 9042:9042
334+
335+
strategy:
336+
fail-fast: false
337+
matrix:
338+
mode:
339+
- label: default
340+
group_commit_enabled: false
341+
- label: with_group_commit
342+
group_commit_enabled: true
343+
344+
steps:
345+
- uses: actions/checkout@v5
346+
347+
- name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }})
348+
uses: actions/setup-java@v5
349+
with:
350+
java-version: ${{ env.JAVA_VERSION }}
351+
distribution: ${{ env.JAVA_VENDOR }}
352+
353+
- name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test
354+
uses: actions/setup-java@v5
355+
if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}}
356+
with:
357+
java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}
358+
distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}
359+
360+
- name: Login to Oracle container registry
361+
uses: docker/login-action@v3
362+
if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }}
363+
with:
364+
registry: container-registry.oracle.com
365+
username: ${{ secrets.OCR_USERNAME }}
366+
password: ${{ secrets.OCR_TOKEN }}
367+
368+
- name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test
369+
if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }}
370+
run: |
371+
container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}")
372+
docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id"
373+
374+
- name: Setup Gradle
375+
uses: gradle/actions/setup-gradle@v5
376+
377+
- name: Execute Gradle 'integrationTestCassandra' task
378+
run: ./gradlew integrationTestCassandra ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }}
379+
380+
- name: Upload Gradle test reports
381+
if: always()
382+
uses: actions/upload-artifact@v5
383+
with:
384+
name: cassandra_5.0_integration_test_reports_${{ matrix.mode.label }}
385+
path: core/build/reports/tests/integrationTestCassandra
386+
257387
integration-test-for-cosmos:
258388
name: Cosmos DB integration test (${{ matrix.mode.label }})
259389
runs-on: windows-latest
@@ -2187,7 +2317,7 @@ jobs:
21872317

21882318
- name: Upload Gradle test reports
21892319
if: always()
2190-
uses: actions/upload-artifact@v4
2320+
uses: actions/upload-artifact@v5
21912321
with:
21922322
name: blob_storage_integration_test_reports_${{ matrix.mode.label }}
21932323
path: core/build/reports/tests/integrationTestObjectStorage

build.gradle

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,17 +26,17 @@ subprojects {
2626
guiceVersion = '5.1.0'
2727
guavaVersion = '32.1.3-jre'
2828
slf4jVersion = '1.7.36'
29-
cassandraDriverVersion = '3.11.5'
29+
cassandraDriverVersion = '3.12.1'
3030
azureCosmosVersion = '4.75.0'
31-
azureBlobStorageVersion = '12.31.3'
31+
azureBlobStorageVersion = '12.32.0'
3232
jooqVersion = '3.14.16'
33-
awssdkVersion = '2.37.3'
33+
awssdkVersion = '2.38.2'
3434
commonsDbcp2Version = '2.13.0'
3535
mysqlDriverVersion = '8.4.0'
3636
postgresqlDriverVersion = '42.7.8'
3737
oracleDriverVersion = '23.26.0.0.0'
3838
sqlserverDriverVersion = '12.8.2.jre8'
39-
sqliteDriverVersion = '3.50.3.0'
39+
sqliteDriverVersion = '3.51.0.0'
4040
yugabyteDriverVersion = '42.7.3-yb-4'
4141
db2DriverVersion = '12.1.2.0'
4242
mariadDbDriverVersion = '3.5.6'

core/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ dependencies {
167167
implementation "com.google.guava:guava:${guavaVersion}"
168168
implementation "com.google.inject:guice:${guiceVersion}"
169169
implementation "org.slf4j:slf4j-api:${slf4jVersion}"
170-
implementation "com.datastax.cassandra:cassandra-driver-core:${cassandraDriverVersion}"
170+
implementation "org.apache.cassandra:cassandra-driver-core:${cassandraDriverVersion}"
171171
implementation "com.azure:azure-cosmos:${azureCosmosVersion}"
172172
implementation "com.azure:azure-storage-blob:${azureBlobStorageVersion}"
173173
implementation "org.jooq:jooq:${jooqVersion}"

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

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,25 +30,26 @@ public JdbcAdminTestUtils(Properties properties) {
3030
@Override
3131
public void dropNamespacesTable() throws Exception {
3232
execute(
33-
"DROP TABLE " + rdbEngine.encloseFullTableName(metadataSchema, JdbcAdmin.NAMESPACES_TABLE));
33+
"DROP TABLE "
34+
+ rdbEngine.encloseFullTableName(metadataSchema, NamespaceMetadataService.TABLE_NAME));
3435
}
3536

3637
@Override
3738
public void dropMetadataTable() throws Exception {
38-
dropTable(metadataSchema, JdbcAdmin.METADATA_TABLE);
39+
dropTable(metadataSchema, TableMetadataService.TABLE_NAME);
3940
}
4041

4142
@Override
4243
public void truncateNamespacesTable() throws Exception {
4344
String truncateTableStatement =
44-
rdbEngine.truncateTableSql(metadataSchema, JdbcAdmin.NAMESPACES_TABLE);
45+
rdbEngine.truncateTableSql(metadataSchema, NamespaceMetadataService.TABLE_NAME);
4546
execute(truncateTableStatement);
4647
}
4748

4849
@Override
4950
public void truncateMetadataTable() throws Exception {
5051
String truncateTableStatement =
51-
rdbEngine.truncateTableSql(metadataSchema, JdbcAdmin.METADATA_TABLE);
52+
rdbEngine.truncateTableSql(metadataSchema, TableMetadataService.TABLE_NAME);
5253
execute(truncateTableStatement);
5354
}
5455

@@ -57,7 +58,7 @@ public void truncateMetadataTable() throws Exception {
5758
public void corruptMetadata(String namespace, String table) throws Exception {
5859
String insertCorruptedMetadataStatement =
5960
"INSERT INTO "
60-
+ rdbEngine.encloseFullTableName(metadataSchema, JdbcAdmin.METADATA_TABLE)
61+
+ rdbEngine.encloseFullTableName(metadataSchema, TableMetadataService.TABLE_NAME)
6162
+ " VALUES ('"
6263
+ getFullTableName(namespace, table)
6364
+ "','corrupted','corrupted','corrupted','corrupted','0','0')";
@@ -68,9 +69,9 @@ public void corruptMetadata(String namespace, String table) throws Exception {
6869
public void deleteMetadata(String namespace, String table) throws Exception {
6970
String deleteMetadataStatement =
7071
"DELETE FROM "
71-
+ rdbEngine.encloseFullTableName(metadataSchema, JdbcAdmin.METADATA_TABLE)
72+
+ rdbEngine.encloseFullTableName(metadataSchema, TableMetadataService.TABLE_NAME)
7273
+ " WHERE "
73-
+ rdbEngine.enclose(JdbcAdmin.METADATA_COL_FULL_TABLE_NAME)
74+
+ rdbEngine.enclose(TableMetadataService.COL_FULL_TABLE_NAME)
7475
+ " = ?";
7576
try (Connection connection = dataSource.getConnection();
7677
PreparedStatement preparedStatement =

core/src/integration-test/java/com/scalar/db/storage/multistorage/MultiStorageAdminTestUtils.java

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,13 @@
99
import com.scalar.db.storage.cassandra.CassandraAdmin;
1010
import com.scalar.db.storage.cassandra.CassandraConfig;
1111
import com.scalar.db.storage.cassandra.ClusterManager;
12-
import com.scalar.db.storage.jdbc.JdbcAdmin;
1312
import com.scalar.db.storage.jdbc.JdbcConfig;
1413
import com.scalar.db.storage.jdbc.JdbcTestUtils;
1514
import com.scalar.db.storage.jdbc.JdbcUtils;
15+
import com.scalar.db.storage.jdbc.NamespaceMetadataService;
1616
import com.scalar.db.storage.jdbc.RdbEngineFactory;
1717
import com.scalar.db.storage.jdbc.RdbEngineStrategy;
18+
import com.scalar.db.storage.jdbc.TableMetadataService;
1819
import com.scalar.db.util.AdminTestUtils;
1920
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
2021
import java.sql.Connection;
@@ -61,7 +62,8 @@ public void dropNamespacesTable() throws SQLException {
6162
// for JDBC
6263
execute(
6364
"DROP TABLE "
64-
+ rdbEngine.encloseFullTableName(jdbcMetadataSchema, JdbcAdmin.NAMESPACES_TABLE));
65+
+ rdbEngine.encloseFullTableName(
66+
jdbcMetadataSchema, NamespaceMetadataService.TABLE_NAME));
6567
}
6668

6769
@Override
@@ -71,7 +73,7 @@ public void dropMetadataTable() throws SQLException {
7173
// for JDBC
7274
execute(
7375
"DROP TABLE "
74-
+ rdbEngine.encloseFullTableName(jdbcMetadataSchema, JdbcAdmin.METADATA_TABLE));
76+
+ rdbEngine.encloseFullTableName(jdbcMetadataSchema, TableMetadataService.TABLE_NAME));
7577
}
7678

7779
@Override
@@ -86,7 +88,7 @@ public void truncateNamespacesTable() throws SQLException {
8688

8789
// for JDBC
8890
String truncateTableStatement =
89-
rdbEngine.truncateTableSql(jdbcMetadataSchema, JdbcAdmin.NAMESPACES_TABLE);
91+
rdbEngine.truncateTableSql(jdbcMetadataSchema, NamespaceMetadataService.TABLE_NAME);
9092
execute(truncateTableStatement);
9193
}
9294

@@ -97,7 +99,7 @@ public void truncateMetadataTable() throws Exception {
9799
// for JDBC
98100
String truncateTableStatement =
99101
"TRUNCATE TABLE "
100-
+ rdbEngine.encloseFullTableName(jdbcMetadataSchema, JdbcAdmin.METADATA_TABLE);
102+
+ rdbEngine.encloseFullTableName(jdbcMetadataSchema, TableMetadataService.TABLE_NAME);
101103
execute(truncateTableStatement);
102104
}
103105

@@ -109,7 +111,7 @@ public void corruptMetadata(String namespace, String table) throws Exception {
109111
// for JDBC
110112
String insertCorruptedMetadataStatement =
111113
"INSERT INTO "
112-
+ rdbEngine.encloseFullTableName(jdbcMetadataSchema, JdbcAdmin.METADATA_TABLE)
114+
+ rdbEngine.encloseFullTableName(jdbcMetadataSchema, TableMetadataService.TABLE_NAME)
113115
+ " VALUES ('"
114116
+ getFullTableName(namespace, table)
115117
+ "','corrupted','corrupted','corrupted','corrupted','0','0')";
@@ -123,9 +125,9 @@ public void deleteMetadata(String namespace, String table) throws Exception {
123125
// for JDBC
124126
String deleteMetadataStatement =
125127
"DELETE FROM "
126-
+ rdbEngine.encloseFullTableName(jdbcMetadataSchema, JdbcAdmin.METADATA_TABLE)
128+
+ rdbEngine.encloseFullTableName(jdbcMetadataSchema, TableMetadataService.TABLE_NAME)
127129
+ " WHERE "
128-
+ rdbEngine.enclose(JdbcAdmin.METADATA_COL_FULL_TABLE_NAME)
130+
+ rdbEngine.enclose(TableMetadataService.COL_FULL_TABLE_NAME)
129131
+ " = ?";
130132
try (Connection connection = dataSource.getConnection();
131133
PreparedStatement preparedStatement =

core/src/integration-test/java/com/scalar/db/storage/objectstorage/ConsensusCommitAdminIntegrationTestWithObjectStorage.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.scalar.db.storage.objectstorage;
22

3+
import com.scalar.db.api.TableMetadata;
34
import com.scalar.db.transaction.consensuscommit.ConsensusCommitAdminIntegrationTestBase;
45
import com.scalar.db.util.AdminTestUtils;
56
import java.util.Properties;
@@ -14,13 +15,17 @@ protected Properties getProps(String testName) {
1415
}
1516

1617
@Override
17-
protected AdminTestUtils getAdminTestUtils(String testName) {
18-
return new ObjectStorageAdminTestUtils(getProperties(testName));
18+
protected TableMetadata getTableMetadata() {
19+
return TableMetadata.newBuilder(TABLE_METADATA)
20+
.removeSecondaryIndex(COL_NAME5)
21+
.removeSecondaryIndex(COL_NAME6)
22+
.build();
1923
}
2024

2125
@Override
22-
@Disabled("Temporarily disabled because it includes DML operations")
23-
public void truncateTable_ShouldTruncateProperly() {}
26+
protected AdminTestUtils getAdminTestUtils(String testName) {
27+
return new ObjectStorageAdminTestUtils(getProperties(testName));
28+
}
2429

2530
@Override
2631
@Disabled("Object Storage does not support index-related operations")

core/src/integration-test/java/com/scalar/db/storage/objectstorage/ConsensusCommitAdminRepairIntegrationTestWithObjectStorage.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,39 @@
11
package com.scalar.db.storage.objectstorage;
22

3+
import com.scalar.db.api.Scan;
4+
import com.scalar.db.api.TableMetadata;
5+
import com.scalar.db.io.DataType;
36
import com.scalar.db.transaction.consensuscommit.ConsensusCommitAdminRepairIntegrationTestBase;
47
import java.util.Properties;
58

69
public class ConsensusCommitAdminRepairIntegrationTestWithObjectStorage
710
extends ConsensusCommitAdminRepairIntegrationTestBase {
811

12+
@Override
13+
protected TableMetadata getTableMetadata() {
14+
return TableMetadata.newBuilder()
15+
.addColumn(COL_NAME1, DataType.INT)
16+
.addColumn(COL_NAME2, DataType.TEXT)
17+
.addColumn(COL_NAME3, DataType.TEXT)
18+
.addColumn(COL_NAME4, DataType.INT)
19+
.addColumn(COL_NAME5, DataType.INT)
20+
.addColumn(COL_NAME6, DataType.TEXT)
21+
.addColumn(COL_NAME7, DataType.BIGINT)
22+
.addColumn(COL_NAME8, DataType.FLOAT)
23+
.addColumn(COL_NAME9, DataType.DOUBLE)
24+
.addColumn(COL_NAME10, DataType.BOOLEAN)
25+
.addColumn(COL_NAME11, DataType.BLOB)
26+
.addColumn(COL_NAME12, DataType.DATE)
27+
.addColumn(COL_NAME13, DataType.TIME)
28+
.addColumn(COL_NAME14, DataType.TIMESTAMPTZ)
29+
.addColumn(COL_NAME15, DataType.TIMESTAMP)
30+
.addPartitionKey(COL_NAME2)
31+
.addPartitionKey(COL_NAME1)
32+
.addClusteringKey(COL_NAME4, Scan.Ordering.Order.ASC)
33+
.addClusteringKey(COL_NAME3, Scan.Ordering.Order.DESC)
34+
.build();
35+
}
36+
937
@Override
1038
protected Properties getProps(String testName) {
1139
return ObjectStorageEnv.getProperties(testName);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.scalar.db.storage.objectstorage;
2+
3+
import com.scalar.db.transaction.consensuscommit.ConsensusCommitConfig;
4+
import com.scalar.db.transaction.consensuscommit.ConsensusCommitCrossPartitionScanIntegrationTestBase;
5+
import java.util.Properties;
6+
import org.junit.jupiter.api.Disabled;
7+
import org.junit.jupiter.api.Test;
8+
9+
public class ConsensusCommitCrossPartitionScanIntegrationTestWithObjectStorage
10+
extends ConsensusCommitCrossPartitionScanIntegrationTestBase {
11+
12+
@Override
13+
protected Properties getProps(String testName) {
14+
Properties properties = ConsensusCommitObjectStorageEnv.getProperties(testName);
15+
properties.setProperty(ConsensusCommitConfig.ISOLATION_LEVEL, "SERIALIZABLE");
16+
return properties;
17+
}
18+
19+
@Test
20+
@Override
21+
@Disabled("Cross-partition scan with ordering is not supported in Object Storage")
22+
public void scan_CrossPartitionScanWithOrderingGivenForCommittedRecord_ShouldReturnRecords() {}
23+
}

0 commit comments

Comments
 (0)