This is an automated email from the ASF dual-hosted git repository. tanxinyu pushed a commit to branch fix_node_common_sonar_bugs in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit a08ac39a4202825e2664e7f29faba2b4838151c2 Author: OneSizeFitQuorum <[email protected]> AuthorDate: Thu Jun 29 11:06:55 2023 +0800 fix sonar bugs Signed-off-by: OneSizeFitQuorum <[email protected]> --- .../security/encrypt/AsymmetricEncryptFactory.java | 27 +++++++++++----------- .../commons/udf/service/UDFClassLoaderManager.java | 18 +++++++-------- 2 files changed, 22 insertions(+), 23 deletions(-) diff --git a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/security/encrypt/AsymmetricEncryptFactory.java b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/security/encrypt/AsymmetricEncryptFactory.java index 956c889904e..bbb5ae7205d 100644 --- a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/security/encrypt/AsymmetricEncryptFactory.java +++ b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/security/encrypt/AsymmetricEncryptFactory.java @@ -19,18 +19,18 @@ package org.apache.iotdb.commons.security.encrypt; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import java.lang.reflect.InvocationTargetException; +import java.util.concurrent.atomic.AtomicReference; public class AsymmetricEncryptFactory { - private static final Logger LOGGER = LoggerFactory.getLogger(AsymmetricEncryptFactory.class); - private static volatile AsymmetricEncrypt asymmetricEncrypt; + private static final AtomicReference<AsymmetricEncrypt> asymmetricEncrypt = + new AtomicReference<>(); + + private AsymmetricEncryptFactory() {} /** - * load encrypt provider class for encrypt or decrypt password + * load encrypt provider class for encrypt or decrypt password. * * @param providerClassName encrypt class name * @param providerParameter provider parameter @@ -38,28 +38,27 @@ public class AsymmetricEncryptFactory { */ public static AsymmetricEncrypt getEncryptProvider( String providerClassName, String providerParameter) { - if (asymmetricEncrypt == null) { + if (asymmetricEncrypt.get() == null) { synchronized (AsymmetricEncrypt.class) { - if (asymmetricEncrypt == null) { + if (asymmetricEncrypt.get() == null) { try { - Class providerClass = + Class<?> providerClass = getClassLoaderForClass(AsymmetricEncrypt.class).loadClass(providerClassName); - asymmetricEncrypt = - (AsymmetricEncrypt) providerClass.getDeclaredConstructor().newInstance(); - asymmetricEncrypt.init(providerParameter); + asymmetricEncrypt.set( + (AsymmetricEncrypt) providerClass.getDeclaredConstructor().newInstance()); + asymmetricEncrypt.get().init(providerParameter); } catch (ClassNotFoundException | NoSuchMethodException | InstantiationException | IllegalAccessException | InvocationTargetException e) { - LOGGER.error("Failed to load encryption class", e); throw new EncryptDecryptException(e); } } } } - return asymmetricEncrypt; + return asymmetricEncrypt.get(); } private static ClassLoader getClassLoaderForClass(Class<?> c) { diff --git a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/udf/service/UDFClassLoaderManager.java b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/udf/service/UDFClassLoaderManager.java index 1ee3f4f78f9..b20d51426f8 100644 --- a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/udf/service/UDFClassLoaderManager.java +++ b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/udf/service/UDFClassLoaderManager.java @@ -30,6 +30,7 @@ import org.slf4j.LoggerFactory; import java.io.IOException; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicReference; public class UDFClassLoaderManager implements IService { @@ -45,18 +46,17 @@ public class UDFClassLoaderManager implements IService { * user executes CREATE FUNCTION or after the user executes DROP FUNCTION. Therefore, we need to * continuously maintain the activeClassLoader so that the classes it loads are always up-to-date. */ - private volatile UDFClassLoader activeClassLoader; + private final AtomicReference<UDFClassLoader> activeClassLoader = new AtomicReference<>(); private UDFClassLoaderManager(String libRoot) { this.libRoot = libRoot; LOGGER.info("UDF lib root: {}", libRoot); queryIdToUDFClassLoaderMap = new ConcurrentHashMap<>(); - activeClassLoader = null; } public void initializeUDFQuery(String queryId) { - activeClassLoader.acquire(); - queryIdToUDFClassLoaderMap.put(queryId, activeClassLoader); + activeClassLoader.get().acquire(); + queryIdToUDFClassLoaderMap.put(queryId, activeClassLoader.get()); } public void finalizeUDFQuery(String queryId) { @@ -72,16 +72,16 @@ public class UDFClassLoaderManager implements IService { } public UDFClassLoader updateAndGetActiveClassLoader() throws IOException { - UDFClassLoader deprecatedClassLoader = activeClassLoader; - activeClassLoader = new UDFClassLoader(libRoot); + UDFClassLoader deprecatedClassLoader = activeClassLoader.get(); + activeClassLoader.set(new UDFClassLoader(libRoot)); if (deprecatedClassLoader != null) { deprecatedClassLoader.markAsDeprecated(); } - return activeClassLoader; + return activeClassLoader.get(); } public UDFClassLoader getActiveClassLoader() { - return activeClassLoader; + return activeClassLoader.get(); } ///////////////////////////////////////////////////////////////////////////////////////////////// @@ -92,7 +92,7 @@ public class UDFClassLoaderManager implements IService { public void start() throws StartupException { try { SystemFileFactory.INSTANCE.makeDirIfNecessary(libRoot); - activeClassLoader = new UDFClassLoader(libRoot); + activeClassLoader.set(new UDFClassLoader(libRoot)); } catch (IOException e) { throw new StartupException(this.getID().getName(), e.getMessage()); }
