apache / apache/servicecomb-java-chassis

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

Aperta
#3,323 1 commento 0 reazioni 0 assegnatari Vedi su GitHub
Lingua principale
Java
Stelle
1.9k
Fork
814
Merge medio
8g 23h
PR unite (30g)
1

Descrizione

这个类有构造这个代码:
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

Guida per i contributori

Nessuna guida per i contributori indicizzata per questo repository

Direzione di ricerca

Partite da org.apache.servicecomb.swagger.invocation.SwaggerInvocation#SwaggerInvocation ed esaminate addLocalContext, in particolare la chiamata a localContext.putAll descritta nell’issue. Confrontate le alternative proposte per la gestione del contesto e verificate che le chiamate downstream concorrenti non causino ConcurrentModificationException durante la propagazione del contesto locale.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
java
Ambito
backend
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
40/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.