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

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

Hi Oleg

Thanks for your reply, and upgrading my JDK solved the initial problem. Now I 
get the above code to work. However, as soon as I introduce a select call into 
the scenario, I am unable to re-register the new ServerSocketChannel with the 
(already open) Selector I had before (i.e. the call blocks). As I explicitly 
cancel the SelectionKey, I am assuming that the Selector I was using before can 
be reused again. Can you try this class on your end when you get some free time

many thanks
asankha

package org.apache.http.examples.nio;

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

public class OlegTest {

    private Selector selector = null;

    public static void main(String[] args) throws Exception {
        OlegTest t = new OlegTest();
        t.execute();
    }

    private void execute() throws Exception {
        SelectionKey key = null;
        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);

        new Thread(new Worker()).start();

        // This will cause the server to stop accepting connections on port 8080
        key.cancel();
        serverChannel.close();
        //selector.close();
        System.out.println("Stopped... sleeping 10s");
        Thread.sleep(10000);

        // This will cause the server to resume accepting connections on port 
8080
        serverChannel = ServerSocketChannel.open();
        serverChannel.configureBlocking(false);
        serverChannel.socket().bind(new InetSocketAddress(8080));
        System.out.println("Getting stuck here");
        key = serverChannel.register(selector, SelectionKey.OP_ACCEPT);
        System.out.println("Re-Started... sleeping 10s");
        Thread.sleep(10000);
    }

    private class Worker implements Runnable {
        public void run() {
            try {
                while (true) {
                    int ret = selector.select(5000);
                    System.out.println("Selector returned : " + ret);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

}


> 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