apache / apache/servicecomb-java-chassis
addLocalContext(parentContext.getLocalContext());多线程问题Concurrentmodificationexception Bug
- 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