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/05/29 16:13:01 UTC

[1/6] incubator-ignite git commit: ignite-950: adjusting footer format

Repository: incubator-ignite
Updated Branches:
  refs/heads/ignite-950 0183c008c -> d18536afb


ignite-950: adjusting footer format


Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/f70d39a0
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/f70d39a0
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/f70d39a0

Branch: refs/heads/ignite-950
Commit: f70d39a0647bf82318d5fc2f12395c63cb3f3514
Parents: 0183c00
Author: Denis Magda <dm...@gridgain.com>
Authored: Fri May 29 12:33:37 2015 +0300
Committer: Denis Magda <dm...@gridgain.com>
Committed: Fri May 29 12:33:37 2015 +0300

----------------------------------------------------------------------
 .../optimized/OptimizedClassDescriptor.java     |   4 +-
 .../optimized/OptimizedObjectOutputStream.java  | 129 +++++++++++++++----
 .../optimized/OptimizedObjectReader.java        |  25 ++++
 3 files changed, 133 insertions(+), 25 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/f70d39a0/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedClassDescriptor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedClassDescriptor.java b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedClassDescriptor.java
index 6eb14f1..240a936 100644
--- a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedClassDescriptor.java
+++ b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedClassDescriptor.java
@@ -716,10 +716,12 @@ class OptimizedClassDescriptor {
                         "set OptimizedMarshaller.setRequireSerializable() to false " +
                         "(note that performance may degrade if object is not Serializable): " + name);
 
+                int headerPos = out.out().size();
+
                 writeTypeData(out);
 
                 out.writeShort(checksum);
-                out.writeSerializable(obj, writeObjMtds, fields);
+                out.writeSerializable(obj, writeObjMtds, fields, headerPos);
 
                 break;
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/f70d39a0/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 6c1e824..b136bc6 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
@@ -303,13 +303,17 @@ class OptimizedObjectOutputStream extends ObjectOutputStream {
      * @param obj Object.
      * @param mtds {@code writeObject} methods.
      * @param fields class fields details.
+     * @param headerPos Object's header position in the OutputStream.
      * @throws IOException In case of error.
      */
     @SuppressWarnings("ForLoopReplaceableByForEach")
-    void writeSerializable(Object obj, List<Method> mtds, OptimizedClassDescriptor.Fields fields)
+    void writeSerializable(Object obj, List<Method> mtds, OptimizedClassDescriptor.Fields fields, int headerPos)
         throws IOException {
         Footer footer = new Footer(fields);
 
+        footer.headerPos(headerPos);
+        footer.fieldsDataPos(out.size());
+
         for (int i = 0; i < mtds.size(); i++) {
             Method mtd = mtds.get(i);
 
@@ -467,12 +471,13 @@ class OptimizedObjectOutputStream extends ObjectOutputStream {
     private void writeFields(Object obj, OptimizedClassDescriptor.ClassFields fields, Footer footer)
         throws IOException {
         int size;
-        int offset;
+        int relOff = 0;
+        boolean skipPut = false;
 
         for (int i = 0; i < fields.size(); i++) {
             OptimizedClassDescriptor.FieldInfo t = fields.get(i);
 
-            offset = size = out.size();
+            size = out.size();
 
             switch (t.type()) {
                 case BYTE:
@@ -527,13 +532,23 @@ class OptimizedObjectOutputStream extends ObjectOutputStream {
                     if (t.field() != null) {
                         int handle = writeObject0(getObject(obj, t.offset()));
 
-                        if (handle >= 0)
-                            offset = handles.objectOffset(handle);
+                        if (handle >= 0) {
+                            footer.putHandle(handle, t.id());
+                            skipPut = true;
+                        }
                     }
             }
 
-            if (t.field() != null)
-                footer.put(t.id(), offset, out.size() - size);
+            if (t.field() != null) {
+                int fieldLen = out.size() - size;
+
+                if (!skipPut)
+                    footer.put(t.id(), relOff, fieldLen);
+                else
+                    skipPut = false;
+
+                relOff += fieldLen;
+            }
         }
     }
 
@@ -725,13 +740,14 @@ class OptimizedObjectOutputStream extends ObjectOutputStream {
             throw new NotActiveException("putFields() was not called.");
 
         int size;
-        int offset;
+        int relOff = 0;
+        boolean skipPut = false;
 
         Footer footer = curPut.curFooter;
 
         for (IgniteBiTuple<OptimizedClassDescriptor.FieldInfo, Object> t : curPut.objs) {
 
-            offset = size = out.size();
+            size = out.size();
 
             switch (t.get1().type()) {
                 case BYTE:
@@ -777,11 +793,20 @@ class OptimizedObjectOutputStream extends ObjectOutputStream {
                 case OTHER:
                     int handle = writeObject0(t.get2());
 
-                    if (handle >= 0)
-                        offset = handles.objectOffset(handle);
+                    if (handle >= 0) {
+                        footer.putHandle(handle, t.get1().id());
+                        skipPut = true;
+                    }
             }
 
-            footer.put(t.get1().id(), offset, out.size() - size);
+            int fieldLen = out.size() - size;
+
+            if (!skipPut)
+                footer.put(t.get1().id(), relOff, fieldLen);
+            else
+                skipPut = false;
+
+            relOff += fieldLen;
         }
     }
 
@@ -921,7 +946,13 @@ class OptimizedObjectOutputStream extends ObjectOutputStream {
         private int pos;
 
         /** */
-        private int fieldsStartOff;
+        private int fieldsDataPos;
+
+        /** */
+        private int headerPos;
+
+        /** */
+        private HashMap<Integer, Integer> lenForOff;
 
         /**
          * Constructor.
@@ -937,29 +968,77 @@ class OptimizedObjectOutputStream extends ObjectOutputStream {
 
                 data = new int[totalFooterSize];
 
-                fieldsStartOff = out.size();
+                lenForOff = new HashMap<>();
             }
             else
                 data = null;
         }
 
         /**
-         * Puts type ID and its value length to the footer.
+         * Returns start position of fields' data section.
+         *
+         * @return Absolute position.
+         */
+        private int fieldsDataPos() {
+            return fieldsDataPos;
+        }
+
+        /**
+         * Sets field's data section absolute position.
+         *
+         * @param pos Absolute position.
+         */
+        private void fieldsDataPos(int pos) {
+            fieldsDataPos = pos;
+        }
+
+        /**
+         * Sets field's header absolute position.
+         *
+         * @param pos Absolute position.
+         */
+        private void headerPos(int pos) {
+            headerPos = pos;
+        }
+
+        /**
+         * Puts type ID and its value len to the footer.
          *
          * @param typeId Type ID.
-         * @param offset Start offset of an object in the marhsalled array.
-         * @param length Total number of bytes occupied by type's value.
+         * @param relativeOff Offset of an object in fields' data section.
+         * @param len Total number of bytes occupied by type's value.
          */
-        private void put(int typeId, int offset, int length) {
+        private void put(int typeId, int relativeOff, int len) {
             if (data == null)
                 return;
 
             data[pos++] = typeId;
-            data[pos++] = length;
-            data[pos++] = offset;
+            data[pos++] = relativeOff;
+            data[pos++] = len;
+
+            lenForOff.put(relativeOff, len);
         }
 
         /**
+         * Puts handle's info to the footer.
+         *
+         * @param handle Handle.
+         * @param typeId Type ID.
+         */
+        private void putHandle(int handle, int typeId) {
+            int handleOff = handles.objectOffset(handle);
+            int relOff = fieldsDataPos - handleOff;
+
+            Integer len = lenForOff.get(relOff);
+
+            if (len == null)
+                throw new IllegalArgumentException("Failed to find length for offset: " + relOff);
+
+            put(typeId, relOff, len);
+        }
+
+
+        /**
          * Writes footer content to the OutputStream.
          *
          * @throws IOException In case of error.
@@ -968,15 +1047,17 @@ class OptimizedObjectOutputStream extends ObjectOutputStream {
             if (data == null)
                 writeInt(EMPTY_FOOTER);
             else {
-                int footerStartOff = out.size();
+                int footerStartPos = out.size();
 
-                writeInt(FOOTER_START);
-                writeInt(fieldsStartOff);
+                writeInt(fieldsDataPos);
 
                 for (int i = 0; i < data.length; i++)
                     writeInt(data[i]);
 
-                writeInt(footerStartOff);
+                // object total len
+                writeInt((out.size() - headerPos) + 4);
+                // footer len
+                writeInt(out.size() - footerStartPos);
             }
         }
     }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/f70d39a0/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectReader.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectReader.java b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectReader.java
new file mode 100644
index 0000000..9db2986
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedObjectReader.java
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.marshaller.optimized;
+
+/**
+ * TODO:
+ */
+public class OptimizedObjectReader {
+
+}


[4/6] incubator-ignite git commit: ignite-950: fixes in the protocol

Posted by sb...@apache.org.
ignite-950: fixes in the protocol


Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/2417c07f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/2417c07f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/2417c07f

Branch: refs/heads/ignite-950
Commit: 2417c07f81b6793a61cea7af8d09bd9a274db092
Parents: 3e6c779
Author: Denis Magda <dm...@gridgain.com>
Authored: Fri May 29 14:14:18 2015 +0300
Committer: Denis Magda <dm...@gridgain.com>
Committed: Fri May 29 14:14:18 2015 +0300

----------------------------------------------------------------------
 .../optimized/OptimizedClassDescriptor.java     |  2 +-
 .../optimized/OptimizedObjectInputStream.java   | 44 ++++++++++++++++----
 .../optimized/OptimizedObjectOutputStream.java  | 40 ++++++++++++++----
 3 files changed, 70 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2417c07f/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedClassDescriptor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedClassDescriptor.java b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedClassDescriptor.java
index 240a936..ecec3ab 100644
--- a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedClassDescriptor.java
+++ b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedClassDescriptor.java
@@ -716,7 +716,7 @@ class OptimizedClassDescriptor {
                         "set OptimizedMarshaller.setRequireSerializable() to false " +
                         "(note that performance may degrade if object is not Serializable): " + name);
 
-                int headerPos = out.out().size();
+                int headerPos = out.out().size() - 1;
 
                 writeTypeData(out);
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2417c07f/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 edc612b..d7fc802 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
@@ -352,6 +352,8 @@ class OptimizedObjectInputStream extends ObjectInputStream {
 
             switch ((t.type())) {
                 case BYTE:
+                    readByte(); //type
+
                     byte resByte = readByte();
 
                     if (t.field() != null)
@@ -360,6 +362,8 @@ class OptimizedObjectInputStream extends ObjectInputStream {
                     break;
 
                 case SHORT:
+                    readByte(); //type
+
                     short resShort = readShort();
 
                     if (t.field() != null)
@@ -368,6 +372,8 @@ class OptimizedObjectInputStream extends ObjectInputStream {
                     break;
 
                 case INT:
+                    readByte(); //type
+
                     int resInt = readInt();
 
                     if (t.field() != null)
@@ -376,6 +382,8 @@ class OptimizedObjectInputStream extends ObjectInputStream {
                     break;
 
                 case LONG:
+                    readByte(); //type
+
                     long resLong = readLong();
 
                     if (t.field() != null)
@@ -384,6 +392,8 @@ class OptimizedObjectInputStream extends ObjectInputStream {
                     break;
 
                 case FLOAT:
+                    readByte(); //type
+
                     float resFloat = readFloat();
 
                     if (t.field() != null)
@@ -392,6 +402,8 @@ class OptimizedObjectInputStream extends ObjectInputStream {
                     break;
 
                 case DOUBLE:
+                    readByte(); //type
+
                     double resDouble = readDouble();
 
                     if (t.field() != null)
@@ -400,6 +412,8 @@ class OptimizedObjectInputStream extends ObjectInputStream {
                     break;
 
                 case CHAR:
+                    readByte(); //type
+
                     char resChar = readChar();
 
                     if (t.field() != null)
@@ -408,6 +422,8 @@ class OptimizedObjectInputStream extends ObjectInputStream {
                     break;
 
                 case BOOLEAN:
+                    readByte(); //type
+
                     boolean resBoolean = readBoolean();
 
                     if (t.field() != null)
@@ -955,27 +971,25 @@ class OptimizedObjectInputStream extends ObjectInputStream {
         int footerStartOff = in.readInt();
 
         if (footerStartOff == EMPTY_FOOTER)
-            return null; //TODO
+            return null; //TODO: IGNITE-950
 
         int pos = footerStartOff;
         in.offset(footerStartOff);
 
-        //assert in.readInt() == FOOTER_START;
-        in.readInt(); //TODO: do I need this? skip fields start offset
+        int fieldsDataPos = in.readInt();
 
         int fieldOff = -1;
 
         while (pos < end) {
             int id = in.readInt();
-            int len = in.readInt(); //TODO: do I need this?
 
             if (fieldId == id) {
-                fieldOff = in.readInt();
+                fieldOff = fieldsDataPos + in.readInt();
                 break;
             }
             else
-                // skip field offset
-                in.skipBytes(4);
+                // skip offset and len
+                in.skipBytes(8);
 
             pos += 12;
         }
@@ -1105,41 +1119,57 @@ class OptimizedObjectInputStream extends ObjectInputStream {
 
                 switch (t.type()) {
                     case BYTE:
+                        in.readByte(); //type
+
                         obj = in.readByte();
 
                         break;
 
                     case SHORT:
+                        in.readByte(); //type
+
                         obj = in.readShort();
 
                         break;
 
                     case INT:
+                        in.readByte(); //type
+
                         obj = in.readInt();
 
                         break;
 
                     case LONG:
+                        in.readByte(); //type
+
                         obj = in.readLong();
 
                         break;
 
                     case FLOAT:
+                        in.readByte(); //type
+
                         obj = in.readFloat();
 
                         break;
 
                     case DOUBLE:
+                        in.readByte(); //type
+
                         obj = in.readDouble();
 
                         break;
 
                     case CHAR:
+                        in.readByte(); //type
+
                         obj = in.readChar();
 
                         break;
 
                     case BOOLEAN:
+                        in.readByte(); //type
+
                         obj = in.readBoolean();
 
                         break;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/2417c07f/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 2b27ec0..ae0b940 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
@@ -481,50 +481,66 @@ class OptimizedObjectOutputStream extends ObjectOutputStream {
 
             switch (t.type()) {
                 case BYTE:
-                    if (t.field() != null)
+                    if (t.field() != null) {
+                        writeByte(BYTE);
                         writeByte(getByte(obj, t.offset()));
+                    }
 
                     break;
 
                 case SHORT:
-                    if (t.field() != null)
+                    if (t.field() != null) {
+                        writeByte(SHORT);
                         writeShort(getShort(obj, t.offset()));
+                    }
 
                     break;
 
                 case INT:
-                    if (t.field() != null)
+                    if (t.field() != null) {
+                        writeByte(INT);
                         writeInt(getInt(obj, t.offset()));
+                    }
 
                     break;
 
                 case LONG:
-                    if (t.field() != null)
+                    if (t.field() != null) {
+                        writeByte(LONG);
                         writeLong(getLong(obj, t.offset()));
+                    }
 
                     break;
 
                 case FLOAT:
-                    if (t.field() != null)
+                    if (t.field() != null) {
+                        writeByte(FLOAT);
                         writeFloat(getFloat(obj, t.offset()));
+                    }
 
                     break;
 
                 case DOUBLE:
-                    if (t.field() != null)
+                    if (t.field() != null) {
+                        writeByte(DOUBLE);
                         writeDouble(getDouble(obj, t.offset()));
+                    }
 
                     break;
 
                 case CHAR:
-                    if (t.field() != null)
+                    if (t.field() != null) {
+                        writeByte(CHAR);
                         writeChar(getChar(obj, t.offset()));
+                    }
 
                     break;
 
                 case BOOLEAN:
-                    if (t.field() != null)
+                    if (t.field() != null) {
+                        writeByte(BOOLEAN);
                         writeBoolean(getBoolean(obj, t.offset()));
+                    }
 
                     break;
 
@@ -751,41 +767,49 @@ class OptimizedObjectOutputStream extends ObjectOutputStream {
 
             switch (t.get1().type()) {
                 case BYTE:
+                    writeByte(BYTE);
                     writeByte((Byte)t.get2());
 
                     break;
 
                 case SHORT:
+                    writeByte(SHORT);
                     writeShort((Short)t.get2());
 
                     break;
 
                 case INT:
+                    writeByte(INT);
                     writeInt((Integer)t.get2());
 
                     break;
 
                 case LONG:
+                    writeByte(LONG);
                     writeLong((Long)t.get2());
 
                     break;
 
                 case FLOAT:
+                    writeByte(FLOAT);
                     writeFloat((Float)t.get2());
 
                     break;
 
                 case DOUBLE:
+                    writeByte(DOUBLE);
                     writeDouble((Double)t.get2());
 
                     break;
 
                 case CHAR:
+                    writeByte(CHAR);
                     writeChar((Character)t.get2());
 
                     break;
 
                 case BOOLEAN:
+                    writeByte(BOOLEAN);
                     writeBoolean((Boolean)t.get2());
 
                     break;


[5/6] incubator-ignite git commit: ignite-950: fixes in the protocol

Posted by sb...@apache.org.
ignite-950: fixes in the protocol


Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/b380b32c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/b380b32c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/b380b32c

Branch: refs/heads/ignite-950
Commit: b380b32c530d038a0435930c358ada9d01339dfd
Parents: 2417c07
Author: Denis Magda <dm...@gridgain.com>
Authored: Fri May 29 14:24:05 2015 +0300
Committer: Denis Magda <dm...@gridgain.com>
Committed: Fri May 29 14:24:05 2015 +0300

----------------------------------------------------------------------
 .../marshaller/optimized/OptimizedObjectInputStream.java  | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b380b32c/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 d7fc802..24b756f 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
@@ -968,19 +968,19 @@ class OptimizedObjectInputStream extends ObjectInputStream {
         int end = in.size() - 4;
         in.offset(end);
 
-        int footerStartOff = in.readInt();
+        int footerLen = in.readInt();
 
-        if (footerStartOff == EMPTY_FOOTER)
+        if (footerLen == EMPTY_FOOTER)
             return null; //TODO: IGNITE-950
 
-        int pos = footerStartOff;
+        int footerStartOff = in.size() - footerLen;
         in.offset(footerStartOff);
 
         int fieldsDataPos = in.readInt();
 
         int fieldOff = -1;
 
-        while (pos < end) {
+        while (footerStartOff < end) {
             int id = in.readInt();
 
             if (fieldId == id) {
@@ -991,7 +991,7 @@ class OptimizedObjectInputStream extends ObjectInputStream {
                 // skip offset and len
                 in.skipBytes(8);
 
-            pos += 12;
+            footerStartOff += 12;
         }
 
         if (fieldOff > 0) {


[3/6] incubator-ignite git commit: ignite-950: fixes in the protocol

Posted by sb...@apache.org.
ignite-950: fixes in the protocol


Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/3e6c7797
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/3e6c7797
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/3e6c7797

Branch: refs/heads/ignite-950
Commit: 3e6c779714710ad1566c07bb2fa6522bafef4ca6
Parents: 3148af7
Author: Denis Magda <dm...@gridgain.com>
Authored: Fri May 29 13:38:09 2015 +0300
Committer: Denis Magda <dm...@gridgain.com>
Committed: Fri May 29 13:38:09 2015 +0300

----------------------------------------------------------------------
 .../optimized/OptimizedObjectInputStream.java   |  2 +-
 .../optimized/OptimizedObjectOutputStream.java  | 21 ++++++++++++++------
 2 files changed, 16 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/3e6c7797/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 d07aaf5..edc612b 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
@@ -521,7 +521,7 @@ class OptimizedObjectInputStream extends ObjectInputStream {
         byte flag = (byte)in.readInt();
 
         if (flag != EMPTY_FOOTER) {
-            int skip = 3;
+            int skip = 2;
 
             for (int i = 0; i < fields.hierarchyLevels(); i++)
                 skip += fields.fields(i).size() * 3;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/3e6c7797/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 b136bc6..2b27ec0 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
@@ -1005,18 +1005,18 @@ class OptimizedObjectOutputStream extends ObjectOutputStream {
          * Puts type ID and its value len to the footer.
          *
          * @param typeId Type ID.
-         * @param relativeOff Offset of an object in fields' data section.
+         * @param relOff Offset of an object in fields' data section.
          * @param len Total number of bytes occupied by type's value.
          */
-        private void put(int typeId, int relativeOff, int len) {
+        private void put(int typeId, int relOff, int len) {
             if (data == null)
                 return;
 
             data[pos++] = typeId;
-            data[pos++] = relativeOff;
+            data[pos++] = relOff;
             data[pos++] = len;
 
-            lenForOff.put(relativeOff, len);
+            lenForOff.put(relOff, len);
         }
 
         /**
@@ -1026,13 +1026,22 @@ class OptimizedObjectOutputStream extends ObjectOutputStream {
          * @param typeId Type ID.
          */
         private void putHandle(int handle, int typeId) {
+            if (data == null)
+                return;
+
             int handleOff = handles.objectOffset(handle);
             int relOff = fieldsDataPos - handleOff;
 
             Integer len = lenForOff.get(relOff);
 
-            if (len == null)
-                throw new IllegalArgumentException("Failed to find length for offset: " + relOff);
+            if (len == null) {
+                // this can be a handle to an outer object, we won't be able to process such cases when a field
+                // is detached
+                data = null;
+                lenForOff = null;
+
+                return;
+            }
 
             put(typeId, relOff, len);
         }


[2/6] incubator-ignite git commit: ignite-950: adjusting footer format

Posted by sb...@apache.org.
ignite-950: adjusting footer format


Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/3148af7a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/3148af7a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/3148af7a

Branch: refs/heads/ignite-950
Commit: 3148af7a912935ae3d526b7bc466cbe49c9e952f
Parents: f70d39a
Author: Denis Magda <dm...@gridgain.com>
Authored: Fri May 29 12:54:19 2015 +0300
Committer: Denis Magda <dm...@gridgain.com>
Committed: Fri May 29 12:54:19 2015 +0300

----------------------------------------------------------------------
 .../marshaller/optimized/OptimizedMarshallerUtils.java       | 3 ---
 .../marshaller/optimized/OptimizedObjectInputStream.java     | 8 +++-----
 2 files changed, 3 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/3148af7a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerUtils.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerUtils.java b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerUtils.java
index dd13ac5..6e7f6c2 100644
--- a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerUtils.java
+++ b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerUtils.java
@@ -144,9 +144,6 @@ class OptimizedMarshallerUtils {
     static final byte SERIALIZABLE = 102;
 
     /** */
-    static final byte FOOTER_START = 1;
-
-    /** */
     static final byte EMPTY_FOOTER = -1;
 
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/3148af7a/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 f854dca..d07aaf5 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
@@ -520,10 +520,8 @@ class OptimizedObjectInputStream extends ObjectInputStream {
 
         byte flag = (byte)in.readInt();
 
-        assert flag == EMPTY_FOOTER || flag == FOOTER_START;
-
-        if (flag == FOOTER_START) {
-            int skip = 2;
+        if (flag != EMPTY_FOOTER) {
+            int skip = 3;
 
             for (int i = 0; i < fields.hierarchyLevels(); i++)
                 skip += fields.fields(i).size() * 3;
@@ -962,7 +960,7 @@ class OptimizedObjectInputStream extends ObjectInputStream {
         int pos = footerStartOff;
         in.offset(footerStartOff);
 
-        assert in.readInt() == FOOTER_START;
+        //assert in.readInt() == FOOTER_START;
         in.readInt(); //TODO: do I need this? skip fields start offset
 
         int fieldOff = -1;


[6/6] incubator-ignite git commit: ignite-471-2: xml fix

Posted by sb...@apache.org.
ignite-471-2: xml fix


Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/d18536af
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/d18536af
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/d18536af

Branch: refs/heads/ignite-950
Commit: d18536afb761a313e9c08c42f0385335ff01a7b5
Parents: b380b32
Author: Denis Magda <dm...@gridgain.com>
Authored: Fri May 29 14:43:27 2015 +0300
Committer: Denis Magda <dm...@gridgain.com>
Committed: Fri May 29 14:43:27 2015 +0300

----------------------------------------------------------------------
 .../marshaller/optimized/OptimizedObjectInputStream.java      | 7 ++++---
 .../marshaller/optimized/OptimizedObjectOutputStream.java     | 2 +-
 2 files changed, 5 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d18536af/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 24b756f..5f5a042 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
@@ -965,8 +965,8 @@ class OptimizedObjectInputStream extends ObjectInputStream {
 
         int fieldId = resolveFieldId(fieldName);
 
-        int end = in.size() - 4;
-        in.offset(end);
+        int end = in.size();
+        in.offset(end - 4);
 
         int footerLen = in.readInt();
 
@@ -980,7 +980,8 @@ class OptimizedObjectInputStream extends ObjectInputStream {
 
         int fieldOff = -1;
 
-        while (footerStartOff < end) {
+
+        while (footerStartOff < end - 8) {
             int id = in.readInt();
 
             if (fieldId == id) {

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d18536af/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 ae0b940..c0327bc 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
@@ -1090,7 +1090,7 @@ class OptimizedObjectOutputStream extends ObjectOutputStream {
                 // object total len
                 writeInt((out.size() - headerPos) + 4);
                 // footer len
-                writeInt(out.size() - footerStartPos);
+                writeInt((out.size() - footerStartPos) + 4);
             }
         }
     }