Skip to content

Commit 2503604

Browse files
authored
Merge pull request apache#467 from wu-sheng/fixed/438
Fixed apache#438, catch null point exception when collector start up with s…
2 parents ea8d4a7 + b55f9ab commit 2503604

File tree

2 files changed

+79
-2
lines changed

2 files changed

+79
-2
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
package org.skywalking.apm.collector.cluster.standalone;
2+
3+
import java.util.Iterator;
4+
import java.util.LinkedHashMap;
5+
import java.util.Map;
6+
import org.skywalking.apm.collector.client.h2.H2Client;
7+
import org.skywalking.apm.collector.client.zookeeper.util.PathUtils;
8+
import org.skywalking.apm.collector.core.CollectorException;
9+
import org.skywalking.apm.collector.core.client.Client;
10+
import org.skywalking.apm.collector.core.client.ClientException;
11+
import org.skywalking.apm.collector.core.client.DataMonitor;
12+
import org.skywalking.apm.collector.core.cluster.ClusterDataListener;
13+
import org.skywalking.apm.collector.core.module.ModuleRegistration;
14+
import org.slf4j.Logger;
15+
import org.slf4j.LoggerFactory;
16+
17+
/**
18+
* @author pengys5
19+
*/
20+
public class ClusterStandaloneDataMonitor implements DataMonitor {
21+
22+
private final Logger logger = LoggerFactory.getLogger(ClusterStandaloneDataMonitor.class);
23+
24+
private H2Client client;
25+
26+
private Map<String, ClusterDataListener> listeners;
27+
private Map<String, ModuleRegistration> registrations;
28+
29+
public ClusterStandaloneDataMonitor() {
30+
listeners = new LinkedHashMap<>();
31+
registrations = new LinkedHashMap<>();
32+
}
33+
34+
@Override public void setClient(Client client) {
35+
this.client = (H2Client)client;
36+
}
37+
38+
@Override
39+
public void addListener(ClusterDataListener listener, ModuleRegistration registration) throws ClientException {
40+
String path = PathUtils.convertKey2Path(listener.path());
41+
logger.info("listener path: {}", path);
42+
listeners.put(path, listener);
43+
registrations.put(path, registration);
44+
}
45+
46+
@Override public ClusterDataListener getListener(String path) {
47+
path = PathUtils.convertKey2Path(path);
48+
return listeners.get(path);
49+
}
50+
51+
@Override public void createPath(String path) throws ClientException {
52+
53+
}
54+
55+
@Override public void setData(String path, String value) throws ClientException {
56+
if (listeners.containsKey(path)) {
57+
listeners.get(path).addAddress(value);
58+
listeners.get(path).serverJoinNotify(value);
59+
}
60+
}
61+
62+
@Override public void start() throws CollectorException {
63+
Iterator<Map.Entry<String, ModuleRegistration>> entryIterator = registrations.entrySet().iterator();
64+
while (entryIterator.hasNext()) {
65+
Map.Entry<String, ModuleRegistration> next = entryIterator.next();
66+
ModuleRegistration.Value value = next.getValue().buildValue();
67+
String contextPath = value.getContextPath() == null ? "" : value.getContextPath();
68+
setData(next.getKey(), value.getHostPort() + contextPath);
69+
}
70+
}
71+
}

apm-collector/apm-collector-cluster/src/main/java/org/skywalking/apm/collector/cluster/standalone/ClusterStandaloneModuleDefine.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,12 @@ public class ClusterStandaloneModuleDefine extends ClusterModuleDefine {
1515

1616
public static final String MODULE_NAME = "standalone";
1717

18+
private final ClusterStandaloneDataMonitor dataMonitor;
19+
20+
public ClusterStandaloneModuleDefine() {
21+
this.dataMonitor = new ClusterStandaloneDataMonitor();
22+
}
23+
1824
@Override public String group() {
1925
return ClusterModuleGroupDefine.GROUP_NAME;
2026
}
@@ -32,14 +38,14 @@ public class ClusterStandaloneModuleDefine extends ClusterModuleDefine {
3238
}
3339

3440
@Override public DataMonitor dataMonitor() {
35-
return null;
41+
return dataMonitor;
3642
}
3743

3844
@Override protected Client createClient() {
3945
return new H2Client();
4046
}
4147

4248
@Override public ClusterModuleRegistrationReader registrationReader() {
43-
return null;
49+
return new ClusterStandaloneModuleRegistrationReader(dataMonitor);
4450
}
4551
}

0 commit comments

Comments
 (0)