diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/ZKProcedureCoordinatorRpcs.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/ZKProcedureCoordinatorRpcs.java index 7b53a3a..6bdf36d 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/ZKProcedureCoordinatorRpcs.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/ZKProcedureCoordinatorRpcs.java @@ -123,13 +123,18 @@ public class ZKProcedureCoordinatorRpcs implements ProcedureCoordinatorRpcs { if (ZKUtil.watchAndCheckExists(zkProc.getWatcher(), znode)) { byte[] dataFromMember = ZKUtil.getData(zkProc.getWatcher(), znode); // ProtobufUtil.isPBMagicPrefix will check null - if (!ProtobufUtil.isPBMagicPrefix(dataFromMember)) { - throw new IOException( + if (dataFromMember != null && dataFromMember.length > 0) { + if (!ProtobufUtil.isPBMagicPrefix(dataFromMember)) { + throw new IOException( "Failed to get data from finished node or data is illegally formatted: " - + znode); - } else { - dataFromMember = Arrays.copyOfRange(dataFromMember, ProtobufUtil.lengthOfPBMagic(), - dataFromMember.length); + + znode); + } else { + dataFromMember = Arrays.copyOfRange(dataFromMember, ProtobufUtil.lengthOfPBMagic(), + dataFromMember.length); + coordinator.memberFinishedBarrier(procName, node, dataFromMember); + } + } + else { coordinator.memberFinishedBarrier(procName, node, dataFromMember); } } @@ -196,16 +201,21 @@ public class ZKProcedureCoordinatorRpcs implements ProcedureCoordinatorRpcs { try { byte[] dataFromMember = ZKUtil.getData(watcher, path); // ProtobufUtil.isPBMagicPrefix will check null - if (!ProtobufUtil.isPBMagicPrefix(dataFromMember)) { - ForeignException ee = new ForeignException(coordName, - "Failed to get data from finished node or data is illegally formatted:" - + path); - coordinator.abortProcedure(procName, ee); - } else { - dataFromMember = Arrays.copyOfRange(dataFromMember, ProtobufUtil.lengthOfPBMagic(), - dataFromMember.length); - LOG.debug("Finished data from procedure '" + procName - + "' member '" + member + "': " + new String(dataFromMember)); + if (dataFromMember != null && dataFromMember.length > 0) { + if (!ProtobufUtil.isPBMagicPrefix(dataFromMember)) { + ForeignException ee = new ForeignException(coordName, + "Failed to get data from finished node or data is illegally formatted:" + + path); + coordinator.abortProcedure(procName, ee); + } else { + dataFromMember = Arrays.copyOfRange(dataFromMember, ProtobufUtil.lengthOfPBMagic(), + dataFromMember.length); + LOG.debug("Finished data from procedure '" + procName + + "' member '" + member + "': " + new String(dataFromMember)); + coordinator.memberFinishedBarrier(procName, member, dataFromMember); + } + } + else { coordinator.memberFinishedBarrier(procName, member, dataFromMember); } } catch (KeeperException e) {