incubator-cassandra-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Gary Dusbabek <gdusba...@gmail.com>
Subject Re: Can't stop org.apache.cassandra.service.StorageService.stopClient()
Date Fri, 21 May 2010 12:35:50 GMT
Peng,

I think you'll find that there are several threads in Cassandra that
have no mechanisms for exiting cleanly.  This is part of Cassandra's
crash-only design.

If you'd like to spend time figuring out how to shutdown Cassandra
cleanly, that would be great.  It would simplify the way we write
tests and make Cassandra more embeddable.  But we still want to keep
Cassandra crash-only.

Gary.


On Fri, May 21, 2010 at 01:33, Peng Guo <gpcuster@gmail.com> wrote:
> Hi
>
> I find there still something need to do:
>
> Modity the  Gossiper.java code like this:
>
>    public void start(InetAddress localEndPoint, int generationNbr)
>    {
>        localEndPoint_ = localEndPoint;
>        /* Get the seeds from the config and initialize them. */
>        Set<InetAddress> seedHosts = DatabaseDescriptor.getSeeds();
>        for (InetAddress seed : seedHosts)
>        {
>            if (seed.equals(localEndPoint))
>                continue;
>            seeds_.add(seed);
>        }
>
>        /* initialize the heartbeat state for this localEndPoint */
>        EndPointState localState = endPointStateMap_.get(localEndPoint_);
>        if ( localState == null )
>        {
>            HeartBeatState hbState = new HeartBeatState(generationNbr);
>            localState = new EndPointState(hbState);
>            localState.isAlive(true);
>            localState.isAGossiper(true);
>            endPointStateMap_.put(localEndPoint_, localState);
>        }
>
>        /* starts a timer thread */
>        if (gossipTimer_ == null) {
>            gossipTimer_ = new Timer(false); // makes the Gossiper
> reentrant.
>        }
>        gossipTimer_.schedule( new GossipTimerTask(),
> Gossiper.intervalInMillis_, Gossiper.intervalInMillis_);
>    }
>
> and
>
>    public void stop()
>    {
>        gossipTimer_.cancel();
>        gossipTimer_ = null;
>    }
>
> I don't know how to commit the patch, so I will learning it:)
>
>
> On Fri, May 21, 2010 at 11:50 AM, Jonathan Ellis <jbellis@gmail.com> wrote:
>
>> Can you submit a patch to https://issues.apache.org/jira/browse/CASSANDRA?
>>
>> Thanks!
>>
>> On Thu, May 20, 2010 at 7:39 PM, Peng Guo <gpcuster@gmail.com> wrote:
>> > Hi All
>> >
>> > This is my test code:
>> >    public static void main(String[] args) throws IOException,
>> > InterruptedException {
>> >        System.setProperty("storage-config",
>> > "D:\\apache-cassandra-0.6.1\\conf");
>> >
>> >        StorageService.instance.initClient();
>> >
>> >        StorageService.instance.stopClient();
>> >    }
>> >
>> > I find when I run this code, the process can't stop.
>> >
>> > for I use the jstack look at this process, I find the CONSISTENCY-MANAGER
>> > thread is still running.
>> >
>> > So I modify the code in StorageService.java  like this:
>> >
>> >    public void stopClient()
>> >    {
>> >        Gossiper.instance.unregister(this);
>> >        Gossiper.instance.stop();
>> >        MessagingService.shutdown();
>> >        StageManager.shutdownNow();
>> >
>> >        // this is added to stop the CONSISTENCY-MANAGER thread
>> >        consistencyManager_.shutdownNow();
>> >    }
>> >
>> > Can I commit this code in to svn branch?
>> >
>> > Thanks.
>> >
>> > --
>> > Regards
>> >   Peng Guo
>> >
>>
>>
>>
>> --
>> Jonathan Ellis
>> Project Chair, Apache Cassandra
>> co-founder of Riptano, the source for professional Cassandra support
>> http://riptano.com
>>
>
>
>
> --
> Regards
>   Peng Guo
>

Mime
View raw message