hc-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Asankha C. Perera (JIRA)" <j...@apache.org>
Subject [jira] Commented: (HTTPCORE-127) Expose improved API for lifecycle management
Date Mon, 26 Nov 2007 12:44:43 GMT

    [ https://issues.apache.org/jira/browse/HTTPCORE-127?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12545426
] 

Asankha C. Perera commented on HTTPCORE-127:
--------------------------------------------

Hi Oleg

I was trying out some sample code for this, and it seems like I need to close the ServerSocketChannel
to prevent new connections from being accepted. However, if I had registered a Selector to
this, it seems like I am required to *close* that as well to prevent new connections from
being accepted. To keep responding to any in-flight requests, I only want to prevent new connections
from being accepted - thus I do not want to close the selector. 

I am pasting some test code that illustrates this problem.. Do you know how I could work around
this?

thanks
asankha

package org.apache.http.examples.nio;

import java.nio.channels.ServerSocketChannel;
import java.nio.channels.Selector;
import java.nio.channels.SelectionKey;
import java.net.InetSocketAddress;

public class Test {
    public static void main(String[] args) throws Exception {

        SelectionKey key = null;
        Selector selector = Selector.open();

        ServerSocketChannel serverChannel = ServerSocketChannel.open();
        serverChannel.configureBlocking(false);
        serverChannel.socket().bind(new InetSocketAddress(8080));
        key = serverChannel.register(selector, SelectionKey.OP_ACCEPT);
        System.out.println("Started... sleeping 5s");
        Thread.sleep(5000);

        key.cancel();
        serverChannel.close();
        selector.close(); // <------------- I don't want to do this... 
        System.out.println("Stopped... sleeping 10s");
        Thread.sleep(10000);

        serverChannel = ServerSocketChannel.open();
        serverChannel.configureBlocking(false);
        serverChannel.socket().bind(new InetSocketAddress(8080));
        key = serverChannel.register(Selector.open(), SelectionKey.OP_ACCEPT); // <---
but want to register a new channel with the same selector again.. 
        System.out.println("Re-Started... sleeping 10s");
        Thread.sleep(10000);
    }
}



> Expose improved API for lifecycle management
> --------------------------------------------
>
>                 Key: HTTPCORE-127
>                 URL: https://issues.apache.org/jira/browse/HTTPCORE-127
>             Project: HttpComponents Core
>          Issue Type: Improvement
>          Components: HttpCore NIO
>    Affects Versions: 4.0-alpha6
>            Reporter: Asankha C. Perera
>             Fix For: 4.0-beta1
>
>
> Apache Synapse uses HttpCore and we would like to stop accepting new connections to put
our servers into a "maintenance" mode. In this mode any in-flight requests already being served
will continue as normal (i.e. reading, writing etc) but new connections should be rejected,
so that a load balancer could direct new connections to another instance in the cluster. The
requirement is to then update configuration, apply patches or cleanly shutdown etc. for maintenance
without effecting any in-flight requests.
> Implementation wise I think this would be fairly straightforward as we can remove OP_ACCEPT
from the interested ops.
> On the mailing list Odi suggested that we tackle this at a broader level by exposing
lifecycle management APIs
> "I suggest create, start, stop, destroy methods in some classes/APIs (semantics of JBoss
Service MBeans)"

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


---------------------------------------------------------------------
To unsubscribe, e-mail: httpcomponents-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: httpcomponents-dev-help@jakarta.apache.org


Mime
View raw message