Skip to content

Commit 6aa5a34

Browse files
authored
Merge branch 'master' into data-loader/add-ci-for-build
2 parents 0b40a16 + 644578b commit 6aa5a34

File tree

10 files changed

+127
-1
lines changed

10 files changed

+127
-1
lines changed

.github/workflows/ci.yaml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,12 @@ jobs:
6767
run: |
6868
mkdir -p /tmp/gradle_test_reports/core
6969
mkdir -p /tmp/gradle_test_reports/schema-loader
70+
mkdir -p /tmp/gradle_test_reports/data-loader/core
71+
mkdir -p /tmp/gradle_test_reports/data-loader/cli
7072
cp -a core/build/reports/tests/test /tmp/gradle_test_reports/core/
7173
cp -a schema-loader/build/reports/tests/test /tmp/gradle_test_reports/schema-loader/
74+
cp -a data-loader/core/build/reports/tests/test /tmp/gradle_test_reports/data-loader/core/
75+
cp -a data-loader/cli/build/reports/tests/test /tmp/gradle_test_reports/data-loader/cli/
7276
7377
- name: Upload Gradle test reports
7478
if: always()
@@ -83,9 +87,13 @@ jobs:
8387
mkdir -p /tmp/gradle_spotbugs_reports/core
8488
mkdir -p /tmp/gradle_spotbugs_reports/schema-loader
8589
mkdir -p /tmp/gradle_spotbugs_reports/integration-test
90+
mkdir -p /tmp/gradle_spotbugs_reports/data-loader/core
91+
mkdir -p /tmp/gradle_spotbugs_reports/data-loader/cli
8692
cp -a core/build/reports/spotbugs /tmp/gradle_spotbugs_reports/core/
8793
cp -a schema-loader/build/reports/spotbugs /tmp/gradle_spotbugs_reports/schema-loader/
8894
cp -a integration-test/build/reports/spotbugs /tmp/gradle_spotbugs_reports/integration-test/
95+
cp -a data-loader/core/build/reports/spotbugs /tmp/gradle_spotbugs_reports/data-loader/core/
96+
cp -a data-loader/cli/build/reports/spotbugs /tmp/gradle_spotbugs_reports/data-loader/cli/
8997
9098
- name: Upload Spotbugs reports
9199
if: always()
@@ -113,6 +121,9 @@ jobs:
113121
- name: Dockerfile Lint for ScalarDB Schema Loader
114122
run: ./gradlew schema-loader:dockerfileLint
115123

124+
- name: Dockerfile Lint for ScalarDB Data Loader CLI
125+
run: ./gradlew data-loader:cli:dockerfileLint
126+
116127
integration-test-for-cassandra-3-0:
117128
name: Cassandra 3.0 integration test (${{ matrix.mode.label }})
118129
runs-on: ubuntu-latest

.github/workflows/create-release.yaml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,3 +77,16 @@ jobs:
7777
asset_path: schema-loader/build/libs/scalardb-schema-loader-${{ steps.version.outputs.version }}.jar
7878
asset_name: scalardb-schema-loader-${{ steps.version.outputs.version }}.jar
7979
asset_content_type: application/java-archive
80+
81+
- name: Build scalardb-data-loader-cli jar
82+
run: ./gradlew :data-loader:cli:shadowJar
83+
84+
- name: Upload scalardb-data-loader-cli jar
85+
uses: actions/upload-release-asset@v1
86+
env:
87+
GITHUB_TOKEN: ${{ secrets.GH_PROJECT_ACCESS_TOKEN }}
88+
with:
89+
upload_url: ${{ steps.create_release.outputs.upload_url }}
90+
asset_path: data-loader/cli/build/libs/scalardb-data-loader-cli-${{ steps.version.outputs.version }}.jar
91+
asset_name: scalardb-data-loader-cli-${{ steps.version.outputs.version }}.jar
92+
asset_content_type: application/java-archive

.github/workflows/release-snapshot.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,3 +56,4 @@ jobs:
5656
if: contains(steps.version.outputs.version, '-SNAPSHOT')
5757
run: |
5858
docker push ghcr.io/scalar-labs/scalardb-schema-loader:${{ steps.version.outputs.version }}
59+
docker push ghcr.io/scalar-labs/scalardb-data-loader-cli:${{ steps.version.outputs.version }}

.github/workflows/remove-untagged-images.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,9 @@ jobs:
2525
with:
2626
github-token: ${{ secrets.CR_PAT }}
2727
package-name: scalardb-schema-loader
28+
29+
- name: scalardb-data-loader-cli
30+
uses: camargo/delete-untagged-action@v1
31+
with:
32+
github-token: ${{ secrets.CR_PAT }}
33+
package-name: scalardb-data-loader-cli

.github/workflows/upload-artifacts.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ jobs:
5656
- name: Push containers
5757
run: |
5858
docker push ghcr.io/scalar-labs/scalardb-schema-loader:${{ steps.version.outputs.version }}
59+
docker push ghcr.io/scalar-labs/scalardb-data-loader-cli:${{ steps.version.outputs.version }}
5960
6061
- name: Upload scalardb, scalardb-schema-loader, scalardb-data-loader-core, and scalardb-integration-test to Maven Central Repository
6162
run: |

.github/workflows/vuln-check.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ jobs:
2525
with:
2626
target-ref: ${{ inputs.target-ref }}
2727
find-latest-release: ${{ inputs.find-latest-release }}
28-
images: '[["ScalarDB Schema Loader", "scalardb-schema-loader"]]'
28+
images: '[["ScalarDB Schema Loader", "scalardb-schema-loader"], ["ScalarDB Data Loader CLI", "scalardb-data-loader-cli"]]'
2929
version-command: "./gradlew :core:properties -q | grep version: | awk '{print $2}'"
3030
secrets:
3131
CR_PAT: ${{ secrets.CR_PAT }}

core/src/main/java/com/scalar/db/storage/jdbc/JdbcDatabase.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,17 @@ public Scanner scan(Scan scan) throws ExecutionException {
117117
close(connection);
118118
throw new ExecutionException(
119119
CoreError.JDBC_ERROR_OCCURRED_IN_SELECTION.buildMessage(e.getMessage()), e);
120+
} catch (Exception e) {
121+
try {
122+
if (connection != null) {
123+
connection.rollback();
124+
}
125+
} catch (SQLException ex) {
126+
e.addSuppressed(ex);
127+
}
128+
129+
close(connection);
130+
throw e;
120131
}
121132
}
122133

@@ -186,6 +197,9 @@ public void mutate(List<? extends Mutation> mutations) throws ExecutionException
186197
close(connection);
187198
throw new ExecutionException(
188199
CoreError.JDBC_ERROR_OCCURRED_IN_MUTATION.buildMessage(e.getMessage()), e);
200+
} catch (Exception e) {
201+
close(connection);
202+
throw e;
189203
}
190204

191205
try {

core/src/test/java/com/scalar/db/storage/jdbc/JdbcDatabaseTest.java

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22

33
import static org.assertj.core.api.Assertions.assertThatThrownBy;
44
import static org.mockito.ArgumentMatchers.any;
5+
import static org.mockito.ArgumentMatchers.anyBoolean;
56
import static org.mockito.Mockito.doThrow;
7+
import static org.mockito.Mockito.never;
68
import static org.mockito.Mockito.verify;
79
import static org.mockito.Mockito.when;
810

@@ -138,6 +140,25 @@ public void whenScanOperationExecutedAndScannerClosed_shouldCallJdbcService() th
138140
verify(connection).close();
139141
}
140142

143+
@Test
144+
public void
145+
whenScanOperationExecutedAndJdbcServiceThrowsIllegalArgumentException_shouldCloseConnectionAndThrowIllegalArgumentException()
146+
throws Exception {
147+
// Arrange
148+
Exception cause = new IllegalArgumentException("Table not found");
149+
// Simulate the table not found scenario.
150+
when(jdbcService.getScanner(any(), any())).thenThrow(cause);
151+
152+
// Act Assert
153+
assertThatThrownBy(
154+
() -> {
155+
Scan scan = new Scan(new Key("p1", "val")).forNamespace(NAMESPACE).forTable(TABLE);
156+
jdbcDatabase.scan(scan);
157+
})
158+
.isInstanceOf(IllegalArgumentException.class);
159+
verify(connection).close();
160+
}
161+
141162
@Test
142163
public void
143164
whenScanOperationExecutedAndScannerClosed_SQLExceptionThrownByConnectionCommit_shouldThrowIOException()
@@ -382,4 +403,30 @@ public void mutate_withConflictError_shouldThrowRetriableExecutionException()
382403
verify(connection).rollback();
383404
verify(connection).close();
384405
}
406+
407+
@Test
408+
public void mutate_WhenSettingAutoCommitFails_ShouldThrowExceptionAndCloseConnection()
409+
throws SQLException, ExecutionException {
410+
// Arrange
411+
Exception exception = new RuntimeException("Failed to set auto-commit");
412+
doThrow(exception).when(connection).setAutoCommit(anyBoolean());
413+
414+
// Act Assert
415+
assertThatThrownBy(
416+
() -> {
417+
Put put =
418+
new Put(new Key("p1", "val1"))
419+
.withValue("v1", "val2")
420+
.forNamespace(NAMESPACE)
421+
.forTable(TABLE);
422+
Delete delete =
423+
new Delete(new Key("p1", "val1")).forNamespace(NAMESPACE).forTable(TABLE);
424+
jdbcDatabase.mutate(Arrays.asList(put, delete));
425+
})
426+
.isEqualTo(exception);
427+
verify(connection).setAutoCommit(false);
428+
verify(jdbcService, never()).mutate(any(), any());
429+
verify(connection, never()).rollback();
430+
verify(connection).close();
431+
}
385432
}

data-loader/cli/Dockerfile

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
FROM eclipse-temurin:8-jre-jammy
2+
3+
RUN apt-get update && apt-get upgrade -y --no-install-recommends \
4+
&& rm -rf /var/lib/apt/lists/*
5+
6+
COPY scalardb-data-loader-*.jar /app.jar
7+
8+
RUN groupadd -r --gid 201 scalar && \
9+
useradd -r --uid 201 -g scalar scalar
10+
11+
USER 201
12+
13+
ENTRYPOINT ["java", "-jar", "/app.jar"]

data-loader/cli/build.gradle

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,3 +60,23 @@ spotbugsTest.reports {
6060
html.enabled = true
6161
}
6262
spotbugsTest.excludeFilter = file("${project.rootDir}/gradle/spotbugs-exclude.xml")
63+
64+
task dockerfileLint(type: Exec) {
65+
description 'Lint the Dockerfile'
66+
commandLine "${project.rootDir}/ci/dockerfile_lint.sh"
67+
}
68+
69+
task copyFilesToDockerBuildContextDir(type: Copy) {
70+
description 'Copy files to a temporary folder to build the Docker image'
71+
dependsOn shadowJar
72+
from("Dockerfile")
73+
from(tasks.shadowJar.archiveFile)
74+
into('build/docker')
75+
}
76+
77+
task docker(type: Exec) {
78+
description 'Build ScalarDB Data Loader Docker CLI image'
79+
dependsOn copyFilesToDockerBuildContextDir
80+
workingDir 'build/docker'
81+
commandLine 'docker', 'build', "--tag=ghcr.io/scalar-labs/scalardb-data-loader-cli:${project.version}", "."
82+
}

0 commit comments

Comments
 (0)