private EventLoopGroup group;
private final InetAddress startupAddress;
private final Runnable readyRunnable;
- private final SettableFuture<Boolean> isOnlineFuture;
+ private final SettableFuture<Boolean> isOnlineFuture = SettableFuture.create();
private UdpChannelInitializer channelInitializer;
private ThreadConfiguration threadConfig;
private Class<? extends DatagramChannel> datagramChannelClass;
public UdpHandler(final InetAddress address, final int port, Runnable readyRunnable) {
this.port = port;
this.startupAddress = address;
- isOnlineFuture = SettableFuture.create();
this.readyRunnable = readyRunnable;
}
@Override
+ @SuppressWarnings("checkstyle:IllegalCatch")
public void run() {
final ChannelFuture f;
try {
} catch (InterruptedException e) {
LOG.error("Interrupted while binding port {}", port, e);
return;
+ } catch (Throwable throwable) {
+ // sync() re-throws exceptions declared as Throwable, so the compiler doesn't see them
+ LOG.error("Error while binding address {} and port {}", startupAddress, port, throwable);
+ throw throwable;
}
try {
this.port = isa.getPort();
LOG.debug("Address from udpHandler: {}", address);
- isOnlineFuture.set(true);
LOG.info("Switch listener started and ready to accept incoming udp connections on port: {}", port);
readyRunnable.run();
+ isOnlineFuture.set(true);
+
// This waits until this channel is closed, and rethrows the cause of the failure if this future failed.
f.channel().closeFuture().sync();
} catch (InterruptedException e) {
* @param threadConfiguration number of threads to be created, if not specified in threadConfig
*/
public void initiateEventLoopGroups(ThreadConfiguration threadConfiguration, boolean isEpollEnabled) {
-
if (isEpollEnabled) {
initiateEpollEventLoopGroups(threadConfiguration);
} else {