Migrate HashedWheelTimer to netty 4

- moved potentially time consuming task to
  shared ScheduledThreadPoolExecutor

Change-Id: I8e77041e0f84bd2bdfd6ae6704f4e39b81c721dd
diff --git a/providers/null/src/main/java/org/onosproject/provider/nil/NullFlowRuleProvider.java b/providers/null/src/main/java/org/onosproject/provider/nil/NullFlowRuleProvider.java
index 8e508d2..98cb848 100644
--- a/providers/null/src/main/java/org/onosproject/provider/nil/NullFlowRuleProvider.java
+++ b/providers/null/src/main/java/org/onosproject/provider/nil/NullFlowRuleProvider.java
@@ -16,9 +16,10 @@
 package org.onosproject.provider.nil;
 
 import com.google.common.collect.Sets;
-import org.jboss.netty.util.HashedWheelTimer;
-import org.jboss.netty.util.Timeout;
-import org.jboss.netty.util.TimerTask;
+
+import io.netty.util.Timeout;
+import io.netty.util.TimerTask;
+
 import org.onlab.util.Timer;
 import org.onosproject.core.ApplicationId;
 import org.onosproject.net.DeviceId;
@@ -52,7 +53,6 @@
 
     private FlowRuleProviderService providerService;
 
-    private HashedWheelTimer timer = Timer.getTimer();
     private Timeout timeout;
 
     /**
@@ -62,7 +62,7 @@
      */
     void start(FlowRuleProviderService providerService) {
         this.providerService = providerService;
-        timeout = timer.newTimeout(new StatisticTask(), 5, TimeUnit.SECONDS);
+        timeout = Timer.newTimeout(new StatisticTask(), 5, TimeUnit.SECONDS);
     }
 
     /**
@@ -126,7 +126,7 @@
                         flowTable.getOrDefault(devId, Collections.emptySet());
                 providerService.pushFlowMetrics(devId, entries);
             }
-            timeout = timer.newTimeout(to.getTask(), 5, TimeUnit.SECONDS);
+            timeout = to.timer().newTimeout(to.task(), 5, TimeUnit.SECONDS);
         }
     }
 }
diff --git a/providers/null/src/main/java/org/onosproject/provider/nil/NullPacketProvider.java b/providers/null/src/main/java/org/onosproject/provider/nil/NullPacketProvider.java
index 54b45e4..d69a0ac 100644
--- a/providers/null/src/main/java/org/onosproject/provider/nil/NullPacketProvider.java
+++ b/providers/null/src/main/java/org/onosproject/provider/nil/NullPacketProvider.java
@@ -15,9 +15,6 @@
  */
 package org.onosproject.provider.nil;
 
-import org.jboss.netty.util.HashedWheelTimer;
-import org.jboss.netty.util.Timeout;
-import org.jboss.netty.util.TimerTask;
 import org.onlab.packet.Ethernet;
 import org.onlab.packet.ICMP;
 import org.onlab.util.Timer;
@@ -34,6 +31,9 @@
 import org.onosproject.net.packet.PacketProviderService;
 import org.slf4j.Logger;
 
+import io.netty.util.Timeout;
+import io.netty.util.TimerTask;
+
 import java.nio.ByteBuffer;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
@@ -69,7 +69,6 @@
     private List<Device> devices;
     private int currentDevice = 0;
 
-    private HashedWheelTimer timer = Timer.getTimer();
     private Timeout timeout;
 
     /**
@@ -91,7 +90,7 @@
                 .collect(Collectors.toList());
 
         adjustRate(packetRate);
-        timeout = timer.newTimeout(new PacketDriverTask(), INITIAL_DELAY, SECONDS);
+        timeout = Timer.newTimeout(new PacketDriverTask(), INITIAL_DELAY, SECONDS);
     }
 
     /**
@@ -103,7 +102,7 @@
         boolean needsRestart = delay == 0 && packetRate > 0;
         delay = packetRate > 0 ? 1000 / packetRate : 0;
         if (needsRestart) {
-            timeout = timer.newTimeout(new PacketDriverTask(), 1, MILLISECONDS);
+            timeout = Timer.newTimeout(new PacketDriverTask(), 1, MILLISECONDS);
         }
         log.info("Settings: packetRate={}, delay={}", packetRate, delay);
     }
@@ -144,7 +143,7 @@
             if (!devices.isEmpty() && !to.isCancelled() && delay > 0) {
                 sendEvent(devices.get(Math.min(currentDevice, devices.size() - 1)));
                 currentDevice = (currentDevice + 1) % devices.size();
-                timeout = timer.newTimeout(to.getTask(), delay, TimeUnit.MILLISECONDS);
+                timeout = to.timer().newTimeout(to.task(), delay, TimeUnit.MILLISECONDS);
             }
         }