[ 
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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to