private void incrementalUpdate() throws KeeperException { final MapDifference<String, byte[]> difference = Maps.difference(entries.get(), remote, BYTE_ARRAY_EQUIVALENCE); if (difference.areEqual()) { return; } final Map<String, byte[]> newRemote = Maps.newHashMap(remote); final Map<String, byte[]> create = difference.entriesOnlyOnLeft(); final Map<String, ValueDifference<byte[]>> update = difference.entriesDiffering(); final Map<String, byte[]> delete = difference.entriesOnlyOnRight(); log.debug("create: {}", create.keySet()); log.debug("update: {}", update.keySet()); log.debug("delete: {}", delete.keySet()); for (final Map.Entry<String, byte[]> entry : create.entrySet()) { write(entry.getKey(), entry.getValue()); newRemote.put(entry.getKey(), entry.getValue()); } for (final Map.Entry<String, ValueDifference<byte[]>> entry : update.entrySet()) { write(entry.getKey(), entry.getValue().leftValue()); newRemote.put(entry.getKey(), entry.getValue().leftValue()); } for (final Map.Entry<String, byte[]> entry : delete.entrySet()) { delete(entry.getKey()); newRemote.remove(entry.getKey()); } remote = newRemote; }
private void incrementalUpdate() throws KeeperException { final MapDifference<String, byte[]> difference = Maps.difference(entries.get(), remote, BYTE_ARRAY_EQUIVALENCE); if (difference.areEqual()) { return; } final Map<String, byte[]> newRemote = Maps.newHashMap(remote); final Map<String, byte[]> create = difference.entriesOnlyOnLeft(); final Map<String, ValueDifference<byte[]>> update = difference.entriesDiffering(); final Map<String, byte[]> delete = difference.entriesOnlyOnRight(); log.debug("create: {}", create.keySet()); log.debug("update: {}", update.keySet()); log.debug("delete: {}", delete.keySet()); for (final Map.Entry<String, byte[]> entry : create.entrySet()) { write(entry.getKey(), entry.getValue()); newRemote.put(entry.getKey(), entry.getValue()); } for (final Map.Entry<String, ValueDifference<byte[]>> entry : update.entrySet()) { write(entry.getKey(), entry.getValue().leftValue()); newRemote.put(entry.getKey(), entry.getValue().leftValue()); } for (final Map.Entry<String, byte[]> entry : delete.entrySet()) { delete(entry.getKey()); newRemote.remove(entry.getKey()); } remote = newRemote; }