Skip to content

Commit 231575a

Browse files
authored
Merge branch 'master' into support_cassy_4_5
2 parents 62df6bd + 678ec17 commit 231575a

File tree

124 files changed

+8487
-2651
lines changed

Some content is hidden

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

124 files changed

+8487
-2651
lines changed

.github/workflows/ci.yaml

Lines changed: 73 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2097,7 +2097,7 @@ jobs:
20972097

20982098
- name: Upload Gradle test reports
20992099
if: always()
2100-
uses: actions/upload-artifact@v4
2100+
uses: actions/upload-artifact@v5
21012101
with:
21022102
name: tidb_6_5_integration_test_reports_${{ matrix.mode.label }}
21032103
path: core/build/reports/tests/integrationTestJdbc
@@ -2172,7 +2172,7 @@ jobs:
21722172

21732173
- name: Upload Gradle test reports
21742174
if: always()
2175-
uses: actions/upload-artifact@v4
2175+
uses: actions/upload-artifact@v5
21762176
with:
21772177
name: tidb_7_5_integration_test_reports_${{ matrix.mode.label }}
21782178
path: core/build/reports/tests/integrationTestJdbc
@@ -2247,11 +2247,81 @@ jobs:
22472247

22482248
- name: Upload Gradle test reports
22492249
if: always()
2250-
uses: actions/upload-artifact@v4
2250+
uses: actions/upload-artifact@v5
22512251
with:
22522252
name: tidb_8_5_integration_test_reports_${{ matrix.mode.label }}
22532253
path: core/build/reports/tests/integrationTestJdbc
22542254

2255+
integration-test-for-blob-storage:
2256+
name: Blob Storage integration test (${{ matrix.mode.label }})
2257+
runs-on: ubuntu-latest
2258+
2259+
strategy:
2260+
fail-fast: false
2261+
matrix:
2262+
mode:
2263+
- label: default
2264+
group_commit_enabled: false
2265+
- label: with_group_commit
2266+
group_commit_enabled: true
2267+
2268+
services:
2269+
postgres:
2270+
image: mcr.microsoft.com/azure-storage/azurite
2271+
env:
2272+
AZURITE_ACCOUNTS: "test:test"
2273+
ports:
2274+
- 10000:10000
2275+
2276+
steps:
2277+
- uses: actions/checkout@v5
2278+
2279+
- name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }})
2280+
uses: actions/setup-java@v5
2281+
with:
2282+
java-version: ${{ env.JAVA_VERSION }}
2283+
distribution: ${{ env.JAVA_VENDOR }}
2284+
2285+
- name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}) to run integration test
2286+
uses: actions/setup-java@v5
2287+
if: ${{ env.SET_UP_INT_TEST_RUNTIME_NON_ORACLE_JDK == 'true'}}
2288+
with:
2289+
java-version: ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}
2290+
distribution: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR }}
2291+
2292+
- name: Login to Oracle container registry
2293+
uses: docker/login-action@v3
2294+
if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }}
2295+
with:
2296+
registry: container-registry.oracle.com
2297+
username: ${{ secrets.OCR_USERNAME }}
2298+
password: ${{ secrets.OCR_TOKEN }}
2299+
2300+
- name: Set up JDK ${{ env.INT_TEST_JAVA_RUNTIME_VERSION }} (oracle) to run the integration test
2301+
if: ${{ env.INT_TEST_JAVA_RUNTIME_VENDOR == 'oracle' }}
2302+
run: |
2303+
container_id=$(docker create "container-registry.oracle.com/java/jdk:${{ env.INT_TEST_JAVA_RUNTIME_VERSION }}")
2304+
docker cp -L "$container_id:/usr/java/default" /usr/lib/jvm/oracle-jdk && docker rm "$container_id"
2305+
2306+
- name: Setup Gradle
2307+
uses: gradle/actions/setup-gradle@v5
2308+
2309+
- name: Create Blob Storage container
2310+
run: |
2311+
az storage container create \
2312+
--name test-container \
2313+
--connection-string "DefaultEndpointsProtocol=http;AccountName=test;AccountKey=test;BlobEndpoint=http://localhost:10000/test;"
2314+
2315+
- name: Execute Gradle 'integrationTestObjectStorage' task
2316+
run: ./gradlew integrationTestObjectStorage -Dscalardb.object_storage.endpoint=http://localhost:10000/test/test-container -Dscalardb.object_storage.username=test -Dscalardb.object_storage.password=test ${{ matrix.mode.group_commit_enabled && env.INT_TEST_GRADLE_OPTIONS_FOR_GROUP_COMMIT || '' }}
2317+
2318+
- name: Upload Gradle test reports
2319+
if: always()
2320+
uses: actions/upload-artifact@v5
2321+
with:
2322+
name: blob_storage_integration_test_reports_${{ matrix.mode.label }}
2323+
path: core/build/reports/tests/integrationTestObjectStorage
2324+
22552325
integration-test-for-multi-storage:
22562326
name: Multi-storage integration test (${{ matrix.mode.label }})
22572327
runs-on: ubuntu-latest

build.gradle

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
plugins {
22
id "com.diffplug.spotless" version "6.13.0"
3-
id "org.jreleaser" version "1.20.0"
3+
id "org.jreleaser" version "1.21.0"
44
}
55

66
ext {
@@ -28,21 +28,22 @@ subprojects {
2828
slf4jVersion = '1.7.36'
2929
cassandraDriverVersion = '3.12.1'
3030
azureCosmosVersion = '4.75.0'
31+
azureBlobStorageVersion = '12.32.0'
3132
jooqVersion = '3.14.16'
32-
awssdkVersion = '2.36.2'
33+
awssdkVersion = '2.38.2'
3334
commonsDbcp2Version = '2.13.0'
3435
mysqlDriverVersion = '8.4.0'
3536
postgresqlDriverVersion = '42.7.8'
36-
oracleDriverVersion = '23.9.0.25.07'
37+
oracleDriverVersion = '23.26.0.0.0'
3738
sqlserverDriverVersion = '12.8.2.jre8'
38-
sqliteDriverVersion = '3.50.3.0'
39+
sqliteDriverVersion = '3.51.0.0'
3940
yugabyteDriverVersion = '42.7.3-yb-4'
4041
db2DriverVersion = '12.1.2.0'
4142
mariadDbDriverVersion = '3.5.6'
4243
alloyDbJdbcConnectorVersion = '1.2.7'
4344
picocliVersion = '4.7.7'
4445
commonsTextVersion = '1.14.0'
45-
junitVersion = '5.14.0'
46+
junitVersion = '5.14.1'
4647
commonsLangVersion = '3.19.0'
4748
assertjVersion = '3.27.6'
4849
mockitoVersion = '4.11.0'
@@ -108,7 +109,8 @@ jreleaser {
108109
def stagingRepositories = ['core/build/staging-deploy',
109110
'integration-test/build/staging-deploy',
110111
'schema-loader/build/staging-deploy',
111-
'data-loader/core/build/staging-deploy']
112+
'data-loader/core/build/staging-deploy',
113+
'data-loader/cli/build/staging-deploy']
112114
mavenCentral {
113115
sonatype {
114116
active = 'RELEASE'

core/build.gradle

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,16 @@ sourceSets {
6464
}
6565
resources.srcDir file('src/integration-test/resources')
6666
}
67+
integrationTestObjectStorage {
68+
java {
69+
compileClasspath += main.output + test.output
70+
runtimeClasspath += main.output + test.output
71+
srcDir file('src/integration-test/java')
72+
include '**/com/scalar/db/common/*.java'
73+
include '**/com/scalar/db/storage/objectstorage/*.java'
74+
}
75+
resources.srcDir file('src/integration-test/resources')
76+
}
6777
integrationTestMultiStorage {
6878
java {
6979
compileClasspath += main.output + test.output
@@ -136,6 +146,9 @@ configurations {
136146
integrationTestJdbcImplementation.extendsFrom testImplementation
137147
integrationTestJdbcRuntimeOnly.extendsFrom testRuntimeOnly
138148
integrationTestJdbcCompileOnly.extendsFrom testCompileOnly
149+
integrationTestObjectStorageImplementation.extendsFrom testImplementation
150+
integrationTestObjectStorageRuntimeOnly.extendsFrom testRuntimeOnly
151+
integrationTestObjectStorageCompileOnly.extendsFrom testCompileOnly
139152
integrationTestMultiStorageImplementation.extendsFrom testImplementation
140153
integrationTestMultiStorageRuntimeOnly.extendsFrom testRuntimeOnly
141154
integrationTestMultiStorageCompileOnly.extendsFrom testCompileOnly
@@ -156,6 +169,7 @@ dependencies {
156169
implementation "org.slf4j:slf4j-api:${slf4jVersion}"
157170
implementation "org.apache.cassandra:cassandra-driver-core:${cassandraDriverVersion}"
158171
implementation "com.azure:azure-cosmos:${azureCosmosVersion}"
172+
implementation "com.azure:azure-storage-blob:${azureBlobStorageVersion}"
159173
implementation "org.jooq:jooq:${jooqVersion}"
160174
implementation platform("software.amazon.awssdk:bom:${awssdkVersion}")
161175
implementation 'software.amazon.awssdk:applicationautoscaling'
@@ -174,7 +188,9 @@ dependencies {
174188
exclude group: 'org.slf4j', module: 'slf4j-api'
175189
}
176190
// The Java connector library used to establish simply a secure connection to AlloyDB on GCP
177-
implementation("com.google.cloud:alloydb-jdbc-connector:${alloyDbJdbcConnectorVersion}")
191+
implementation("com.google.cloud:alloydb-jdbc-connector:${alloyDbJdbcConnectorVersion}") {
192+
exclude group: 'org.slf4j', module: 'slf4j-api'
193+
}
178194
implementation "org.apache.commons:commons-text:${commonsTextVersion}"
179195
testImplementation platform("org.junit:junit-bom:${junitVersion}")
180196
testImplementation 'org.junit.jupiter:junit-jupiter'
@@ -251,6 +267,18 @@ task integrationTestJdbc(type: Test) {
251267
options {
252268
systemProperties(System.getProperties().findAll{it.key.toString().startsWith("scalardb")})
253269
}
270+
maxHeapSize = "4g"
271+
}
272+
273+
task integrationTestObjectStorage(type: Test) {
274+
description = 'Runs the integration tests for Object Storages.'
275+
group = 'verification'
276+
testClassesDirs = sourceSets.integrationTestObjectStorage.output.classesDirs
277+
classpath = sourceSets.integrationTestObjectStorage.runtimeClasspath
278+
outputs.upToDateWhen { false } // ensures integration tests are run every time when called
279+
options {
280+
systemProperties(System.getProperties().findAll{it.key.toString().startsWith("scalardb")})
281+
}
254282
}
255283

256284
task integrationTestMultiStorage(type: Test) {

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

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -126,16 +126,6 @@ protected void waitForTableDeletion() {
126126
}
127127
}
128128

129-
@Test
130-
@Override
131-
@Disabled("Import-related functionality is not supported in Cassandra")
132-
public void getImportTableMetadata_WithSufficientPermission_ShouldSucceed() {}
133-
134-
@Test
135-
@Override
136-
@Disabled("Import-related functionality is not supported in Cassandra")
137-
public void addRawColumnToTable_WithSufficientPermission_ShouldSucceed() {}
138-
139129
@Test
140130
@Override
141131
@Disabled("Import-related functionality is not supported in Cassandra")

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,11 @@ public void corruptMetadata(String namespace, String table) {
5757
// Do nothing
5858
}
5959

60+
@Override
61+
public void deleteMetadata(String namespace, String table) throws Exception {
62+
// Do nothing
63+
}
64+
6065
@Override
6166
public void dropNamespace(String namespace) {
6267
String dropKeyspaceQuery =

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,15 @@ public void corruptMetadata(String namespace, String table) {
8686
container.upsertItem(corruptedMetadata);
8787
}
8888

89+
@Override
90+
public void deleteMetadata(String namespace, String table) {
91+
String fullTableName = getFullTableName(namespace, table);
92+
CosmosContainer container =
93+
client.getDatabase(metadataDatabase).getContainer(CosmosAdmin.TABLE_METADATA_CONTAINER);
94+
container.deleteItem(
95+
fullTableName, new PartitionKey(fullTableName), new CosmosItemRequestOptions());
96+
}
97+
8998
/**
9099
* Retrieve the stored procedure for the given table
91100
*

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@ protected AdminTestUtils getAdminTestUtils(String testName) {
2929
return new DynamoAdminTestUtils(getProperties(testName));
3030
}
3131

32+
@Override
33+
@Disabled("DynamoDB does not have a concept of namespaces")
34+
public void
35+
dropNamespace_ForNamespaceWithNonScalarDBManagedTables_ShouldThrowIllegalArgumentException() {}
36+
3237
@Override
3338
@Disabled("DynamoDB does not support dropping columns")
3439
public void dropColumnFromTable_DropColumnForEachExistingDataType_ShouldDropColumnsCorrectly() {}

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,11 @@ protected AdminTestUtils getAdminTestUtils(String testName) {
2828
return new DynamoAdminTestUtils(getProperties(testName));
2929
}
3030

31+
@Override
32+
@Disabled("DynamoDB does not have a concept of namespaces")
33+
public void
34+
dropNamespace_ForNamespaceWithNonScalarDBManagedTables_ShouldThrowIllegalArgumentException() {}
35+
3136
@Override
3237
@Disabled("DynamoDB does not support dropping columns")
3338
public void dropColumnFromTable_DropColumnForEachExistingDataType_ShouldDropColumnsCorrectly() {}

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

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -45,16 +45,6 @@ protected void sleepBetweenTests() {
4545
Uninterruptibles.sleepUninterruptibly(SLEEP_BETWEEN_TESTS_SECONDS, TimeUnit.SECONDS);
4646
}
4747

48-
@Test
49-
@Override
50-
@Disabled("Import-related functionality is not supported in DynamoDB")
51-
public void getImportTableMetadata_WithSufficientPermission_ShouldSucceed() {}
52-
53-
@Test
54-
@Override
55-
@Disabled("Import-related functionality is not supported in DynamoDB")
56-
public void addRawColumnToTable_WithSufficientPermission_ShouldSucceed() {}
57-
5848
@Test
5949
@Override
6050
@Disabled("Import-related functionality is not supported in DynamoDB")

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,20 @@ public void corruptMetadata(String namespace, String table) {
171171
.build());
172172
}
173173

174+
@Override
175+
public void deleteMetadata(String namespace, String table) {
176+
String fullTableName =
177+
getFullTableName(Namespace.of(namespacePrefix, namespace).prefixed(), table);
178+
Map<String, AttributeValue> keyToDelete = new HashMap<>();
179+
keyToDelete.put("table", AttributeValue.builder().s(fullTableName).build());
180+
181+
client.deleteItem(
182+
DeleteItemRequest.builder()
183+
.tableName(getFullTableName(metadataNamespace, DynamoAdmin.METADATA_TABLE))
184+
.key(keyToDelete)
185+
.build());
186+
}
187+
174188
@Override
175189
public void dropTable(String nonPrefixedNamespace, String table) {
176190
String namespace = Namespace.of(namespacePrefix, nonPrefixedNamespace).prefixed();

0 commit comments

Comments
 (0)