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

dongjoon pushed a commit to branch branch-2.0
in repository https://gitbox.apache.org/repos/asf/orc.git


The following commit(s) were added to refs/heads/branch-2.0 by this push:
     new 987ccc1a5 ORC-1601: Reduce get HadoopShims sync block in 
HadoopShimsFactory
987ccc1a5 is described below

commit 987ccc1a5d36ace2d96052290f6adce9a2031c5d
Author: sychen <[email protected]>
AuthorDate: Mon Jan 22 10:50:55 2024 -0800

    ORC-1601: Reduce get HadoopShims sync block in HadoopShimsFactory
    
    ### What changes were proposed in this pull request?
    Improve calling efficiency of `org.apache.orc.impl.HadoopShimsFactory#get`.
    
    ### Why are the changes needed?
    `org.apache.orc.impl.HadoopShimsFactory#get` is a static method with 
synchronized. It needs to be locked every time it is called. This is 
unnecessary.
    
    ### How was this patch tested?
    GA
    
    ### Was this patch authored or co-authored using generative AI tooling?
    No
    
    Closes #1769 from cxzl25/ORC-1601.
    
    Authored-by: sychen <[email protected]>
    Signed-off-by: Dongjoon Hyun <[email protected]>
    (cherry picked from commit 8f22732bfe336ece7d7bcfade3ca6d200d276f1c)
    Signed-off-by: Dongjoon Hyun <[email protected]>
---
 .../java/org/apache/orc/impl/HadoopShimsFactory.java | 20 ++++++++++++--------
 1 file changed, 12 insertions(+), 8 deletions(-)

diff --git a/java/core/src/java/org/apache/orc/impl/HadoopShimsFactory.java 
b/java/core/src/java/org/apache/orc/impl/HadoopShimsFactory.java
index 1366d3d4f..9f0ae946c 100644
--- a/java/core/src/java/org/apache/orc/impl/HadoopShimsFactory.java
+++ b/java/core/src/java/org/apache/orc/impl/HadoopShimsFactory.java
@@ -32,7 +32,7 @@ public class HadoopShimsFactory {
 
   private static final String CURRENT_SHIM_NAME =
       "org.apache.orc.impl.HadoopShimsCurrent";
-  private static HadoopShims SHIMS = null;
+  private static volatile HadoopShims SHIMS = null;
 
   private static HadoopShims createShimByName(String name) {
     try {
@@ -46,15 +46,19 @@ public class HadoopShimsFactory {
     }
   }
 
-  public static synchronized HadoopShims get() {
+  public static HadoopShims get() {
     if (SHIMS == null) {
-      String[] versionParts = VersionInfo.getVersion().split("[.]");
-      int major = Integer.parseInt(versionParts[0]);
-      int minor = Integer.parseInt(versionParts[1]);
-      if (major < 2 || (major == 2 && minor < 7)) {
-        LOG.warn("Hadoop " + VersionInfo.getVersion() + " support is 
dropped.");
+      synchronized (HadoopShimsFactory.class) {
+        if (SHIMS == null) {
+          String[] versionParts = VersionInfo.getVersion().split("[.]");
+          int major = Integer.parseInt(versionParts[0]);
+          int minor = Integer.parseInt(versionParts[1]);
+          if (major < 2 || (major == 2 && minor < 7)) {
+            LOG.warn("Hadoop " + VersionInfo.getVersion() + " support is 
dropped.");
+          }
+          SHIMS = createShimByName(CURRENT_SHIM_NAME);
+        }
       }
-      SHIMS = createShimByName(CURRENT_SHIM_NAME);
     }
     return SHIMS;
   }

Reply via email to