[ 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: commits-unsubscr...@cassandra.apache.org For additional commands, e-mail: commits-h...@cassandra.apache.org