apache / apache/servicecomb-java-chassis
addLocalContext(parentContext.getLocalContext());多线程问题Concurrentmodificationexception Bug
- Vorherrschende Sprache
- Java
- Sterne
- 1.9k
- Forks
- 814
- Ø Merge
- 8 T. 23 Std.
- Gemergte PRs (30 T.)
- 1
Beschreibung
这个类有构造这个代码:
org.apache.servicecomb.swagger.invocation.SwaggerInvocation#SwaggerInvocation
public SwaggerInvocation() {
parentContext = ContextUtils.getInvocationContext();
if (parentContext != null) {
addContext(parentContext.getContext());
addLocalContext(parentContext.getLocalContext());
}
}
其中addLocalContext(parentContext.getLocalContext()); 里面调用了localContext.putAll(otherContext);
这个在多线程环境,业务代码自己开多线程调用下游服务传递上下文会有多线程问题,报Concurrentmodificationexception异常
建议使用public void setLocalContext(Map localContext)直接设置上下文
或者将
protected Map context = new HashMap<>();
protected Map localContext = new HashMap<>();
都换成ConcurrentMap
Beitragsleitfaden
Für dieses Repository ist kein Beitragsleitfaden indexiert
Rechercherichtung
Beginnen Sie bei org.apache.servicecomb.swagger.invocation.SwaggerInvocation#SwaggerInvocation und untersuchen Sie addLocalContext, insbesondere den im Issue beschriebenen Aufruf von localContext.putAll. Vergleichen Sie die vorgeschlagenen Alternativen zur Kontextbehandlung und überprüfen Sie, dass gleichzeitige nachgelagerte Aufrufe beim Weitergeben des lokalen Kontexts keine ConcurrentModificationException auslösen.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- java
- Bereich
- backend
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 40/100