share the open channels handler
This commit is contained in:
parent
afeabd0ba8
commit
7e5bfb5d3b
|
@ -27,6 +27,7 @@ import org.elasticsearch.util.SizeUnit;
|
||||||
import org.elasticsearch.util.SizeValue;
|
import org.elasticsearch.util.SizeValue;
|
||||||
import org.elasticsearch.util.component.AbstractLifecycleComponent;
|
import org.elasticsearch.util.component.AbstractLifecycleComponent;
|
||||||
import org.elasticsearch.util.inject.Inject;
|
import org.elasticsearch.util.inject.Inject;
|
||||||
|
import org.elasticsearch.util.netty.OpenChannelsHandler;
|
||||||
import org.elasticsearch.util.network.NetworkService;
|
import org.elasticsearch.util.network.NetworkService;
|
||||||
import org.elasticsearch.util.network.NetworkUtils;
|
import org.elasticsearch.util.network.NetworkUtils;
|
||||||
import org.elasticsearch.util.settings.Settings;
|
import org.elasticsearch.util.settings.Settings;
|
||||||
|
|
|
@ -33,6 +33,7 @@ import org.elasticsearch.util.inject.Inject;
|
||||||
import org.elasticsearch.util.io.stream.BytesStreamOutput;
|
import org.elasticsearch.util.io.stream.BytesStreamOutput;
|
||||||
import org.elasticsearch.util.io.stream.HandlesStreamOutput;
|
import org.elasticsearch.util.io.stream.HandlesStreamOutput;
|
||||||
import org.elasticsearch.util.io.stream.Streamable;
|
import org.elasticsearch.util.io.stream.Streamable;
|
||||||
|
import org.elasticsearch.util.netty.OpenChannelsHandler;
|
||||||
import org.elasticsearch.util.network.NetworkService;
|
import org.elasticsearch.util.network.NetworkService;
|
||||||
import org.elasticsearch.util.network.NetworkUtils;
|
import org.elasticsearch.util.network.NetworkUtils;
|
||||||
import org.elasticsearch.util.settings.Settings;
|
import org.elasticsearch.util.settings.Settings;
|
||||||
|
|
|
@ -1,60 +0,0 @@
|
||||||
/*
|
|
||||||
* Licensed to Elastic Search and Shay Banon under one
|
|
||||||
* or more contributor license agreements. See the NOTICE file
|
|
||||||
* distributed with this work for additional information
|
|
||||||
* regarding copyright ownership. Elastic Search licenses this
|
|
||||||
* file to you under the Apache License, Version 2.0 (the
|
|
||||||
* "License"); you may not use this file except in compliance
|
|
||||||
* with the License. You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing,
|
|
||||||
* software distributed under the License is distributed on an
|
|
||||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
||||||
* KIND, either express or implied. See the License for the
|
|
||||||
* specific language governing permissions and limitations
|
|
||||||
* under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.elasticsearch.transport.netty;
|
|
||||||
|
|
||||||
import org.elasticsearch.util.concurrent.ConcurrentCollections;
|
|
||||||
import org.jboss.netty.channel.*;
|
|
||||||
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author kimchy (Shay Banon)
|
|
||||||
*/
|
|
||||||
@ChannelHandler.Sharable
|
|
||||||
public class OpenChannelsHandler implements ChannelUpstreamHandler {
|
|
||||||
|
|
||||||
private Set<Channel> openChannels = ConcurrentCollections.newConcurrentSet();
|
|
||||||
|
|
||||||
private final ChannelFutureListener remover = new ChannelFutureListener() {
|
|
||||||
public void operationComplete(ChannelFuture future) throws Exception {
|
|
||||||
openChannels.remove(future.getChannel());
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
@Override public void handleUpstream(ChannelHandlerContext ctx, ChannelEvent e) throws Exception {
|
|
||||||
if (e instanceof ChannelStateEvent) {
|
|
||||||
ChannelStateEvent evt = (ChannelStateEvent) e;
|
|
||||||
if (evt.getState() == ChannelState.OPEN) {
|
|
||||||
boolean added = openChannels.add(ctx.getChannel());
|
|
||||||
if (added) {
|
|
||||||
ctx.getChannel().getCloseFuture().addListener(remover);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ctx.sendUpstream(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void close() {
|
|
||||||
for (Channel channel : openChannels) {
|
|
||||||
channel.close().awaitUninterruptibly();
|
|
||||||
}
|
|
||||||
openChannels.clear();
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -17,7 +17,7 @@
|
||||||
* under the License.
|
* under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.elasticsearch.http.netty;
|
package org.elasticsearch.util.netty;
|
||||||
|
|
||||||
import org.elasticsearch.util.concurrent.ConcurrentCollections;
|
import org.elasticsearch.util.concurrent.ConcurrentCollections;
|
||||||
import org.jboss.netty.channel.*;
|
import org.jboss.netty.channel.*;
|
|
@ -27,6 +27,7 @@ import org.elasticsearch.transport.BindTransportException;
|
||||||
import org.elasticsearch.util.SizeValue;
|
import org.elasticsearch.util.SizeValue;
|
||||||
import org.elasticsearch.util.component.AbstractLifecycleComponent;
|
import org.elasticsearch.util.component.AbstractLifecycleComponent;
|
||||||
import org.elasticsearch.util.inject.Inject;
|
import org.elasticsearch.util.inject.Inject;
|
||||||
|
import org.elasticsearch.util.netty.OpenChannelsHandler;
|
||||||
import org.elasticsearch.util.network.NetworkService;
|
import org.elasticsearch.util.network.NetworkService;
|
||||||
import org.elasticsearch.util.network.NetworkUtils;
|
import org.elasticsearch.util.network.NetworkUtils;
|
||||||
import org.elasticsearch.util.settings.Settings;
|
import org.elasticsearch.util.settings.Settings;
|
||||||
|
|
|
@ -1,59 +0,0 @@
|
||||||
/*
|
|
||||||
* Licensed to Elastic Search and Shay Banon under one
|
|
||||||
* or more contributor license agreements. See the NOTICE file
|
|
||||||
* distributed with this work for additional information
|
|
||||||
* regarding copyright ownership. Elastic Search licenses this
|
|
||||||
* file to you under the Apache License, Version 2.0 (the
|
|
||||||
* "License"); you may not use this file except in compliance
|
|
||||||
* with the License. You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing,
|
|
||||||
* software distributed under the License is distributed on an
|
|
||||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
||||||
* KIND, either express or implied. See the License for the
|
|
||||||
* specific language governing permissions and limitations
|
|
||||||
* under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.elasticsearch.memcached.netty;
|
|
||||||
|
|
||||||
import org.elasticsearch.util.concurrent.ConcurrentCollections;
|
|
||||||
import org.jboss.netty.channel.*;
|
|
||||||
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author kimchy (shay.banon)
|
|
||||||
*/
|
|
||||||
@ChannelHandler.Sharable
|
|
||||||
public class OpenChannelsHandler implements ChannelUpstreamHandler {
|
|
||||||
|
|
||||||
private Set<Channel> openChannels = ConcurrentCollections.newConcurrentSet();
|
|
||||||
|
|
||||||
private final ChannelFutureListener remover = new ChannelFutureListener() {
|
|
||||||
public void operationComplete(ChannelFuture future) throws Exception {
|
|
||||||
openChannels.remove(future.getChannel());
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
@Override public void handleUpstream(ChannelHandlerContext ctx, ChannelEvent e) throws Exception {
|
|
||||||
if (e instanceof ChannelStateEvent) {
|
|
||||||
ChannelStateEvent evt = (ChannelStateEvent) e;
|
|
||||||
if (evt.getState() == ChannelState.OPEN) {
|
|
||||||
boolean added = openChannels.add(ctx.getChannel());
|
|
||||||
if (added) {
|
|
||||||
ctx.getChannel().getCloseFuture().addListener(remover);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ctx.sendUpstream(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void close() {
|
|
||||||
for (Channel channel : openChannels) {
|
|
||||||
channel.close().awaitUninterruptibly();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue