+
+ /**
+ * Initiate event loop groups
+ * @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 {
+ initiateNioEventLoopGroups(threadConfiguration);
+ }
+ }
+
+ /**
+ * Initiate Nio event loop groups
+ * @param threadConfiguration number of threads to be created, if not specified in threadConfig
+ */
+ public void initiateNioEventLoopGroups(ThreadConfiguration threadConfiguration) {
+ datagramChannelClass = NioDatagramChannel.class;
+ if (threadConfiguration != null) {
+ group = new NioEventLoopGroup(threadConfiguration.getWorkerThreadCount());
+ } else {
+ group = new NioEventLoopGroup();
+ }
+ }
+
+ /**
+ * Initiate Epoll event loop groups with Nio as fall back
+ * @param threadConfiguration
+ */
+ protected void initiateEpollEventLoopGroups(ThreadConfiguration threadConfiguration) {
+ try {
+ datagramChannelClass = EpollDatagramChannel.class;
+ if (threadConfiguration != null) {
+ group = new EpollEventLoopGroup(threadConfiguration.getWorkerThreadCount());
+ } else {
+ group = new EpollEventLoopGroup();
+ }
+ return;
+ } catch (Throwable ex) {
+ LOGGER.debug("Epoll initiation failed");
+ }
+
+ //Fallback mechanism
+ initiateNioEventLoopGroups(threadConfiguration);
+ }