This is an automated email from the ASF dual-hosted git repository. ycai pushed a commit to branch trunk in repository https://gitbox.apache.org/repos/asf/cassandra-sidecar.git
The following commit(s) were added to refs/heads/trunk by this push: new 880c65e1 CASSANDRASC-135: Added additional JVM options to increase max open FD limit for MacOS (#126) 880c65e1 is described below commit 880c65e1a98bf6c31713c62696e92e887c1072f4 Author: Raymond <71736469+rwelg...@users.noreply.github.com> AuthorDate: Tue Jun 18 16:27:05 2024 -0700 CASSANDRASC-135: Added additional JVM options to increase max open FD limit for MacOS (#126) Patch by Raymond Welgosh; Reviewed by Francisco Guerrero, Yifan Cai for CASSANDRASC-135 --- .gitignore | 3 ++ CHANGES.txt | 1 + adapters/base/build.gradle | 6 +++ adapters/cassandra41/build.gradle | 6 +++ build.gradle | 15 +++++- client-common/build.gradle | 6 +++ client/build.gradle | 6 +++ gradle.properties | 3 ++ gradlew | 5 +- server-common/build.gradle | 6 +++ .../org/apache/cassandra/sidecar/UlimitTest.java | 55 ++++++++++++++++++++++ vertx-client-shaded/build.gradle | 4 ++ vertx-client/build.gradle | 6 +++ 13 files changed, 120 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 453c686d..ff32233a 100644 --- a/.gitignore +++ b/.gitignore @@ -76,6 +76,9 @@ lib/jsr223/scala/*.jar src/dist/* *.logdir_IS_UNDEFINED +# Files produce by jenv +.java-version + # Sidecar version - generated by build.gradle sidecar.version diff --git a/CHANGES.txt b/CHANGES.txt index d8813da9..2b556c3e 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,5 +1,6 @@ 1.0.0 ----- + * Added additional JVM options to increase max open FD limit for MacOS (CASSANDRASC-135) * Detect out of range data and cleanup using nodetool (CASSANDRASC-134) * Allow optional reason to abort restore jobs (CASSANDRASC-133) * Fix SidecarLoadBalancingPolicy unexpectedly removing local node and improve CI stability (CASSANDRASC-131) diff --git a/adapters/base/build.gradle b/adapters/base/build.gradle index 3ef5c193..c34ae261 100644 --- a/adapters/base/build.gradle +++ b/adapters/base/build.gradle @@ -17,6 +17,9 @@ * under the License. */ + +import org.apache.tools.ant.taskdefs.condition.Os + import java.nio.file.Paths plugins { @@ -38,6 +41,9 @@ repositories { test { useJUnitPlatform() + if (Os.isFamily(Os.FAMILY_MAC)) { + jvmArgs "-XX:-MaxFDLimit" + } maxParallelForks = Runtime.runtime.availableProcessors().intdiv(2) ?: 1 reports { junitXml.enabled = true diff --git a/adapters/cassandra41/build.gradle b/adapters/cassandra41/build.gradle index 87aff0b9..d1331bd4 100644 --- a/adapters/cassandra41/build.gradle +++ b/adapters/cassandra41/build.gradle @@ -17,6 +17,9 @@ * under the License. */ + +import org.apache.tools.ant.taskdefs.condition.Os + import java.nio.file.Paths plugins { @@ -38,6 +41,9 @@ repositories { test { useJUnitPlatform() + if (Os.isFamily(Os.FAMILY_MAC)) { + jvmArgs "-XX:-MaxFDLimit" + } maxParallelForks = Runtime.runtime.availableProcessors().intdiv(2) ?: 1 reports { junitXml.enabled = true diff --git a/build.gradle b/build.gradle index 91d8bdf0..58a6c158 100644 --- a/build.gradle +++ b/build.gradle @@ -20,6 +20,7 @@ import com.github.spotbugs.SpotBugsTask import org.nosphere.apache.rat.RatTask +import org.apache.tools.ant.taskdefs.condition.Os import java.nio.file.Files import java.nio.file.Paths @@ -316,6 +317,9 @@ test { // ordinarily we don't need integration tests // see the integrationTest task useJUnitPlatform() + if (Os.isFamily(Os.FAMILY_MAC)) { + jvmArgs "-XX:-MaxFDLimit" + } reports { junitXml.enabled = true def destDir = Paths.get(rootProject.rootDir.absolutePath, "build", "test-results", "test").toFile() @@ -328,7 +332,14 @@ test { } } -def JDK11_OPTIONS = ['-Djdk.attach.allowAttachSelf=true', +subprojects { + test { + jvmArgs "-XX:-MaxFDLimit" + } +} + +def JDK11_OPTIONS = ['-XX:-MaxFDLimit', + '-Djdk.attach.allowAttachSelf=true', '--add-exports', 'java.base/jdk.internal.misc=ALL-UNNAMED', '--add-exports', 'java.base/jdk.internal.ref=ALL-UNNAMED', '--add-exports', 'java.base/sun.nio.ch=ALL-UNNAMED', @@ -410,6 +421,8 @@ tasks.register("containerTest", Test) { if (JavaVersion.current().isJava11Compatible()) { jvmArgs(JDK11_OPTIONS) println("JVM arguments for $project.name are $allJvmArgs") + } else { + jvmArgs '-XX:-MaxFDLimit' } useJUnitPlatform() diff --git a/client-common/build.gradle b/client-common/build.gradle index d87a2c60..ec8da41e 100644 --- a/client-common/build.gradle +++ b/client-common/build.gradle @@ -17,6 +17,9 @@ * under the License. */ + +import org.apache.tools.ant.taskdefs.condition.Os + import java.nio.file.Paths plugins { @@ -41,6 +44,9 @@ repositories { test { useJUnitPlatform() + if (Os.isFamily(Os.FAMILY_MAC)) { + jvmArgs "-XX:-MaxFDLimit" + } maxParallelForks = Runtime.runtime.availableProcessors().intdiv(2) ?: 1 reports { junitXml.enabled = true diff --git a/client/build.gradle b/client/build.gradle index caf35843..30722ed4 100644 --- a/client/build.gradle +++ b/client/build.gradle @@ -16,6 +16,9 @@ * limitations under the License. */ + +import org.apache.tools.ant.taskdefs.condition.Os + import java.nio.file.Paths plugins { @@ -39,6 +42,9 @@ repositories { test { useJUnitPlatform() + if (Os.isFamily(Os.FAMILY_MAC)) { + jvmArgs "-XX:-MaxFDLimit" + } testLogging { events "passed", "skipped", "failed" } diff --git a/gradle.properties b/gradle.properties index 5e04fc70..c1d5a195 100644 --- a/gradle.properties +++ b/gradle.properties @@ -29,3 +29,6 @@ dtestDependencyName=cassandra-dtest-local-all aswSdkVersion=2.20.43 # The dep is to introduce xxhash impl commonsCodecVersion=1.16.1 +# If running MacOS then you need to increase the max +# open FD limit +org.gradle.jvmargs=-XX:-MaxFDLimit diff --git a/gradlew b/gradlew index af6708ff..56892a1a 100755 --- a/gradlew +++ b/gradlew @@ -105,8 +105,11 @@ if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then fi # For Darwin, add options to specify how the application appears in the dock +# In addition, we want to increase the file descriptor limit to the MaxFDLimit in MacOS, which, +# by default, is set to a lower limit than the actual system maximum. This line is modified manually, if +# producing a new gradle wrapper, remember to add the change back. if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" + GRADLE_OPTS="$GRADLE_OPTS \"-XX:-MaxFDLimit\" \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\" \"-Dorg.gradle.jvmargs=-XX:-MaxFDLimit\"" fi # For Cygwin, switch paths to Windows format before running java diff --git a/server-common/build.gradle b/server-common/build.gradle index d6c5c7d3..e2045878 100644 --- a/server-common/build.gradle +++ b/server-common/build.gradle @@ -17,6 +17,9 @@ * under the License. */ + +import org.apache.tools.ant.taskdefs.condition.Os + import java.nio.file.Paths plugins { @@ -35,6 +38,9 @@ sourceCompatibility = 1.8 test { useJUnitPlatform() + if (Os.isFamily(Os.FAMILY_MAC)) { + jvmArgs "-XX:-MaxFDLimit" + } maxParallelForks = Runtime.runtime.availableProcessors().intdiv(2) ?: 1 reports { junitXml.enabled = true diff --git a/src/test/java/org/apache/cassandra/sidecar/UlimitTest.java b/src/test/java/org/apache/cassandra/sidecar/UlimitTest.java new file mode 100644 index 00000000..b52c507d --- /dev/null +++ b/src/test/java/org/apache/cassandra/sidecar/UlimitTest.java @@ -0,0 +1,55 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.cassandra.sidecar; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.condition.EnabledOnOs; +import org.junit.jupiter.api.condition.OS; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Test to ensure that the max file descriptors is large enough to build Cassandra Sidecar + */ +@EnabledOnOs({OS.MAC}) +public class UlimitTest +{ + + /** + * Runs a test to ensure that the Max Files isn't too low + * @throws Exception when maxFD isn't large enough + */ + @Test + void ensureUlimitMaxFilesIsNotTooLow() throws Exception + { + Process p = new ProcessBuilder("ulimit", "-n").start(); + p.waitFor(); + InputStreamReader inputStreamReader = new InputStreamReader(p.getInputStream(), StandardCharsets.UTF_8); + BufferedReader reader = new BufferedReader(inputStreamReader); + String line = reader.readLine(); + long maxFD = Long.parseLong(line); + assertThat(maxFD).isGreaterThan(10240); + inputStreamReader.close(); + reader.close(); + } +} diff --git a/vertx-client-shaded/build.gradle b/vertx-client-shaded/build.gradle index 24519e88..d713a17f 100644 --- a/vertx-client-shaded/build.gradle +++ b/vertx-client-shaded/build.gradle @@ -83,6 +83,10 @@ shadowJar { } } +tasks.named('test') { + dependsOn 'shadowJar' +} + publishing { publications { shadow(MavenPublication) { publication -> diff --git a/vertx-client/build.gradle b/vertx-client/build.gradle index 494a886c..a6b8714e 100644 --- a/vertx-client/build.gradle +++ b/vertx-client/build.gradle @@ -16,6 +16,9 @@ * limitations under the License. */ + +import org.apache.tools.ant.taskdefs.condition.Os + import java.nio.file.Paths plugins { @@ -35,6 +38,9 @@ repositories { test { useJUnitPlatform() + if (Os.isFamily(Os.FAMILY_MAC)) { + jvmArgs "-XX:-MaxFDLimit" + } maxParallelForks = Runtime.runtime.availableProcessors().intdiv(2) ?: 1 reports { junitXml.enabled = true --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org For additional commands, e-mail: commits-h...@cassandra.apache.org