IGNITE-61 - Direct marshalling

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

Branch: refs/heads/ignite-sql-tests
Commit: 01b20a695ce7b5207888bf2dca998942d4224440
Parents: 159c1e8
Author: Valentin Kulichenko <vkuliche...@gridgain.com>
Authored: Sat Feb 7 23:07:34 2015 -0800
Committer: Valentin Kulichenko <vkuliche...@gridgain.com>
Committed: Sat Feb 7 23:07:34 2015 -0800

----------------------------------------------------------------------
 .../CommunicationMessageCodeGenerator.java      |  21 +-
 .../ignite/internal/direct/DirectUtils.java     | 346 -------------------
 .../managers/communication/GridIoMessage.java   |   4 +-
 3 files changed, 20 insertions(+), 351 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/01b20a69/modules/codegen/src/main/java/org/apache/ignite/codegen/CommunicationMessageCodeGenerator.java
----------------------------------------------------------------------
diff --git 
a/modules/codegen/src/main/java/org/apache/ignite/codegen/CommunicationMessageCodeGenerator.java
 
b/modules/codegen/src/main/java/org/apache/ignite/codegen/CommunicationMessageCodeGenerator.java
index 45a383c..4a81a92 100644
--- 
a/modules/codegen/src/main/java/org/apache/ignite/codegen/CommunicationMessageCodeGenerator.java
+++ 
b/modules/codegen/src/main/java/org/apache/ignite/codegen/CommunicationMessageCodeGenerator.java
@@ -10,6 +10,7 @@
 package org.apache.ignite.codegen;
 
 import org.apache.ignite.internal.*;
+import org.apache.ignite.internal.managers.communication.*;
 import org.apache.ignite.internal.util.typedef.internal.*;
 import org.apache.ignite.lang.*;
 import org.apache.ignite.plugin.extensions.communication.*;
@@ -76,6 +77,9 @@ public class CommunicationMessageCodeGenerator {
     private final Map<Class<?>, Integer> fieldCnt = new HashMap<>();
 
     /** */
+    private Class<? extends MessageAdapter> curCls;
+
+    /** */
     private List<Field> fields;
 
     /** */
@@ -233,6 +237,8 @@ public class CommunicationMessageCodeGenerator {
     public void generate(Class<? extends MessageAdapter> cls) throws Exception 
{
         assert cls != null;
 
+        curCls = cls;
+
         write.clear();
         read.clear();
         clone.clear();
@@ -282,8 +288,14 @@ public class CommunicationMessageCodeGenerator {
 
             for (Field field : cloningFields) {
                 String name = field.getName();
+                Class<?> type = field.getType();
+
+                String res = name;
 
-                clone0.add(builder().a("_clone.").a(name).a(" = 
").a(name).a(";").toString());
+                if (curCls.equals(GridIoMessage.class) && 
BASE_CLS.isAssignableFrom(type))
+                    res = name + " != null ? (" + type.getSimpleName() + ")" + 
name + ".clone() : null";
+
+                clone0.add(builder().a("_clone.").a(name).a(" = 
").a(res).a(";").toString());
             }
         }
 
@@ -515,8 +527,11 @@ public class CommunicationMessageCodeGenerator {
             returnFalseIfFailed(write, "writer.writeIgniteUuid", field, name);
         else if (type.isEnum())
             returnFalseIfFailed(write, "writer.writeEnum", field, name);
-        else if (BASE_CLS.isAssignableFrom(type))
-            returnFalseIfFailed(write, "writer.writeMessage", field, name + " 
!= null ? " + name + ".clone() : null");
+        else if (BASE_CLS.isAssignableFrom(type)) {
+            String arg = curCls.equals(GridIoMessage.class) ? name : name + " 
!= null ? " + name + ".clone() : null";
+
+            returnFalseIfFailed(write, "writer.writeMessage", field, arg);
+        }
         else if (type.isArray()) {
             returnFalseIfFailed(write, "writer.writeObjectArray", field, name,
                 type.getComponentType().getSimpleName() + ".class");

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/01b20a69/modules/core/src/main/java/org/apache/ignite/internal/direct/DirectUtils.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/direct/DirectUtils.java 
b/modules/core/src/main/java/org/apache/ignite/internal/direct/DirectUtils.java
deleted file mode 100644
index d0d966f..0000000
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/direct/DirectUtils.java
+++ /dev/null
@@ -1,346 +0,0 @@
-/*
- * 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.internal.direct;
-
-import org.apache.ignite.internal.processors.cache.*;
-import org.apache.ignite.internal.processors.cache.distributed.dht.preloader.*;
-import org.apache.ignite.internal.processors.cache.version.*;
-import org.apache.ignite.internal.processors.clock.*;
-import org.apache.ignite.internal.util.*;
-import org.apache.ignite.lang.*;
-import sun.misc.*;
-
-import java.util.*;
-
-/**
- * Direct marshalling utility methods.
- */
-public class DirectUtils {
-    /** */
-    private static final Unsafe UNSAFE = GridUnsafe.unsafe();
-
-    /** */
-    private static final long BYTE_ARR_OFF = 
UNSAFE.arrayBaseOffset(byte[].class);
-
-    /**
-     * Do not instantiate.
-     */
-    private DirectUtils() {
-        // No-op.
-    }
-
-    /**
-     * @param uuid {@link UUID}.
-     * @return Array.
-     */
-    public static byte[] uuidToArray(UUID uuid) {
-        byte[] arr = null;
-
-        if (uuid != null) {
-            arr = new byte[16];
-
-            UNSAFE.putLong(arr, BYTE_ARR_OFF, uuid.getMostSignificantBits());
-            UNSAFE.putLong(arr, BYTE_ARR_OFF + 8, 
uuid.getLeastSignificantBits());
-        }
-
-        return arr;
-    }
-
-    /**
-     * @param arr Array.
-     * @return {@link UUID}.
-     */
-    public static UUID arrayToUuid(byte[] arr) {
-        if (arr == null)
-            return null;
-        else {
-            long most = UNSAFE.getLong(arr, BYTE_ARR_OFF);
-            long least = UNSAFE.getLong(arr, BYTE_ARR_OFF + 8);
-
-            return new UUID(most, least);
-        }
-    }
-
-    /**
-     * @param uuid {@link IgniteUuid}.
-     * @return Array.
-     */
-    public static byte[] gridUuidToArray(IgniteUuid uuid) {
-        byte[] arr = null;
-
-        if (uuid != null) {
-            arr = new byte[24];
-
-            UNSAFE.putLong(arr, BYTE_ARR_OFF, 
uuid.globalId().getMostSignificantBits());
-            UNSAFE.putLong(arr, BYTE_ARR_OFF + 8, 
uuid.globalId().getLeastSignificantBits());
-            UNSAFE.putLong(arr, BYTE_ARR_OFF + 16, uuid.localId());
-        }
-
-        return arr;
-    }
-
-    /**
-     * @param arr Array.
-     * @return {@link IgniteUuid}.
-     */
-    public static IgniteUuid arrayToIgniteUuid(byte[] arr) {
-        if (arr == null)
-            return null;
-        else {
-            long most = UNSAFE.getLong(arr, BYTE_ARR_OFF);
-            long least = UNSAFE.getLong(arr, BYTE_ARR_OFF + 8);
-            long loc = UNSAFE.getLong(arr, BYTE_ARR_OFF + 16);
-
-            return new IgniteUuid(new UUID(most, least), loc);
-        }
-    }
-
-    /**
-     * @param ver {@link GridClockDeltaVersion}.
-     * @return Array.
-     */
-    public static byte[] clockDeltaVersionToArray(GridClockDeltaVersion ver) {
-        byte[] arr = null;
-
-        if (ver != null) {
-            arr = new byte[16];
-
-            UNSAFE.putLong(arr, BYTE_ARR_OFF, ver.version());
-            UNSAFE.putLong(arr, BYTE_ARR_OFF + 8, ver.topologyVersion());
-        }
-
-        return arr;
-    }
-
-    /**
-     * @param arr Array.
-     * @return {@link GridClockDeltaVersion}.
-     */
-    public static GridClockDeltaVersion arrayToClockDeltaVersion(byte[] arr) {
-        if (arr == null)
-            return null;
-        else {
-            long ver = UNSAFE.getLong(arr, BYTE_ARR_OFF);
-            long topVer = UNSAFE.getLong(arr, BYTE_ARR_OFF + 8);
-
-            return new GridClockDeltaVersion(ver, topVer);
-        }
-    }
-
-    /**
-     * @param list {@link GridByteArrayList}.
-     * @return Array.
-     */
-    public static byte[] byteArrayListToArray(GridByteArrayList list) {
-        return list != null ? list.array() : null;
-    }
-
-    /**
-     * @param arr Array.
-     * @return {@link GridByteArrayList}.
-     */
-    public static GridByteArrayList arrayToByteArrayList(byte[] arr) {
-        return arr != null ? new GridByteArrayList(arr) : null;
-    }
-
-    /**
-     * @param list {@link GridLongList}.
-     * @return Array.
-     */
-    public static long[] longListToArray(GridLongList list) {
-        return list != null ? list.array() : null;
-    }
-
-    /**
-     * @param arr Array.
-     * @return {@link GridLongList}.
-     */
-    public static GridLongList arrayToLongList(long[] arr) {
-        return arr != null ? new GridLongList(arr) : null;
-    }
-
-    /**
-     * @param ver {@link GridCacheVersion}.
-     * @return Array.
-     */
-    public static byte[] cacheVersionToArray(GridCacheVersion ver) {
-        byte[] arr = null;
-
-        if (ver != null) {
-            arr = new byte[24];
-
-            UNSAFE.putInt(arr, BYTE_ARR_OFF, ver.topologyVersion());
-            UNSAFE.putInt(arr, BYTE_ARR_OFF + 4, ver.nodeOrderAndDrIdRaw());
-            UNSAFE.putLong(arr, BYTE_ARR_OFF + 8, ver.globalTime());
-            UNSAFE.putLong(arr, BYTE_ARR_OFF + 16, ver.order());
-        }
-
-        return arr;
-    }
-
-    /**
-     * @param arr Array.
-     * @return {@link GridCacheVersion}.
-     */
-    public static GridCacheVersion arrayToCacheVersion(byte[] arr) {
-        if (arr == null)
-            return null;
-        else {
-            int topVerDrId = UNSAFE.getInt(arr, BYTE_ARR_OFF);
-            int nodeOrder = UNSAFE.getInt(arr, BYTE_ARR_OFF + 4);
-            long globalTime = UNSAFE.getLong(arr, BYTE_ARR_OFF + 8);
-            long order = UNSAFE.getLong(arr, BYTE_ARR_OFF + 16);
-
-            return new GridCacheVersion(topVerDrId, nodeOrder, globalTime, 
order);
-        }
-    }
-
-    /**
-     * @param id {@link GridDhtPartitionExchangeId}.
-     * @return Array.
-     */
-    public static byte[] 
dhtPartitionExchangeIdToArray(GridDhtPartitionExchangeId id) {
-        byte[] arr = null;
-
-        if (id != null) {
-            arr = new byte[28];
-
-            UNSAFE.putLong(arr, BYTE_ARR_OFF, 
id.nodeId().getMostSignificantBits());
-            UNSAFE.putLong(arr, BYTE_ARR_OFF + 8, 
id.nodeId().getLeastSignificantBits());
-            UNSAFE.putInt(arr, BYTE_ARR_OFF + 16, id.event());
-            UNSAFE.putLong(arr, BYTE_ARR_OFF + 20, id.topologyVersion());
-        }
-
-        return arr;
-    }
-
-    /**
-     * @param arr Array.
-     * @return {@link GridDhtPartitionExchangeId}.
-     */
-    public static GridDhtPartitionExchangeId 
arrayToDhtPartitionExchangeId(byte[] arr) {
-        if (arr == null)
-            return null;
-        else {
-            long most = UNSAFE.getLong(arr, BYTE_ARR_OFF);
-            long least = UNSAFE.getLong(arr, BYTE_ARR_OFF + 8);
-            int evt = UNSAFE.getInt(arr, BYTE_ARR_OFF + 16);
-            long topVer = UNSAFE.getLong(arr, BYTE_ARR_OFF + 20);
-
-            return new GridDhtPartitionExchangeId(new UUID(most, least), evt, 
topVer);
-        }
-    }
-
-    /**
-     * @param bytes {@link GridCacheValueBytes}.
-     * @return Array.
-     */
-    public static byte[] valueBytesToArray(GridCacheValueBytes bytes) {
-        byte[] arr = null;
-
-        if (bytes != null) {
-            byte[] bytes0 = bytes.get();
-
-            if (bytes0 != null) {
-                int len = bytes0.length;
-
-                arr = new byte[len + 2];
-
-                UNSAFE.putBoolean(arr, BYTE_ARR_OFF, true);
-                UNSAFE.copyMemory(bytes0, BYTE_ARR_OFF, arr, BYTE_ARR_OFF + 1, 
len);
-                UNSAFE.putBoolean(arr, BYTE_ARR_OFF + 1 + len, 
bytes.isPlain());
-            }
-            else {
-                arr = new byte[1];
-
-                UNSAFE.putBoolean(arr, BYTE_ARR_OFF, false);
-            }
-        }
-
-        return arr;
-    }
-
-    /**
-     * @param arr Array.
-     * @return {@link GridCacheValueBytes}.
-     */
-    public static GridCacheValueBytes arrayToValueBytes(byte[] arr) {
-        if (arr == null)
-            return null;
-        else {
-            boolean notNull = UNSAFE.getBoolean(arr, BYTE_ARR_OFF);
-
-            if (notNull) {
-                int len = arr.length - 2;
-
-                assert len >= 0 : len;
-
-                byte[] bytesArr = new byte[len];
-
-                UNSAFE.copyMemory(arr, BYTE_ARR_OFF + 1, bytesArr, 
BYTE_ARR_OFF, len);
-
-                boolean isPlain = UNSAFE.getBoolean(arr, BYTE_ARR_OFF + 1 + 
len);
-
-                return new GridCacheValueBytes(bytesArr, isPlain);
-            }
-            else
-                return new GridCacheValueBytes();
-        }
-    }
-
-    /**
-     * @param str {@link String}.
-     * @return Array.
-     */
-    public static byte[] stringToArray(String str) {
-        return str != null ? str.getBytes() : null;
-    }
-
-    /**
-     * @param arr Array.
-     * @return {@link String}.
-     */
-    public static String arrayToString(byte[] arr) {
-        return arr != null ? new String(arr) : null;
-    }
-
-    /**
-     * @param bits {@link BitSet}.
-     * @return Array.
-     */
-    public static long[] bitSetToArray(BitSet bits) {
-        return bits != null ? bits.toLongArray() : null;
-    }
-
-    /**
-     * @param arr Array.
-     * @return {@link BitSet}.
-     */
-    public static BitSet arrayToBitSet(long[] arr) {
-        return arr != null ? BitSet.valueOf(arr) : null;
-    }
-
-//    /**
-//     * @param name Field name.
-//     * @param e Enum.
-//     * @return Whether value was fully written.
-//     */
-//    protected boolean putEnum(String name, @Nullable Enum<?> e) {
-//        return writer.writeByte(name, e != null ? (byte)e.ordinal() : -1);
-//    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/01b20a69/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessage.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessage.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessage.java
index 27d64be..c77f174 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessage.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessage.java
@@ -200,7 +200,7 @@ public class GridIoMessage extends MessageAdapter {
         _clone.ordered = ordered;
         _clone.timeout = timeout;
         _clone.skipOnTimeout = skipOnTimeout;
-        _clone.msg = msg;
+        _clone.msg = msg != null ? (MessageAdapter)msg.clone() : null;
     }
 
     /** {@inheritDoc} */
@@ -217,7 +217,7 @@ public class GridIoMessage extends MessageAdapter {
 
         switch (state) {
             case 0:
-                if (!writer.writeMessage("msg", msg != null ? msg.clone() : 
null))
+                if (!writer.writeMessage("msg", msg))
                     return false;
 
                 state++;

Reply via email to