cassandra-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jonathan Ellis (JIRA)" <j...@apache.org>
Subject [jira] Commented: (CASSANDRA-700) Replacing the many forms of singleton instance methods
Date Thu, 14 Jan 2010 16:26:54 GMT

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

Jonathan Ellis commented on CASSANDRA-700:
------------------------------------------

Yeah, we used to have some circular dependencies that meant we really did need the laziness.
 I guess those are gone now, because the server seems to run fine w/ these patches.  Might
still want to preserve laziness as in Jaakko's link to avoid unpleasant surprises if such
a dependency does get re-introduced.  Or we could just have the public static final and add
laziness if/when it becomes necessary, I am fine with either.

> Replacing the many forms of singleton instance methods
> ------------------------------------------------------
>
>                 Key: CASSANDRA-700
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-700
>             Project: Cassandra
>          Issue Type: Improvement
>            Reporter: Jeff Hodges
>         Attachments: 0001-MessagingService.instance-MessagingService.instance.patch,
0001-squashed-singleton-clean-up.patch, 0002-HintedHandOffManager.instance-HintedHandOffManager.i.patch,
0003-StorageService.instance-StorageService.instance.patch, 0004-AntiEntropyService.instance-AntiEntropyService.insta.patch,
0005-Gossiper.instance-Gossiper.instance.patch, 0006-StorageLoadBalancer.instance-StorageLoadBalancer.ins.patch,
0007-FailureDetector.instance-FailureDetector.instance.patch, 0008-ReadRepairManager.instance-ReadRepairManager.instanc.patch
>
>
> In many places, the Cassandra codebase attempts to allow for only one instance of a particular
class per process. It does so in a variety of ways, some of which are attempts at being thread-safe
(with mixed results) while others seem to just delay instantiation.
> This issue is to track the changes necessary to consolidate these many forms of singleton
into one form. 
> What's interesting is that Java has a nice way of providing this facility in a very Java-y
way.  We can create a public static variable (called, say, instance) and, in the class definition,
set it to a new instance of the very class we are in. We then can protect the class's constructor
to prevent others from trying to use it. This allows us to have only one instance of the variable
accessible only through the a static variable on the class itself.
> This is thread-safe because class definitions in Java is thread-safe. This is lazily
loaded because Java doesn't do class definition until the first time the class is referenced
in any way. Basically, this is everything that was attempted with the various static instance()
methods but with complete success.
> The current classes I was able to find that can benefit from this are:
> AntiEntropyService
> FailureDetector
> Gossiper
> HintedHandOffManager
> MessagingService
> ReadRepairManager
> StorageLoadBalancer
> StorageService
> Other classes with similar constructions would be nice to remove, too.

-- 
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