Bump version of P4Runtime to 1.0.0rc3 and P4 tools

Change-Id: I3082b4bd772d692830bd5af8e326a0fd5fb2f167
diff --git a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/P4RuntimeClientImpl.java b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/P4RuntimeClientImpl.java
index 54d284d..c291db4 100644
--- a/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/P4RuntimeClientImpl.java
+++ b/protocols/p4runtime/ctl/src/main/java/org/onosproject/p4runtime/ctl/P4RuntimeClientImpl.java
@@ -1053,7 +1053,15 @@
             WriteOperationType opType) {
 
         final List<Update> updateMsgs = entries.stream()
-                .map(MulticastGroupEntryCodec::encode)
+                .map(piEntry -> {
+                    try {
+                        return MulticastGroupEntryCodec.encode(piEntry);
+                    } catch (EncodeException e) {
+                        log.warn("Unable to encode PiMulticastGroupEntry: {}", e.getMessage());
+                        return null;
+                    }
+                })
+                .filter(Objects::nonNull)
                 .map(mcMsg -> PacketReplicationEngineEntry.newBuilder()
                         .setMulticastGroupEntry(mcMsg)
                         .build())
@@ -1117,13 +1125,22 @@
                               WriteOperationType opType,
                               String entryType) {
         // True if all entities were successfully written.
-        return writeAndReturnSuccessEntities(updates, writeEntities, opType,
-                                             entryType).size() == writeEntities.size();
+        return writeAndReturnSuccessEntities(updates, writeEntities, opType, entryType)
+                .size() == writeEntities.size();
     }
 
     private <T> List<T> writeAndReturnSuccessEntities(
             List<Update> updates, List<T> writeEntities,
             WriteOperationType opType, String entryType) {
+        if (updates.isEmpty()) {
+            return Collections.emptyList();
+        }
+        if (updates.size() != writeEntities.size()) {
+            log.error("Cannot perform {} operation, provided {} " +
+                              "update messages for {} {} - BUG?",
+                      opType, updates.size(), writeEntities.size(), entryType);
+            return Collections.emptyList();
+        }
         try {
             //noinspection ResultOfMethodCallIgnored
             blockingStub.write(writeRequest(updates));