[
https://issues.apache.org/jira/browse/CASSANDRA-14164?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Marcus Eriksson updated CASSANDRA-14164:
----------------------------------------
Priority: Major (was: Blocker)
[~ignaced] Have you seen this more than once? Do you have the logs for the node?
{{ColumnFamilyStore.getBackgroundCompactionTaskSubmitter()}} is run every 5
minutes, {{initCf(..)}} is only called if the cf wasn't opened before so I
can't really see how it could happen.
The code looks the same as in 2.1 so I'm going to drop the priority
> Calling StorageService.loadNewSSTables function results in deadlock with
> compaction background task
> ---------------------------------------------------------------------------------------------------
>
> Key: CASSANDRA-14164
> URL: https://issues.apache.org/jira/browse/CASSANDRA-14164
> Project: Cassandra
> Issue Type: Bug
> Components: Compaction, Tools
> Environment: code
> Reporter: Ignace Desimpel
> Assignee: Marcus Eriksson
> Priority: Major
> Fix For: 2.2.x, 3.0.x
>
> Attachments: Stack1.txt
>
>
> Tested on version 2.2.11 (but seems like trunck 3.x is still the same for the
> related code path), using nodetool refresh for restoring a snapshot
> Calling StorageService.loadNewSSTables function results in deadlock with
> compaction background task.
> because :
> From StorageService class , function public void loadNewSSTables(String
> ksName, String cfName) a call is made to ColumnFamilyStore class , function
> public static synchronized void loadNewSSTables(String ksName, String cfName)
> and then a call to Keyspace class, function public static Keyspace
> open(String keyspaceName)
> getting to the function private static Keyspace open(String keyspaceName,
> Schema schema, boolean loadSSTables)
> finally trying to get a lock by synchronized (Keyspace.class)
> So inside the ColumnFamilyStore class lock, there is an attempt to get the
> lock on the Keyspace.class
> Now at the same time I have the thread OptionalTasks executing the
> ColumnFamilyStore.getBackgroundCompactionTaskSubmitter() task.
> The thread task is also calling Keyspace.open function, already progressed as
> far as getting the lock on Keyspace class.
> But then the call also initializes the column families and thus is calling on
> class ColumnFamilyStore the public static synchronized ColumnFamilyStore
> createColumnFamilyStore ...
> Result : the external call on loadNewSSTables blocks the internal compaction
> background task.
> So function 1 locks A and then B
> And function 2 locks B and then A
> leading to deadlock (due to incorrect order of locking objects)
> Regards,
> Ignace
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]