未验证 提交 c76952b1 编写于 作者: P Potato 提交者: GitHub

Fix sonar bugs and code smells in node-common (#10374)

Signed-off-by: NOneSizeFitQuorum <tanxinyu@apache.org>
上级 37a66a68
...@@ -19,18 +19,18 @@ ...@@ -19,18 +19,18 @@
package org.apache.iotdb.commons.security.encrypt; package org.apache.iotdb.commons.security.encrypt;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
import java.util.concurrent.atomic.AtomicReference;
public class AsymmetricEncryptFactory { 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 providerClassName encrypt class name
* @param providerParameter provider parameter * @param providerParameter provider parameter
...@@ -38,28 +38,27 @@ public class AsymmetricEncryptFactory { ...@@ -38,28 +38,27 @@ public class AsymmetricEncryptFactory {
*/ */
public static AsymmetricEncrypt getEncryptProvider( public static AsymmetricEncrypt getEncryptProvider(
String providerClassName, String providerParameter) { String providerClassName, String providerParameter) {
if (asymmetricEncrypt == null) { if (asymmetricEncrypt.get() == null) {
synchronized (AsymmetricEncrypt.class) { synchronized (AsymmetricEncrypt.class) {
if (asymmetricEncrypt == null) { if (asymmetricEncrypt.get() == null) {
try { try {
Class providerClass = Class<?> providerClass =
getClassLoaderForClass(AsymmetricEncrypt.class).loadClass(providerClassName); getClassLoaderForClass(AsymmetricEncrypt.class).loadClass(providerClassName);
asymmetricEncrypt = asymmetricEncrypt.set(
(AsymmetricEncrypt) providerClass.getDeclaredConstructor().newInstance(); (AsymmetricEncrypt) providerClass.getDeclaredConstructor().newInstance());
asymmetricEncrypt.init(providerParameter); asymmetricEncrypt.get().init(providerParameter);
} catch (ClassNotFoundException } catch (ClassNotFoundException
| NoSuchMethodException | NoSuchMethodException
| InstantiationException | InstantiationException
| IllegalAccessException | IllegalAccessException
| InvocationTargetException e) { | InvocationTargetException e) {
LOGGER.error("Failed to load encryption class", e);
throw new EncryptDecryptException(e); throw new EncryptDecryptException(e);
} }
} }
} }
} }
return asymmetricEncrypt; return asymmetricEncrypt.get();
} }
private static ClassLoader getClassLoaderForClass(Class<?> c) { private static ClassLoader getClassLoaderForClass(Class<?> c) {
......
...@@ -30,6 +30,7 @@ import org.slf4j.LoggerFactory; ...@@ -30,6 +30,7 @@ import org.slf4j.LoggerFactory;
import java.io.IOException; import java.io.IOException;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicReference;
public class UDFClassLoaderManager implements IService { public class UDFClassLoaderManager implements IService {
...@@ -45,18 +46,17 @@ 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 * 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. * 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) { private UDFClassLoaderManager(String libRoot) {
this.libRoot = libRoot; this.libRoot = libRoot;
LOGGER.info("UDF lib root: {}", libRoot); LOGGER.info("UDF lib root: {}", libRoot);
queryIdToUDFClassLoaderMap = new ConcurrentHashMap<>(); queryIdToUDFClassLoaderMap = new ConcurrentHashMap<>();
activeClassLoader = null;
} }
public void initializeUDFQuery(String queryId) { public void initializeUDFQuery(String queryId) {
activeClassLoader.acquire(); activeClassLoader.get().acquire();
queryIdToUDFClassLoaderMap.put(queryId, activeClassLoader); queryIdToUDFClassLoaderMap.put(queryId, activeClassLoader.get());
} }
public void finalizeUDFQuery(String queryId) { public void finalizeUDFQuery(String queryId) {
...@@ -72,16 +72,16 @@ public class UDFClassLoaderManager implements IService { ...@@ -72,16 +72,16 @@ public class UDFClassLoaderManager implements IService {
} }
public UDFClassLoader updateAndGetActiveClassLoader() throws IOException { public UDFClassLoader updateAndGetActiveClassLoader() throws IOException {
UDFClassLoader deprecatedClassLoader = activeClassLoader; UDFClassLoader deprecatedClassLoader = activeClassLoader.get();
activeClassLoader = new UDFClassLoader(libRoot); activeClassLoader.set(new UDFClassLoader(libRoot));
if (deprecatedClassLoader != null) { if (deprecatedClassLoader != null) {
deprecatedClassLoader.markAsDeprecated(); deprecatedClassLoader.markAsDeprecated();
} }
return activeClassLoader; return activeClassLoader.get();
} }
public UDFClassLoader getActiveClassLoader() { public UDFClassLoader getActiveClassLoader() {
return activeClassLoader; return activeClassLoader.get();
} }
///////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////
...@@ -92,7 +92,7 @@ public class UDFClassLoaderManager implements IService { ...@@ -92,7 +92,7 @@ public class UDFClassLoaderManager implements IService {
public void start() throws StartupException { public void start() throws StartupException {
try { try {
SystemFileFactory.INSTANCE.makeDirIfNecessary(libRoot); SystemFileFactory.INSTANCE.makeDirIfNecessary(libRoot);
activeClassLoader = new UDFClassLoader(libRoot); activeClassLoader.set(new UDFClassLoader(libRoot));
} catch (IOException e) { } catch (IOException e) {
throw new StartupException(this.getID().getName(), e.getMessage()); throw new StartupException(this.getID().getName(), e.getMessage());
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册