Add basic error handling to gRPC Device SB service

Change-Id: Idd19bd4e0d35d8eda06acb4cb631c5d4bcd21980
diff --git a/incubator/rpc-grpc/src/main/java/org/onosproject/incubator/rpc/grpc/GrpcRemoteServiceServer.java b/incubator/rpc-grpc/src/main/java/org/onosproject/incubator/rpc/grpc/GrpcRemoteServiceServer.java
index a44d539..099ed20 100644
--- a/incubator/rpc-grpc/src/main/java/org/onosproject/incubator/rpc/grpc/GrpcRemoteServiceServer.java
+++ b/incubator/rpc-grpc/src/main/java/org/onosproject/incubator/rpc/grpc/GrpcRemoteServiceServer.java
@@ -397,6 +397,16 @@
 
         @Override
         public void triggerProbe(DeviceId deviceId) {
+            try {
+                onTriggerProbe(deviceId);
+            } catch (Exception e) {
+                log.error("Exception caught handling triggerProbe({})",
+                          deviceId, e);
+                toDeviceProvider.onError(e);
+            }
+        }
+
+        private void onTriggerProbe(DeviceId deviceId) {
             log.trace("triggerProbe({})", deviceId);
             DeviceProviderMsg.Builder msgBuilder = DeviceProviderMsg.newBuilder();
             msgBuilder.setTriggerProbe(msgBuilder.getTriggerProbeBuilder()
@@ -404,11 +414,20 @@
                                        .build());
             DeviceProviderMsg triggerProbeMsg = msgBuilder.build();
             toDeviceProvider.onNext(triggerProbeMsg);
-            // TODO Catch Exceptions and call onError()
         }
 
         @Override
         public void roleChanged(DeviceId deviceId, MastershipRole newRole) {
+            try {
+                onRoleChanged(deviceId, newRole);
+            } catch (Exception e) {
+                log.error("Exception caught handling onRoleChanged({}, {})",
+                          deviceId, newRole, e);
+                toDeviceProvider.onError(e);
+            }
+        }
+
+        private void onRoleChanged(DeviceId deviceId, MastershipRole newRole) {
             log.trace("roleChanged({}, {})", deviceId, newRole);
             DeviceProviderMsg.Builder msgBuilder = DeviceProviderMsg.newBuilder();
             msgBuilder.setRoleChanged(msgBuilder.getRoleChangedBuilder()
@@ -416,11 +435,22 @@
                                           .setNewRole(translate(newRole))
                                           .build());
             toDeviceProvider.onNext(msgBuilder.build());
-            // TODO Catch Exceptions and call onError()
         }
 
         @Override
         public boolean isReachable(DeviceId deviceId) {
+            try {
+                return onIsReachable(deviceId);
+            } catch (Exception e) {
+                log.error("Exception caught handling onIsReachable({})",
+                          deviceId, e);
+                toDeviceProvider.onError(e);
+                return false;
+            }
+        }
+
+        private boolean onIsReachable(DeviceId deviceId) {
+
             log.trace("isReachable({})", deviceId);
             CompletableFuture<Boolean> result = new CompletableFuture<>();
             final int xid = xidPool.incrementAndGet();
@@ -450,10 +480,10 @@
                 log.warn("isReachable({}) Timed out", deviceId, e);
             } catch (ExecutionException e) {
                 log.error("isReachable({}) Execution failed", deviceId, e);
-                // close session?
+                // close session
+                toDeviceProvider.onError(e);
             }
             return false;
-            // TODO Catch Exceptions and call onError()
         }
 
         @Override
@@ -464,8 +494,9 @@
         @Override
         public void changePortState(DeviceId deviceId, PortNumber portNumber,
                                     boolean enable) {
-            // TODO if required
-
+            // TODO Implement if required
+            log.error("changePortState not supported yet");
+            toDeviceProvider.onError(new UnsupportedOperationException("not implemented yet"));
         }
 
     }