Skip to content

Commit a996cbb

Browse files
authored
Merge branch 'master' into version_manage
2 parents 313cc24 + abd97d1 commit a996cbb

File tree

61 files changed

+863
-339
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

61 files changed

+863
-339
lines changed

.github/workflows/maven.yml

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# This workflow will build a Java project with Maven
2+
# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven
3+
4+
name: Java CI with Maven
5+
6+
on:
7+
push:
8+
branches: [ master ]
9+
pull_request:
10+
branches: [ master ]
11+
12+
jobs:
13+
build:
14+
15+
runs-on: ubuntu-latest
16+
17+
steps:
18+
- uses: actions/checkout@v2
19+
- name: Set up JDK 1.8
20+
uses: actions/setup-java@v1
21+
with:
22+
java-version: 1.8
23+
- name: Build with Maven
24+
run: mvn clean install -DskipTests -B -V
25+
&& sh ./tools/check_format.sh
26+
&& mvn clean test
27+
- name: Codecov
28+
uses: codecov/codecov-action@v1

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# SOFARegistry
22

3-
[![Build Status](https://travis-ci.com/alipay/sofa-registry.svg?branch=master)](https://travis-ci.com/sofastack/sofa-registry)
3+
[![Java CI with Maven](https://github.com/sofastack/sofa-registry/actions/workflows/maven.yml/badge.svg)](https://github.com/sofastack/sofa-registry/actions/workflows/maven.yml)
44
![license](https://img.shields.io/badge/license-Apache--2.0-green.svg)
55
[![Coverage Status](https://codecov.io/gh/alipay/sofa-registry/branch/master/graph/badge.svg)](https://codecov.io/gh/sofastack/sofa-registry)
66
![maven](https://img.shields.io/github/release/sofastack/sofa-registry.svg)

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@
7878
<jraft.version>1.3.5.Alpha1</jraft.version>
7979
<metrics.version>4.0.2</metrics.version>
8080
<commons-io.version>2.4</commons-io.version>
81-
<jetty.version>[9.4.17.v20190418,9.4.19.v20190610]</jetty.version>
81+
<jetty.version>9.4.19.v20190610</jetty.version>
8282
<rocksdbjni.version>6.4.6</rocksdbjni.version>
8383
<main.user.dir>${user.dir}</main.user.dir>
8484
<argLine>-Dnetwork_interface_denylist=docker0</argLine>

server/common/util/src/main/java/com/alipay/sofa/registry/metrics/TaskMetrics.java

Lines changed: 36 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,13 @@
1818

1919
import com.codahale.metrics.Gauge;
2020
import com.codahale.metrics.MetricRegistry;
21+
import com.google.common.collect.Sets;
22+
import io.netty.util.internal.ConcurrentSet;
2123

24+
import java.util.HashSet;
25+
import java.util.Map;
26+
import java.util.Set;
27+
import java.util.concurrent.ConcurrentHashMap;
2228
import java.util.concurrent.ThreadPoolExecutor;
2329

2430
/**
@@ -29,6 +35,7 @@
2935
public class TaskMetrics {
3036

3137
private final MetricRegistry metrics;
38+
private final Set<String> executorNames = Sets.newConcurrentHashSet();
3239

3340
private TaskMetrics() {
3441
this.metrics = new MetricRegistry();
@@ -53,21 +60,45 @@ public MetricRegistry getMetricRegistry() {
5360
}
5461

5562
public void registerThreadExecutor(String executorName, ThreadPoolExecutor executor) {
63+
executorNames.add(executorName);
5664

5765
metrics.register(MetricRegistry.name(executorName, "queue"),
58-
(Gauge<Integer>) () -> executor.getQueue().size());
66+
(Gauge<Integer>) () -> executor.getQueue().size());
5967

6068
metrics.register(MetricRegistry.name(executorName, "current"),
61-
(Gauge<Integer>) executor::getPoolSize);
69+
(Gauge<Integer>) executor::getPoolSize);
6270

6371
metrics.register(MetricRegistry.name(executorName, "active"),
64-
(Gauge<Integer>) executor::getActiveCount);
72+
(Gauge<Integer>) executor::getActiveCount);
6573

6674
metrics.register(MetricRegistry.name(executorName, "completed"),
67-
(Gauge<Long>) executor::getCompletedTaskCount);
75+
(Gauge<Long>) executor::getCompletedTaskCount);
6876

6977
metrics.register(MetricRegistry.name(executorName, "task"),
70-
(Gauge<Long>) executor::getTaskCount);
78+
(Gauge<Long>) executor::getTaskCount);
79+
}
80+
81+
public Set<String> getExecutorNames() {
82+
return executorNames;
83+
}
7184

85+
public String metricsString() {
86+
final String SYMBOLIC = " └─ ";
87+
StringBuilder sb = new StringBuilder();
88+
sb.append("\n").append("ExecutorMetrics").append(" >>>>>>>>");
89+
sb.append("\n");
90+
for (String executorName : getExecutorNames()) {
91+
MetricRegistry metricRegistry = getMetricRegistry();
92+
Map<String, Gauge> map = metricRegistry
93+
.getGauges((name, value) -> name.startsWith(executorName));
94+
95+
sb.append(SYMBOLIC).append(executorName);
96+
map.forEach((key, gauge) -> {
97+
String name = key.substring(executorName.length() + 1);
98+
sb.append(", ").append(name).append(":").append(gauge.getValue());
99+
});
100+
sb.append("\n");
101+
}
102+
return sb.toString();
72103
}
73104
}

server/server/data/src/main/java/com/alipay/sofa/registry/server/data/DataApplication.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import com.alipay.sofa.registry.server.data.bootstrap.EnableDataServer;
2222
import org.springframework.boot.SpringApplication;
2323
import org.springframework.boot.autoconfigure.SpringBootApplication;
24+
import org.springframework.scheduling.annotation.EnableScheduling;
2425

2526
/**
2627
*

server/server/data/src/main/java/com/alipay/sofa/registry/server/data/bootstrap/DataServerBeanConfiguration.java

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import java.util.concurrent.ThreadPoolExecutor;
2424
import java.util.concurrent.TimeUnit;
2525

26+
import com.alipay.sofa.registry.server.data.remoting.dataserver.task.LogMetricsTask;
2627
import org.glassfish.jersey.jackson.JacksonFeature;
2728
import org.glassfish.jersey.server.ResourceConfig;
2829
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
@@ -101,7 +102,7 @@
101102
import com.alipay.sofa.registry.server.data.renew.LocalDataServerCleanHandler;
102103
import com.alipay.sofa.registry.server.data.resource.DataDigestResource;
103104
import com.alipay.sofa.registry.server.data.resource.HealthResource;
104-
import com.alipay.sofa.registry.server.data.util.ThreadPoolExecutorDataServer;
105+
import com.alipay.sofa.registry.server.data.util.DataMetricsThreadPoolExecutor;
105106
import com.alipay.sofa.registry.util.NamedThreadFactory;
106107
import com.alipay.sofa.registry.util.PropertySplitter;
107108

@@ -512,12 +513,18 @@ public RenewNodeTask renewNodeTask() {
512513
return new RenewNodeTask();
513514
}
514515

516+
@Bean
517+
public LogMetricsTask logMetricsTask() {
518+
return new LogMetricsTask();
519+
}
520+
515521
@Bean(name = "tasks")
516522
public List<AbstractTask> tasks() {
517523
List<AbstractTask> list = new ArrayList<>();
518524
list.add(connectionRefreshTask());
519525
list.add(connectionRefreshMetaTask());
520526
list.add(renewNodeTask());
527+
list.add(logMetricsTask());
521528
return list;
522529
}
523530

@@ -556,7 +563,7 @@ public static class ExecutorConfiguration {
556563

557564
@Bean(name = "publishProcessorExecutor")
558565
public ThreadPoolExecutor publishProcessorExecutor(DataServerConfig dataServerConfig) {
559-
return new ThreadPoolExecutorDataServer("PublishProcessorExecutor",
566+
return new DataMetricsThreadPoolExecutor("PublishProcessorExecutor",
560567
dataServerConfig.getPublishExecutorMinPoolSize(),
561568
dataServerConfig.getPublishExecutorMaxPoolSize(), 300, TimeUnit.SECONDS,
562569
new ArrayBlockingQueue<>(dataServerConfig.getPublishExecutorQueueSize()),
@@ -565,7 +572,7 @@ public ThreadPoolExecutor publishProcessorExecutor(DataServerConfig dataServerCo
565572

566573
@Bean(name = "renewDatumProcessorExecutor")
567574
public ThreadPoolExecutor renewDatumProcessorExecutor(DataServerConfig dataServerConfig) {
568-
return new ThreadPoolExecutorDataServer("RenewDatumProcessorExecutor",
575+
return new DataMetricsThreadPoolExecutor("RenewDatumProcessorExecutor",
569576
dataServerConfig.getRenewDatumExecutorMinPoolSize(),
570577
dataServerConfig.getRenewDatumExecutorMaxPoolSize(), 300, TimeUnit.SECONDS,
571578
new ArrayBlockingQueue<>(dataServerConfig.getRenewDatumExecutorQueueSize()),
@@ -574,14 +581,25 @@ public ThreadPoolExecutor renewDatumProcessorExecutor(DataServerConfig dataServe
574581

575582
@Bean(name = "getDataProcessorExecutor")
576583
public ThreadPoolExecutor getDataProcessorExecutor(DataServerConfig dataServerConfig) {
577-
return new ThreadPoolExecutorDataServer("GetDataProcessorExecutor",
584+
return new DataMetricsThreadPoolExecutor("GetDataProcessorExecutor",
578585
dataServerConfig.getGetDataExecutorMinPoolSize(),
579586
dataServerConfig.getGetDataExecutorMaxPoolSize(),
580587
dataServerConfig.getGetDataExecutorKeepAliveTime(), TimeUnit.SECONDS,
581588
new ArrayBlockingQueue<>(dataServerConfig.getGetDataExecutorQueueSize()),
582589
new NamedThreadFactory("DataServer-GetDataProcessor-executor", true));
583590
}
584591

592+
@Bean(name = "defaultRequestExecutor")
593+
public ThreadPoolExecutor defaultRequestExecutor(DataServerConfig dataServerConfig) {
594+
return new DataMetricsThreadPoolExecutor("DefaultRequestExecutor",
595+
dataServerConfig.getDefaultRequestExecutorMinSize(),
596+
dataServerConfig.getDefaultRequestExecutorMaxSize(),
597+
dataServerConfig.getDefaultRequestExecutorKeepAliveTime(), TimeUnit.SECONDS,
598+
new ArrayBlockingQueue<>(dataServerConfig.getDefaultRequestExecutorQueueSize()),
599+
new NamedThreadFactory("DefaultRequestThread", true)
600+
601+
);
602+
}
585603
}
586604

587605
@Configuration
@@ -601,5 +619,4 @@ public ProvideDataProcessor datumExpireProvideDataProcessor(ProvideDataProcessor
601619
}
602620

603621
}
604-
605622
}

server/server/data/src/main/java/com/alipay/sofa/registry/server/data/bootstrap/DataServerConfig.java

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,15 @@ public class DataServerConfig {
117117

118118
private int sessionServerNotifierRetryExecutorQueueSize = 10000;
119119

120+
private int defaultRequestExecutorMinSize = 20;
121+
122+
private int defaultRequestExecutorMaxSize = 400;
123+
124+
private int defaultRequestExecutorQueueSize = 600;
125+
private long defaultRequestExecutorKeepAliveTime = 60;
126+
127+
private int logMetricsFixedDelay = 30;
128+
120129
private int renewEnableDelaySec = 30;
121130

122131
private int dataSyncDelayTimeout = 1000;
@@ -698,7 +707,8 @@ public Set<String> getMetaServerIpAddresses() {
698707
if (localDataCenter != null && !localDataCenter.isEmpty()) {
699708
Collection<String> metas = metaMap.get(localDataCenter);
700709
if (metas != null && !metas.isEmpty()) {
701-
metaIps = metas.stream().map(NetUtil::getIPAddressFromDomain).collect(Collectors.toSet());
710+
metaIps = metas.stream().map(NetUtil::getIPAddressFromDomain)
711+
.collect(Collectors.toSet());
702712
}
703713
}
704714
}
@@ -873,4 +883,44 @@ public String toString() {
873883
return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE);
874884
}
875885

886+
public int getDefaultRequestExecutorMinSize() {
887+
return defaultRequestExecutorMinSize;
888+
}
889+
890+
public void setDefaultRequestExecutorMinSize(int defaultRequestExecutorMinSize) {
891+
this.defaultRequestExecutorMinSize = defaultRequestExecutorMinSize;
892+
}
893+
894+
public int getDefaultRequestExecutorMaxSize() {
895+
return defaultRequestExecutorMaxSize;
896+
}
897+
898+
public void setDefaultRequestExecutorMaxSize(int defaultRequestExecutorMaxSize) {
899+
this.defaultRequestExecutorMaxSize = defaultRequestExecutorMaxSize;
900+
}
901+
902+
public int getDefaultRequestExecutorQueueSize() {
903+
return defaultRequestExecutorQueueSize;
904+
}
905+
906+
public void setDefaultRequestExecutorQueueSize(int defaultRequestExecutorQueueSize) {
907+
this.defaultRequestExecutorQueueSize = defaultRequestExecutorQueueSize;
908+
}
909+
910+
public long getDefaultRequestExecutorKeepAliveTime() {
911+
return defaultRequestExecutorKeepAliveTime;
912+
}
913+
914+
public void setDefaultRequestExecutorKeepAliveTime(long defaultRequestExecutorKeepAliveTime) {
915+
this.defaultRequestExecutorKeepAliveTime = defaultRequestExecutorKeepAliveTime;
916+
}
917+
918+
public int getLogMetricsFixedDelay() {
919+
return logMetricsFixedDelay;
920+
}
921+
922+
public void setLogMetricsFixedDelay(int logMetricsFixedDelay) {
923+
this.logMetricsFixedDelay = logMetricsFixedDelay;
924+
}
925+
876926
}

server/server/data/src/main/java/com/alipay/sofa/registry/server/data/event/StartTaskTypeEnum.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,5 +41,7 @@ public enum StartTaskTypeEnum {
4141
/**
4242
* VersionCompareTask
4343
*/
44-
VERSION_COMPARE
44+
VERSION_COMPARE,
45+
46+
LOG_METRICS
4547
}

server/server/data/src/main/java/com/alipay/sofa/registry/server/data/executor/ExecutorFactory.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727

2828
import com.alipay.sofa.registry.log.Logger;
2929
import com.alipay.sofa.registry.log.LoggerFactory;
30+
import com.alipay.sofa.registry.server.data.util.DataMetricsThreadPoolExecutor;
3031
import com.alipay.sofa.registry.util.NamedThreadFactory;
3132

3233
/**
@@ -43,8 +44,8 @@ public class ExecutorFactory {
4344

4445
static {
4546
BlockingQueue<Runnable> workQueue = new ArrayBlockingQueue<>(10);
46-
EXECUTOR = new ThreadPoolExecutor(20, 300, 1, TimeUnit.HOURS, workQueue,
47-
new NamedThreadFactory("CommonExecutor")) {
47+
EXECUTOR = new DataMetricsThreadPoolExecutor("CommonExecutor", 20, 300, 1, TimeUnit.HOURS,
48+
workQueue, new NamedThreadFactory("CommonExecutor")) {
4849

4950
/**
5051
* @see ThreadPoolExecutor#afterExecute(Runnable, Throwable)
@@ -59,9 +60,11 @@ protected void afterExecute(Runnable r, Throwable t) {
5960
}
6061
};
6162

62-
NOTIFY_SESSION_CALLBACK_EXECUTOR = new ThreadPoolExecutor(10, 20, 300, TimeUnit.SECONDS,
63+
NOTIFY_SESSION_CALLBACK_EXECUTOR = new DataMetricsThreadPoolExecutor(
64+
"NotifySessionCallbackExecutor", 10, 20, 300, TimeUnit.SECONDS,
6365
new LinkedBlockingQueue<>(100000), new NamedThreadFactory(
64-
"NotifySessionCallback-executor", true));
66+
"NotifySessionCallbackExecutor", true));
67+
6568
}
6669

6770
/**

server/server/data/src/main/java/com/alipay/sofa/registry/server/data/remoting/dataserver/handler/NotifyDataSyncHandler.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
import com.alipay.sofa.registry.server.data.remoting.dataserver.SyncDataCallback;
4646
import com.alipay.sofa.registry.server.data.remoting.handler.AbstractClientHandler;
4747
import com.alipay.sofa.registry.server.data.util.LocalServerStatusEnum;
48-
import com.alipay.sofa.registry.server.data.util.ThreadPoolExecutorDataServer;
48+
import com.alipay.sofa.registry.server.data.util.DataMetricsThreadPoolExecutor;
4949
import com.alipay.sofa.registry.util.NamedThreadFactory;
5050
import com.alipay.sofa.registry.util.ParaCheckUtil;
5151

@@ -161,7 +161,7 @@ public Class interest() {
161161
@Override
162162
public Executor getExecutor() {
163163
if (notifyExecutor == null) {
164-
notifyExecutor = new ThreadPoolExecutorDataServer("NotifyDataSyncProcessorExecutor",
164+
notifyExecutor = new DataMetricsThreadPoolExecutor("NotifyDataSyncProcessorExecutor",
165165
dataServerConfig.getNotifyDataSyncExecutorMinPoolSize(),
166166
dataServerConfig.getNotifyDataSyncExecutorMaxPoolSize(),
167167
dataServerConfig.getNotifyDataSyncExecutorKeepAliveTime(), TimeUnit.SECONDS,

0 commit comments

Comments
 (0)