Skip to content

Commit 7b8e84e

Browse files
authored
Fix ubi10 java issues (#69)
Also adds smoke tests.
1 parent 0b1c9fe commit 7b8e84e

4 files changed

Lines changed: 192 additions & 4 deletions

File tree

.github/workflows/buildAndDeploy.yml

Lines changed: 187 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ jobs:
3939
key: ${{ runner.os }}-buildx-${{ github.sha }}
4040
restore-keys: |
4141
${{ runner.os }}-buildx-
42-
java-version: 1.8
4342
- name: Setup Gradle
4443
uses: gradle/actions/setup-gradle@v3
4544
- name: Build with Gradle
@@ -50,6 +49,193 @@ jobs:
5049
run: |
5150
export GITHUB_REPO_URL="https://github.com/${{ github.repository }}"
5251
./scripts/build-push-images.sh
52+
- name: Smoke test Docker image
53+
env:
54+
GITHUB_REPO_OWNER: ${{ github.repository_owner }}
55+
run: |
56+
# Calculate image tag using same logic as build script
57+
VERSION_NUMBER="$(cat version.txt | tr -d '[:space:]')"
58+
VERSION_DATE="$(date -u +%Y%m%d)"
59+
RELEASE_VERSION="${VERSION_NUMBER}-${VERSION_DATE}-ubi"
60+
IMAGE_TAG="ghcr.io/${GITHUB_REPO_OWNER}/cass-config-builder/cass-config-builder:${RELEASE_VERSION}"
61+
62+
echo "Testing image: $IMAGE_TAG"
63+
64+
# Create temporary directory for config output
65+
TEST_DIR=$(mktemp -d)
66+
echo "Test directory: $TEST_DIR"
67+
68+
# Set proper permissions for the UBI image (runs as cassandra user)
69+
# The UBI image runs as user cassandra:root, so we need to make the directory writable
70+
chmod 777 "$TEST_DIR"
71+
72+
# Run the container with the specified environment variables
73+
docker run --rm \
74+
-v "$TEST_DIR:/config" \
75+
-e POD_IP="10.244.1.5" \
76+
-e HOST_IP="192.168.1.100" \
77+
-e USE_HOST_IP_FOR_BROADCAST="false" \
78+
-e RACK_NAME="default" \
79+
-e PRODUCT_VERSION="4.0.17" \
80+
-e PRODUCT_NAME="cassandra" \
81+
-e CONFIG_FILE_DATA='{"cassandra-env-sh":{"additional-jvm-opts":["-Dcassandra.allow_alter_rf_during_range_movement=true","-Dcassandra.system_distributed_replication=dc1:3","-Dfoo=true","-Dbar"]},"cassandra-yaml":{"authenticator":"TestAuthenticator","authorizer":"TestAuthorizer","commitlog_directory":"/var/lib/cassandra/commitlog2","data_file_directories":["/var/lib/cassandra/data","/var/lib/extra/data"],"num_tokens":16,"role_manager":"CassandraRoleManager"},"cluster-info":{"name":"Weird Cluster Name","seeds":"weirdclustername-seed-service,weirdclustername-dc1-additional-seed-service"},"datacenter-info":{"graph-enabled":0,"name":"dc1","solr-enabled":0,"spark-enabled":0},"jvm-server-options":{"agent_lib_jdwp":false,"always_pre_touch":false,"cassandra_available_processors":2,"cassandra_disable_auth_caches_remote_configuration":false,"cassandra_force_default_indexing_page_size":false,"cassandra_ring_delay_ms":100,"cassandra_write_survey":false,"enable_assertions":false,"flight_recorder":false,"heap_dump_on_out_of_memory_error":false,"initial_heap_size":536870912,"java_net_prefer_ipv4_stack":true,"jmx-connection-type":"local-no-auth","jmx-port":7199,"jmx-remote-ssl":false,"jmx-remote-ssl-opts":"abc","max_heap_size":536870912,"per_thread_stack_size":262144,"perf_disable_shared_mem":false,"resize_tlb":false,"string_table_size":1048576,"unlock_commercial_features":false,"use-biased-locking":false,"use_thread_priorities":false,"use_tlb":false},"jvm11-server-options":{"conc_gc_threads":2,"g1r_set_updating_pause_time_percent":5,"garbage_collector":"G1GC","initiating_heap_occupancy_percent":75,"max_gc_pause_millis":500,"parallel_gc_threads":2}}' \
82+
"$IMAGE_TAG"
83+
84+
echo "Container execution completed. Checking output..."
85+
86+
# Check if /config directory was created and contains files
87+
if [ ! -d "$TEST_DIR" ]; then
88+
echo "ERROR: Config directory was not created"
89+
exit 1
90+
fi
91+
92+
# List generated files
93+
echo "Generated files:"
94+
ls -la "$TEST_DIR/"
95+
96+
# Debug: Show what files were actually generated
97+
echo "Files in test directory:"
98+
find "$TEST_DIR" -type f -exec basename {} \;
99+
100+
# Check if cassandra.yaml exists
101+
if [ ! -f "$TEST_DIR/cassandra.yaml" ]; then
102+
echo "ERROR: cassandra.yaml was not generated"
103+
exit 1
104+
fi
105+
106+
# Verify key configuration values in cassandra.yaml
107+
echo "Checking cassandra.yaml contents..."
108+
109+
# Check for authenticator setting
110+
if ! grep -q "authenticator: TestAuthenticator" "$TEST_DIR/cassandra.yaml"; then
111+
echo "ERROR: authenticator not set correctly"
112+
cat "$TEST_DIR/cassandra.yaml"
113+
exit 1
114+
fi
115+
116+
# Check for authorizer setting
117+
if ! grep -q "authorizer: TestAuthorizer" "$TEST_DIR/cassandra.yaml"; then
118+
echo "ERROR: authorizer not set correctly"
119+
cat "$TEST_DIR/cassandra.yaml"
120+
exit 1
121+
fi
122+
123+
# Check for num_tokens setting
124+
if ! grep -q "num_tokens: 16" "$TEST_DIR/cassandra.yaml"; then
125+
echo "ERROR: num_tokens not set correctly"
126+
cat "$TEST_DIR/cassandra.yaml"
127+
exit 1
128+
fi
129+
130+
# Check for data directories
131+
if ! grep -q "/var/lib/cassandra/data" "$TEST_DIR/cassandra.yaml"; then
132+
echo "ERROR: data directories not set correctly"
133+
cat "$TEST_DIR/cassandra.yaml"
134+
exit 1
135+
fi
136+
137+
# Check for commitlog directory
138+
if ! grep -q "commitlog_directory: /var/lib/cassandra/commitlog2" "$TEST_DIR/cassandra.yaml"; then
139+
echo "ERROR: commitlog directory not set correctly"
140+
cat "$TEST_DIR/cassandra.yaml"
141+
exit 1
142+
fi
143+
144+
echo "✅ cassandra.yaml checks passed!"
145+
146+
# Check if cassandra-env.sh exists
147+
if [ ! -f "$TEST_DIR/cassandra-env.sh" ]; then
148+
echo "ERROR: cassandra-env.sh was not generated"
149+
exit 1
150+
fi
151+
152+
# Verify cassandra-env.sh contents
153+
echo "Checking cassandra-env.sh contents..."
154+
155+
# Check for additional JVM options that were specified in CONFIG_FILE_DATA
156+
if ! grep -q "\-Dcassandra.allow_alter_rf_during_range_movement=true" "$TEST_DIR/cassandra-env.sh"; then
157+
echo "ERROR: JVM option -Dcassandra.allow_alter_rf_during_range_movement=true not found in cassandra-env.sh"
158+
cat "$TEST_DIR/cassandra-env.sh"
159+
exit 1
160+
fi
161+
162+
if ! grep -q "\-Dcassandra.system_distributed_replication=dc1:3" "$TEST_DIR/cassandra-env.sh"; then
163+
echo "ERROR: JVM option -Dcassandra.system_distributed_replication=dc1:3 not found in cassandra-env.sh"
164+
cat "$TEST_DIR/cassandra-env.sh"
165+
exit 1
166+
fi
167+
168+
if ! grep -q "\-Dfoo=true" "$TEST_DIR/cassandra-env.sh"; then
169+
echo "ERROR: JVM option -Dfoo=true not found in cassandra-env.sh"
170+
cat "$TEST_DIR/cassandra-env.sh"
171+
exit 1
172+
fi
173+
174+
if ! grep -q "\-Dbar" "$TEST_DIR/cassandra-env.sh"; then
175+
echo "ERROR: JVM option -Dbar not found in cassandra-env.sh"
176+
cat "$TEST_DIR/cassandra-env.sh"
177+
exit 1
178+
fi
179+
180+
echo "✅ cassandra-env.sh checks passed!"
181+
182+
# Check if jvm11-server.options exists
183+
if [ ! -f "$TEST_DIR/jvm11-server.options" ]; then
184+
echo "ERROR: jvm11-server.options was not generated"
185+
exit 1
186+
fi
187+
188+
# Verify jvm11-server.options contents
189+
echo "Checking jvm11-server.options contents..."
190+
191+
# Check for G1GC garbage collector
192+
if ! grep -q "\-XX:+UseG1GC" "$TEST_DIR/jvm11-server.options"; then
193+
echo "ERROR: G1GC garbage collector not configured in jvm11-server.options"
194+
cat "$TEST_DIR/jvm-server.options"
195+
exit 1
196+
fi
197+
198+
# Check for concurrent GC threads setting
199+
if ! grep -q "\-XX:ConcGCThreads=2" "$TEST_DIR/jvm11-server.options"; then
200+
echo "ERROR: ConcGCThreads=2 not found in jvm11-server.options"
201+
cat "$TEST_DIR/jvm11-server.options"
202+
exit 1
203+
fi
204+
205+
# Check for parallel GC threads setting
206+
if ! grep -q "\-XX:ParallelGCThreads=2" "$TEST_DIR/jvm11-server.options"; then
207+
echo "ERROR: ParallelGCThreads=2 not found in jvm11-server.options"
208+
cat "$TEST_DIR/jvm11-server.options"
209+
exit 1
210+
fi
211+
212+
# Check for G1 heap occupancy percent
213+
#if ! grep -q "\-XX:G1HeapRegionSize" "$TEST_DIR/jvm11-server.options" || ! grep -q "\-XX:InitiatingHeapOccupancyPercent=75" "$TEST_DIR/jvm11-server.options"; then
214+
# echo "ERROR: G1 heap occupancy settings not configured correctly in jvm11-server.options"
215+
# cat "$TEST_DIR/jvm11-server.options"
216+
# exit 1
217+
#fi
218+
219+
# Check for max GC pause time
220+
if ! grep -q "\-XX:MaxGCPauseMillis=500" "$TEST_DIR/jvm11-server.options"; then
221+
echo "ERROR: MaxGCPauseMillis=500 not found in jvm11-server.options"
222+
cat "$TEST_DIR/jvm11-server.options"
223+
exit 1
224+
fi
225+
226+
# Check for G1 R Set updating pause time percent
227+
if ! grep -q "\-XX:G1RSetUpdatingPauseTimePercent=5" "$TEST_DIR/jvm11-server.options"; then
228+
echo "ERROR: G1RSetUpdatingPauseTimePercent=5 not found in jvm11-server.options"
229+
cat "$TEST_DIR/jvm11-server.options"
230+
exit 1
231+
fi
232+
233+
echo "✅ jvm11-server.options checks passed!"
234+
235+
echo "✅ All smoke tests passed! Configuration generation verified successfully."
236+
237+
# Clean up
238+
rm -rf "$TEST_DIR"
53239
- name: Archive build logs
54240
if: ${{ failure() }}
55241
uses: actions/upload-artifact@v4

docker/Dockerfile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,9 @@ LABEL description="Configuration templating engine for Apache Cassandra®. Power
6262

6363
# Install shadow-utils for user management and create user and group for security
6464
RUN microdnf update -y && \
65+
rm -rf /var/cache/yum && \
6566
microdnf install -y shadow-utils && \
67+
microdnf install -y java-21-openjdk-headless && \
6668
microdnf clean all && \
6769
groupadd -r cassandra && useradd -r -g root -G cassandra cassandra
6870

scripts/build-push-images.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,13 +54,13 @@ UBI_ARGS=(
5454
docker buildx build --load \
5555
"${GH_UBI_TAGS[@]}" \
5656
"${UBI_ARGS[@]}" \
57-
--platform linux/amd64 \
57+
--platform linux/arm64 \
5858
.
5959

6060
docker buildx build --load \
6161
"${GH_UBI_TAGS[@]}" \
6262
"${UBI_ARGS[@]}" \
63-
--platform linux/arm64 \
63+
--platform linux/amd64 \
6464
.
6565

6666
docker buildx build --load \

version.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.0.14
1+
1.0.16

0 commit comments

Comments
 (0)