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

Reply via email to