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

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

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

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
>          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.10#820010)

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

Reply via email to