From 82b9261556bfac5dc1d4be99ebd795c9109c1057 Mon Sep 17 00:00:00 2001 From: huangchengxing <841396397@qq.com> Date: Mon, 24 Oct 2022 18:52:10 +0800 Subject: [PATCH] refactor: fix code docs and make DefaultThreadPoolPluginRegistry thread-safe on read operation --- .../DefaultThreadPoolPluginRegistry.java | 62 +++++++++++-------- .../core/plugin/ThreadPoolPluginRegistry.java | 53 ++++++++-------- .../ThreadPoolPluginRegistryDelegate.java | 26 ++++---- 3 files changed, 77 insertions(+), 64 deletions(-) diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/plugin/DefaultThreadPoolPluginRegistry.java b/hippo4j-core/src/main/java/cn/hippo4j/core/plugin/DefaultThreadPoolPluginRegistry.java index a11a170a..13324e54 100644 --- a/hippo4j-core/src/main/java/cn/hippo4j/core/plugin/DefaultThreadPoolPluginRegistry.java +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/plugin/DefaultThreadPoolPluginRegistry.java @@ -19,6 +19,7 @@ package cn.hippo4j.core.plugin; import cn.hippo4j.common.toolkit.Assert; import lombok.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; import java.util.*; import java.util.concurrent.locks.Lock; @@ -83,32 +84,32 @@ public class DefaultThreadPoolPluginRegistry implements ThreadPoolPluginRegistry /** * Register a {@link ThreadPoolPlugin} * - * @param aware aware + * @param plugin plugin * @throws IllegalArgumentException thrown when a plugin with the same {@link ThreadPoolPlugin#getId()} already exists in the registry * @see ThreadPoolPlugin#getId() */ @Override - public void register(@NonNull ThreadPoolPlugin aware) { + public void register(@NonNull ThreadPoolPlugin plugin) { Lock writeLock = instanceLock.writeLock(); writeLock.lock(); try { - String id = aware.getId(); + String id = plugin.getId(); Assert.isTrue(!isRegistered(id), "The plug-in with id [" + id + "] has been registered"); - // register aware - registeredPlugins.put(id, aware); + // register plugin + registeredPlugins.put(id, plugin); // quick index - if (aware instanceof TaskAwarePlugin) { - taskAwarePluginList.add((TaskAwarePlugin) aware); + if (plugin instanceof TaskAwarePlugin) { + taskAwarePluginList.add((TaskAwarePlugin)plugin); } - if (aware instanceof ExecuteAwarePlugin) { - executeAwarePluginList.add((ExecuteAwarePlugin) aware); + if (plugin instanceof ExecuteAwarePlugin) { + executeAwarePluginList.add((ExecuteAwarePlugin)plugin); } - if (aware instanceof RejectedAwarePlugin) { - rejectedAwarePluginList.add((RejectedAwarePlugin) aware); + if (plugin instanceof RejectedAwarePlugin) { + rejectedAwarePluginList.add((RejectedAwarePlugin)plugin); } - if (aware instanceof ShutdownAwarePlugin) { - shutdownAwarePluginList.add((ShutdownAwarePlugin) aware); + if (plugin instanceof ShutdownAwarePlugin) { + shutdownAwarePluginList.add((ShutdownAwarePlugin)plugin); } } finally { writeLock.unlock(); @@ -118,14 +119,14 @@ public class DefaultThreadPoolPluginRegistry implements ThreadPoolPluginRegistry /** * Unregister {@link ThreadPoolPlugin} * - * @param id name + * @param pluginId plugin id */ @Override - public void unregister(String id) { + public void unregister(String pluginId) { Lock writeLock = instanceLock.writeLock(); writeLock.lock(); try { - Optional.ofNullable(id) + Optional.ofNullable(pluginId) .map(registeredPlugins::remove) .ifPresent(old -> { // remove quick index if necessary @@ -150,14 +151,15 @@ public class DefaultThreadPoolPluginRegistry implements ThreadPoolPluginRegistry /** * Whether the {@link ThreadPoolPlugin} has been registered. * - * @param id name + * @param pluginId plugin id * @return ture if target has been registered, false otherwise */ @Override - public boolean isRegistered(String id) { + public boolean isRegistered(String pluginId) { Lock readLock = instanceLock.readLock(); + readLock.lock(); try { - return registeredPlugins.containsKey(id); + return registeredPlugins.containsKey(pluginId); } finally { readLock.unlock(); } @@ -166,29 +168,32 @@ public class DefaultThreadPoolPluginRegistry implements ThreadPoolPluginRegistry /** * Get {@link ThreadPoolPlugin} * - * @param id target name - * @param target aware type + * @param pluginId plugin id + * @param plugin type * @return {@link ThreadPoolPlugin}, null if unregister */ + @Nullable @Override @SuppressWarnings("unchecked") - public A getAware(String id) { + public A getPlugin(String pluginId) { Lock readLock = instanceLock.readLock(); + readLock.lock(); try { - return (A) registeredPlugins.get(id); + return (A) registeredPlugins.get(pluginId); } finally { readLock.unlock(); } } /** - * Get execute aware list. + * Get execute plugin list. * * @return {@link ExecuteAwarePlugin} */ @Override public Collection getExecuteAwareList() { Lock readLock = instanceLock.readLock(); + readLock.lock(); try { return executeAwarePluginList; } finally { @@ -197,13 +202,14 @@ public class DefaultThreadPoolPluginRegistry implements ThreadPoolPluginRegistry } /** - * Get rejected aware list. + * Get rejected plugin list. * * @return {@link RejectedAwarePlugin} */ @Override public Collection getRejectedAwareList() { Lock readLock = instanceLock.readLock(); + readLock.lock(); try { return rejectedAwarePluginList; } finally { @@ -212,13 +218,14 @@ public class DefaultThreadPoolPluginRegistry implements ThreadPoolPluginRegistry } /** - * Get shutdown aware list. + * Get shutdown plugin list. * * @return {@link ShutdownAwarePlugin} */ @Override public Collection getShutdownAwareList() { Lock readLock = instanceLock.readLock(); + readLock.lock(); try { return shutdownAwarePluginList; } finally { @@ -227,13 +234,14 @@ public class DefaultThreadPoolPluginRegistry implements ThreadPoolPluginRegistry } /** - * Get shutdown aware list. + * Get shutdown plugin list. * * @return {@link ShutdownAwarePlugin} */ @Override public Collection getTaskAwareList() { Lock readLock = instanceLock.readLock(); + readLock.lock(); try { return taskAwarePluginList; } finally { diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/plugin/ThreadPoolPluginRegistry.java b/hippo4j-core/src/main/java/cn/hippo4j/core/plugin/ThreadPoolPluginRegistry.java index 597bb1ae..13ebdfec 100644 --- a/hippo4j-core/src/main/java/cn/hippo4j/core/plugin/ThreadPoolPluginRegistry.java +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/plugin/ThreadPoolPluginRegistry.java @@ -17,6 +17,8 @@ package cn.hippo4j.core.plugin; +import org.checkerframework.checker.nullness.qual.Nullable; + import java.util.Collection; import java.util.Optional; import java.util.function.Consumer; @@ -37,97 +39,98 @@ public interface ThreadPoolPluginRegistry { /** * Register a {@link ThreadPoolPlugin} * - * @param aware aware + * @param plugin plugin * @throws IllegalArgumentException thrown when a plugin with the same {@link ThreadPoolPlugin#getId()} * already exists in the registry * @see ThreadPoolPlugin#getId() */ - void register(ThreadPoolPlugin aware); + void register(ThreadPoolPlugin plugin); /** * Whether the {@link ThreadPoolPlugin} has been registered. * - * @param name name + * @param pluginId plugin id * @return ture if target has been registered, false otherwise */ - boolean isRegistered(String name); + boolean isRegistered(String pluginId); /** * Unregister {@link ThreadPoolPlugin} * - * @param name name + * @param pluginId plugin id */ - void unregister(String name); + void unregister(String pluginId); /** * Get {@link ThreadPoolPlugin} * - * @param name target name + * @param pluginId plugin id * @param target aware type * @return {@link ThreadPoolPlugin}, null if unregister * @throws ClassCastException thrown when the object obtained by name cannot be converted to target type */ - A getAware(String name); + @Nullable + A getPlugin(String pluginId); /** - * Get execute aware list. + * Get execute aware plugin list. * * @return {@link ExecuteAwarePlugin} */ Collection getExecuteAwareList(); /** - * Get rejected aware list. + * Get rejected aware plugin list. * * @return {@link RejectedAwarePlugin} */ Collection getRejectedAwareList(); /** - * Get shutdown aware list. + * Get shutdown aware plugin list. * * @return {@link ShutdownAwarePlugin} */ Collection getShutdownAwareList(); /** - * Get shutdown aware list. + * Get shutdown aware plugin list. * * @return {@link ShutdownAwarePlugin} */ Collection getTaskAwareList(); /** - * Try to get target Aware and apply operation, do nothing if is not present. + * Try to get target plugin and apply operation, do nothing if it's not present. * - * @param name aware name + * @param pluginId plugin id * @param targetType target type - * @param consumer operation for target aware - * @param aware type + * @param consumer operation for target plugin + * @param plugin type * @return this instance * @throws ClassCastException thrown when the object obtained by name cannot be converted to target type */ default ThreadPoolPluginRegistry getAndThen( - String name, Class targetType, Consumer consumer) { - Optional.ofNullable(getAware(name)) + String pluginId, Class targetType, Consumer consumer) { + Optional.ofNullable(getPlugin(pluginId)) .map(targetType::cast) .ifPresent(consumer); return this; } /** - * Try to get target Aware and return value of apply function, return default value if is not present. + * Try to get target plugin and return value of apply function, return default value if it's not present. * - * @param name aware name + * @param pluginId plugin id * @param targetType target type - * @param function operation for target aware + * @param function operation for target plugin * @param defaultValue default value - * @param aware type - * @return value of apply function, default value if aware is not present + * @param plugin type + * @return value of apply function, default value if plugin is not present * @throws ClassCastException thrown when the object obtained by name cannot be converted to target type */ - default R getAndThen(String name, Class targetType, Function function, R defaultValue) { - return Optional.ofNullable(getAware(name)) + default R getAndThen(String pluginId, Class targetType, Function function, R defaultValue) { + return Optional.ofNullable(getPlugin(pluginId)) .map(targetType::cast) .map(function) .orElse(defaultValue); diff --git a/hippo4j-core/src/main/java/cn/hippo4j/core/plugin/ThreadPoolPluginRegistryDelegate.java b/hippo4j-core/src/main/java/cn/hippo4j/core/plugin/ThreadPoolPluginRegistryDelegate.java index 3652d9fd..8199b8e4 100644 --- a/hippo4j-core/src/main/java/cn/hippo4j/core/plugin/ThreadPoolPluginRegistryDelegate.java +++ b/hippo4j-core/src/main/java/cn/hippo4j/core/plugin/ThreadPoolPluginRegistryDelegate.java @@ -1,6 +1,7 @@ package cn.hippo4j.core.plugin; import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; import java.util.Collection; @@ -30,44 +31,45 @@ public interface ThreadPoolPluginRegistryDelegate extends ThreadPoolPluginRegist /** * Register a {@link ThreadPoolPlugin} * - * @param aware aware + * @param plugin aware */ @Override - default void register(ThreadPoolPlugin aware) { - getThreadPoolPluginRegistry().register(aware); + default void register(ThreadPoolPlugin plugin) { + getThreadPoolPluginRegistry().register(plugin); } /** * Whether the {@link ThreadPoolPlugin} has been registered. * - * @param name name + * @param pluginId name * @return ture if target has been registered, false otherwise */ @Override - default boolean isRegistered(String name) { - return getThreadPoolPluginRegistry().isRegistered(name); + default boolean isRegistered(String pluginId) { + return getThreadPoolPluginRegistry().isRegistered(pluginId); } /** * Unregister {@link ThreadPoolPlugin} * - * @param name name + * @param pluginId name */ @Override - default void unregister(String name) { - getThreadPoolPluginRegistry().unregister(name); + default void unregister(String pluginId) { + getThreadPoolPluginRegistry().unregister(pluginId); } /** * Get {@link ThreadPoolPlugin} * - * @param name target name + * @param pluginId target name * @return {@link ThreadPoolPlugin}, null if unregister * @throws ClassCastException thrown when the object obtained by name cannot be converted to target type */ + @Nullable @Override - default A getAware(String name) { - return getThreadPoolPluginRegistry().getAware(name); + default A getPlugin(String pluginId) { + return getThreadPoolPluginRegistry().getPlugin(pluginId); } /**