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 10:30:29 UTC
incubator-ignite git commit: ignite-950: performance improvements
Repository: incubator-ignite
Updated Branches:
refs/heads/ignite-950 ca8d66e92 -> f632f1d95
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/f632f1d9
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/f632f1d9
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/f632f1d9
Branch: refs/heads/ignite-950
Commit: f632f1d95bbe181b157f8c05bf1857a95fb4b0af
Parents: ca8d66e
Author: Denis Magda <dm...@gridgain.com>
Authored: Wed Jun 24 11:30:10 2015 +0300
Committer: Denis Magda <dm...@gridgain.com>
Committed: Wed Jun 24 11:30:10 2015 +0300
----------------------------------------------------------------------
.../ignite/internal/util/GridHandleTable.java | 9 ++
.../optimized/OptimizedMarshallerExt.java | 106 ++++++++++++-------
.../OptimizedObjectInputStreamExt.java | 6 +-
.../OptimizedObjectOutputStreamExt.java | 6 +-
.../OptimizedObjectStreamSelfTest.java | 3 +-
modules/yardstick/pom.xml | 6 ++
6 files changed, 88 insertions(+), 48 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/f632f1d9/modules/core/src/main/java/org/apache/ignite/internal/util/GridHandleTable.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/GridHandleTable.java b/modules/core/src/main/java/org/apache/ignite/internal/util/GridHandleTable.java
index 639a5c1..fc117d4 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/GridHandleTable.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/GridHandleTable.java
@@ -271,6 +271,15 @@ public class GridHandleTable {
public int length() {
return len;
}
+
+ /**
+ * Returns object.
+ *
+ * @return Object.
+ */
+ public Object object() {
+ return object;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/f632f1d9/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerExt.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerExt.java b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerExt.java
index 9ed2d0a..684b29b 100644
--- a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerExt.java
+++ b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshallerExt.java
@@ -25,7 +25,7 @@ import org.apache.ignite.services.*;
import org.jetbrains.annotations.*;
import java.io.*;
-import java.util.*;
+import java.util.concurrent.*;
import static org.apache.ignite.marshaller.optimized.OptimizedClassDescriptor.*;
@@ -52,6 +52,9 @@ public class OptimizedMarshallerExt extends OptimizedMarshaller {
public static final byte VARIABLE_LEN = -1;
/** */
+ private final static ConcurrentHashMap<Class<?>, Boolean> indexingEnabledCache = new ConcurrentHashMap<>();
+
+ /** */
private volatile OptimizedMarshallerMetaHandler metaHandler;
/**
@@ -103,6 +106,46 @@ public class OptimizedMarshallerExt extends OptimizedMarshaller {
}
/**
+ * Checks whether fields indexing is enabled for objects of the given {@code cls}.
+ *
+ * @param cls Class.
+ * @param metaHandler Metadata handler.
+ * @param ctx Marshaller context.
+ * @param clsMap Class map.
+ * @param mapper ID Mapper.
+ * @return {@code true} if fields indexing is enabled.
+ */
+ static boolean fieldsIndexingSupported(Class<?> cls, OptimizedMarshallerMetaHandler metaHandler,
+ MarshallerContext ctx, ConcurrentMap<Class, OptimizedClassDescriptor> clsMap,
+ OptimizedMarshallerIdMapper mapper) {
+ Boolean res = indexingEnabledCache.get(cls);
+
+ if (res != null)
+ return res;
+
+ if (isFieldsIndexingExcludedForClass(ctx, cls))
+ res = false;
+ else if (OptimizedMarshalAware.class.isAssignableFrom(cls))
+ res = true;
+ else {
+ try {
+ OptimizedClassDescriptor desc = OptimizedMarshallerUtils.classDescriptor(clsMap, cls, ctx, mapper);
+
+ res = desc.fields() != null && desc.fields().fieldsIndexingSupported() && metaHandler != null &&
+ metaHandler.metadata(desc.typeId()) != null;
+ } catch (IOException e) {
+ throw new IgniteException("Failed to load class description: " + cls);
+ }
+ }
+
+ synchronized (indexingEnabledCache) {
+ indexingEnabledCache.putIfAbsent(cls, res);
+ }
+
+ return res;
+ }
+
+ /**
* Enables fields indexing for the object of the given {@code cls}.
*
* If enabled then a footer will be added during marshalling of an object of the given {@code cls} to the end of
@@ -115,37 +158,40 @@ public class OptimizedMarshallerExt extends OptimizedMarshaller {
public boolean enableFieldsIndexing(Class<?> cls) throws IgniteCheckedException {
assert metaHandler != null;
- if (isFieldsIndexingExcludedForClass(ctx, cls))
- return false;
-
- if (OptimizedMarshalAware.class.isAssignableFrom(cls))
- return true;
+ boolean res;
- try {
- OptimizedClassDescriptor desc = OptimizedMarshallerUtils.classDescriptor(clsMap, cls, ctx, mapper);
+ if (isFieldsIndexingExcludedForClass(ctx, cls))
+ res = false;
+ else if (OptimizedMarshalAware.class.isAssignableFrom(cls))
+ res = true;
+ else {
+ try {
+ OptimizedClassDescriptor desc = OptimizedMarshallerUtils.classDescriptor(clsMap, cls, ctx, mapper);
- if (desc.fields() != null && desc.fields().fieldsIndexingSupported()) {
- //The function is called on kernel startup, calling metaHandler.metadata() will hang the grid,
- //because the underlying cache is not ready.
- //if (metaHandler.metadata(desc.typeId()) != null)
- // return true;
+ if (desc.fields() != null && desc.fields().fieldsIndexingSupported()) {
+ OptimizedObjectMetadata meta = new OptimizedObjectMetadata();
- OptimizedObjectMetadata meta = new OptimizedObjectMetadata();
+ for (ClassFields clsFields : desc.fields().fieldsList())
+ for (FieldInfo info : clsFields.fieldInfoList())
+ meta.addMeta(info.id(), info.type());
- for (ClassFields clsFields : desc.fields().fieldsList())
- for (FieldInfo info : clsFields.fieldInfoList())
- meta.addMeta(info.id(), info.type());
+ metaHandler.addMeta(desc.typeId(), meta);
- metaHandler.addMeta(desc.typeId(), meta);
+ res = true;
+ }
+ else
+ res = false;
- return true;
+ } catch (IOException e) {
+ throw new IgniteCheckedException("Failed to put meta for class: " + cls.getName(), e);
}
}
- catch (IOException e) {
- throw new IgniteCheckedException("Failed to put meta for class: " + cls.getName(), e);
+
+ synchronized (indexingEnabledCache) {
+ indexingEnabledCache.put(cls, res);
}
- return false;
+ return res;
}
/**
@@ -157,21 +203,7 @@ public class OptimizedMarshallerExt extends OptimizedMarshaller {
public boolean fieldsIndexingEnabled(Class<?> cls) {
assert metaHandler != null;
- if (isFieldsIndexingExcludedForClass(ctx, cls))
- return false;
-
- if (OptimizedMarshalAware.class.isAssignableFrom(cls))
- return true;
-
- try {
- OptimizedClassDescriptor desc = OptimizedMarshallerUtils.classDescriptor(clsMap, cls, ctx, mapper);
-
- return desc.fields() != null && desc.fields().fieldsIndexingSupported() &&
- metaHandler.metadata(desc.typeId()) != null;
- }
- catch (IOException e) {
- throw new IgniteException("Failed to load class description: " + cls);
- }
+ return fieldsIndexingSupported(cls, metaHandler, ctx, clsMap, mapper);
}
/** {@inheritDoc} */
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/f632f1d9/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 49c9339..622c19f 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
@@ -20,7 +20,6 @@ import org.apache.ignite.internal.util.io.*;
import java.io.*;
-import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerUtils.*;
import static org.apache.ignite.marshaller.optimized.OptimizedMarshallerExt.*;
@@ -35,10 +34,7 @@ public class OptimizedObjectInputStreamExt extends OptimizedObjectInputStream {
/** {@inheritDoc} */
@Override protected void skipFooter(Class<?> cls) throws IOException {
- if (isFieldsIndexingExcludedForClass(ctx, cls))
- return;
-
- if (metaHandler != null && metaHandler.metadata(resolveTypeId(cls.getName(), mapper)) != null) {
+ if (fieldsIndexingSupported(cls, metaHandler, ctx, clsMap, mapper)) {
short footerLen = in.readShort();
if (footerLen != EMPTY_FOOTER)
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/f632f1d9/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 b7dfda2..2be3165 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
@@ -47,11 +47,7 @@ public class OptimizedObjectOutputStreamExt extends OptimizedObjectOutputStream
/** {@inheritDoc} */
@Override protected Footer createFooter(Class<?> cls) {
- if (OptimizedMarshallerExt.isFieldsIndexingExcludedForClass(ctx, cls))
- return null;
-
- if (OptimizedMarshalAware.class.isAssignableFrom(cls) || (metaHandler != null &&
- metaHandler.metadata(resolveTypeId(cls.getName(), mapper)) != null))
+ if (fieldsIndexingSupported(cls, metaHandler, ctx, clsMap, mapper))
return new FooterImpl();
return null;
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/f632f1d9/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/OptimizedObjectStreamSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/OptimizedObjectStreamSelfTest.java b/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/OptimizedObjectStreamSelfTest.java
index 20391eb..5f16a22 100644
--- a/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/OptimizedObjectStreamSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/marshaller/optimized/OptimizedObjectStreamSelfTest.java
@@ -18,6 +18,7 @@
package org.apache.ignite.marshaller.optimized;
import org.apache.ignite.*;
+import org.apache.ignite.internal.util.*;
import org.apache.ignite.internal.util.io.*;
import org.apache.ignite.internal.util.typedef.*;
import org.apache.ignite.internal.util.typedef.internal.*;
@@ -1065,7 +1066,7 @@ public class OptimizedObjectStreamSelfTest extends GridCommonAbstractTest {
else {
assertFalse(inHandles[i] == null);
- assertTrue(outHandles[i].getClass() == inHandles[i].getClass());
+ assertTrue(((GridHandleTable.ObjectInfo)outHandles[i]).object().getClass() == inHandles[i].getClass());
}
}
}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/f632f1d9/modules/yardstick/pom.xml
----------------------------------------------------------------------
diff --git a/modules/yardstick/pom.xml b/modules/yardstick/pom.xml
index 5307447..80dfedf 100644
--- a/modules/yardstick/pom.xml
+++ b/modules/yardstick/pom.xml
@@ -40,6 +40,12 @@
<dependencies>
<dependency>
+ <groupId>org.openjdk.jmh</groupId>
+ <artifactId>jmh-core</artifactId>
+ <version>0.1</version>
+ </dependency>
+
+ <dependency>
<groupId>org.apache.ignite</groupId>
<artifactId>ignite-core</artifactId>
<version>${project.version}</version>