[ https://issues.apache.org/jira/browse/SOLR-16165?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Noble Paul reassigned SOLR-16165: --------------------------------- Assignee: Noble Paul > Deadlock in SlotAcc initialization > ---------------------------------- > > Key: SOLR-16165 > URL: https://issues.apache.org/jira/browse/SOLR-16165 > Project: Solr > Issue Type: Bug > Security Level: Public(Default Security Level. Issues are Public) > Components: faceting > Affects Versions: 9.0, 8.11.1, 9.1 > Reporter: Justin Sweeney > Assignee: Noble Paul > Priority: Minor > > The core of the issue is that if a parent class reference an instance of its > own child class as a static field, a deadlock can be created if 1 thread > tries to access the parent class and another thread to the child class. > h3. Thread A > "qtp1393828949-98" #98 prio=5 os_prio=0 cpu=294.10ms elapsed=6252.75s > allocated=53246K defined_classes=243 tid=0x00007fa47c007000 nid=0x349c4e in > Object.wait() [0x00007f9896620000] > java.lang.Thread.State: RUNNABLE > at org.apache.solr.search.facet.SlotAcc.<clinit>(SlotAcc.java:830) > at > org.apache.solr.search.facet.FacetFieldProcessorByHashDV.createCollectAcc(FacetFieldProcessorByHashDV.java:271) > at > org.apache.solr.search.facet.FacetFieldProcessorByHashDV.calcFacets(FacetFieldProcessorByHashDV.java:255) > h3. Thread B > "qtp1393828949-2379" #2379 prio=5 os_prio=0 cpu=34.52ms elapsed=6013.46s > allocated=20426K defined_classes=0 tid=0x00007fa49c081800 nid=0x34a58b in > Object.wait() [0x00007f5fcfae7000] > java.lang.Thread.State: RUNNABLE > at > org.apache.solr.search.facet.FacetFieldProcessorByArray.createCollectAcc(FacetFieldProcessorByArray.java:85) > at > org.apache.solr.search.facet.FacetFieldProcessorByArray.calcFacets(FacetFieldProcessorByArray.java:144) > at > org.apache.solr.search.facet.FacetFieldProcessorByArray.process(FacetFieldProcessorByArray.java:94) > ... # Thread A : FacetFieldProcessorByHashDV.java:271 {{{}indexOrderAcc = new > SlotAcc(fcontext) {{}}}, which accesses class {{{}SlotAcc{}}}, it would have > a class init lock on {{{}SlotAcc{}}}(assuming first time loading {{SlotAcc}} > in classloader) but BEFORE run to line SlotAcc.java:830 > # Thread B: FacetFieldProcessorByArray.java:85 {{{}countAcc = new > SweepingCountSlotAcc(numSlots, this);{}}}. Accesses {{SweepingCountSlotAcc}} > (also assuming first time loading {{SweepingCountSlotAcc}} in classloader), > loads and initialize based on hierarchy {{SweepingCountSlotAcc}} -> > {{CountSlotArrAcc}} -> {{CountSlotAcc}} -> {{{}SlotAcc{}}}, obtain lock and > initialize > {{{}SweepingCountSlotAcc{}}},{{{}CountSlotArrAcc{}}},{{{}CountSlotAcc{}}} but > blocked on loading/initializing parent class {{{}SlotAcc{}}}, since Thread A > has lock and is already initializing it > # Thread A: run to line 830 {{static final CountSlotAcc DEV_NULL_SLOT_ACC = > new CountSlotAcc(null)...}} Found {{{}CountSlotAcc{}}}, it will attempt to > load {{CountSlotAcc}} as well, but such lock is held by Thread B -- This message was sent by Atlassian Jira (v8.20.7#820007) --------------------------------------------------------------------- To unsubscribe, e-mail: issues-unsubscr...@solr.apache.org For additional commands, e-mail: issues-h...@solr.apache.org