[ 
https://issues.apache.org/jira/browse/CASSANDRA-700?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Jeff Hodges updated CASSANDRA-700:
----------------------------------

    Attachment: 0006-StorageLoadBalancer.instance-StorageLoadBalancer.ins.patch
                0005-Gossiper.instance-Gossiper.instance.patch
                0004-AntiEntropyService.instance-AntiEntropyService.insta.patch

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

Reply via email to