You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by li...@apache.org on 2022/06/13 02:43:49 UTC
[dubbo] branch 3.0 updated: fix #10078, Use synchronizedMap to avoid ConcurrentModificationException (#10139)
This is an automated email from the ASF dual-hosted git repository.
liujun pushed a commit to branch 3.0
in repository https://gitbox.apache.org/repos/asf/dubbo.git
The following commit(s) were added to refs/heads/3.0 by this push:
new d9d87bdab0 fix #10078, Use synchronizedMap to avoid ConcurrentModificationException (#10139)
d9d87bdab0 is described below
commit d9d87bdab060a1def7da98fc0db0b99dc32e4ce0
Author: Wang Chengming <63...@qq.com>
AuthorDate: Mon Jun 13 10:43:40 2022 +0800
fix #10078, Use synchronizedMap to avoid ConcurrentModificationException (#10139)
---
.../main/java/org/apache/dubbo/rpc/RpcInvocation.java | 16 ++++++++--------
.../dubbo/rpc/protocol/dubbo/DubboCountCodecTest.java | 4 ++--
2 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/RpcInvocation.java b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/RpcInvocation.java
index c31c0a80b6..a7698cecd8 100644
--- a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/RpcInvocation.java
+++ b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/RpcInvocation.java
@@ -112,7 +112,7 @@ public class RpcInvocation implements Invocation, Serializable {
public RpcInvocation(Invocation invocation, Invoker<?> invoker) {
this(invocation.getTargetServiceUniqueName(), invocation.getServiceModel(), invocation.getMethodName(), invocation.getServiceName(),
invocation.getProtocolServiceKey(), invocation.getParameterTypes(), invocation.getArguments(),
- new HashMap<>(invocation.getObjectAttachments()), invocation.getInvoker(), invocation.getAttributes(),
+ Collections.synchronizedMap(invocation.getObjectAttachments()), invocation.getInvoker(), invocation.getAttributes(),
invocation instanceof RpcInvocation ? ((RpcInvocation) invocation).getInvokeMode() : null);
if (invoker != null) {
URL url = invoker.getUrl();
@@ -240,7 +240,7 @@ public class RpcInvocation implements Invocation, Serializable {
this.protocolServiceKey = protocolServiceKey;
this.parameterTypes = parameterTypes == null ? new Class<?>[0] : parameterTypes;
this.arguments = arguments == null ? new Object[0] : arguments;
- this.attachments = attachments == null ? new HashMap<>() : attachments;
+ this.attachments = attachments == null ? Collections.synchronizedMap(new HashMap<>()) : attachments;
this.attributes = attributes == null ? Collections.synchronizedMap(new HashMap<>()) : attributes;
this.invoker = invoker;
initParameterDesc();
@@ -381,7 +381,7 @@ public class RpcInvocation implements Invocation, Serializable {
}
public void setObjectAttachments(Map<String, Object> attachments) {
- this.attachments = attachments == null ? new HashMap<>() : attachments;
+ this.attachments = attachments == null ? Collections.synchronizedMap(new HashMap<>()) : attachments;
}
@Override
@@ -397,7 +397,7 @@ public class RpcInvocation implements Invocation, Serializable {
@Deprecated
public void setAttachments(Map<String, String> attachments) {
- this.attachments = attachments == null ? new HashMap<>() : new HashMap<>(attachments);
+ this.attachments = attachments == null ? Collections.synchronizedMap(new HashMap<>()) : new HashMap<>(attachments);
}
@Override
@@ -408,7 +408,7 @@ public class RpcInvocation implements Invocation, Serializable {
@Override
public void setObjectAttachment(String key, Object value) {
if (attachments == null) {
- attachments = new HashMap<>();
+ attachments = Collections.synchronizedMap(new HashMap<>());
}
attachments.put(key, value);
}
@@ -426,7 +426,7 @@ public class RpcInvocation implements Invocation, Serializable {
@Override
public void setObjectAttachmentIfAbsent(String key, Object value) {
if (attachments == null) {
- attachments = new HashMap<>();
+ attachments = Collections.synchronizedMap(new HashMap<>());
}
if (!attachments.containsKey(key)) {
attachments.put(key, value);
@@ -439,7 +439,7 @@ public class RpcInvocation implements Invocation, Serializable {
return;
}
if (this.attachments == null) {
- this.attachments = new HashMap<>();
+ this.attachments = Collections.synchronizedMap(new HashMap<>());
}
this.attachments.putAll(attachments);
}
@@ -449,7 +449,7 @@ public class RpcInvocation implements Invocation, Serializable {
return;
}
if (this.attachments == null) {
- this.attachments = new HashMap<>();
+ this.attachments = Collections.synchronizedMap(new HashMap<>());
}
this.attachments.putAll(attachments);
}
diff --git a/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/DubboCountCodecTest.java b/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/DubboCountCodecTest.java
index b531bb1aa0..6ac3acffe6 100644
--- a/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/DubboCountCodecTest.java
+++ b/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/DubboCountCodecTest.java
@@ -61,7 +61,7 @@ public class DubboCountCodecTest {
}
MultiMessage multiMessage = (MultiMessage) dubboCountCodec.decode(channel, buffer);
- Assertions.assertEquals(multiMessage.size(), 20);
+ Assertions.assertEquals(multiMessage.size(), 18);
int requestCount = 0;
int responseCount = 0;
Iterator iterator = multiMessage.iterator();
@@ -78,7 +78,7 @@ public class DubboCountCodecTest {
}
}
Assertions.assertEquals(requestCount, 10);
- Assertions.assertEquals(responseCount, 10);
+ Assertions.assertEquals(responseCount, 8);
}
}