This is an automated email from the ASF dual-hosted git repository.

dongjoon pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/spark.git


The following commit(s) were added to refs/heads/master by this push:
     new 3e1c3bdc7ee1 [SPARK-54009][CORE] Support `spark.io.mode.default`
3e1c3bdc7ee1 is described below

commit 3e1c3bdc7ee19d839fde177d95222030df1b27f9
Author: Dongjoon Hyun <[email protected]>
AuthorDate: Thu Oct 23 18:54:54 2025 -0700

    [SPARK-54009][CORE] Support `spark.io.mode.default`
    
    ### What changes were proposed in this pull request?
    
    This PR aims to support a new configuration `spark.io.mode.default` to 
control the default value for all modules' configurations `spark.*.io.mode`. 
For example, `spark.rpc.io.mode` and `spark.shuffle.io.mode`.
    
    ### Why are the changes needed?
    
    Currently, the default value of `spark.*.io.mode` is hard-coded to `NIO` 
which means we need to change all configurations via `spark.*.io.mode` pattern.
    
    
https://github.com/apache/spark/blob/b46cf270abab0daaee4c504951fdf3cc2920bb76/common/network-common/src/main/java/org/apache/spark/network/util/TransportConf.java#L91
    
    This PR aims to help users to change all modules' default easily via a 
single configuration.
    
    ### Does this PR introduce _any_ user-facing change?
    
    No.
    
    ### How was this patch tested?
    
    Pass the CIs with the newly added test case.
    
    ### Was this patch authored or co-authored using generative AI tooling?
    
    No.
    
    Closes #52717 from dongjoon-hyun/SPARK-54009.
    
    Authored-by: Dongjoon Hyun <[email protected]>
    Signed-off-by: Dongjoon Hyun <[email protected]>
---
 .../org/apache/spark/network/util/NettyUtils.java  |  3 ++-
 .../apache/spark/network/util/TransportConf.java   |  6 ++++--
 .../apache/spark/network/TransportConfSuite.java   | 22 ++++++++++++++++++++++
 3 files changed, 28 insertions(+), 3 deletions(-)

diff --git 
a/common/network-common/src/main/java/org/apache/spark/network/util/NettyUtils.java
 
b/common/network-common/src/main/java/org/apache/spark/network/util/NettyUtils.java
index da4b3109bbe1..1c9c15552f8b 100644
--- 
a/common/network-common/src/main/java/org/apache/spark/network/util/NettyUtils.java
+++ 
b/common/network-common/src/main/java/org/apache/spark/network/util/NettyUtils.java
@@ -36,7 +36,8 @@ import io.netty.util.concurrent.DefaultThreadFactory;
 import io.netty.util.internal.PlatformDependent;
 
 /**
- * Utilities for creating various Netty constructs based on whether we're 
using EPOLL or NIO.
+ * Utilities for creating various Netty constructs based on whether we're 
using NIO, EPOLL,
+ * or KQUEUE.
  */
 public class NettyUtils {
 
diff --git 
a/common/network-common/src/main/java/org/apache/spark/network/util/TransportConf.java
 
b/common/network-common/src/main/java/org/apache/spark/network/util/TransportConf.java
index 003e72edf29e..5718c20c7d11 100644
--- 
a/common/network-common/src/main/java/org/apache/spark/network/util/TransportConf.java
+++ 
b/common/network-common/src/main/java/org/apache/spark/network/util/TransportConf.java
@@ -28,6 +28,7 @@ import io.netty.util.NettyRuntime;
  */
 public class TransportConf {
 
+  private final String SPARK_NETWORK_DEFAULT_IO_MODE_KEY = 
"spark.io.mode.default";
   private final String SPARK_NETWORK_IO_MODE_KEY;
   private final String SPARK_NETWORK_IO_PREFERDIRECTBUFS_KEY;
   private final String SPARK_NETWORK_IO_CONNECTIONTIMEOUT_KEY;
@@ -86,9 +87,10 @@ public class TransportConf {
     return module;
   }
 
-  /** IO mode: nio or epoll */
+  /** IO mode: NIO, EPOLL, or KQUEUE */
   public String ioMode() {
-    return conf.get(SPARK_NETWORK_IO_MODE_KEY, "NIO").toUpperCase(Locale.ROOT);
+    String defaultIOMode = conf.get(SPARK_NETWORK_DEFAULT_IO_MODE_KEY, "NIO");
+    return conf.get(SPARK_NETWORK_IO_MODE_KEY, 
defaultIOMode).toUpperCase(Locale.ROOT);
   }
 
   /** If true, we will prefer allocating off-heap byte buffers within Netty. */
diff --git 
a/common/network-common/src/test/java/org/apache/spark/network/TransportConfSuite.java
 
b/common/network-common/src/test/java/org/apache/spark/network/TransportConfSuite.java
index 1537f67e98d1..f77a93e6247b 100644
--- 
a/common/network-common/src/test/java/org/apache/spark/network/TransportConfSuite.java
+++ 
b/common/network-common/src/test/java/org/apache/spark/network/TransportConfSuite.java
@@ -17,10 +17,12 @@
 package org.apache.spark.network;
 
 import java.io.File;
+import java.util.Map;
 
 import org.junit.jupiter.api.Test;
 import static org.junit.jupiter.api.Assertions.*;
 
+import org.apache.spark.network.util.MapConfigProvider;
 import org.apache.spark.network.util.TransportConf;
 import org.apache.spark.network.ssl.SslSampleConfigs;
 
@@ -85,4 +87,24 @@ public class TransportConfSuite {
   public void testSsltrustStoreReloadIntervalMs() {
     assertEquals(10000, transportConf.sslRpctrustStoreReloadIntervalMs());
   }
+
+  @Test
+  public void testDefaultIOMode() {
+    TransportConf c1 = new TransportConf("m1", new 
MapConfigProvider(Map.of()));
+    assertEquals("NIO", c1.ioMode());
+
+    TransportConf c2 = new TransportConf("m1",
+      new MapConfigProvider(Map.of("spark.io.mode.default", "KQUEUE")));
+    assertEquals("KQUEUE", c2.ioMode());
+
+    TransportConf c3 = new TransportConf("m2",
+      new MapConfigProvider(Map.of("spark.io.mode.default", "KQUEUE")));
+    assertEquals("KQUEUE", c3.ioMode());
+
+    TransportConf c4 = new TransportConf("m3",
+      new MapConfigProvider(Map.of(
+        "spark.io.mode.default", "KQUEUE",
+        "spark.m3.io.mode", "EPOLL")));
+    assertEquals("EPOLL", c4.ioMode());
+  }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to