Repository: incubator-ignite Updated Branches: refs/heads/ignite-143 d8f648393 -> a9487e50f
# more optimal partition map serialization Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/0542134d Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/0542134d Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/0542134d Branch: refs/heads/ignite-143 Commit: 0542134d9a6569e07b1c2dd35917bd9d09d571ea Parents: 2df53b6 Author: sboikov <semen.boi...@inria.fr> Authored: Fri Feb 13 19:27:10 2015 +0300 Committer: sboikov <semen.boi...@inria.fr> Committed: Fri Feb 13 19:27:10 2015 +0300 ---------------------------------------------------------------------- .../dht/preloader/GridDhtPartitionFullMap.java | 2 +- .../dht/preloader/GridDhtPartitionMap.java | 98 +++++++++++++++++++- 2 files changed, 94 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/0542134d/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionFullMap.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionFullMap.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionFullMap.java index c75cbdd..2a513ca 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionFullMap.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionFullMap.java @@ -75,7 +75,7 @@ public class GridDhtPartitionFullMap extends HashMap<UUID, GridDhtPartitionMap> GridDhtPartitionMap part = e.getValue(); if (onlyActive) - put(e.getKey(), new GridDhtPartitionMap(part.nodeId(), part.updateSequence(), part, true)); + put(e.getKey(), new GridDhtPartitionMap(part.nodeId(), part.updateSequence(), part.map(), true)); else put(e.getKey(), part); } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/0542134d/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionMap.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionMap.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionMap.java index 8e6be93..9108ee4 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionMap.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionMap.java @@ -26,8 +26,7 @@ import java.util.*; /** * Partition map. */ -public class GridDhtPartitionMap extends HashMap<Integer, GridDhtPartitionState> - implements Comparable<GridDhtPartitionMap>, Externalizable { +public class GridDhtPartitionMap implements Comparable<GridDhtPartitionMap>, Externalizable { /** */ private static final long serialVersionUID = 0L; @@ -37,6 +36,9 @@ public class GridDhtPartitionMap extends HashMap<Integer, GridDhtPartitionState> /** Update sequence number. */ private long updateSeq; + /** */ + private Map<Integer, GridDhtPartitionState> map; + /** * @param nodeId Node ID. * @param updateSeq Update sequence number. @@ -47,6 +49,8 @@ public class GridDhtPartitionMap extends HashMap<Integer, GridDhtPartitionState> this.nodeId = nodeId; this.updateSeq = updateSeq; + + map = new HashMap<>(); } /** @@ -62,11 +66,13 @@ public class GridDhtPartitionMap extends HashMap<Integer, GridDhtPartitionState> this.nodeId = nodeId; this.updateSeq = updateSeq; + map = U.newHashMap(m.size()); + for (Map.Entry<Integer, GridDhtPartitionState> e : m.entrySet()) { GridDhtPartitionState state = e.getValue(); if (!onlyActive || state.active()) - put(e.getKey(), state); + map.put(e.getKey(), state); } } @@ -78,6 +84,58 @@ public class GridDhtPartitionMap extends HashMap<Integer, GridDhtPartitionState> } /** + * @param part Partition. + * @param state Partition state. + */ + public void put(Integer part, GridDhtPartitionState state) { + map.put(part, state); + } + + /** + * @param part Partition. + * @return Partition state. + */ + public GridDhtPartitionState get(Integer part) { + return map.get(part); + } + + /** + * @param part Partition. + * @return {@code True} if contains given partition. + */ + public boolean containsKey(Integer part) { + return map.containsKey(part); + } + + /** + * @return Entries. + */ + public Set<Map.Entry<Integer, GridDhtPartitionState>> entrySet() { + return map.entrySet(); + } + + /** + * @return Map size. + */ + public int size() { + return map.size(); + } + + /** + * @return Partitions. + */ + public Set<Integer> keySet() { + return map.keySet(); + } + + /** + * @return Underlying map. + */ + public Map<Integer, GridDhtPartitionState> map() { + return map; + } + + /** * @return Node ID. */ public UUID nodeId() { @@ -118,7 +176,26 @@ public class GridDhtPartitionMap extends HashMap<Integer, GridDhtPartitionState> out.writeLong(updateSeq); - U.writeMap(out, this); + int size = map.size(); + + out.writeInt(size); + + int i = 0; + + for (Map.Entry<Integer, GridDhtPartitionState> entry : map.entrySet()) { + int ordinal = entry.getValue().ordinal(); + + assert ordinal == (ordinal & 0x3); + assert entry.getKey() == (entry.getKey() & 0x3FFF); + + int coded = (ordinal << 14) | entry.getKey(); + + out.writeShort((short)coded); + + i++; + } + + assert i == size; } /** {@inheritDoc} */ @@ -127,7 +204,18 @@ public class GridDhtPartitionMap extends HashMap<Integer, GridDhtPartitionState> updateSeq = in.readLong(); - putAll(U.<Integer, GridDhtPartitionState>readMap(in)); + int size = in.readInt(); + + map = U.newHashMap(size); + + for (int i = 0; i < size; i++) { + int entry = in.readShort() & 0xFFFF; + + int part = entry & 0x3FFF; + int ordinal = entry >> 14; + + map.put(part, GridDhtPartitionState.fromOrdinal(ordinal)); + } } /** {@inheritDoc} */