cassandra-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Gary Dusbabek (JIRA)" <j...@apache.org>
Subject [jira] Commented: (CASSANDRA-1756) DatabaseDescriptor static initialization circular reference when initialized through call to StorageService.instance.initClient
Date Fri, 19 Nov 2010 14:40:15 GMT

    [ https://issues.apache.org/jira/browse/CASSANDRA-1756?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12933820#action_12933820
] 

Gary Dusbabek commented on CASSANDRA-1756:
------------------------------------------

0001 is Erik's patch
0002 is a test case that exposes an bug in the assumption DynamicEndpointSnitch makes about
service initialization.
0003 fixes the bug.

Here is the chain of events.
StorageService.initClient() triggers static initializer in DD which instantiates a DynamicEndpointSnitch.
 DES, as part of it's constructors schedule some tasks with SS.scheduledTasks which promptly
starts executing them.  This causes MessagingService to initialize out of order which tries
to access the not-fully-initialized SS, causing deadlock.  

SS cannot finish initializing until MS is done initializing, but MS is waiting on SS to do
the same thing, near as I can tell.

> DatabaseDescriptor static initialization circular reference when initialized through
call to StorageService.instance.initClient 
> --------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: CASSANDRA-1756
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-1756
>             Project: Cassandra
>          Issue Type: Bug
>          Components: Core
>    Affects Versions: 0.7.0
>            Reporter: Erik Onnen
>            Assignee: Gary Dusbabek
>            Priority: Minor
>             Fix For: 0.7.0
>
>         Attachments: CS-1756, v1-0001-fix-cicular-initialization-problem-between-StorageServ.txt,
v1-0002-StorageService.initClient-unit-test-that-never-finishe.txt, v1-0003-DynamicEndpointSnitch-shouldn-t-update-if-SS-isn-t-ini.txt
>
>
> In trunk, attempting to invoke StorageService.instance.initClient results in an NPE due
to static definition field ordering in StorageService and a circular reference from DatabaseDescriptor
back into an uninitialized field (scheduledTasks). Changing the ordering of the static fields
such that scheduledTasks is defined before the static partitioner fixes the issue.
> I've also marked the scheduledTasks executor as final as it doesn't seem to make sense
changing it.
> All tests pass with this change locally.
> I suspect this hasn't surfaced in tests as calling initServer first in the same JVM will
allow later calls to initClient to see the correctly defined scheduledTasks fields.
> I'm following the recommended way to do this from ClientOnlyExample, if this isn't the
right way to initialize things let me know.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message