apache / apache/servicecomb-java-chassis

addLocalContext(parentContext.getLocalContext());多线程问题Concurrentmodificationexception Bug

Offen
#3,323 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
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

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.