optimize: fix StyleCheck errors for hippo4j-threadpool-core (#1289)

* optimize: fix StyleCheck errors for hippo4j-threadpool-core

* add TaskTimeRecordPlugin#TableSizeFor test method
pull/1293/head
Dmego 1 year ago committed by GitHub
parent 80fd519a7b
commit 19d4a85777
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -131,4 +131,6 @@ public class Constants {
public static final String CLIENT_VERSION = "Client-Version";
public static final String CONFIGURATION_PROPERTIES_PREFIX = "spring.dynamic.thread-pool";
public static final long NO_REJECT_COUNT_NUM = -1L;
}

@ -70,6 +70,9 @@ public class BeforeCheckConfiguration {
return new BeforeCheckConfiguration.BeforeCheck();
}
/**
* Before check.
*/
public class BeforeCheck {
}

@ -31,6 +31,9 @@ public class MarkerConfiguration {
return new Marker();
}
/**
* Marker.
*/
public class Marker {
}

@ -40,6 +40,8 @@ import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicLong;
import static cn.hippo4j.common.constant.Constants.NO_REJECT_COUNT_NUM;
/**
* Enhanced dynamic and monitored thread pool.
*/
@ -57,7 +59,17 @@ public class DynamicThreadPoolExecutor extends ExtensibleThreadPoolExecutor impl
*/
@Getter
@Setter
public boolean waitForTasksToCompleteOnShutdown;
private boolean waitForTasksToCompleteOnShutdown;
/**
* The default await termination millis
*/
private static final Long DEFAULT_AWAIT_TERMINATION_MILLIS = -1L;
/**
* The default execute timeout
*/
private static final Long DEFAULT_EXECUTE_TIMEOUT = -1L;
/**
* Creates a new {@code DynamicThreadPoolExecutor} with the given initial parameters.
@ -149,7 +161,7 @@ public class DynamicThreadPoolExecutor extends ExtensibleThreadPoolExecutor impl
public long getAwaitTerminationMillis() {
return getPluginOfType(ThreadPoolExecutorShutdownPlugin.PLUGIN_NAME, ThreadPoolExecutorShutdownPlugin.class)
.map(ThreadPoolExecutorShutdownPlugin::getAwaitTerminationMillis)
.orElse(-1L);
.orElse(DEFAULT_AWAIT_TERMINATION_MILLIS);
}
/**
@ -176,7 +188,7 @@ public class DynamicThreadPoolExecutor extends ExtensibleThreadPoolExecutor impl
public Long getRejectCountNum() {
return getPluginOfType(TaskRejectCountRecordPlugin.PLUGIN_NAME, TaskRejectCountRecordPlugin.class)
.map(TaskRejectCountRecordPlugin::getRejectCountNum)
.orElse(-1L);
.orElse(NO_REJECT_COUNT_NUM);
}
/**
@ -201,7 +213,7 @@ public class DynamicThreadPoolExecutor extends ExtensibleThreadPoolExecutor impl
public Long getExecuteTimeOut() {
return getPluginOfType(TaskTimeoutNotifyAlarmPlugin.PLUGIN_NAME, TaskTimeoutNotifyAlarmPlugin.class)
.map(TaskTimeoutNotifyAlarmPlugin::getExecuteTimeOut)
.orElse(-1L);
.orElse(DEFAULT_EXECUTE_TIMEOUT);
}
/**

@ -29,6 +29,8 @@ import java.util.concurrent.BlockingQueue;
import java.util.concurrent.Executor;
import java.util.concurrent.ThreadPoolExecutor;
import static cn.hippo4j.common.constant.Constants.NO_REJECT_COUNT_NUM;
/**
* Abstract threadPool runtime info.
*/
@ -66,7 +68,7 @@ public abstract class AbstractThreadPoolRuntime {
int activeCount = actualExecutor.getActiveCount();
int largestPoolSize = actualExecutor.getLargestPoolSize();
BlockingQueue<Runnable> blockingQueue = actualExecutor.getQueue();
long rejectCount = actualExecutor instanceof DynamicThreadPoolExecutor ? ((DynamicThreadPoolExecutor) actualExecutor).getRejectCountNum() : -1L;
long rejectCount = actualExecutor instanceof DynamicThreadPoolExecutor ? ((DynamicThreadPoolExecutor) actualExecutor).getRejectCountNum() : NO_REJECT_COUNT_NUM;
ThreadPoolRunStateInfo stateInfo = ThreadPoolRunStateInfo.builder()
.tpId(threadPoolId)
.activeSize(activeCount)

@ -44,9 +44,9 @@ public abstract class AbstractDynamicExecutorSupport extends ThreadPoolExecutor
private ExecutorService executor;
public long awaitTerminationMillis;
private long awaitTerminationMillis;
public boolean waitForTasksToCompleteOnShutdown;
private boolean waitForTasksToCompleteOnShutdown;
public AbstractDynamicExecutorSupport(int corePoolSize,
int maximumPoolSize,

@ -33,7 +33,7 @@ import java.util.concurrent.Executor;
*/
public class DynamicThreadPoolAdapterChoose {
private static List<DynamicThreadPoolAdapter> DYNAMIC_THREAD_POOL_ADAPTERS = new ArrayList<>();
private static final List<DynamicThreadPoolAdapter> DYNAMIC_THREAD_POOL_ADAPTERS = new ArrayList<>();
static {
DYNAMIC_THREAD_POOL_ADAPTERS.add(new TransmittableThreadLocalExecutorAdapter());

@ -46,7 +46,7 @@ public class ThreadPoolTaskExecutorAdapter implements DynamicThreadPoolAdapter {
private static final String QUEUE_CAPACITY = "queueCapacity";
private static String MATCH_CLASS_NAME = "ThreadPoolTaskExecutor";
private static final String MATCH_CLASS_NAME = "ThreadPoolTaskExecutor";
@Override
public boolean match(Object executor) {

@ -28,9 +28,9 @@ import java.util.concurrent.Executor;
*/
public class TransmittableThreadLocalExecutorAdapter implements DynamicThreadPoolAdapter {
private static String MATCH_CLASS_NAME = "ExecutorTtlWrapper";
private static final String MATCH_CLASS_NAME = "ExecutorTtlWrapper";
private static String FIELD_NAME = "executor";
private static final String FIELD_NAME = "executor";
@Override
public boolean match(Object executor) {

@ -28,9 +28,9 @@ import java.util.concurrent.Executor;
*/
public class TransmittableThreadLocalExecutorServiceAdapter implements DynamicThreadPoolAdapter {
private static String MATCH_CLASS_NAME = "ExecutorServiceTtlWrapper";
private static final String MATCH_CLASS_NAME = "ExecutorServiceTtlWrapper";
private static String FIELD_NAME = "executorService";
private static final String FIELD_NAME = "executorService";
@Override
public boolean match(Object executor) {

@ -31,9 +31,9 @@ import java.util.concurrent.Executor;
*/
public class ZipkinExecutorAdapter implements DynamicThreadPoolAdapter {
private final static String MATCH_CLASS_NAME = "brave.internal.WrappingExecutorService";
private final static String FIELD_NAME = "delegate";
private final static String TYPE_NAME = "java.util.concurrent.ExecutorService";
private static final String MATCH_CLASS_NAME = "brave.internal.WrappingExecutorService";
private static final String FIELD_NAME = "delegate";
private static final String TYPE_NAME = "java.util.concurrent.ExecutorService";
@Override
public boolean match(Object executor) {

@ -34,13 +34,13 @@ public class DynamicThreadPoolBannerHandler implements InitializingBean {
private final BootstrapPropertiesInterface properties;
private final String DYNAMIC_THREAD_POOL = " :: Dynamic ThreadPool :: ";
private static final String DYNAMIC_THREAD_POOL = " :: Dynamic ThreadPool :: ";
private final String HIPPO4J_GITHUB = "GitHub: https://github.com/opengoofy/hippo4j";
private static final String HIPPO4J_GITHUB = "GitHub: https://github.com/opengoofy/hippo4j";
private final String HIPPO4J_SITE = "Site: https://www.hippo4j.cn";
private static final String HIPPO4J_SITE = "Site: https://www.hippo4j.cn";
private final int STRAP_LINE_SIZE = 50;
private static final int STRAP_LINE_SIZE = 50;
private final String version;
@ -70,7 +70,7 @@ public class DynamicThreadPoolBannerHandler implements InitializingBean {
while (padding.length() < STRAP_LINE_SIZE - (bannerVersion.length() + DYNAMIC_THREAD_POOL.length())) {
padding.append(" ");
}
System.out.println(AnsiOutput.toString(banner, AnsiColor.GREEN, DYNAMIC_THREAD_POOL, AnsiColor.DEFAULT,
log.info(AnsiOutput.toString("\n", banner, AnsiColor.GREEN, DYNAMIC_THREAD_POOL, AnsiColor.DEFAULT,
padding.toString(), AnsiStyle.FAINT, bannerVersion, "\n\n", HIPPO4J_GITHUB, "\n", HIPPO4J_SITE, "\n"));
}

@ -39,7 +39,14 @@ import java.util.stream.Collectors;
*/
public class TaskTimeRecordPlugin extends AbstractTaskTimerPlugin {
private static final int MAXIMUM_CAPACITY = 1 << 30;
/**
* maximumCapacity: 1 << 30
*/
private static final int MAXIMUM_CAPACITY = 1073741824;
/**
* pluginName.
*/
public static final String PLUGIN_NAME = TaskTimeRecordPlugin.class.getSimpleName();
/**
@ -50,7 +57,22 @@ public class TaskTimeRecordPlugin extends AbstractTaskTimerPlugin {
/**
* timers
*/
public final Timer[] timerTable;
private final Timer[] timerTable;
/**
* The default time mills
*/
private static final long DEFAULT_TIME_MILLS = -1L;
/**
* No task count
*/
private static final long NO_TASK_COUNT = -1L;
/**
* All bits are values of 1
*/
private static final int ALL_BIT_IS_ONE = -1;
/**
* Create a {@link TaskTimeRecordPlugin}
@ -116,8 +138,8 @@ public class TaskTimeRecordPlugin extends AbstractTaskTimerPlugin {
// summarize data
long totalTaskTimeMillis = 0L;
long maxTaskTimeMillis = -1L;
long minTaskTimeMillis = -1L;
long maxTaskTimeMillis = DEFAULT_TIME_MILLS;
long minTaskTimeMillis = DEFAULT_TIME_MILLS;
long taskCount = 0L;
for (Summary summary : summaries) {
if (taskCount > 0) {
@ -147,13 +169,8 @@ public class TaskTimeRecordPlugin extends AbstractTaskTimerPlugin {
* copy from {@link HashMap#tableSizeFor}
*/
static int tableSizeFor(int cap) {
int n = cap - 1;
n |= n >>> 1;
n |= n >>> 2;
n |= n >>> 4;
n |= n >>> 8;
n |= n >>> 16;
return n >= MAXIMUM_CAPACITY ? MAXIMUM_CAPACITY : n + 1;
int n = ALL_BIT_IS_ONE >>> Integer.numberOfLeadingZeros(cap - 1);
return (n < 0) ? 1 : (n >= MAXIMUM_CAPACITY) ? MAXIMUM_CAPACITY : n + 1;
}
/**
@ -267,7 +284,7 @@ public class TaskTimeRecordPlugin extends AbstractTaskTimerPlugin {
*/
public long getAvgTaskTimeMillis() {
long totalTaskCount = getTaskCount();
return totalTaskCount > 0L ? getTotalTaskTimeMillis() / totalTaskCount : -1;
return totalTaskCount > 0L ? getTotalTaskTimeMillis() / totalTaskCount : NO_TASK_COUNT;
}
}

@ -51,7 +51,7 @@ public class ThreadPoolExecutorShutdownPlugin implements ShutdownAwarePlugin {
* Await termination millis
*/
@Setter
public long awaitTerminationMillis;
private long awaitTerminationMillis;
/**
* Callback before pool shutdown.

@ -28,6 +28,23 @@ import java.util.concurrent.TimeUnit;
*/
public class CommonDynamicThreadPoolProviderFactory {
/**
* Core pool size.
*/
private static final int CORE_POOL_SIZE = 2;
/**
* Maximum pool size.
*/
private static final int MAXIMUM_POOL_SIZE = 4;
/**
* Keep alive time.
*/
private static final long KEEP_ALIVE_TIME = 60L;
/**
* Work queue capacity.
*/
private static final int WORK_QUEUE_CAPACITY = 1024;
/**
* Get the public dynamic thread pool instance.
*
@ -38,9 +55,9 @@ public class CommonDynamicThreadPoolProviderFactory {
DynamicThreadPoolExecutor dynamicThreadPoolExecutor = (DynamicThreadPoolExecutor) ThreadPoolBuilder.builder()
.dynamicPool()
.threadFactory(threadPoolId)
.poolThreadSize(2, 4)
.keepAliveTime(60L, TimeUnit.SECONDS)
.workQueue(BlockingQueueTypeEnum.RESIZABLE_LINKED_BLOCKING_QUEUE, 1024)
.poolThreadSize(CORE_POOL_SIZE, MAXIMUM_POOL_SIZE)
.keepAliveTime(KEEP_ALIVE_TIME, TimeUnit.SECONDS)
.workQueue(BlockingQueueTypeEnum.RESIZABLE_LINKED_BLOCKING_QUEUE, WORK_QUEUE_CAPACITY)
.build();
return dynamicThreadPoolExecutor;
}

@ -29,7 +29,7 @@ public class ExecutorTraceContextUtil {
/**
* Execute timeout trace key.
*/
private static String EXECUTE_TIMEOUT_TRACE_KEY = EXECUTE_TIMEOUT_TRACE;
private static String executeTimeoutTraceKey = EXECUTE_TIMEOUT_TRACE;
/**
* Get and remove.
@ -37,8 +37,8 @@ public class ExecutorTraceContextUtil {
* @return timeout trace
*/
public static String getAndRemoveTimeoutTrace() {
String val = MDC.get(EXECUTE_TIMEOUT_TRACE_KEY);
MDC.remove(EXECUTE_TIMEOUT_TRACE_KEY);
String val = MDC.get(executeTimeoutTraceKey);
MDC.remove(executeTimeoutTraceKey);
return val;
}
@ -57,6 +57,6 @@ public class ExecutorTraceContextUtil {
* @param key trace key
*/
public static void setTimeoutTraceKey(String key) {
EXECUTE_TIMEOUT_TRACE_KEY = key;
executeTimeoutTraceKey = key;
}
}

@ -45,13 +45,18 @@ public class IdentifyUtil {
/**
* Identify
*/
private static String IDENTIFY;
private static String identify;
/**
* Client identification value
*/
public static final String CLIENT_IDENTIFICATION_VALUE = IdUtil.simpleUUID();
/**
* Get identify sleep time
*/
private static final int SLEEP_TIME = 500;
/**
* Generate identify.
*
@ -60,8 +65,8 @@ public class IdentifyUtil {
* @return identify
*/
public static synchronized String generate(ConfigurableEnvironment environment, InetUtils inetUtil) {
if (StringUtil.isNotBlank(IDENTIFY)) {
return IDENTIFY;
if (StringUtil.isNotBlank(identify)) {
return identify;
}
String[] customerNetwork = ServiceLoaderRegistry.getSingletonServiceInstances(ClientNetworkService.class)
.stream().findFirst().map(each -> each.getNetworkIpPort(environment)).orElse(null);
@ -79,7 +84,7 @@ public class IdentifyUtil {
+ port
+ IDENTIFY_SLICER_SYMBOL
+ CLIENT_IDENTIFICATION_VALUE;
IDENTIFY = identify;
identify = identify;
return identify;
}
@ -89,16 +94,16 @@ public class IdentifyUtil {
* @return identify
*/
public static String getIdentify() {
while (StringUtil.isBlank(IDENTIFY)) {
while (StringUtil.isBlank(identify)) {
ConfigurableEnvironment environment = ApplicationContextHolder.getBean(ConfigurableEnvironment.class);
InetUtils inetUtils = ApplicationContextHolder.getBean(InetUtils.class);
if (environment != null && inetUtils != null) {
String identify = generate(environment, inetUtils);
return identify;
}
ThreadUtil.sleep(500);
ThreadUtil.sleep(SLEEP_TIME);
}
return IDENTIFY;
return identify;
}
/**

@ -25,7 +25,7 @@ import java.util.concurrent.atomic.AtomicLong;
* System clock.<br>
* Refer to cn.hutool.core.date.SystemClock<br>
*/
public class SystemClock {
public final class SystemClock {
/**
* Period

@ -168,7 +168,7 @@ public class InetUtils implements Closeable {
/**
* Should override the host info.
*/
public boolean override;
private boolean override;
private String ipAddress;

@ -80,4 +80,24 @@ public class TaskTimeRecordPluginTest {
return exceptLower < actual && actual < exceptUpper;
}
@Test
public void testTableSizeFor() {
int maxCap = 1 << 30;
for (int i = 0; i <= maxCap; i++) {
int tabSize1 = tabSizeFor_JDK8(i);
int tabSize2 = TaskTimeRecordPlugin.tableSizeFor(i);
Assert.assertTrue(tabSize1 == tabSize2);
}
}
private static int tabSizeFor_JDK8(int cap) {
int n = cap - 1;
n |= n >>> 1;
n |= n >>> 2;
n |= n >>> 4;
n |= n >>> 8;
n |= n >>> 16;
return (n < 0) ? 1 : (n >= 1073741824) ? 1073741824 : n + 1;
}
}

Loading…
Cancel
Save