change collectedStatistics type to CopyOnWriteArrayList (#377)
* change collectedStatistics type to CopyOnWriteArrayList
* CopyOnWriteArrayList could be read concurrently
* add URL not null assert
diff --git a/dubbo-samples-monitor/src/main/java/org/apache/dubbo/samples/monitor/impl/MonitorServiceImpl.java b/dubbo-samples-monitor/src/main/java/org/apache/dubbo/samples/monitor/impl/MonitorServiceImpl.java
index e674261..fdd6160 100644
--- a/dubbo-samples-monitor/src/main/java/org/apache/dubbo/samples/monitor/impl/MonitorServiceImpl.java
+++ b/dubbo-samples-monitor/src/main/java/org/apache/dubbo/samples/monitor/impl/MonitorServiceImpl.java
@@ -20,11 +20,11 @@
import org.apache.dubbo.common.URL;
import org.apache.dubbo.monitor.MonitorService;
-import java.util.ArrayList;
import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
public class MonitorServiceImpl implements MonitorService {
- private List<URL> collectedStatistics = new ArrayList<>();
+ private List<URL> collectedStatistics = new CopyOnWriteArrayList<>();
@Override
public void collect(URL statistics) {
@@ -33,6 +33,6 @@
@Override
public List<URL> lookup(URL query) {
- return new ArrayList<>(collectedStatistics);
+ return collectedStatistics;
}
}
diff --git a/dubbo-samples-monitor/src/test/java/org/apache/dubbo/samples/monitor/MonitorServiceIT.java b/dubbo-samples-monitor/src/test/java/org/apache/dubbo/samples/monitor/MonitorServiceIT.java
index fea626a..f3f7e11 100644
--- a/dubbo-samples-monitor/src/test/java/org/apache/dubbo/samples/monitor/MonitorServiceIT.java
+++ b/dubbo-samples-monitor/src/test/java/org/apache/dubbo/samples/monitor/MonitorServiceIT.java
@@ -73,6 +73,7 @@
boolean countConsumer = false;
System.out.println("monitor stats: " + stats.size());
for (URL stat : stats) {
+ Assert.assertNotNull(stat);
Assert.assertEquals("count", stat.getProtocol());
Assert.assertEquals("org.apache.dubbo.samples.monitor.api.DemoService/sayHello", stat.getPath());
if (stat.getParameter("application").equals("demo-provider")) {