You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sb...@apache.org on 2015/06/24 13:01:17 UTC
[1/2] incubator-ignite git commit: ignite-950: performance
improvements
Repository: incubator-ignite
Updated Branches:
refs/heads/ignite-950 f632f1d95 -> 6bf4fa755
ignite-950: performance improvements
Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/0f97c471
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/0f97c471
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/0f97c471
Branch: refs/heads/ignite-950
Commit: 0f97c4714d912013641255c088494646dc79dfd8
Parents: f632f1d
Author: Denis Magda <dm...@gridgain.com>
Authored: Wed Jun 24 13:11:26 2015 +0300
Committer: Denis Magda <dm...@gridgain.com>
Committed: Wed Jun 24 13:11:26 2015 +0300
----------------------------------------------------------------------
.../optimized/OptimizedObjectInputStream.java | 84 ++++++++++++++------
.../OptimizedObjectInputStreamExt.java | 15 ++--
.../optimized/OptimizedObjectOutputStream.java | 64 +++++++++++----
.../OptimizedObjectOutputStreamExt.java | 59 +++++++++-----
4 files changed, 155 insertions(+), 67 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/0f97c471/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectInputStream.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectInputStream.java b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectInputStream.java
index 2caf0cd..57f1a53 100644
--- a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectInputStream.java
+++ b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectInputStream.java
@@ -72,6 +72,9 @@ public class OptimizedObjectInputStream extends ObjectInputStream implements Opt
private Class<?> curCls;
/** */
+ private boolean curHasFooter;
+
+ /** */
private final HandleTable handles = new HandleTable(10);
/** */
@@ -154,6 +157,7 @@ public class OptimizedObjectInputStream extends ObjectInputStream implements Opt
curObj = null;
curFields = null;
+ curHasFooter = false;
marshalAwareValues = null;
}
@@ -161,6 +165,7 @@ public class OptimizedObjectInputStream extends ObjectInputStream implements Opt
@Override public Object readObjectOverride() throws ClassNotFoundException, IOException {
curObj = null;
curFields = null;
+ curHasFooter = false;
byte ref = in.readByte();
@@ -372,18 +377,22 @@ public class OptimizedObjectInputStream extends ObjectInputStream implements Opt
*
* @param obj Object.
* @param fieldOffs Field offsets.
+ * @param hasFooter Whether footer is included in the marshalled form.
* @throws ClassNotFoundException If class not found.
* @throws IOException In case of error.
*/
@SuppressWarnings("ForLoopReplaceableByForEach")
- void readFields(Object obj, OptimizedClassDescriptor.ClassFields fieldOffs) throws ClassNotFoundException,
+ void readFields(Object obj, OptimizedClassDescriptor.ClassFields fieldOffs, boolean hasFooter)
+ throws ClassNotFoundException,
IOException {
+
for (int i = 0; i < fieldOffs.size(); i++) {
OptimizedClassDescriptor.FieldInfo t = fieldOffs.get(i);
switch ((t.type())) {
case BYTE:
- readFieldType();
+ if (hasFooter)
+ readFieldType();
byte resByte = readByte();
@@ -393,7 +402,8 @@ public class OptimizedObjectInputStream extends ObjectInputStream implements Opt
break;
case SHORT:
- readFieldType();
+ if (hasFooter)
+ readFieldType();
short resShort = readShort();
@@ -403,7 +413,8 @@ public class OptimizedObjectInputStream extends ObjectInputStream implements Opt
break;
case INT:
- readFieldType();
+ if (hasFooter)
+ readFieldType();
int resInt = readInt();
@@ -413,7 +424,8 @@ public class OptimizedObjectInputStream extends ObjectInputStream implements Opt
break;
case LONG:
- readFieldType();
+ if (hasFooter)
+ readFieldType();
long resLong = readLong();
@@ -423,7 +435,8 @@ public class OptimizedObjectInputStream extends ObjectInputStream implements Opt
break;
case FLOAT:
- readFieldType();
+ if (hasFooter)
+ readFieldType();
float resFloat = readFloat();
@@ -433,7 +446,8 @@ public class OptimizedObjectInputStream extends ObjectInputStream implements Opt
break;
case DOUBLE:
- readFieldType();
+ if (hasFooter)
+ readFieldType();
double resDouble = readDouble();
@@ -443,7 +457,8 @@ public class OptimizedObjectInputStream extends ObjectInputStream implements Opt
break;
case CHAR:
- readFieldType();
+ if (hasFooter)
+ readFieldType();
char resChar = readChar();
@@ -453,7 +468,8 @@ public class OptimizedObjectInputStream extends ObjectInputStream implements Opt
break;
case BOOLEAN:
- readFieldType();
+ if (hasFooter)
+ readFieldType();
boolean resBoolean = readBoolean();
@@ -656,7 +672,7 @@ public class OptimizedObjectInputStream extends ObjectInputStream implements Opt
if (marshalAwareValues.empty())
marshalAwareValues = null;
- skipFooter(obj.getClass());
+ skipFooter();
return obj;
}
@@ -686,12 +702,15 @@ public class OptimizedObjectInputStream extends ObjectInputStream implements Opt
int handle = handles.assign(obj);
+ boolean hasFooter = hasFooter(obj.getClass());
+
for (int i = 0; i < mtds.size(); i++) {
Method mtd = mtds.get(i);
if (mtd != null) {
curObj = obj;
curFields = fields.fields(i);
+ curHasFooter = hasFooter;
try {
mtd.invoke(obj, this);
@@ -701,7 +720,7 @@ public class OptimizedObjectInputStream extends ObjectInputStream implements Opt
}
}
else
- readFields(obj, fields.fields(i));
+ readFields(obj, fields.fields(i), hasFooter);
}
if (readResolveMtd != null) {
@@ -715,7 +734,8 @@ public class OptimizedObjectInputStream extends ObjectInputStream implements Opt
}
}
- skipFooter(cls);
+ if (hasFooter)
+ skipFooter();
return obj;
}
@@ -1105,7 +1125,7 @@ public class OptimizedObjectInputStream extends ObjectInputStream implements Opt
if (curObj == null)
throw new NotActiveException("Not in readObject() call.");
- readFields(curObj, curFields);
+ readFields(curObj, curFields, curHasFooter);
}
/** {@inheritDoc} */
@@ -1248,12 +1268,22 @@ public class OptimizedObjectInputStream extends ObjectInputStream implements Opt
}
/**
- * Skips object footer from the underlying stream.
+ * Checks whether objects of the {@code cls} have footer.
*
* @param cls Class.
+ * @return {@code true} if has.
+ * @throws IOException In case of error.
+ */
+ protected boolean hasFooter(Class<?> cls) throws IOException {
+ return false;
+ }
+
+ /**
+ * Skips object footer from the underlying stream.
+ *
* @throws IOException In case of error.
*/
- protected void skipFooter(Class<?> cls) throws IOException {
+ protected void skipFooter() throws IOException {
// No-op
}
@@ -1563,56 +1593,64 @@ public class OptimizedObjectInputStream extends ObjectInputStream implements Opt
switch (t.type()) {
case BYTE:
- in.readFieldType();
+ if (in.curHasFooter)
+ in.readFieldType();
obj = in.readByte();
break;
case SHORT:
- in.readFieldType();
+ if (in.curHasFooter)
+ in.readFieldType();
obj = in.readShort();
break;
case INT:
- in.readFieldType();
+ if (in.curHasFooter)
+ in.readFieldType();
obj = in.readInt();
break;
case LONG:
- in.readFieldType();
+ if (in.curHasFooter)
+ in.readFieldType();
obj = in.readLong();
break;
case FLOAT:
- in.readFieldType();
+ if (in.curHasFooter)
+ in.readFieldType();
obj = in.readFloat();
break;
case DOUBLE:
- in.readFieldType();
+ if (in.curHasFooter)
+ in.readFieldType();
obj = in.readDouble();
break;
case CHAR:
- in.readFieldType();
+ if (in.curHasFooter)
+ in.readFieldType();
obj = in.readChar();
break;
case BOOLEAN:
- in.readFieldType();
+ if (in.curHasFooter)
+ in.readFieldType();
obj = in.readBoolean();
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/0f97c471/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectInputStreamExt.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectInputStreamExt.java b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectInputStreamExt.java
index 622c19f..226ea20 100644
--- a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectInputStreamExt.java
+++ b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectInputStreamExt.java
@@ -33,13 +33,16 @@ public class OptimizedObjectInputStreamExt extends OptimizedObjectInputStream {
}
/** {@inheritDoc} */
- @Override protected void skipFooter(Class<?> cls) throws IOException {
- if (fieldsIndexingSupported(cls, metaHandler, ctx, clsMap, mapper)) {
- short footerLen = in.readShort();
+ @Override protected boolean hasFooter(Class<?> cls) throws IOException {
+ return fieldsIndexingSupported(cls, metaHandler, ctx, clsMap, mapper);
+ }
+
+ /** {@inheritDoc} */
+ @Override protected void skipFooter() throws IOException {
+ short footerLen = in.readShort();
- if (footerLen != EMPTY_FOOTER)
- in.skipBytes(footerLen - 2);
- }
+ if (footerLen != EMPTY_FOOTER)
+ in.skipBytes(footerLen - 2);
}
/** {@inheritDoc} */
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/0f97c471/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectOutputStream.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectOutputStream.java b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectOutputStream.java
index c8b24cc..2bb71e9 100644
--- a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectOutputStream.java
+++ b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectOutputStream.java
@@ -548,7 +548,9 @@ public class OptimizedObjectOutputStream extends ObjectOutputStream implements O
switch (t.type()) {
case BYTE:
if (t.field() != null) {
- writeFieldType(BYTE);
+ if (footer != null)
+ writeFieldType(BYTE);
+
writeByte(getByte(obj, t.offset()));
}
@@ -556,7 +558,9 @@ public class OptimizedObjectOutputStream extends ObjectOutputStream implements O
case SHORT:
if (t.field() != null) {
- writeFieldType(SHORT);
+ if (footer != null)
+ writeFieldType(SHORT);
+
writeShort(getShort(obj, t.offset()));
}
@@ -564,7 +568,9 @@ public class OptimizedObjectOutputStream extends ObjectOutputStream implements O
case INT:
if (t.field() != null) {
- writeFieldType(INT);
+ if (footer != null)
+ writeFieldType(INT);
+
writeInt(getInt(obj, t.offset()));
}
@@ -572,7 +578,9 @@ public class OptimizedObjectOutputStream extends ObjectOutputStream implements O
case LONG:
if (t.field() != null) {
- writeFieldType(LONG);
+ if (footer != null)
+ writeFieldType(LONG);
+
writeLong(getLong(obj, t.offset()));
}
@@ -580,7 +588,9 @@ public class OptimizedObjectOutputStream extends ObjectOutputStream implements O
case FLOAT:
if (t.field() != null) {
- writeFieldType(FLOAT);
+ if (footer != null)
+ writeFieldType(FLOAT);
+
writeFloat(getFloat(obj, t.offset()));
}
@@ -588,7 +598,9 @@ public class OptimizedObjectOutputStream extends ObjectOutputStream implements O
case DOUBLE:
if (t.field() != null) {
- writeFieldType(DOUBLE);
+ if (footer != null)
+ writeFieldType(DOUBLE);
+
writeDouble(getDouble(obj, t.offset()));
}
@@ -596,7 +608,9 @@ public class OptimizedObjectOutputStream extends ObjectOutputStream implements O
case CHAR:
if (t.field() != null) {
- writeFieldType(CHAR);
+ if (footer != null)
+ writeFieldType(CHAR);
+
writeChar(getChar(obj, t.offset()));
}
@@ -604,7 +618,9 @@ public class OptimizedObjectOutputStream extends ObjectOutputStream implements O
case BOOLEAN:
if (t.field() != null) {
- writeFieldType(BOOLEAN);
+ if (footer != null)
+ writeFieldType(BOOLEAN);
+
writeBoolean(getBoolean(obj, t.offset()));
}
@@ -826,49 +842,65 @@ public class OptimizedObjectOutputStream extends ObjectOutputStream implements O
switch (t.get1().type()) {
case BYTE:
- writeFieldType(BYTE);
+ if (footer != null)
+ writeFieldType(BYTE);
+
writeByte((Byte)t.get2());
break;
case SHORT:
- writeFieldType(SHORT);
+ if (footer != null)
+ writeFieldType(SHORT);
+
writeShort((Short)t.get2());
break;
case INT:
- writeFieldType(INT);
+ if (footer != null)
+ writeFieldType(INT);
+
writeInt((Integer)t.get2());
break;
case LONG:
- writeFieldType(LONG);
+ if (footer != null)
+ writeFieldType(LONG);
+
writeLong((Long)t.get2());
break;
case FLOAT:
- writeFieldType(FLOAT);
+ if (footer != null)
+ writeFieldType(FLOAT);
+
writeFloat((Float)t.get2());
break;
case DOUBLE:
- writeFieldType(DOUBLE);
+ if (footer != null)
+ writeFieldType(DOUBLE);
+
writeDouble((Double)t.get2());
break;
case CHAR:
- writeFieldType(CHAR);
+ if (footer != null)
+ writeFieldType(CHAR);
+
writeChar((Character)t.get2());
break;
case BOOLEAN:
- writeFieldType(BOOLEAN);
+ if (footer != null)
+ writeFieldType(BOOLEAN);
+
writeBoolean((Boolean)t.get2());
break;
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/0f97c471/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectOutputStreamExt.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectOutputStreamExt.java b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectOutputStreamExt.java
index 2be3165..2ded7c9 100644
--- a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectOutputStreamExt.java
+++ b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectOutputStreamExt.java
@@ -41,11 +41,6 @@ public class OptimizedObjectOutputStreamExt extends OptimizedObjectOutputStream
}
/** {@inheritDoc} */
- @Override protected void writeFieldType(byte type) throws IOException {
- out.writeByte(type);
- }
-
- /** {@inheritDoc} */
@Override protected Footer createFooter(Class<?> cls) {
if (fieldsIndexingSupported(cls, metaHandler, ctx, clsMap, mapper))
return new FooterImpl();
@@ -53,15 +48,17 @@ public class OptimizedObjectOutputStreamExt extends OptimizedObjectOutputStream
return null;
}
+ /** {@inheritDoc} */
+ @Override protected void writeFieldType(byte type) throws IOException {
+ out.writeByte(type);
+ }
+
/**
*
*/
private class FooterImpl implements OptimizedObjectOutputStream.Footer {
/** */
- private ArrayList<Integer> data;
-
- /** */
- private ArrayList<Integer> fields;
+ private ArrayList<Meta> data;
/** */
private HashMap<Integer, GridHandleTable.ObjectInfo> handles;
@@ -71,10 +68,8 @@ public class OptimizedObjectOutputStreamExt extends OptimizedObjectOutputStream
/** {@inheritDoc} */
@Override public void indexingSupported(boolean indexingSupported) {
- if (indexingSupported) {
+ if (indexingSupported)
data = new ArrayList<>();
- this.fields = new ArrayList<>();
- }
else
data = null;
}
@@ -84,10 +79,8 @@ public class OptimizedObjectOutputStreamExt extends OptimizedObjectOutputStream
if (data == null)
return;
- if (fieldType == OptimizedFieldType.OTHER) {
- data.add(len);
- fields.add(fieldId);
- }
+ if (fieldType == OptimizedFieldType.OTHER)
+ data.add(new Meta(fieldId, len));
}
/** {@inheritDoc} */
@@ -109,7 +102,7 @@ public class OptimizedObjectOutputStreamExt extends OptimizedObjectOutputStream
/** {@inheritDoc} */
@Override public void write() throws IOException {
if (data == null)
- writeInt(EMPTY_FOOTER);
+ writeShort(EMPTY_FOOTER);
else {
int bodyEnd = out.offset();
@@ -123,12 +116,14 @@ public class OptimizedObjectOutputStreamExt extends OptimizedObjectOutputStream
if (hasHandles) {
for (int i = 0; i < data.size(); i++) {
- GridHandleTable.ObjectInfo objInfo = handles.get(fields.get(i));
+ Meta fieldMeta = data.get(i);
+
+ GridHandleTable.ObjectInfo objInfo = handles.get(fieldMeta.fieldId);
if (objInfo == null)
- writeInt(data.get(i) & ~FOOTER_BODY_IS_HANDLE_MASK);
+ writeInt(fieldMeta.fieldLen & ~FOOTER_BODY_IS_HANDLE_MASK);
else {
- writeInt(data.get(i) | FOOTER_BODY_IS_HANDLE_MASK);
+ writeInt(fieldMeta.fieldLen | FOOTER_BODY_IS_HANDLE_MASK);
writeInt(objInfo.position());
if (objInfo.length() == 0)
@@ -140,12 +135,32 @@ public class OptimizedObjectOutputStreamExt extends OptimizedObjectOutputStream
}
}
else
- for (int fieldLen : data)
+ for (Meta fieldMeta : data)
// writing field len and resetting is handle mask
- writeInt(fieldLen & ~FOOTER_BODY_IS_HANDLE_MASK);
+ writeInt(fieldMeta.fieldLen & ~FOOTER_BODY_IS_HANDLE_MASK);
writeShort(footerLen);
}
}
}
+
+ /**
+ *
+ */
+ private static class Meta {
+ /** */
+ int fieldId;
+
+ /** */
+ int fieldLen;
+
+ /**
+ * @param fieldId
+ * @param fieldLen
+ */
+ public Meta(int fieldId, int fieldLen) {
+ this.fieldId = fieldId;
+ this.fieldLen = fieldLen;
+ }
+ }
}
[2/2] incubator-ignite git commit: ignite-950: performance
improvements
Posted by sb...@apache.org.
ignite-950: performance improvements
Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/6bf4fa75
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/6bf4fa75
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/6bf4fa75
Branch: refs/heads/ignite-950
Commit: 6bf4fa7559ece0c55096932aa2c39f8f0cbd2e45
Parents: 0f97c47
Author: Denis Magda <dm...@gridgain.com>
Authored: Wed Jun 24 13:15:58 2015 +0300
Committer: Denis Magda <dm...@gridgain.com>
Committed: Wed Jun 24 13:15:58 2015 +0300
----------------------------------------------------------------------
.../marshaller/optimized/OptimizedObjectOutputStreamExt.java | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6bf4fa75/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectOutputStreamExt.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectOutputStreamExt.java b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectOutputStreamExt.java
index 2ded7c9..9833e98 100644
--- a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectOutputStreamExt.java
+++ b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectOutputStreamExt.java
@@ -115,9 +115,7 @@ public class OptimizedObjectOutputStreamExt extends OptimizedObjectOutputStream
writeShort(footerLen);
if (hasHandles) {
- for (int i = 0; i < data.size(); i++) {
- Meta fieldMeta = data.get(i);
-
+ for (Meta fieldMeta : data) {
GridHandleTable.ObjectInfo objInfo = handles.get(fieldMeta.fieldId);
if (objInfo == null)