diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessageFactory.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessageFactory.java index 85dba405146a3..7ccc0ef4a76dd 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessageFactory.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessageFactory.java @@ -294,9 +294,13 @@ import org.apache.ignite.internal.processors.query.schema.message.SchemaOperationStatusMessage; import org.apache.ignite.internal.processors.query.schema.message.SchemaOperationStatusMessageSerializer; import org.apache.ignite.internal.processors.query.stat.messages.StatisticsColumnData; +import org.apache.ignite.internal.processors.query.stat.messages.StatisticsColumnDataSerializer; import org.apache.ignite.internal.processors.query.stat.messages.StatisticsDecimalMessage; +import org.apache.ignite.internal.processors.query.stat.messages.StatisticsDecimalMessageSerializer; import org.apache.ignite.internal.processors.query.stat.messages.StatisticsKeyMessage; +import org.apache.ignite.internal.processors.query.stat.messages.StatisticsKeyMessageSerializer; import org.apache.ignite.internal.processors.query.stat.messages.StatisticsObjectData; +import org.apache.ignite.internal.processors.query.stat.messages.StatisticsObjectDataSerializer; import org.apache.ignite.internal.processors.query.stat.messages.StatisticsRequest; import org.apache.ignite.internal.processors.query.stat.messages.StatisticsRequestSerializer; import org.apache.ignite.internal.processors.query.stat.messages.StatisticsResponse; @@ -499,10 +503,10 @@ public class GridIoMessageFactory implements MessageFactoryProvider { new IncrementalSnapshotAwareMessageSerializer()); // Index statistics. - factory.register(StatisticsKeyMessage.TYPE_CODE, StatisticsKeyMessage::new); - factory.register(StatisticsDecimalMessage.TYPE_CODE, StatisticsDecimalMessage::new); - factory.register(StatisticsObjectData.TYPE_CODE, StatisticsObjectData::new); - factory.register(StatisticsColumnData.TYPE_CODE, StatisticsColumnData::new); + factory.register(StatisticsKeyMessage.TYPE_CODE, StatisticsKeyMessage::new, new StatisticsKeyMessageSerializer()); + factory.register(StatisticsDecimalMessage.TYPE_CODE, StatisticsDecimalMessage::new, new StatisticsDecimalMessageSerializer()); + factory.register(StatisticsObjectData.TYPE_CODE, StatisticsObjectData::new, new StatisticsObjectDataSerializer()); + factory.register(StatisticsColumnData.TYPE_CODE, StatisticsColumnData::new, new StatisticsColumnDataSerializer()); factory.register(StatisticsRequest.TYPE_CODE, StatisticsRequest::new, new StatisticsRequestSerializer()); factory.register(StatisticsResponse.TYPE_CODE, StatisticsResponse::new, new StatisticsResponseSerializer()); diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/stat/messages/StatisticsColumnData.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/stat/messages/StatisticsColumnData.java index 2fb728eb6c981..5ef7339a70872 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/stat/messages/StatisticsColumnData.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/stat/messages/StatisticsColumnData.java @@ -18,10 +18,8 @@ package org.apache.ignite.internal.processors.query.stat.messages; import java.io.Serializable; -import java.nio.ByteBuffer; +import org.apache.ignite.internal.Order; import org.apache.ignite.plugin.extensions.communication.Message; -import org.apache.ignite.plugin.extensions.communication.MessageReader; -import org.apache.ignite.plugin.extensions.communication.MessageWriter; /** * Statistics by column (or by set of columns, if they collected together) @@ -34,31 +32,40 @@ public class StatisticsColumnData implements Message, Serializable { public static final short TYPE_CODE = 186; /** Min value in column. */ - private StatisticsDecimalMessage min; + @Order(0) + StatisticsDecimalMessage min; /** Max value in column. */ - private StatisticsDecimalMessage max; + @Order(1) + StatisticsDecimalMessage max; /** Number of null values in column. */ - private long nulls; + @Order(2) + long nulls; /** Number of distinct values in column (except nulls). */ - private long distinct; + @Order(3) + long distinct; /** Total vals in column. */ - private long total; + @Order(4) + long total; /** Average size, for variable size values (in bytes). */ - private int size; + @Order(5) + int size; /** Raw data. */ - private byte[] rawData; + @Order(6) + byte[] rawData; /** Version. */ - private long ver; + @Order(7) + long ver; /** Created at time, milliseconds. */ - private long createdAt; + @Order(8) + long createdAt; /** * Default constructor. @@ -165,159 +172,6 @@ public long createdAt() { return createdAt; } - /** {@inheritDoc} */ - @Override public boolean writeTo(ByteBuffer buf, MessageWriter writer) { - writer.setBuffer(buf); - - if (!writer.isHeaderWritten()) { - if (!writer.writeHeader(directType())) - return false; - - writer.onHeaderWritten(); - } - - switch (writer.state()) { - case 0: - if (!writer.writeLong(createdAt)) - return false; - - writer.incrementState(); - - case 1: - if (!writer.writeLong(distinct)) - return false; - - writer.incrementState(); - - case 2: - if (!writer.writeMessage(max)) - return false; - - writer.incrementState(); - - case 3: - if (!writer.writeMessage(min)) - return false; - - writer.incrementState(); - - case 4: - if (!writer.writeLong(nulls)) - return false; - - writer.incrementState(); - - case 5: - if (!writer.writeByteArray(rawData)) - return false; - - writer.incrementState(); - - case 6: - if (!writer.writeInt(size)) - return false; - - writer.incrementState(); - - case 7: - if (!writer.writeLong(total)) - return false; - - writer.incrementState(); - - case 8: - if (!writer.writeLong(ver)) - return false; - - writer.incrementState(); - - } - - return true; - } - - /** {@inheritDoc} */ - @Override public boolean readFrom(ByteBuffer buf, MessageReader reader) { - reader.setBuffer(buf); - - switch (reader.state()) { - case 0: - createdAt = reader.readLong(); - - if (!reader.isLastRead()) - return false; - - reader.incrementState(); - - case 1: - distinct = reader.readLong(); - - if (!reader.isLastRead()) - return false; - - reader.incrementState(); - - case 2: - max = reader.readMessage(); - - if (!reader.isLastRead()) - return false; - - reader.incrementState(); - - case 3: - min = reader.readMessage(); - - if (!reader.isLastRead()) - return false; - - reader.incrementState(); - - case 4: - nulls = reader.readLong(); - - if (!reader.isLastRead()) - return false; - - reader.incrementState(); - - case 5: - rawData = reader.readByteArray(); - - if (!reader.isLastRead()) - return false; - - reader.incrementState(); - - case 6: - size = reader.readInt(); - - if (!reader.isLastRead()) - return false; - - reader.incrementState(); - - case 7: - total = reader.readLong(); - - if (!reader.isLastRead()) - return false; - - reader.incrementState(); - - case 8: - ver = reader.readLong(); - - if (!reader.isLastRead()) - return false; - - reader.incrementState(); - - } - - return true; - } - /** {@inheritDoc} */ @Override public short directType() { return TYPE_CODE; diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/stat/messages/StatisticsDecimalMessage.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/stat/messages/StatisticsDecimalMessage.java index 23ee3d6fa225b..3ed48fc1d194d 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/stat/messages/StatisticsDecimalMessage.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/stat/messages/StatisticsDecimalMessage.java @@ -20,11 +20,9 @@ import java.io.Serializable; import java.math.BigDecimal; import java.math.BigInteger; -import java.nio.ByteBuffer; import java.util.Objects; +import org.apache.ignite.internal.Order; import org.apache.ignite.plugin.extensions.communication.Message; -import org.apache.ignite.plugin.extensions.communication.MessageReader; -import org.apache.ignite.plugin.extensions.communication.MessageWriter; /** * H2 Decimal. @@ -37,10 +35,12 @@ public class StatisticsDecimalMessage implements Message, Serializable { public static final short TYPE_CODE = 184; /** */ - private int scale; + @Order(0) + int scale; /** */ - private byte[] b; + @Order(1) + byte[] b; /** * @@ -73,59 +73,6 @@ public BigDecimal value() { return new BigDecimal(new BigInteger(b), scale); } - /** {@inheritDoc} */ - @Override public boolean writeTo(ByteBuffer buf, MessageWriter writer) { - writer.setBuffer(buf); - - if (!writer.isHeaderWritten()) { - if (!writer.writeHeader(directType())) - return false; - - writer.onHeaderWritten(); - } - - switch (writer.state()) { - case 0: - if (!writer.writeByteArray(b)) - return false; - - writer.incrementState(); - - case 1: - if (!writer.writeInt(scale)) - return false; - - writer.incrementState(); - } - - return true; - } - - /** {@inheritDoc} */ - @Override public boolean readFrom(ByteBuffer buf, MessageReader reader) { - reader.setBuffer(buf); - - switch (reader.state()) { - case 0: - b = reader.readByteArray(); - - if (!reader.isLastRead()) - return false; - - reader.incrementState(); - - case 1: - scale = reader.readInt(); - - if (!reader.isLastRead()) - return false; - - reader.incrementState(); - } - - return true; - } - /** {@inheritDoc} */ @Override public short directType() { return TYPE_CODE; diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/stat/messages/StatisticsKeyMessage.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/stat/messages/StatisticsKeyMessage.java index 57c7a12a43a46..17e5eb44ad3fa 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/stat/messages/StatisticsKeyMessage.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/stat/messages/StatisticsKeyMessage.java @@ -18,15 +18,11 @@ package org.apache.ignite.internal.processors.query.stat.messages; import java.io.Serializable; -import java.nio.ByteBuffer; import java.util.List; import java.util.Objects; -import org.apache.ignite.internal.GridDirectCollection; +import org.apache.ignite.internal.Order; import org.apache.ignite.internal.util.typedef.internal.S; import org.apache.ignite.plugin.extensions.communication.Message; -import org.apache.ignite.plugin.extensions.communication.MessageCollectionItemType; -import org.apache.ignite.plugin.extensions.communication.MessageReader; -import org.apache.ignite.plugin.extensions.communication.MessageWriter; /** * Key, describing the object of statistics. For example: table with some columns. @@ -39,14 +35,16 @@ public class StatisticsKeyMessage implements Message, Serializable { public static final short TYPE_CODE = 183; /** Object schema. */ - private String schema; + @Order(0) + String schema; /** Object name. */ - private String obj; + @Order(1) + String obj; /** Optional list of columns to collect statistics by. */ - @GridDirectCollection(String.class) - private List colNames; + @Order(2) + List colNames; /** * Empty constructor. @@ -89,75 +87,6 @@ public List colNames() { return colNames; } - /** {@inheritDoc} */ - @Override public boolean writeTo(ByteBuffer buf, MessageWriter writer) { - writer.setBuffer(buf); - - if (!writer.isHeaderWritten()) { - if (!writer.writeHeader(directType())) - return false; - - writer.onHeaderWritten(); - } - - switch (writer.state()) { - case 0: - if (!writer.writeCollection(colNames, MessageCollectionItemType.STRING)) - return false; - - writer.incrementState(); - - case 1: - if (!writer.writeString(obj)) - return false; - - writer.incrementState(); - - case 2: - if (!writer.writeString(schema)) - return false; - - writer.incrementState(); - - } - - return true; - } - - /** {@inheritDoc} */ - @Override public boolean readFrom(ByteBuffer buf, MessageReader reader) { - reader.setBuffer(buf); - - switch (reader.state()) { - case 0: - colNames = reader.readCollection(MessageCollectionItemType.STRING); - - if (!reader.isLastRead()) - return false; - - reader.incrementState(); - - case 1: - obj = reader.readString(); - - if (!reader.isLastRead()) - return false; - - reader.incrementState(); - - case 2: - schema = reader.readString(); - - if (!reader.isLastRead()) - return false; - - reader.incrementState(); - - } - - return true; - } - /** {@inheritDoc} */ @Override public short directType() { return TYPE_CODE; diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/stat/messages/StatisticsObjectData.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/stat/messages/StatisticsObjectData.java index 0e77bd4b83eb3..f7118b53cab29 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/stat/messages/StatisticsObjectData.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/stat/messages/StatisticsObjectData.java @@ -18,14 +18,10 @@ package org.apache.ignite.internal.processors.query.stat.messages; import java.io.Serializable; -import java.nio.ByteBuffer; import java.util.Map; -import org.apache.ignite.internal.GridDirectMap; +import org.apache.ignite.internal.Order; import org.apache.ignite.internal.processors.query.stat.StatisticsType; import org.apache.ignite.plugin.extensions.communication.Message; -import org.apache.ignite.plugin.extensions.communication.MessageCollectionItemType; -import org.apache.ignite.plugin.extensions.communication.MessageReader; -import org.apache.ignite.plugin.extensions.communication.MessageWriter; /** * Statistics for some object (index or table) in database. @@ -38,23 +34,28 @@ public class StatisticsObjectData implements Message, Serializable { public static final short TYPE_CODE = 185; /** Statistics key. */ - private StatisticsKeyMessage key; + @Order(0) + StatisticsKeyMessage key; /** Total row count in current object. */ - private long rowsCnt; + @Order(1) + long rowsCnt; /** Type of statistics. */ - private StatisticsType type; + @Order(2) + StatisticsType type; /** Partition id if statistics was collected by partition. */ - private int partId; + @Order(3) + int partId; /** Update counter if statistics was collected by partition. */ - private long updCnt; + @Order(4) + long updCnt; /** Columns key to statistic map. */ - @GridDirectMap(keyType = String.class, valueType = StatisticsColumnData.class) - private Map data; + @Order(5) + Map data; /** * Constructor. @@ -131,121 +132,6 @@ public StatisticsObjectData() { // No-op. } - /** {@inheritDoc} */ - @Override public boolean writeTo(ByteBuffer buf, MessageWriter writer) { - writer.setBuffer(buf); - - if (!writer.isHeaderWritten()) { - if (!writer.writeHeader(directType())) - return false; - - writer.onHeaderWritten(); - } - - switch (writer.state()) { - case 0: - if (!writer.writeMap(data, MessageCollectionItemType.STRING, MessageCollectionItemType.MSG)) - return false; - - writer.incrementState(); - - case 1: - if (!writer.writeMessage(key)) - return false; - - writer.incrementState(); - - case 2: - if (!writer.writeInt(partId)) - return false; - - writer.incrementState(); - - case 3: - if (!writer.writeLong(rowsCnt)) - return false; - - writer.incrementState(); - - case 4: - if (!writer.writeByte(type != null ? (byte)type.ordinal() : -1)) - return false; - - writer.incrementState(); - - case 5: - if (!writer.writeLong(updCnt)) - return false; - - writer.incrementState(); - - } - - return true; - } - - /** {@inheritDoc} */ - @Override public boolean readFrom(ByteBuffer buf, MessageReader reader) { - reader.setBuffer(buf); - - switch (reader.state()) { - case 0: - data = reader.readMap(MessageCollectionItemType.STRING, MessageCollectionItemType.MSG, false); - - if (!reader.isLastRead()) - return false; - - reader.incrementState(); - - case 1: - key = reader.readMessage(); - - if (!reader.isLastRead()) - return false; - - reader.incrementState(); - - case 2: - partId = reader.readInt(); - - if (!reader.isLastRead()) - return false; - - reader.incrementState(); - - case 3: - rowsCnt = reader.readLong(); - - if (!reader.isLastRead()) - return false; - - reader.incrementState(); - - case 4: - byte typeOrd; - - typeOrd = reader.readByte(); - - if (!reader.isLastRead()) - return false; - - type = StatisticsType.fromOrdinal(typeOrd); - - reader.incrementState(); - - case 5: - updCnt = reader.readLong(); - - if (!reader.isLastRead()) - return false; - - reader.incrementState(); - - } - - return true; - } - /** {@inheritDoc} */ @Override public short directType() { return TYPE_CODE;