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;
}