You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ag...@apache.org on 2015/08/31 23:25:13 UTC

[50/50] [abbrv] ignite git commit: IGNITE-950 - Fixing tests.

IGNITE-950 - Fixing tests.


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

Branch: refs/heads/ignite-950
Commit: b3fd771cac277bc154a6c4130bcd32fc6ba76309
Parents: e50d736
Author: Alexey Goncharuk <ag...@gridgain.com>
Authored: Tue Aug 4 10:43:55 2015 -0700
Committer: Alexey Goncharuk <ag...@gridgain.com>
Committed: Tue Aug 4 10:43:55 2015 -0700

----------------------------------------------------------------------
 .../configuration/CacheConfiguration.java       | 11 +++-
 .../communication/GridIoMessageFactory.java     |  5 +-
 .../cache/CacheIndexedObjectImpl.java           | 23 ++++++-
 .../cache/KeyCacheIndexedObjectImpl.java        | 65 --------------------
 .../query/GridCacheDistributedQueryManager.java | 10 +--
 .../IgniteCacheObjectProcessorImpl.java         | 48 +--------------
 .../processors/query/GridQueryProcessor.java    | 54 +++++++++++++---
 .../optimized/OptimizedObjectInputStream.java   |  2 +-
 .../cache/IgniteCacheAbstractQuerySelfTest.java | 21 +------
 9 files changed, 88 insertions(+), 151 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/b3fd771c/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java b/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java
index eb8186a..f25e98d 100644
--- a/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java
+++ b/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java
@@ -2340,8 +2340,15 @@ public class CacheConfiguration<K, V> extends MutableConfiguration<K, V> {
         ClassProperty(Member member) {
             this.member = member;
 
-            name = member instanceof Method && member.getName().startsWith("get") && member.getName().length() > 3 ?
-                member.getName().substring(3) : member.getName();
+            if (member instanceof Method && member.getName().startsWith("get") && member.getName().length() > 3) {
+                StringBuilder s = new StringBuilder(member.getName());
+
+                s.setCharAt(3, Character.toLowerCase(s.charAt(3)));
+
+                name = s.substring(3);
+            }
+            else
+                name = member.getName();
 
             ((AccessibleObject) member).setAccessible(true);
         }

http://git-wip-us.apache.org/repos/asf/ignite/blob/b3fd771c/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoMessageFactory.java
----------------------------------------------------------------------
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 29e778d..7da621b 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
@@ -605,10 +605,7 @@ public class GridIoMessageFactory implements MessageFactory {
 
                 break;
 
-            case 114:
-                msg = new KeyCacheIndexedObjectImpl();
-
-            // [-3..114] - this
+            // [-3..113] - this
             // [120..123] - DR
             // [-4..-22] - SQL
             default:

http://git-wip-us.apache.org/repos/asf/ignite/blob/b3fd771c/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheIndexedObjectImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheIndexedObjectImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheIndexedObjectImpl.java
index 931380f..1655b9d 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheIndexedObjectImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheIndexedObjectImpl.java
@@ -34,7 +34,7 @@ import static org.apache.ignite.marshaller.optimized.OptimizedObjectOutputStream
  * Cache object implementation for classes that support footer injection is their serialized form thus enabling fields
  * search and extraction without necessity to fully deserialize an object.
  */
-public class CacheIndexedObjectImpl extends CacheObjectAdapter implements CacheIndexedObject {
+public class CacheIndexedObjectImpl extends CacheObjectAdapter implements CacheIndexedObject, KeyCacheObject {
     /** */
     private static final long serialVersionUID = 0L;
 
@@ -119,7 +119,18 @@ public class CacheIndexedObjectImpl extends CacheObjectAdapter implements CacheI
 
     /** {@inheritDoc} */
     @Override public CacheObject prepareForCache(CacheObjectContext ctx) {
-        return this;
+        try {
+            if (val != null && !ctx.processor().immutable(val)) {
+                toMarshaledFormIfNeeded();
+
+                return new CacheIndexedObjectImpl(ctx, null, valBytes, start, len);
+            }
+
+            return new CacheIndexedObjectImpl(ctx, val, valBytes, start, len);
+        }
+        catch (IgniteCheckedException e) {
+            throw new IgniteException("Failed to marshal object: " + val, e);
+        }
     }
 
     /** {@inheritDoc} */
@@ -145,6 +156,11 @@ public class CacheIndexedObjectImpl extends CacheObjectAdapter implements CacheI
     }
 
     /** {@inheritDoc} */
+    @Override public boolean internal() {
+        return false;
+    }
+
+    /** {@inheritDoc} */
     @Override public byte type() {
         return TYPE_OPTIMIZED;
     }
@@ -391,6 +407,9 @@ public class CacheIndexedObjectImpl extends CacheObjectAdapter implements CacheI
         if (ctx.copyOnGet())
             return false;
 
+        if (ctx.p2pEnabled())
+            return true;
+
         return !checkCls || ctx.processor().hasClass(typeId());
     }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/b3fd771c/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/KeyCacheIndexedObjectImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/KeyCacheIndexedObjectImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/KeyCacheIndexedObjectImpl.java
deleted file mode 100644
index 02ee988..0000000
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/KeyCacheIndexedObjectImpl.java
+++ /dev/null
@@ -1,65 +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.processors.cache;
-
-/**
- * Cache object implementation for classes that support footer injection is their serialized form thus enabling fields
- * search and extraction without necessity to fully deserialize an object.
- */
-public class KeyCacheIndexedObjectImpl extends CacheIndexedObjectImpl implements KeyCacheObject {
-    /** */
-    private static final long serialVersionUID = 0L;
-
-    /**
-     *
-     */
-    public KeyCacheIndexedObjectImpl() {
-        // No-op
-    }
-
-    /**
-     * @param val Object.
-     * @param valBytes Object in a serialized form.
-     */
-    public KeyCacheIndexedObjectImpl(CacheObjectContext objCtx, Object val, byte[] valBytes) {
-        super(objCtx, val, valBytes);
-
-        assert val != null;
-    }
-
-    /**
-     * @param val Object.
-     * @param valBytes Object in a serialized form.
-     * @param start Object's start in the array.
-     * @param len Object's len in the array.
-     */
-    public KeyCacheIndexedObjectImpl(CacheObjectContext objCtx, Object val, byte[] valBytes, int start, int len) {
-        super(objCtx, val, valBytes, start, len);
-    }
-
-    /** {@inheritDoc} */
-    @Override public byte directType() {
-        // refer to GridIoMessageFactory.
-        return 114;
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean internal() {
-        return false;
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/b3fd771c/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheDistributedQueryManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheDistributedQueryManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheDistributedQueryManager.java
index 316713f..8c706d9 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheDistributedQueryManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheDistributedQueryManager.java
@@ -546,7 +546,7 @@ public class GridCacheDistributedQueryManager<K, V> extends GridCacheQueryManage
                 qry.transform(),
                 qry.query().pageSize(),
                 qry.query().includeBackups(),
-                qry.arguments(),
+                cctx.kernalContext().query().wrapQueryArguments(cctx, qry.arguments()),
                 false,
                 qry.query().keepPortable(),
                 qry.query().subjectId(),
@@ -559,7 +559,8 @@ public class GridCacheDistributedQueryManager<K, V> extends GridCacheQueryManage
             cctx.io().addOrderedHandler(topic, resHnd);
 
             fut.listen(new CI1<IgniteInternalFuture<?>>() {
-                @Override public void apply(IgniteInternalFuture<?> fut) {
+                @Override
+                public void apply(IgniteInternalFuture<?> fut) {
                     cctx.io().removeOrderedHandler(topic);
                 }
             });
@@ -655,7 +656,7 @@ public class GridCacheDistributedQueryManager<K, V> extends GridCacheQueryManage
                 qry.transform(),
                 qry.query().pageSize(),
                 qry.query().includeBackups(),
-                qry.arguments(),
+                cctx.kernalContext().query().wrapQueryArguments(cctx, qry.arguments()),
                 qry.query().includeMetadata(),
                 qry.query().keepPortable(),
                 qry.query().subjectId(),
@@ -668,7 +669,8 @@ public class GridCacheDistributedQueryManager<K, V> extends GridCacheQueryManage
             cctx.io().addOrderedHandler(topic, resHnd);
 
             fut.listen(new CI1<IgniteInternalFuture<?>>() {
-                @Override public void apply(IgniteInternalFuture<?> fut) {
+                @Override
+                public void apply(IgniteInternalFuture<?> fut) {
                     cctx.io().removeOrderedHandler(topic);
                 }
             });

http://git-wip-us.apache.org/repos/asf/ignite/blob/b3fd771c/modules/core/src/main/java/org/apache/ignite/internal/processors/cacheobject/IgniteCacheObjectProcessorImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cacheobject/IgniteCacheObjectProcessorImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cacheobject/IgniteCacheObjectProcessorImpl.java
index dd6df0d..0ae4f66 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cacheobject/IgniteCacheObjectProcessorImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cacheobject/IgniteCacheObjectProcessorImpl.java
@@ -276,10 +276,10 @@ public class IgniteCacheObjectProcessorImpl extends GridProcessorAdapter impleme
     @SuppressWarnings("ExternalizableWithoutPublicNoArgConstructor")
     protected KeyCacheObject toCacheKeyObject0(CacheObjectContext ctx, Object obj, boolean userObj) {
         if (!userObj)
-            return isFieldsIndexingSupported(obj.getClass()) ? new KeyCacheIndexedObjectImpl(ctx, obj, null) :
+            return isFieldsIndexingSupported(obj.getClass()) ? new CacheIndexedObjectImpl(ctx, obj, null) :
                 new KeyCacheObjectImpl(obj, null);
 
-        return isFieldsIndexingSupported(obj.getClass()) ? new UserKeyCacheIndexedObjectImpl(ctx, obj) :
+        return isFieldsIndexingSupported(obj.getClass()) ? new UserCacheIndexedObjectImpl(ctx, obj, null) :
             new UserKeyCacheObjectImpl(obj);
     }
 
@@ -583,50 +583,6 @@ public class IgniteCacheObjectProcessorImpl extends GridProcessorAdapter impleme
     }
 
     /**
-     * Wraps key provided by user, must be serialized before stored in cache.
-     * Used by classes that support fields indexing. Refer to {@link #isFieldsIndexingSupported(Class)}.
-     */
-    private static class UserKeyCacheIndexedObjectImpl extends KeyCacheIndexedObjectImpl {
-        /** */
-        private static final long serialVersionUID = 0L;
-
-        /**
-         *
-         */
-        public UserKeyCacheIndexedObjectImpl() {
-            //No-op.
-        }
-
-        /**
-         * @param key Key.
-         */
-        UserKeyCacheIndexedObjectImpl(CacheObjectContext ctx, Object key) {
-            super(ctx, key, null);
-        }
-
-        /** {@inheritDoc} */
-        @Override public CacheObject prepareForCache(CacheObjectContext ctx) {
-            try {
-                if (!ctx.processor().immutable(val)) {
-                    toMarshaledFormIfNeeded();
-
-                    ClassLoader ldr = ctx.p2pEnabled() ?
-                        IgniteUtils.detectClassLoader(IgniteUtils.detectClass(val)) : U.gridClassLoader();
-
-                    Object val = ctx.processor().unmarshal(ctx, valBytes, start, len, ldr);
-
-                    return new KeyCacheIndexedObjectImpl(ctx, val, valBytes, start, len);
-                }
-
-                return new KeyCacheIndexedObjectImpl(ctx, val, valBytes, start, len);
-            }
-            catch (IgniteCheckedException e) {
-                throw new IgniteException("Failed to marshal object: " + val, e);
-            }
-        }
-    }
-
-    /**
      * Wraps value provided by user, must be copied before stored in cache.
      */
     private static class UserCacheObjectByteArrayImpl extends CacheObjectByteArrayImpl {

http://git-wip-us.apache.org/repos/asf/ignite/blob/b3fd771c/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java
index f76da26..0581977 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java
@@ -26,6 +26,7 @@ import org.apache.ignite.internal.*;
 import org.apache.ignite.internal.processors.*;
 import org.apache.ignite.internal.processors.cache.*;
 import org.apache.ignite.internal.processors.cache.query.*;
+import org.apache.ignite.internal.processors.cacheobject.*;
 import org.apache.ignite.internal.util.*;
 import org.apache.ignite.internal.util.future.*;
 import org.apache.ignite.internal.util.lang.*;
@@ -686,7 +687,7 @@ public class GridQueryProcessor extends GridProcessorAdapter {
                         String space = cctx.name();
                         String type = qry.getType();
                         String sqlQry = qry.getSql();
-                        Object[] params = qry.getArgs();
+                        Object[] params = wrapQueryArguments(cctx, qry.getArgs());
 
                         TypeDescriptor typeDesc = typesByName.get(
                             new TypeName(
@@ -784,7 +785,7 @@ public class GridQueryProcessor extends GridProcessorAdapter {
                 @Override public QueryCursor<List<?>> applyx() throws IgniteCheckedException {
                     String space = cctx.name();
                     String sql = qry.getSql();
-                    Object[] args = qry.getArgs();
+                    Object[] args = wrapQueryArguments(cctx, qry.getArgs());
 
                     final GridQueryFieldsResult res = idx.queryFields(space, sql, F.asList(args),
                         idx.backupFilter(null, null, null));
@@ -852,7 +853,7 @@ public class GridQueryProcessor extends GridProcessorAdapter {
     public static boolean isSqlType(Class<?> cls) {
         cls = U.box(cls);
 
-        return SQL_TYPES.contains(cls) || isGeometryClass(cls);
+        return SQL_TYPES.contains(cls) || isGeometryClass(cls) || (cls.isArray() && isSqlType(cls.getComponentType()));
     }
 
     /**
@@ -1071,6 +1072,39 @@ public class GridQueryProcessor extends GridProcessorAdapter {
     }
 
     /**
+     * Converts arguments to cache indexed objects if needed.
+     *
+     * @param args Arguments to wrap.
+     * @return Wrapped array.
+     */
+    public Object[] wrapQueryArguments(GridCacheContext cctx, Object[] args) {
+        IgniteCacheObjectProcessor objs = ctx.cacheObjects();
+
+        if (!objs.isFieldsIndexingEnabled() || args == null)
+            return args;
+
+        Object[] cpy = null;
+
+        for (int i = 0; i < args.length; i++) {
+            if (args[i] != null && objs.isFieldsIndexingSupported(args[i].getClass())) {
+                if (cpy == null) {
+                    cpy = new Object[args.length];
+
+                    System.arraycopy(args, 0, cpy, 0, i);
+                }
+
+                cpy[i] = objs.toCacheObject(cctx.cacheObjectContext(), args[i], false);
+            }
+            else {
+                if (cpy != null)
+                    cpy[i] = args[i];
+            }
+        }
+
+        return cpy == null ? args : cpy;
+    }
+
+    /**
      * Processes declarative metadata for class.
      *
      * @param meta Type metadata.
@@ -1250,17 +1284,19 @@ public class GridQueryProcessor extends GridProcessorAdapter {
                 int order = 0;
 
                 for (Map.Entry<String, IgniteBiTuple<Class<?>, Boolean>> idxField : idxFields.entrySet()) {
-                    // Skip _val field as it is an implicit field.
-                    if (_VAL.equals(idxField.getKey()))
-                        continue;
+                    Property prop = null;
 
-                    Property prop = buildPortableProperty(idxField.getKey(), idxField.getValue().get1(), aliases);
+                    // Skip _val field as it is an implicit field.
+                    if (!_VAL.equals(idxField.getKey())) {
+                        prop = buildPortableProperty(idxField.getKey(), idxField.getValue().get1(), aliases);
 
-                    d.addProperty(prop, false);
+                        d.addProperty(prop, false);
+                    }
 
                     Boolean descending = idxField.getValue().get2();
 
-                    d.addFieldToIndex(idxName, prop.name(), order, descending != null && descending);
+                    d.addFieldToIndex(idxName, prop == null ? idxField.getKey() : prop.name(), order,
+                        descending != null && descending);
 
                     order++;
                 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/b3fd771c/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 eabebc6..9ce2c9f 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
@@ -1334,7 +1334,7 @@ public class OptimizedObjectInputStream extends ObjectInputStream implements Opt
             }
         }
         else
-            throw new IgniteFieldNotFoundException("Object doesn't have a field with the name: " + fieldName);
+            return null;
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/b3fd771c/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAbstractQuerySelfTest.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAbstractQuerySelfTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAbstractQuerySelfTest.java
index f0ee81f..a8f0219 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAbstractQuerySelfTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAbstractQuerySelfTest.java
@@ -32,7 +32,6 @@ import org.apache.ignite.internal.util.tostring.*;
 import org.apache.ignite.internal.util.typedef.*;
 import org.apache.ignite.internal.util.typedef.internal.*;
 import org.apache.ignite.lang.*;
-import org.apache.ignite.marshaller.optimized.*;
 import org.apache.ignite.spi.discovery.tcp.*;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.*;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.*;
@@ -1195,7 +1194,7 @@ public abstract class IgniteCacheAbstractQuerySelfTest extends GridCommonAbstrac
 
         QueryCursor<Cache.Entry<UUID, Person>> q = cache.query(new TextQuery<UUID, Person>(Person.class, "White"));
 
-        q.getAll();
+        assertEquals(2, q.getAll().size());
 
         assert latch.await(1000, MILLISECONDS);
         assert execLatch.await(1000, MILLISECONDS);
@@ -1275,7 +1274,7 @@ public abstract class IgniteCacheAbstractQuerySelfTest extends GridCommonAbstrac
     /**
      *
      */
-    public static class Person implements Externalizable {
+    public static class Person implements Serializable {
         /** */
         @GridToStringExclude
         @QuerySqlField
@@ -1292,7 +1291,7 @@ public abstract class IgniteCacheAbstractQuerySelfTest extends GridCommonAbstrac
 
         /** */
         @QuerySqlField(index = true)
-        private int fake$Field;
+        private transient int fake$Field;
 
         /**
          * Required by {@link Externalizable}.
@@ -1335,20 +1334,6 @@ public abstract class IgniteCacheAbstractQuerySelfTest extends GridCommonAbstrac
         }
 
         /** {@inheritDoc} */
-        @Override public void writeExternal(ObjectOutput out) throws IOException {
-            U.writeUuid(out, id);
-            U.writeString(out, name);
-            out.writeInt(salary);
-        }
-
-        /** {@inheritDoc} */
-        @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
-            id = U.readUuid(in);
-            name = U.readString(in);
-            salary = in.readInt();
-        }
-
-        /** {@inheritDoc} */
         @Override public int hashCode() {
             return id.hashCode() + 31 * name.hashCode() + 31 * 31 * salary;
         }