iotaledger / cliri

Coo Less IRI
Other
24 stars 8 forks source link

Make getLatestSolidTips synchronized #112

Closed Wollac closed 5 years ago

Wollac commented 5 years ago

Any access of TipsViewModel#solidTips should be synchronized to avoid race conditions; could be related to #111.

alon-e commented 5 years ago

also I see similar errors when spamming intensely, so I agree it's related:

03/12 11:55:50.659 [XNIO-1 task-135] ERROR com.iota.iri.service.API - API Exception: null
java.util.ConcurrentModificationException: null
    at java.util.LinkedHashMap$LinkedHashIterator.nextNode(LinkedHashMap.java:719) ~[na:1.8.0_201]
    at java.util.LinkedHashMap$LinkedKeyIterator.next(LinkedHashMap.java:742) ~[na:1.8.0_201]
    at java.util.AbstractCollection.toArray(AbstractCollection.java:141) ~[na:1.8.0_201]
    at java.util.LinkedList.addAll(LinkedList.java:408) ~[na:1.8.0_201]
    at java.util.LinkedList.addAll(LinkedList.java:387) ~[na:1.8.0_201]
    at java.util.LinkedList.<init>(LinkedList.java:119) ~[na:1.8.0_201]
    at com.iota.iri.controllers.TipsViewModel$FifoHashCache.descendingIterator(TipsViewModel.java:224) ~[classes/:na]
    at com.iota.iri.controllers.TipsViewModel.getLatestSolidTips(TipsViewModel.java:79) ~[classes/:na]
    at com.iota.iri.service.tipselection.impl.ConnectedComponentsStartingTipSelector.getTip(ConnectedComponentsStartingTipSelector.java:32) ~[classes/:na]
    at com.iota.iri.service.tipselection.impl.EntryPointSelectorCumulativeWeightThreshold.getEntryPoint(EntryPointSelectorCumulativeWeightThreshold.java:43) ~[classes/:na]
    at com.iota.iri.service.tipselection.impl.TipSelectorImpl.getTransactionsToApprove(TipSelectorImpl.java:72) ~[classes/:na]
    at com.iota.iri.service.API.getTransactionToApproveTips(API.java:734) [classes/:na]
    at com.iota.iri.service.API.storeMessageStatement(API.java:1380) [classes/:na]
    at com.iota.iri.service.API.process(API.java:374) [classes/:na]
    at com.iota.iri.service.API.processRequest(API.java:300) [classes/:na]
    at com.iota.iri.service.API.access$000(API.java:82) [classes/:na]
    at com.iota.iri.service.API$1.handleRequest(API.java:207) [classes/:na]
    at io.undertow.server.Connectors.executeRootHandler(Connectors.java:336) [undertow-core-1.4.26.Final.jar:1.4.26.Final]
    at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:830) [undertow