[
https://issues.apache.org/jira/browse/SOLR-16165?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17775552#comment-17775552
]
ASF subversion and git services commented on SOLR-16165:
--------------------------------------------------------
Commit 89fb1eef03da0a4fec2699a1ba17e6e78402ac28 in lucene-solr's branch
refs/heads/branch_8_11 from Ishan Chattopadhyaya
[ https://gitbox.apache.org/repos/asf?p=lucene-solr.git;h=89fb1eef03d ]
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
> Fix For: 9.1.1
>
> Attachments: StaticInitializerReferencesSubClass.xml
>
> Time Spent: 50m
> 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: [email protected]
For additional commands, e-mail: [email protected]