You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@solr.apache.org by "ASF subversion and git services (Jira)" <ji...@apache.org> on 2022/05/02 07:38:00 UTC

[jira] [Commented] (SOLR-16165) Deadlock in SlotAcc initialization

    [ https://issues.apache.org/jira/browse/SOLR-16165?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17530632#comment-17530632 ] 

ASF subversion and git services commented on SOLR-16165:
--------------------------------------------------------

Commit b73a28c90cc552183a8a8b4c07d07c19a299732b in solr's branch refs/heads/main from Noble Paul
[ https://gitbox.apache.org/repos/asf?p=solr.git;h=b73a28c90cc ]

SOLR-16165: Rare deadlock in SlotAcc initialization (#819)



> 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
>         Attachments: StaticInitializerReferencesSubClass.xml
>
>          Time Spent: 20m
>  Remaining Estimate: 0h
>
> 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-unsubscribe@solr.apache.org
For additional commands, e-mail: issues-help@solr.apache.org