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 2023/01/06 13:19: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=17655444#comment-17655444 ] 

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

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

SOLR-16165 : CHANGES.txt


> Deadlock in SlotAcc initialization
> ----------------------------------
>
>                 Key: SOLR-16165
>                 URL: https://issues.apache.org/jira/browse/SOLR-16165
>             Project: Solr
>          Issue Type: Bug
>          Components: faceting
>    Affects Versions: 9.0, 8.11.1, 9.1
>            Reporter: Justin Sweeney
>            Assignee: Noble Paul
>            Priority: Minor
>             Fix For: 9.2
>
>         Attachments: StaticInitializerReferencesSubClass.xml
>
>          Time Spent: 40m
>  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.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@solr.apache.org
For additional commands, e-mail: issues-help@solr.apache.org