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/09/03 12:10:45 UTC
[01/18] ignite git commit: IGNITE-1356: Moved platforms Java public
API to Ignite.
Repository: ignite
Updated Branches:
refs/heads/ignite-1349 6320fde59 -> e7cea68ec
IGNITE-1356: Moved platforms Java public API to Ignite.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/86ab3a73
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/86ab3a73
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/86ab3a73
Branch: refs/heads/ignite-1349
Commit: 86ab3a7349c1bb46d88eb375866a00fc8f048c06
Parents: da29a70
Author: vozerov-gridgain <vo...@gridgain.com>
Authored: Wed Sep 2 13:54:28 2015 +0300
Committer: vozerov-gridgain <vo...@gridgain.com>
Committed: Wed Sep 2 13:54:28 2015 +0300
----------------------------------------------------------------------
.../configuration/PlatformConfiguration.java | 2 +-
.../dotnet/PlatformDotNetCacheStore.java | 497 +++++++++++++++++++
.../platform/cpp/PlatformCppConfiguration.java | 47 ++
.../dotnet/PlatformDotNetCacheStoreFactory.java | 139 ++++++
.../dotnet/PlatformDotNetConfiguration.java | 119 +++++
.../dotnet/PlatformDotNetLifecycleBean.java | 109 ++++
.../PlatformDotNetPortableConfiguration.java | 228 +++++++++
...PlatformDotNetPortableTypeConfiguration.java | 248 +++++++++
8 files changed, 1388 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/86ab3a73/modules/core/src/main/java/org/apache/ignite/configuration/PlatformConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/configuration/PlatformConfiguration.java b/modules/core/src/main/java/org/apache/ignite/configuration/PlatformConfiguration.java
index 20eb124..2b142d1 100644
--- a/modules/core/src/main/java/org/apache/ignite/configuration/PlatformConfiguration.java
+++ b/modules/core/src/main/java/org/apache/ignite/configuration/PlatformConfiguration.java
@@ -20,6 +20,6 @@ package org.apache.ignite.configuration;
/**
* Platform configuration marker interface.
*/
-public class PlatformConfiguration {
+public interface PlatformConfiguration {
// No-op.
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/86ab3a73/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetCacheStore.java
----------------------------------------------------------------------
diff --git a/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetCacheStore.java b/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetCacheStore.java
new file mode 100644
index 0000000..c86de5d
--- /dev/null
+++ b/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetCacheStore.java
@@ -0,0 +1,497 @@
+/*
+ * 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.platform.dotnet;
+
+import org.apache.ignite.IgniteCheckedException;
+import org.apache.ignite.cache.store.CacheStore;
+import org.apache.ignite.cache.store.CacheStoreSession;
+import org.apache.ignite.internal.GridKernalContext;
+import org.apache.ignite.internal.portable.PortableRawReaderEx;
+import org.apache.ignite.internal.portable.PortableRawWriterEx;
+import org.apache.ignite.internal.processors.platform.PlatformContext;
+import org.apache.ignite.internal.processors.platform.cache.store.PlatformCacheStore;
+import org.apache.ignite.internal.processors.platform.cache.store.PlatformCacheStoreCallback;
+import org.apache.ignite.internal.processors.platform.memory.PlatformMemory;
+import org.apache.ignite.internal.processors.platform.memory.PlatformOutputStream;
+import org.apache.ignite.internal.processors.platform.utils.PlatformUtils;
+import org.apache.ignite.internal.util.lang.GridMapEntry;
+import org.apache.ignite.internal.util.lang.GridTuple;
+import org.apache.ignite.internal.util.lang.IgniteInClosureX;
+import org.apache.ignite.internal.util.typedef.C1;
+import org.apache.ignite.internal.util.typedef.F;
+import org.apache.ignite.internal.util.typedef.internal.A;
+import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.lang.IgniteBiInClosure;
+import org.apache.ignite.resources.CacheStoreSessionResource;
+import org.jetbrains.annotations.Nullable;
+
+import javax.cache.Cache;
+import javax.cache.integration.CacheLoaderException;
+import javax.cache.integration.CacheWriterException;
+import java.util.AbstractMap;
+import java.util.AbstractSet;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Wrapper for .NET cache store implementations.
+ * <p>
+ * This wrapper should be used if you have an implementation of
+ * {@code GridGain.Cache.IGridCacheStore} interface in .NET and
+ * would like to configure it a persistence storage for your cache.
+ * If properly configured, this wrapper will instantiate an instance
+ * of your cache store in .NET and delegate all calls to that instance.
+ * To create an instance, assembly name and class name are passed to
+ * <a target="_blank" href="http://msdn.microsoft.com/en-us/library/d133hta4.aspx">System.Activator.CreateInstance(String, String)</a>
+ * method in .NET during node startup. Refer to its documentation for
+ * details.
+ */
+public class PlatformDotNetCacheStore<K, V> implements CacheStore<K, V>, PlatformCacheStore {
+ /** Load cache operation code. */
+ private static final byte OP_LOAD_CACHE = (byte)0;
+
+ /** Load operation code. */
+ private static final byte OP_LOAD = (byte)1;
+
+ /** Load all operation code. */
+ private static final byte OP_LOAD_ALL = (byte)2;
+
+ /** Put operation code. */
+ private static final byte OP_PUT = (byte)3;
+
+ /** Put all operation code. */
+ private static final byte OP_PUT_ALL = (byte)4;
+
+ /** Remove operation code. */
+ private static final byte OP_RMV = (byte)5;
+
+ /** Remove all operation code. */
+ private static final byte OP_RMV_ALL = (byte)6;
+
+ /** Tx end operation code. */
+ private static final byte OP_SES_END = (byte)7;
+
+ /** Key used to distinguish session deployment. */
+ private static final Object KEY_SES = new Object();
+
+ /** */
+ @CacheStoreSessionResource
+ private CacheStoreSession ses;
+
+ /** .Net assembly name. */
+ private String assemblyName;
+
+ /** .Net class name. */
+ private String clsName;
+
+ /** Properties. */
+ private Map<String, ?> props;
+
+ /** Interop processor. */
+ protected PlatformContext platformCtx;
+
+ /** Pointer to native store. */
+ protected long ptr;
+
+ /**
+ * Gets .NET assembly name.
+ *
+ * @return .NET assembly name.
+ */
+ public String getAssemblyName() {
+ return assemblyName;
+ }
+
+ /**
+ * Set .NET assembly name.
+ *
+ * @param assemblyName .NET assembly name.
+ */
+ public void setAssemblyName(String assemblyName) {
+ this.assemblyName = assemblyName;
+ }
+
+ /**
+ * Gets .NET class name.
+ *
+ * @return .NET class name.
+ */
+ public String getClassName() {
+ return clsName;
+ }
+
+ /**
+ * Sets .NET class name.
+ *
+ * @param clsName .NET class name.
+ */
+ public void setClassName(String clsName) {
+ this.clsName = clsName;
+ }
+
+ /**
+ * Get properties.
+ *
+ * @return Properties.
+ */
+ public Map<String, ?> getProperties() {
+ return props;
+ }
+
+ /**
+ * Set properties.
+ *
+ * @param props Properties.
+ */
+ public void setProperties(Map<String, ?> props) {
+ this.props = props;
+ }
+
+ /** {@inheritDoc} */
+ @Nullable @Override public V load(final K key) {
+ try {
+ final GridTuple<V> val = new GridTuple<>();
+
+ doInvoke(new IgniteInClosureX<PortableRawWriterEx>() {
+ @Override public void applyx(PortableRawWriterEx writer) throws IgniteCheckedException {
+ writer.writeByte(OP_LOAD);
+ writer.writeLong(session());
+ writer.writeString(ses.cacheName());
+ writer.writeObject(key);
+ }
+ }, new LoadCallback<>(platformCtx, val));
+
+ return val.get();
+ }
+ catch (IgniteCheckedException e) {
+ throw new CacheLoaderException(e);
+ }
+ }
+
+ /** {@inheritDoc} */
+ @Override public Map<K, V> loadAll(final Iterable<? extends K> keys) {
+ try {
+ final Map<K, V> loaded = new HashMap<>();
+
+ doInvoke(new IgniteInClosureX<PortableRawWriterEx>() {
+ @Override public void applyx(PortableRawWriterEx writer) throws IgniteCheckedException {
+ writer.writeByte(OP_LOAD_ALL);
+ writer.writeLong(session());
+ writer.writeString(ses.cacheName());
+ writer.writeCollection((Collection) keys);
+ }
+ }, new LoadAllCallback<>(platformCtx, loaded));
+
+ return loaded;
+ }
+ catch (IgniteCheckedException e) {
+ throw new CacheLoaderException(e);
+ }
+ }
+
+ /** {@inheritDoc} */
+ @Override public void loadCache(final IgniteBiInClosure<K, V> clo, final @Nullable Object... args) {
+ try {
+ doInvoke(new IgniteInClosureX<PortableRawWriterEx>() {
+ @Override public void applyx(PortableRawWriterEx writer) throws IgniteCheckedException {
+ writer.writeByte(OP_LOAD_CACHE);
+ writer.writeLong(session());
+ writer.writeString(ses.cacheName());
+ writer.writeObjectArray(args);
+ }
+ }, new LoadCacheCallback<>(platformCtx, clo));
+ }
+ catch (IgniteCheckedException e) {
+ throw new CacheLoaderException(e);
+ }
+ }
+
+ /** {@inheritDoc} */
+ @Override public void write(final Cache.Entry<? extends K, ? extends V> entry) {
+ try {
+ doInvoke(new IgniteInClosureX<PortableRawWriterEx>() {
+ @Override public void applyx(PortableRawWriterEx writer) throws IgniteCheckedException {
+ writer.writeByte(OP_PUT);
+ writer.writeLong(session());
+ writer.writeString(ses.cacheName());
+ writer.writeObject(entry.getKey());
+ writer.writeObject(entry.getValue());
+ }
+ }, null);
+ }
+ catch (IgniteCheckedException e) {
+ throw new CacheWriterException(U.convertExceptionNoWrap(e));
+ }
+ }
+
+ /** {@inheritDoc} */
+ @SuppressWarnings({"NullableProblems", "unchecked"})
+ @Override public void writeAll(final Collection<Cache.Entry<? extends K, ? extends V>> entries) {
+ try {
+ doInvoke(new IgniteInClosureX<PortableRawWriterEx>() {
+ @Override public void applyx(PortableRawWriterEx writer) throws IgniteCheckedException {
+ Map<K, V> map = new AbstractMap<K, V>() {
+ @Override public int size() {
+ return entries.size();
+ }
+
+ @Override public Set<Entry<K, V>> entrySet() {
+ return new AbstractSet<Entry<K, V>>() {
+ @Override public Iterator<Entry<K, V>> iterator() {
+ return F.iterator(entries, new C1<Cache.Entry<? extends K, ? extends V>, Entry<K, V>>() {
+ private static final long serialVersionUID = 0L;
+
+ @Override public Entry<K, V> apply(Cache.Entry<? extends K, ? extends V> entry) {
+ return new GridMapEntry<>(entry.getKey(), entry.getValue());
+ }
+ }, true);
+ }
+
+ @Override public int size() {
+ return entries.size();
+ }
+ };
+ }
+ };
+
+ writer.writeByte(OP_PUT_ALL);
+ writer.writeLong(session());
+ writer.writeString(ses.cacheName());
+ writer.writeMap(map);
+ }
+ }, null);
+ }
+ catch (IgniteCheckedException e) {
+ throw new CacheWriterException(U.convertExceptionNoWrap(e));
+ }
+ }
+
+ /** {@inheritDoc} */
+ @Override public void delete(final Object key) {
+ try {
+ doInvoke(new IgniteInClosureX<PortableRawWriterEx>() {
+ @Override public void applyx(PortableRawWriterEx writer) throws IgniteCheckedException {
+ writer.writeByte(OP_RMV);
+ writer.writeLong(session());
+ writer.writeString(ses.cacheName());
+ writer.writeObject(key);
+ }
+ }, null);
+ }
+ catch (IgniteCheckedException e) {
+ throw new CacheWriterException(U.convertExceptionNoWrap(e));
+ }
+ }
+
+ /** {@inheritDoc} */
+ @Override public void deleteAll(final Collection<?> keys) {
+ try {
+ doInvoke(new IgniteInClosureX<PortableRawWriterEx>() {
+ @Override public void applyx(PortableRawWriterEx writer) throws IgniteCheckedException {
+ writer.writeByte(OP_RMV_ALL);
+ writer.writeLong(session());
+ writer.writeString(ses.cacheName());
+ writer.writeCollection(keys);
+ }
+ }, null);
+ }
+ catch (IgniteCheckedException e) {
+ throw new CacheWriterException(U.convertExceptionNoWrap(e));
+ }
+ }
+
+ /** {@inheritDoc} */
+ @Override public void sessionEnd(final boolean commit) {
+ try {
+ doInvoke(new IgniteInClosureX<PortableRawWriterEx>() {
+ @Override public void applyx(PortableRawWriterEx writer) throws IgniteCheckedException {
+ writer.writeByte(OP_SES_END);
+ writer.writeLong(session());
+ writer.writeString(ses.cacheName());
+ writer.writeBoolean(commit);
+ }
+ }, null);
+ }
+ catch (IgniteCheckedException e) {
+ throw new CacheWriterException(U.convertExceptionNoWrap(e));
+ }
+ }
+
+ /**
+ * Initialize the store.
+ *
+ * @param ctx Context.
+ * @param convertPortable Convert portable flag.
+ * @throws org.apache.ignite.IgniteCheckedException
+ */
+ public void initialize(GridKernalContext ctx, boolean convertPortable) throws IgniteCheckedException {
+ A.notNull(assemblyName, "assemblyName");
+ A.notNull(clsName, "clsName");
+
+ platformCtx = PlatformUtils.platformContext(ctx.grid());
+
+ try (PlatformMemory mem = platformCtx.memory().allocate()) {
+ PlatformOutputStream out = mem.output();
+
+ PortableRawWriterEx writer = platformCtx.writer(out);
+
+ writer.writeString(assemblyName);
+ writer.writeString(clsName);
+ writer.writeBoolean(convertPortable);
+ writer.writeMap(props);
+
+ out.synchronize();
+
+ ptr = platformCtx.gateway().cacheStoreCreate(mem.pointer());
+ }
+ }
+
+ /**
+ * Gets session pointer created in native platform.
+ *
+ * @return Session pointer.
+ * @throws org.apache.ignite.IgniteCheckedException If failed.
+ */
+ private long session() throws IgniteCheckedException {
+ Long sesPtr = (Long)ses.properties().get(KEY_SES);
+
+ if (sesPtr == null) {
+ // Session is not deployed yet, do that.
+ sesPtr = platformCtx.gateway().cacheStoreSessionCreate(ptr);
+
+ ses.properties().put(KEY_SES, sesPtr);
+ }
+
+ return sesPtr;
+ }
+
+ /**
+ * Perform actual invoke.
+ *
+ * @param task Task.
+ * @param cb Optional callback.
+ * @return Result.
+ * @throws org.apache.ignite.IgniteCheckedException If failed.
+ */
+ protected int doInvoke(IgniteInClosureX<PortableRawWriterEx> task, @Nullable PlatformCacheStoreCallback cb)
+ throws IgniteCheckedException{
+ try (PlatformMemory mem = platformCtx.memory().allocate()) {
+ PlatformOutputStream out = mem.output();
+
+ PortableRawWriterEx writer = platformCtx.writer(out);
+
+ task.apply(writer);
+
+ out.synchronize();
+
+ return platformCtx.gateway().cacheStoreInvoke(ptr, mem.pointer(), cb);
+ }
+ }
+
+ /**
+ * Destroys interop-aware component.
+ *
+ * @param ctx Context.
+ */
+ public void destroy(GridKernalContext ctx) {
+ assert ctx != null;
+
+ platformCtx.gateway().cacheStoreDestroy(ptr);
+ }
+
+ /**
+ * Load callback.
+ */
+ private static class LoadCallback<V> extends PlatformCacheStoreCallback {
+ /** Value. */
+ private final GridTuple<V> val;
+
+ /**
+ * Constructor.
+ *
+ * @param ctx Context.
+ * @param val Value.
+ */
+ public LoadCallback(PlatformContext ctx, GridTuple<V> val) {
+ super(ctx);
+
+ this.val = val;
+ }
+
+ /** {@inheritDoc} */
+ @SuppressWarnings("unchecked")
+ @Override protected void invoke0(PortableRawReaderEx reader) {
+ val.set((V)reader.readObjectDetached());
+ }
+ }
+
+ /**
+ * Load callback.
+ */
+ private static class LoadAllCallback<K, V> extends PlatformCacheStoreCallback {
+ /** Value. */
+ private final Map<K, V> loaded;
+
+ /**
+ * Constructor.
+ *
+ * @param ctx Context.
+ * @param loaded Map with loaded values.
+ */
+ public LoadAllCallback(PlatformContext ctx, Map<K, V> loaded) {
+ super(ctx);
+
+ this.loaded = loaded;
+ }
+
+ /** {@inheritDoc} */
+ @SuppressWarnings("unchecked")
+ @Override protected void invoke0(PortableRawReaderEx reader) {
+ loaded.put((K) reader.readObjectDetached(), (V) reader.readObjectDetached());
+ }
+ }
+
+ /**
+ * Load callback.
+ */
+ private static class LoadCacheCallback<K, V> extends PlatformCacheStoreCallback {
+ /** Value. */
+ private final IgniteBiInClosure<K, V> clo;
+
+ /**
+ * Constructor.
+ *
+ * @param ctx Context.
+ * @param clo Closure.
+ */
+ public LoadCacheCallback(PlatformContext ctx, IgniteBiInClosure<K, V> clo) {
+ super(ctx);
+
+ this.clo = clo;
+ }
+
+ /** {@inheritDoc} */
+ @SuppressWarnings("unchecked")
+ @Override protected void invoke0(PortableRawReaderEx reader) {
+ clo.apply((K) reader.readObjectDetached(), (V) reader.readObjectDetached());
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/86ab3a73/modules/platform/src/main/java/org/apache/ignite/platform/cpp/PlatformCppConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/platform/src/main/java/org/apache/ignite/platform/cpp/PlatformCppConfiguration.java b/modules/platform/src/main/java/org/apache/ignite/platform/cpp/PlatformCppConfiguration.java
new file mode 100644
index 0000000..18f8a43
--- /dev/null
+++ b/modules/platform/src/main/java/org/apache/ignite/platform/cpp/PlatformCppConfiguration.java
@@ -0,0 +1,47 @@
+/*
+ * 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.platform.cpp;
+
+import org.apache.ignite.configuration.PlatformConfiguration;
+import org.apache.ignite.internal.util.typedef.internal.S;
+
+/**
+ * Platform CPP configuration.
+ */
+public class PlatformCppConfiguration implements PlatformConfiguration {
+ /**
+ * Default constructor.
+ */
+ public PlatformCppConfiguration() {
+ // No-op.
+ }
+
+ /**
+ * Copying constructor.
+ *
+ * @param cfg Configuration to copy.
+ */
+ public PlatformCppConfiguration(PlatformConfiguration cfg) {
+ // No-op.
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return S.toString(PlatformConfiguration.class, this);
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/86ab3a73/modules/platform/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetCacheStoreFactory.java
----------------------------------------------------------------------
diff --git a/modules/platform/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetCacheStoreFactory.java b/modules/platform/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetCacheStoreFactory.java
new file mode 100644
index 0000000..97f0dce
--- /dev/null
+++ b/modules/platform/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetCacheStoreFactory.java
@@ -0,0 +1,139 @@
+/*
+ * 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.platform.dotnet;
+
+import org.apache.ignite.internal.processors.platform.dotnet.PlatformDotNetCacheStore;
+
+import javax.cache.configuration.Factory;
+import java.util.Map;
+
+/**
+ * Wrapper for .NET cache store implementations.
+ * <p>
+ * This wrapper should be used if you have an implementation of
+ * {@code GridGain.Cache.IGridCacheStore} interface in .NET and
+ * would like to configure it a persistence storage for your cache.
+ * To do tis you will need to configure the wrapper via
+ * {@link org.apache.ignite.configuration.CacheConfiguration#setCacheStoreFactory(javax.cache.configuration.Factory)} property
+ * and provide assembly name and class name of your .NET store
+ * implementation (both properties are mandatory):
+ * <pre name="code" class="xml">
+ * <bean class="org.apache.ignite.cache.CacheConfiguration">
+ * ...
+ * <property name="cacheStoreFactory">
+ * <bean class="org.gridgain.grid.interop.dotnet.InteropDotNetCacheStoreFactory">
+ * <property name="assemblyName" value="MyAssembly"/>
+ * <property name="className" value="MyApp.MyCacheStore"/>
+ * </bean>
+ * </property>
+ * ...
+ * </bean>
+ * </pre>
+ * If properly configured, this wrapper will instantiate an instance
+ * of your cache store in .NET and delegate all calls to that instance.
+ * To create an instance, assembly name and class name are passed to
+ * <a target="_blank" href="http://msdn.microsoft.com/en-us/library/d133hta4.aspx">System.Activator.CreateInstance(String, String)</a>
+ * method in .NET during node startup. Refer to its documentation for
+ * details.
+ */
+public class PlatformDotNetCacheStoreFactory implements Factory<PlatformDotNetCacheStore> {
+ /** */
+ private static final long serialVersionUID = 0L;
+
+ /** .Net assembly name. */
+ private String assemblyName;
+
+ /** .Net class name. */
+ private String clsName;
+
+ /** Properties. */
+ private Map<String, ?> props;
+
+ /** Instance. */
+ private transient PlatformDotNetCacheStore instance;
+
+ /**
+ * Gets .NET assembly name.
+ *
+ * @return .NET assembly name.
+ */
+ public String getAssemblyName() {
+ return assemblyName;
+ }
+
+ /**
+ * Set .NET assembly name.
+ *
+ * @param assemblyName .NET assembly name.
+ */
+ public void setAssemblyName(String assemblyName) {
+ this.assemblyName = assemblyName;
+ }
+
+ /**
+ * Gets .NET class name.
+ *
+ * @return .NET class name.
+ */
+ public String getClassName() {
+ return clsName;
+ }
+
+ /**
+ * Sets .NET class name.
+ *
+ * @param clsName .NET class name.
+ */
+ public void setClassName(String clsName) {
+ this.clsName = clsName;
+ }
+
+ /**
+ * Get properties.
+ *
+ * @return Properties.
+ */
+ public Map<String, ?> getProperties() {
+ return props;
+ }
+
+ /**
+ * Set properties.
+ *
+ * @param props Properties.
+ */
+ public void setProperties(Map<String, ?> props) {
+ this.props = props;
+ }
+
+ /** {@inheritDoc} */
+ @SuppressWarnings("unchecked")
+ @Override public PlatformDotNetCacheStore create() {
+ synchronized (this) {
+ if (instance == null) {
+ instance = new PlatformDotNetCacheStore();
+
+ instance.setAssemblyName(assemblyName);
+ instance.setClassName(clsName);
+ instance.setProperties(props);
+ }
+
+ return instance;
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/86ab3a73/modules/platform/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/platform/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetConfiguration.java b/modules/platform/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetConfiguration.java
new file mode 100644
index 0000000..80f4b26
--- /dev/null
+++ b/modules/platform/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetConfiguration.java
@@ -0,0 +1,119 @@
+/*
+ * 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.platform.dotnet;
+
+import org.apache.ignite.configuration.PlatformConfiguration;
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.portable.PortableException;
+import org.apache.ignite.portable.PortableMarshalAware;
+import org.apache.ignite.portable.PortableRawReader;
+import org.apache.ignite.portable.PortableRawWriter;
+import org.apache.ignite.portable.PortableReader;
+import org.apache.ignite.portable.PortableWriter;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Mirror of .Net class Configuration.cs
+ */
+public class PlatformDotNetConfiguration implements PlatformConfiguration, PortableMarshalAware {
+ /** */
+ private PlatformDotNetPortableConfiguration portableCfg;
+
+ /** */
+ private List<String> assemblies;
+
+ /**
+ * Default constructor.
+ */
+ public PlatformDotNetConfiguration() {
+ // No-op.
+ }
+
+ /**
+ * Copy constructor.
+ *
+ * @param cfg Configuration to copy.
+ */
+ public PlatformDotNetConfiguration(PlatformDotNetConfiguration cfg) {
+ if (cfg.getPortableConfiguration() != null)
+ portableCfg = new PlatformDotNetPortableConfiguration(cfg.getPortableConfiguration());
+
+ if (cfg.getAssemblies() != null)
+ assemblies = new ArrayList<>(cfg.getAssemblies());
+ }
+
+ /**
+ * @return Configuration.
+ */
+ public PlatformDotNetPortableConfiguration getPortableConfiguration() {
+ return portableCfg;
+ }
+
+ /**
+ * @param portableCfg Configuration.
+ */
+ public void setPortableConfiguration(PlatformDotNetPortableConfiguration portableCfg) {
+ this.portableCfg = portableCfg;
+ }
+
+ /**
+ * @return Assemblies.
+ */
+ public List<String> getAssemblies() {
+ return assemblies;
+ }
+
+ /**
+ *
+ * @param assemblies Assemblies.
+ */
+ public void setAssemblies(List<String> assemblies) {
+ this.assemblies = assemblies;
+ }
+
+ /**
+ * @return Configuration copy.
+ */
+ @SuppressWarnings("UnusedDeclaration")
+ private PlatformDotNetConfiguration copy() {
+ return new PlatformDotNetConfiguration(this);
+ }
+
+ /** {@inheritDoc} */
+ @Override public void writePortable(PortableWriter writer) throws PortableException {
+ PortableRawWriter rawWriter = writer.rawWriter();
+
+ rawWriter.writeObject(portableCfg);
+ rawWriter.writeCollection(assemblies);
+ }
+
+ /** {@inheritDoc} */
+ @Override public void readPortable(PortableReader reader) throws PortableException {
+ PortableRawReader rawReader = reader.rawReader();
+
+ portableCfg = rawReader.readObject();
+ assemblies = (List<String>)rawReader.<String>readCollection();
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return S.toString(PlatformDotNetConfiguration.class, this);
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/86ab3a73/modules/platform/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetLifecycleBean.java
----------------------------------------------------------------------
diff --git a/modules/platform/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetLifecycleBean.java b/modules/platform/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetLifecycleBean.java
new file mode 100644
index 0000000..8e4b590
--- /dev/null
+++ b/modules/platform/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetLifecycleBean.java
@@ -0,0 +1,109 @@
+/*
+ * 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.platform.dotnet;
+
+import org.apache.ignite.internal.processors.platform.lifecycle.PlatformLifecycleBean;
+import org.apache.ignite.lifecycle.LifecycleBean;
+
+import java.util.Map;
+
+/**
+ * Lifecycle bean implementation which can be used to configure .Net lifecycle beans in Java Spring configuration.
+ */
+public class PlatformDotNetLifecycleBean extends PlatformLifecycleBean implements LifecycleBean {
+ /** Assembly name. */
+ private String assemblyName;
+
+ /** Class name. */
+ private String clsName;
+
+ /** Properties. */
+ private Map<String, ?> props;
+
+ /**
+ * Constructor.
+ */
+ public PlatformDotNetLifecycleBean() {
+ // No-op.
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param assemblyName Assembly name.
+ * @param clsName Class name.
+ */
+ public PlatformDotNetLifecycleBean(String assemblyName, String clsName) {
+ this.assemblyName = assemblyName;
+ this.clsName = clsName;
+ }
+
+ /**
+ * Get assembly name.
+ *
+ * @return Assembly name.
+ */
+ public String getAssemblyName() {
+ return assemblyName;
+ }
+
+ /**
+ * Set assembly name.
+ *
+ * @param assemblyName Assembly name.
+ */
+ public void setAssemblyName(String assemblyName) {
+ this.assemblyName = assemblyName;
+ }
+
+ /**
+ * Get class name.
+ *
+ * @return Class name.
+ */
+ public String getClassName() {
+ return clsName;
+ }
+
+ /**
+ * Set class name.
+ *
+ * @param clsName Class name.
+ */
+ public void setClassName(String clsName) {
+ this.clsName = clsName;
+ }
+
+ /**
+ * Get properties.
+ *
+ * @return Properties.
+ */
+ public Map<String, ?> getProperties() {
+ return props;
+ }
+
+ /**
+ * Set properties.
+ *
+ * @param props Properties.
+ */
+ public void setProperties(Map<String, ?> props) {
+ this.props = props;
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/86ab3a73/modules/platform/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetPortableConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/platform/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetPortableConfiguration.java b/modules/platform/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetPortableConfiguration.java
new file mode 100644
index 0000000..644a8e6
--- /dev/null
+++ b/modules/platform/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetPortableConfiguration.java
@@ -0,0 +1,228 @@
+/*
+ * 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.platform.dotnet;
+
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.portable.PortableException;
+import org.apache.ignite.portable.PortableMarshalAware;
+import org.apache.ignite.portable.PortableRawReader;
+import org.apache.ignite.portable.PortableRawWriter;
+import org.apache.ignite.portable.PortableReader;
+import org.apache.ignite.portable.PortableWriter;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+/**
+ * Mirror of .Net class PortableConfiguration.cs
+ */
+public class PlatformDotNetPortableConfiguration implements PortableMarshalAware {
+ /** Type cfgs. */
+ private Collection<PlatformDotNetPortableTypeConfiguration> typesCfg;
+
+ /** Types. */
+ private Collection<String> types;
+
+ /** Default name mapper. */
+ private String dfltNameMapper;
+
+ /** Default id mapper. */
+ private String dfltIdMapper;
+
+ /** Default serializer. */
+ private String dfltSerializer;
+
+ /** Default metadata enabled. */
+ private boolean dfltMetadataEnabled = true;
+
+ /** Whether to cache deserialized value in IGridPortableObject */
+ private boolean dfltKeepDeserialized = true;
+
+ /**
+ * Default constructor.
+ */
+ public PlatformDotNetPortableConfiguration() {
+ // No-op.
+ }
+
+ /**
+ * Copy constructor.
+ * @param cfg configuration to copy.
+ */
+ public PlatformDotNetPortableConfiguration(PlatformDotNetPortableConfiguration cfg) {
+ if (cfg.getTypesConfiguration() != null) {
+ typesCfg = new ArrayList<>();
+
+ for (PlatformDotNetPortableTypeConfiguration typeCfg : cfg.getTypesConfiguration())
+ typesCfg.add(new PlatformDotNetPortableTypeConfiguration(typeCfg));
+ }
+
+ if (cfg.getTypes() != null)
+ types = new ArrayList<>(cfg.getTypes());
+
+ dfltNameMapper = cfg.getDefaultNameMapper();
+ dfltIdMapper = cfg.getDefaultIdMapper();
+ dfltSerializer = cfg.getDefaultSerializer();
+ dfltMetadataEnabled = cfg.isDefaultMetadataEnabled();
+ dfltKeepDeserialized = cfg.isDefaultKeepDeserialized();
+ }
+
+ /**
+ * @return Type cfgs.
+ */
+ public Collection<PlatformDotNetPortableTypeConfiguration> getTypesConfiguration() {
+ return typesCfg;
+ }
+
+ /**
+ * @param typesCfg New type cfgs.
+ */
+ public void setTypesConfiguration(Collection<PlatformDotNetPortableTypeConfiguration> typesCfg) {
+ this.typesCfg = typesCfg;
+ }
+
+ /**
+ * @return Types.
+ */
+ public Collection<String> getTypes() {
+ return types;
+ }
+
+ /**
+ * @param types New types.
+ */
+ public void setTypes(Collection<String> types) {
+ this.types = types;
+ }
+
+ /**
+ * @return Default name mapper.
+ */
+ public String getDefaultNameMapper() {
+ return dfltNameMapper;
+ }
+
+ /**
+ * @param dfltNameMapper New default name mapper.
+ */
+ public void setDefaultNameMapper(String dfltNameMapper) {
+ this.dfltNameMapper = dfltNameMapper;
+ }
+
+ /**
+ * @return Default id mapper.
+ */
+ public String getDefaultIdMapper() {
+ return dfltIdMapper;
+ }
+
+ /**
+ * @param dfltIdMapper New default id mapper.
+ */
+ public void setDefaultIdMapper(String dfltIdMapper) {
+ this.dfltIdMapper = dfltIdMapper;
+ }
+
+ /**
+ * @return Default serializer.
+ */
+ public String getDefaultSerializer() {
+ return dfltSerializer;
+ }
+
+ /**
+ * @param dfltSerializer New default serializer.
+ */
+ public void setDefaultSerializer(String dfltSerializer) {
+ this.dfltSerializer = dfltSerializer;
+ }
+
+ /**
+ * Gets default metadata enabled flag. See {@link #setDefaultMetadataEnabled(boolean)} for more information.
+ *
+ * @return Default metadata enabled flag.
+ */
+ public boolean isDefaultMetadataEnabled() {
+ return dfltMetadataEnabled;
+ }
+
+ /**
+ * Sets default metadata enabled flag. When set to {@code true} all portable types will save it's metadata to
+ * cluster.
+ * <p />
+ * Can be overridden for particular type using
+ * {@link PlatformDotNetPortableTypeConfiguration#setMetadataEnabled(Boolean)}.
+ *
+ * @param dfltMetadataEnabled Default metadata enabled flag.
+ */
+ public void setDefaultMetadataEnabled(boolean dfltMetadataEnabled) {
+ this.dfltMetadataEnabled = dfltMetadataEnabled;
+ }
+
+ /**
+ * Gets default keep deserialized flag. See {@link #setDefaultKeepDeserialized(boolean)} for more information.
+ *
+ * @return Flag indicates whether to cache deserialized value in IGridPortableObject.
+ */
+ public boolean isDefaultKeepDeserialized() {
+ return dfltKeepDeserialized;
+ }
+
+ /**
+ * Sets default keep deserialized flag.
+ * <p />
+ * Can be overridden for particular type using
+ * {@link PlatformDotNetPortableTypeConfiguration#setKeepDeserialized(Boolean)}.
+ *
+ * @param keepDeserialized Keep deserialized flag.
+ */
+ public void setDefaultKeepDeserialized(boolean keepDeserialized) {
+ this.dfltKeepDeserialized = keepDeserialized;
+ }
+
+ /** {@inheritDoc} */
+ @Override public void writePortable(PortableWriter writer) throws PortableException {
+ PortableRawWriter rawWriter = writer.rawWriter();
+
+ rawWriter.writeCollection(typesCfg);
+ rawWriter.writeCollection(types);
+ rawWriter.writeString(dfltNameMapper);
+ rawWriter.writeString(dfltIdMapper);
+ rawWriter.writeString(dfltSerializer);
+ rawWriter.writeBoolean(dfltMetadataEnabled);
+ rawWriter.writeBoolean(dfltKeepDeserialized);
+ }
+
+ /** {@inheritDoc} */
+ @Override public void readPortable(PortableReader reader) throws PortableException {
+ PortableRawReader rawReader = reader.rawReader();
+
+ typesCfg = rawReader.readCollection();
+ types = rawReader.readCollection();
+ dfltNameMapper = rawReader.readString();
+ dfltIdMapper = rawReader.readString();
+ dfltSerializer = rawReader.readString();
+ dfltMetadataEnabled = rawReader.readBoolean();
+ dfltKeepDeserialized = rawReader.readBoolean();
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return S.toString(PlatformDotNetPortableConfiguration.class, this);
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/86ab3a73/modules/platform/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetPortableTypeConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/platform/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetPortableTypeConfiguration.java b/modules/platform/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetPortableTypeConfiguration.java
new file mode 100644
index 0000000..b6fdbde
--- /dev/null
+++ b/modules/platform/src/main/java/org/apache/ignite/platform/dotnet/PlatformDotNetPortableTypeConfiguration.java
@@ -0,0 +1,248 @@
+/*
+ * 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.platform.dotnet;
+
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.portable.PortableException;
+import org.apache.ignite.portable.PortableMarshalAware;
+import org.apache.ignite.portable.PortableRawReader;
+import org.apache.ignite.portable.PortableRawWriter;
+import org.apache.ignite.portable.PortableReader;
+import org.apache.ignite.portable.PortableWriter;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Mirror of .Net class GridDotNetPortableTypeConfiguration.cs
+ */
+public class PlatformDotNetPortableTypeConfiguration implements PortableMarshalAware {
+ /** Assembly name. */
+ private String assemblyName;
+
+ /** Type name. */
+ private String typeName;
+
+ /** Name mapper. */
+ private String nameMapper;
+
+ /** Id mapper. */
+ private String idMapper;
+
+ /** Serializer. */
+ private String serializer;
+
+ /** Affinity key field name. */
+ private String affinityKeyFieldName;
+
+ /** Metadata enabled. */
+ private Boolean metadataEnabled;
+
+ /** Whether to cache deserialized value in IGridPortableObject. */
+ private Boolean keepDeserialized;
+
+ /**
+ * Default constructor.
+ */
+ public PlatformDotNetPortableTypeConfiguration() {
+ // No-op.
+ }
+
+ /**
+ * Copy constructor.
+ * @param cfg configuration to copy.
+ */
+ public PlatformDotNetPortableTypeConfiguration(PlatformDotNetPortableTypeConfiguration cfg) {
+ assemblyName = cfg.getAssemblyName();
+ typeName = cfg.getTypeName();
+ nameMapper = cfg.getNameMapper();
+ idMapper = cfg.getIdMapper();
+ serializer = cfg.getSerializer();
+ affinityKeyFieldName = cfg.getAffinityKeyFieldName();
+ metadataEnabled = cfg.getMetadataEnabled();
+ keepDeserialized = cfg.isKeepDeserialized();
+ }
+
+ /**
+ * @return Assembly name.
+ */
+ public String getAssemblyName() {
+ return assemblyName;
+ }
+
+ /**
+ * @param assemblyName New assembly name.
+ */
+ public void setAssemblyName(String assemblyName) {
+ this.assemblyName = assemblyName;
+ }
+
+ /**
+ * @return Type name.
+ */
+ public String getTypeName() {
+ return typeName;
+ }
+
+ /**
+ * @param typeName New type name.
+ */
+ public void setTypeName(String typeName) {
+ this.typeName = typeName;
+ }
+
+ /**
+ * @return Name mapper.
+ */
+ public String getNameMapper() {
+ return nameMapper;
+ }
+
+ /**
+ * @param nameMapper New name mapper.
+ */
+ public void setNameMapper(String nameMapper) {
+ this.nameMapper = nameMapper;
+ }
+
+ /**
+ * @return Id mapper.
+ */
+ public String getIdMapper() {
+ return idMapper;
+ }
+
+ /**
+ * @param idMapper New id mapper.
+ */
+ public void setIdMapper(String idMapper) {
+ this.idMapper = idMapper;
+ }
+
+ /**
+ * @return Serializer.
+ */
+ public String getSerializer() {
+ return serializer;
+ }
+
+ /**
+ * @param serializer New serializer.
+ */
+ public void setSerializer(String serializer) {
+ this.serializer = serializer;
+ }
+
+ /**
+ * Gets metadata enabled flag. See {@link #setMetadataEnabled(Boolean)} for more information.
+ *
+ * @return Metadata enabled flag.
+ */
+ public Boolean getMetadataEnabled() {
+ return metadataEnabled;
+ }
+
+ /**
+ * Sets metadata enabled flag.
+ * <p />
+ * When set to {@code null} default value taken from
+ * {@link PlatformDotNetPortableConfiguration#isDefaultMetadataEnabled()} will be used.
+ *
+ * @param metadataEnabled New metadata enabled.
+ */
+ public void setMetadataEnabled(Boolean metadataEnabled) {
+ this.metadataEnabled = metadataEnabled;
+ }
+
+ /**
+ * @return Affinity key field name.
+ */
+ public String getAffinityKeyFieldName() {
+ return affinityKeyFieldName;
+ }
+
+ /**
+ * @param affinityKeyFieldName Affinity key field name.
+ */
+ public void setAffinityKeyFieldName(String affinityKeyFieldName) {
+ this.affinityKeyFieldName = affinityKeyFieldName;
+ }
+
+ /**
+ * Gets keep deserialized flag.
+ *
+ * @return Flag indicates whether to cache deserialized value in IGridPortableObject.
+ * @deprecated Use {@link #getKeepDeserialized()} instead.
+ */
+ @Deprecated
+ @Nullable public Boolean isKeepDeserialized() {
+ return keepDeserialized;
+ }
+
+ /**
+ * Gets keep deserialized flag. See {@link #setKeepDeserialized(Boolean)} for more information.
+ *
+ * @return Flag indicates whether to cache deserialized value in IGridPortableObject.
+ */
+ @Nullable public Boolean getKeepDeserialized() {
+ return keepDeserialized;
+ }
+
+ /**
+ * Sets keep deserialized flag.
+ * <p />
+ * When set to {@code null} default value taken from
+ * {@link PlatformDotNetPortableConfiguration#isDefaultKeepDeserialized()} will be used.
+ *
+ * @param keepDeserialized Keep deserialized flag.
+ */
+ public void setKeepDeserialized(@Nullable Boolean keepDeserialized) {
+ this.keepDeserialized = keepDeserialized;
+ }
+
+ /** {@inheritDoc} */
+ @Override public void writePortable(PortableWriter writer) throws PortableException {
+ PortableRawWriter rawWriter = writer.rawWriter();
+
+ rawWriter.writeString(assemblyName);
+ rawWriter.writeString(typeName);
+ rawWriter.writeString(nameMapper);
+ rawWriter.writeString(idMapper);
+ rawWriter.writeString(serializer);
+ rawWriter.writeString(affinityKeyFieldName);
+ rawWriter.writeObject(metadataEnabled);
+ rawWriter.writeObject(keepDeserialized);
+ }
+
+ /** {@inheritDoc} */
+ @Override public void readPortable(PortableReader reader) throws PortableException {
+ PortableRawReader rawReader = reader.rawReader();
+
+ assemblyName = rawReader.readString();
+ typeName = rawReader.readString();
+ nameMapper = rawReader.readString();
+ idMapper = rawReader.readString();
+ serializer = rawReader.readString();
+ affinityKeyFieldName = rawReader.readString();
+ metadataEnabled = rawReader.readObject();
+ keepDeserialized = rawReader.readObject();
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return S.toString(PlatformDotNetPortableTypeConfiguration.class, this);
+ }
+}
[04/18] ignite git commit: Javadoc fix (GG-10706)
Posted by sb...@apache.org.
Javadoc fix (GG-10706)
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/1225751c
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/1225751c
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/1225751c
Branch: refs/heads/ignite-1349
Commit: 1225751cd1e21c13fb4eb158b1c31b75509462aa
Parents: 2cd3da2
Author: Anton Vinogradov <av...@apache.org>
Authored: Wed Sep 2 16:26:59 2015 +0300
Committer: Anton Vinogradov <av...@apache.org>
Committed: Wed Sep 2 16:26:59 2015 +0300
----------------------------------------------------------------------
.../ignite/internal/processors/platform/cache/PlatformCache.java | 2 +-
parent/pom.xml | 1 +
2 files changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/1225751c/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/cache/PlatformCache.java
----------------------------------------------------------------------
diff --git a/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/cache/PlatformCache.java b/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/cache/PlatformCache.java
index a7c741e..69f2211 100644
--- a/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/cache/PlatformCache.java
+++ b/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/cache/PlatformCache.java
@@ -695,7 +695,7 @@ public class PlatformCache extends PlatformAbstractTarget {
/**
* Clears the contents of the cache, without notifying listeners or
- * {@link javax.cache.integration.CacheWriter}s.
+ * {@ignitelink javax.cache.integration.CacheWriter}s.
*
* @throws IllegalStateException if the cache is closed.
* @throws javax.cache.CacheException if there is a problem during the clear
http://git-wip-us.apache.org/repos/asf/ignite/blob/1225751c/parent/pom.xml
----------------------------------------------------------------------
diff --git a/parent/pom.xml b/parent/pom.xml
index 3556671..9423d33 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -42,6 +42,7 @@
<doxygen.exec>doxygen</doxygen.exec>
<git.exec>git</git.exec>
<jetty.version>9.2.11.v20150529</jetty.version>
+ <javadoc.opts>-XDenableSunApiLintControl</javadoc.opts>
</properties>
<groupId>org.apache.ignite</groupId>
[12/18] ignite git commit: ignite-1273: fixed cyclic references
processing by PortableMarshaller and ability to modify array fields returned
by PortableBuilder
Posted by sb...@apache.org.
http://git-wip-us.apache.org/repos/asf/ignite/blob/6ac9557e/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableLazyMap.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableLazyMap.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableLazyMap.java
deleted file mode 100644
index eed8121..0000000
--- a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableLazyMap.java
+++ /dev/null
@@ -1,218 +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.portable;
-
-import java.util.AbstractMap;
-import java.util.AbstractSet;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.Set;
-import org.jetbrains.annotations.Nullable;
-
-/**
- *
- */
-class PortableLazyMap extends AbstractMap<Object, Object> implements PortableBuilderSerializationAware {
- /** */
- private final PortableBuilderReader reader;
-
- /** */
- private final int off;
-
- /** */
- private Map<Object, Object> delegate;
-
- /**
- * @param reader Reader.
- * @param off Offset.
- */
- private PortableLazyMap(PortableBuilderReader reader, int off) {
- this.reader = reader;
- this.off = off;
- }
-
- /**
- * @param reader Reader.
- * @return PortableLazyMap.
- */
- @Nullable public static PortableLazyMap parseMap(PortableBuilderReader reader) {
- int off = reader.position() - 1;
-
- int size = reader.readInt();
-
- reader.skip(1); // map type.
-
- for (int i = 0; i < size; i++) {
- reader.skipValue(); // skip key
- reader.skipValue(); // skip value
- }
-
- return new PortableLazyMap(reader, off);
- }
-
- /**
- *
- */
- private void ensureDelegateInit() {
- if (delegate == null) {
- int size = reader.readIntAbsolute(off + 1);
-
- reader.position(off + 1/* flag */ + 4/* size */ + 1/* col type */);
-
- delegate = new LinkedHashMap<>();
-
- for (int i = 0; i < size; i++)
- delegate.put(PortableUtils.unwrapLazy(reader.parseValue()), reader.parseValue());
- }
- }
-
- /** {@inheritDoc} */
- @Override public void writeTo(PortableWriterExImpl writer, PortableBuilderSerializer ctx) {
- if (delegate == null) {
- int size = reader.readIntAbsolute(off + 1);
-
- int hdrSize = 1 /* flag */ + 4 /* size */ + 1 /* col type */;
- writer.write(reader.array(), off, hdrSize);
-
- reader.position(off + hdrSize);
-
- for (int i = 0; i < size; i++) {
- ctx.writeValue(writer, reader.parseValue()); // key
- ctx.writeValue(writer, reader.parseValue()); // value
- }
- }
- else {
- writer.writeByte(GridPortableMarshaller.MAP);
- writer.writeInt(delegate.size());
-
- byte colType = reader.array()[off + 1 /* flag */ + 4 /* size */];
-
- writer.writeByte(colType);
-
- for (Entry<Object, Object> entry : delegate.entrySet()) {
- ctx.writeValue(writer, entry.getKey());
- ctx.writeValue(writer, entry.getValue());
- }
- }
- }
-
- /** {@inheritDoc} */
- @Override public int size() {
- if (delegate == null)
- return reader.readIntAbsolute(off + 1);
-
- return delegate.size();
- }
-
- /** {@inheritDoc} */
- @Override public boolean containsKey(Object key) {
- ensureDelegateInit();
-
- return delegate.containsKey(key);
- }
-
- /** {@inheritDoc} */
- @Override public boolean containsValue(Object val) {
- return values().contains(val);
- }
-
- /** {@inheritDoc} */
- @Override public Set<Object> keySet() {
- ensureDelegateInit();
-
- return delegate.keySet();
- }
-
- /** {@inheritDoc} */
- @Override public void clear() {
- if (delegate == null)
- delegate = new LinkedHashMap<>();
- else
- delegate.clear();
- }
-
- /** {@inheritDoc} */
- @Override public Object get(Object key) {
- ensureDelegateInit();
-
- return PortableUtils.unwrapLazy(delegate.get(key));
- }
-
- /** {@inheritDoc} */
- @Override public Object put(Object key, Object val) {
- ensureDelegateInit();
-
- return PortableUtils.unwrapLazy(delegate.put(key, val));
- }
-
- /** {@inheritDoc} */
- @Override public Object remove(Object key) {
- ensureDelegateInit();
-
- return PortableUtils.unwrapLazy(delegate.remove(key));
- }
-
- /** {@inheritDoc} */
- @Override public Set<Entry<Object, Object>> entrySet() {
- ensureDelegateInit();
-
- return new AbstractSet<Entry<Object, Object>>() {
- @Override public boolean contains(Object o) {
- throw new UnsupportedOperationException();
- }
-
- @Override public Iterator<Entry<Object, Object>> iterator() {
- return new Iterator<Entry<Object, Object>>() {
- /** */
- private final Iterator<Entry<Object, Object>> itr = delegate.entrySet().iterator();
-
- @Override public boolean hasNext() {
- return itr.hasNext();
- }
-
- @Override public Entry<Object, Object> next() {
- Entry<Object, Object> res = itr.next();
-
- final Object val = res.getValue();
-
- if (val instanceof PortableLazyValue) {
- return new SimpleEntry<Object, Object>(res.getKey(), val) {
- private static final long serialVersionUID = 0L;
-
- @Override public Object getValue() {
- return ((PortableLazyValue)val).value();
- }
- };
- }
-
- return res;
- }
-
- @Override public void remove() {
- itr.remove();
- }
- };
- }
-
- @Override public int size() {
- return delegate.size();
- }
- };
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/6ac9557e/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableLazyMapEntry.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableLazyMapEntry.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableLazyMapEntry.java
deleted file mode 100644
index 1970d21..0000000
--- a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableLazyMapEntry.java
+++ /dev/null
@@ -1,66 +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.portable;
-
-import java.util.Map;
-
-/**
- *
- */
-class PortableLazyMapEntry implements Map.Entry<Object, Object>, PortableBuilderSerializationAware {
- /** */
- private final Object key;
-
- /** */
- private Object val;
-
- /**
- * @param reader GridMutablePortableReader
- */
- PortableLazyMapEntry(PortableBuilderReader reader) {
- key = reader.parseValue();
- val = reader.parseValue();
- }
-
- /** {@inheritDoc} */
- @Override public Object getKey() {
- return PortableUtils.unwrapLazy(key);
- }
-
- /** {@inheritDoc} */
- @Override public Object getValue() {
- return PortableUtils.unwrapLazy(val);
- }
-
- /** {@inheritDoc} */
- @Override public Object setValue(Object val) {
- Object res = getValue();
-
- this.val = val;
-
- return res;
- }
-
- /** {@inheritDoc} */
- @Override public void writeTo(PortableWriterExImpl writer, PortableBuilderSerializer ctx) {
- writer.writeByte(GridPortableMarshaller.MAP_ENTRY);
-
- ctx.writeValue(writer, key);
- ctx.writeValue(writer, val);
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/6ac9557e/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableLazySet.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableLazySet.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableLazySet.java
deleted file mode 100644
index 3e1dc92..0000000
--- a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableLazySet.java
+++ /dev/null
@@ -1,89 +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.portable;
-
-import java.util.Collection;
-import java.util.Set;
-import org.apache.ignite.internal.util.typedef.internal.U;
-
-/**
- *
- */
-class PortableLazySet extends PortableAbstractLazyValue {
- /** */
- private final int off;
-
- /**
- * @param reader Reader.
- * @param size Size.
- */
- PortableLazySet(PortableBuilderReader reader, int size) {
- super(reader, reader.position() - 1);
-
- off = reader.position() - 1/* flag */ - 4/* size */ - 1/* col type */;
-
- assert size >= 0;
-
- for (int i = 0; i < size; i++)
- reader.skipValue();
- }
-
- /** {@inheritDoc} */
- @Override public void writeTo(PortableWriterExImpl writer, PortableBuilderSerializer ctx) {
- if (val == null) {
- int size = reader.readIntAbsolute(off + 1);
-
- int hdrSize = 1 /* flag */ + 4 /* size */ + 1 /* col type */;
- writer.write(reader.array(), off, hdrSize);
-
- reader.position(off + hdrSize);
-
- for (int i = 0; i < size; i++) {
- Object o = reader.parseValue();
-
- ctx.writeValue(writer, o);
- }
- }
- else {
- Collection<Object> c = (Collection<Object>)val;
-
- writer.writeByte(GridPortableMarshaller.COL);
- writer.writeInt(c.size());
-
- byte colType = reader.array()[off + 1 /* flag */ + 4 /* size */];
- writer.writeByte(colType);
-
- for (Object o : c)
- ctx.writeValue(writer, o);
- }
- }
-
- /** {@inheritDoc} */
- @Override protected Object init() {
- int size = reader.readIntAbsolute(off + 1);
-
- reader.position(off + 1/* flag */ + 4/* size */ + 1/* col type */);
-
- Set<Object> res = U.newLinkedHashSet(size);
-
- for (int i = 0; i < size; i++)
- res.add(PortableUtils.unwrapLazy(reader.parseValue()));
-
- return res;
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/6ac9557e/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableLazyValue.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableLazyValue.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableLazyValue.java
deleted file mode 100644
index 43728b7..0000000
--- a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableLazyValue.java
+++ /dev/null
@@ -1,28 +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.portable;
-
-/**
- *
- */
-interface PortableLazyValue extends PortableBuilderSerializationAware {
- /**
- * @return Value.
- */
- public Object value();
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/6ac9557e/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableObjectArrayLazyValue.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableObjectArrayLazyValue.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableObjectArrayLazyValue.java
deleted file mode 100644
index 897e8e8..0000000
--- a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableObjectArrayLazyValue.java
+++ /dev/null
@@ -1,89 +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.portable;
-
-import org.apache.ignite.internal.util.typedef.internal.U;
-import org.apache.ignite.portable.PortableInvalidClassException;
-
-/**
- *
- */
-class PortableObjectArrayLazyValue extends PortableAbstractLazyValue {
- /** */
- private Object[] lazyValsArr;
-
- /** */
- private int compTypeId;
-
- /** */
- private String clsName;
-
- /**
- * @param reader Reader.
- */
- protected PortableObjectArrayLazyValue(PortableBuilderReader reader) {
- super(reader, reader.position() - 1);
-
- int typeId = reader.readInt();
-
- if (typeId == GridPortableMarshaller.UNREGISTERED_TYPE_ID) {
- clsName = reader.readString();
-
- Class cls;
-
- try {
- // TODO: IGNITE-1272 - Is class loader needed here?
- cls = U.forName(reader.readString(), null);
- }
- catch (ClassNotFoundException e) {
- throw new PortableInvalidClassException("Failed to load the class: " + clsName, e);
- }
-
- compTypeId = reader.portableContext().descriptorForClass(cls).typeId();
- }
- else {
- compTypeId = typeId;
- clsName = null;
- }
-
- int size = reader.readInt();
-
- lazyValsArr = new Object[size];
-
- for (int i = 0; i < size; i++)
- lazyValsArr[i] = reader.parseValue();
- }
-
- /** {@inheritDoc} */
- @Override protected Object init() {
- for (int i = 0; i < lazyValsArr.length; i++) {
- if (lazyValsArr[i] instanceof PortableLazyValue)
- lazyValsArr[i] = ((PortableLazyValue)lazyValsArr[i]).value();
- }
-
- return lazyValsArr;
- }
-
- /** {@inheritDoc} */
- @Override public void writeTo(PortableWriterExImpl writer, PortableBuilderSerializer ctx) {
- if (clsName == null)
- ctx.writeArray(writer, GridPortableMarshaller.OBJ_ARR, lazyValsArr, compTypeId);
- else
- ctx.writeArray(writer, GridPortableMarshaller.OBJ_ARR, lazyValsArr, clsName);
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/6ac9557e/modules/core/src/main/java/org/apache/ignite/internal/portable/PortablePlainLazyValue.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortablePlainLazyValue.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/PortablePlainLazyValue.java
deleted file mode 100644
index d08d09b..0000000
--- a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortablePlainLazyValue.java
+++ /dev/null
@@ -1,47 +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.portable;
-
-/**
- *
- */
-class PortablePlainLazyValue extends PortableAbstractLazyValue {
- /** */
- protected final int len;
-
- /**
- * @param reader Reader
- * @param valOff Offset
- * @param len Length.
- */
- protected PortablePlainLazyValue(PortableBuilderReader reader, int valOff, int len) {
- super(reader, valOff);
-
- this.len = len;
- }
-
- /** {@inheritDoc} */
- @Override protected Object init() {
- return reader.reader().unmarshal(valOff);
- }
-
- /** {@inheritDoc} */
- @Override public void writeTo(PortableWriterExImpl writer, PortableBuilderSerializer ctx) {
- writer.write(reader.array(), valOff, len);
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/6ac9557e/modules/core/src/main/java/org/apache/ignite/internal/portable/PortablePlainPortableObject.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortablePlainPortableObject.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/PortablePlainPortableObject.java
deleted file mode 100644
index cfaa04f..0000000
--- a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortablePlainPortableObject.java
+++ /dev/null
@@ -1,50 +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.portable;
-
-import org.apache.ignite.portable.PortableObject;
-
-/**
- *
- */
-public class PortablePlainPortableObject implements PortableLazyValue {
- /** */
- private final PortableObject portableObj;
-
- /**
- * @param portableObj Portable object.
- */
- public PortablePlainPortableObject(PortableObject portableObj) {
- this.portableObj = portableObj;
- }
-
- /** {@inheritDoc} */
- @Override public Object value() {
- return portableObj;
- }
-
- /** {@inheritDoc} */
- @Override public void writeTo(PortableWriterExImpl writer, PortableBuilderSerializer ctx) {
- PortableObject val = portableObj;
-
- if (val instanceof PortableObjectOffheapImpl)
- val = ((PortableObjectOffheapImpl)val).heapCopy();
-
- writer.doWritePortableObject((PortableObjectImpl)val);
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/6ac9557e/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableReaderExImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableReaderExImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableReaderExImpl.java
index f702e06..83ccb65 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableReaderExImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableReaderExImpl.java
@@ -156,7 +156,7 @@ public class PortableReaderExImpl implements PortableReader, PortableRawReaderEx
* @param start Start.
* @param ldr Class loader.
*/
- PortableReaderExImpl(PortableContext ctx, byte[] arr, int start, ClassLoader ldr) {
+ public PortableReaderExImpl(PortableContext ctx, byte[] arr, int start, ClassLoader ldr) {
this(ctx, new PortableHeapInputStream(arr), start, ldr, new PortableReaderContext());
}
@@ -256,7 +256,7 @@ public class PortableReaderExImpl implements PortableReader, PortableRawReaderEx
* @return Unmarshalled value.
* @throws PortableException In case of error.
*/
- Object unmarshal(int offset) throws PortableException {
+ public Object unmarshal(int offset) throws PortableException {
off = offset;
return off >= 0 ? unmarshal(false) : null;
@@ -586,6 +586,9 @@ public class PortableReaderExImpl implements PortableReader, PortableRawReaderEx
if (flag == NULL)
return null;
+ if (flag == HANDLE)
+ return readHandleField();
+
if (flag != BYTE_ARR)
throw new PortableException("Invalid flag value: " + flag);
@@ -609,6 +612,9 @@ public class PortableReaderExImpl implements PortableReader, PortableRawReaderEx
if (flag == NULL)
return null;
+ if (flag == HANDLE)
+ return readHandleField();
+
if (flag != SHORT_ARR)
throw new PortableException("Invalid flag value: " + flag);
@@ -632,6 +638,9 @@ public class PortableReaderExImpl implements PortableReader, PortableRawReaderEx
if (flag == NULL)
return null;
+ if (flag == HANDLE)
+ return readHandleField();
+
if (flag != INT_ARR)
throw new PortableException("Invalid flag value: " + flag);
@@ -655,6 +664,9 @@ public class PortableReaderExImpl implements PortableReader, PortableRawReaderEx
if (flag == NULL)
return null;
+ if (flag == HANDLE)
+ return readHandleField();
+
if (flag != LONG_ARR)
throw new PortableException("Invalid flag value: " + flag);
@@ -678,6 +690,9 @@ public class PortableReaderExImpl implements PortableReader, PortableRawReaderEx
if (flag == NULL)
return null;
+ if (flag == HANDLE)
+ return readHandleField();
+
if (flag != FLOAT_ARR)
throw new PortableException("Invalid flag value: " + flag);
@@ -701,6 +716,9 @@ public class PortableReaderExImpl implements PortableReader, PortableRawReaderEx
if (flag == NULL)
return null;
+ if (flag == HANDLE)
+ return readHandleField();
+
if (flag != DOUBLE_ARR)
throw new PortableException("Invalid flag value: " + flag);
@@ -724,6 +742,9 @@ public class PortableReaderExImpl implements PortableReader, PortableRawReaderEx
if (flag == NULL)
return null;
+ if (flag == HANDLE)
+ return readHandleField();
+
if (flag != CHAR_ARR)
throw new PortableException("Invalid flag value: " + flag);
@@ -747,6 +768,9 @@ public class PortableReaderExImpl implements PortableReader, PortableRawReaderEx
if (flag == NULL)
return null;
+ if (flag == HANDLE)
+ return readHandleField();
+
if (flag != BOOLEAN_ARR)
throw new PortableException("Invalid flag value: " + flag);
@@ -770,6 +794,9 @@ public class PortableReaderExImpl implements PortableReader, PortableRawReaderEx
if (flag == NULL)
return null;
+ if (flag == HANDLE)
+ return readHandleField();
+
if (flag != DECIMAL_ARR)
throw new PortableException("Invalid flag value: " + flag);
@@ -793,6 +820,9 @@ public class PortableReaderExImpl implements PortableReader, PortableRawReaderEx
if (flag == NULL)
return null;
+ if (flag == HANDLE)
+ return readHandleField();
+
if (flag != STRING_ARR)
throw new PortableException("Invalid flag value: " + flag);
@@ -816,6 +846,9 @@ public class PortableReaderExImpl implements PortableReader, PortableRawReaderEx
if (flag == NULL)
return null;
+ if (flag == HANDLE)
+ return readHandleField();
+
if (flag != UUID_ARR)
throw new PortableException("Invalid flag value: " + flag);
@@ -839,6 +872,9 @@ public class PortableReaderExImpl implements PortableReader, PortableRawReaderEx
if (flag == NULL)
return null;
+ if (flag == HANDLE)
+ return readHandleField();
+
if (flag != DATE_ARR)
throw new PortableException("Invalid flag value: " + flag);
@@ -862,6 +898,9 @@ public class PortableReaderExImpl implements PortableReader, PortableRawReaderEx
if (flag == NULL)
return null;
+ if (flag == HANDLE)
+ return readHandleField();
+
if (flag != OBJ_ARR)
throw new PortableException("Invalid flag value: " + flag);
@@ -887,6 +926,9 @@ public class PortableReaderExImpl implements PortableReader, PortableRawReaderEx
if (flag == NULL)
return null;
+ if (flag == HANDLE)
+ return readHandleField();
+
if (flag != COL)
throw new PortableException("Invalid flag value: " + flag);
@@ -912,6 +954,9 @@ public class PortableReaderExImpl implements PortableReader, PortableRawReaderEx
if (flag == NULL)
return null;
+ if (flag == HANDLE)
+ return readHandleField();
+
if (flag != MAP)
throw new PortableException("Invalid flag value: " + flag);
@@ -935,10 +980,13 @@ public class PortableReaderExImpl implements PortableReader, PortableRawReaderEx
if (flag == NULL)
return null;
+ if (flag == HANDLE)
+ return readHandleField();
+
if (flag != MAP_ENTRY)
throw new PortableException("Invalid flag value: " + flag);
- return new GridMapEntry<>(doReadObject(false), doReadObject(false));
+ return doReadMapEntry(false, true);
}
else
return null;
@@ -1059,6 +1107,33 @@ public class PortableReaderExImpl implements PortableReader, PortableRawReaderEx
rCtx.setObjectHandler(start, obj);
}
+ /**
+ * @param obj Object.
+ * @param pos Position.
+ */
+ void setHandler(Object obj, int pos) {
+ rCtx.setObjectHandler(pos, obj);
+ }
+
+ /**
+ * Recreating field value from a handle.
+ *
+ * @param <T> Field type.
+ * @return Field.
+ */
+ private <T> T readHandleField() {
+ int handle = (off - 1) - doReadInt(false);
+
+ Object obj = rCtx.getObjectByHandle(handle);
+
+ if (obj == null) {
+ off = handle;
+
+ obj = doReadObject(false);
+ }
+
+ return (T)obj;
+ }
/** {@inheritDoc} */
@Override public byte readByte(String fieldName) throws PortableException {
Byte val = readByte(fieldId(fieldName));
@@ -1676,7 +1751,7 @@ public class PortableReaderExImpl implements PortableReader, PortableRawReaderEx
else
po = in.offheapPointer() > 0
? new PortableObjectOffheapImpl(ctx, in.offheapPointer(), start,
- in.remaining() + in.position())
+ in.remaining() + in.position())
: new PortableObjectImpl(ctx, in.array(), start);
rCtx.setPortableHandler(start, po);
@@ -1805,7 +1880,6 @@ public class PortableReaderExImpl implements PortableReader, PortableRawReaderEx
return obj;
-
default:
throw new PortableException("Invalid flag value: " + flag);
}
@@ -2306,12 +2380,16 @@ public class PortableReaderExImpl implements PortableReader, PortableRawReaderEx
* @return Value.
*/
private byte[] doReadByteArray(boolean raw) {
+ int hPos = (raw ? rawOff : off) - 1;
+
int len = doReadInt(raw);
in.position(raw ? rawOff : off);
byte[] arr = in.readByteArray(len);
+ setHandler(arr, hPos);
+
if (raw)
rawOff += len;
else
@@ -2325,12 +2403,16 @@ public class PortableReaderExImpl implements PortableReader, PortableRawReaderEx
* @return Value.
*/
private short[] doReadShortArray(boolean raw) {
+ int hPos = (raw ? rawOff : off) - 1;
+
int len = doReadInt(raw);
in.position(raw ? rawOff : off);
short[] arr = in.readShortArray(len);
+ setHandler(arr, hPos);
+
int bytes = len << 1;
if (raw)
@@ -2346,12 +2428,16 @@ public class PortableReaderExImpl implements PortableReader, PortableRawReaderEx
* @return Value.
*/
private int[] doReadIntArray(boolean raw) {
+ int hPos = (raw ? rawOff : off) - 1;
+
int len = doReadInt(raw);
in.position(raw ? rawOff : off);
int[] arr = in.readIntArray(len);
+ setHandler(arr, hPos);
+
int bytes = len << 2;
if (raw)
@@ -2367,12 +2453,16 @@ public class PortableReaderExImpl implements PortableReader, PortableRawReaderEx
* @return Value.
*/
private long[] doReadLongArray(boolean raw) {
+ int hPos = (raw ? rawOff : off) - 1;
+
int len = doReadInt(raw);
in.position(raw ? rawOff : off);
long[] arr = in.readLongArray(len);
+ setHandler(arr, hPos);
+
int bytes = len << 3;
if (raw)
@@ -2388,12 +2478,16 @@ public class PortableReaderExImpl implements PortableReader, PortableRawReaderEx
* @return Value.
*/
private float[] doReadFloatArray(boolean raw) {
+ int hPos = (raw ? rawOff : off) - 1;
+
int len = doReadInt(raw);
in.position(raw ? rawOff : off);
float[] arr = in.readFloatArray(len);
+ setHandler(arr, hPos);
+
int bytes = len << 2;
if (raw)
@@ -2409,12 +2503,16 @@ public class PortableReaderExImpl implements PortableReader, PortableRawReaderEx
* @return Value.
*/
private double[] doReadDoubleArray(boolean raw) {
+ int hPos = (raw ? rawOff : off) - 1;
+
int len = doReadInt(raw);
in.position(raw ? rawOff : off);
double[] arr = in.readDoubleArray(len);
+ setHandler(arr, hPos);
+
int bytes = len << 3;
if (raw)
@@ -2430,12 +2528,16 @@ public class PortableReaderExImpl implements PortableReader, PortableRawReaderEx
* @return Value.
*/
private char[] doReadCharArray(boolean raw) {
+ int hPos = (raw ? rawOff : off) - 1;
+
int len = doReadInt(raw);
in.position(raw ? rawOff : off);
char[] arr = in.readCharArray(len);
+ setHandler(arr, hPos);
+
int bytes = len << 1;
if (raw)
@@ -2451,12 +2553,16 @@ public class PortableReaderExImpl implements PortableReader, PortableRawReaderEx
* @return Value.
*/
private boolean[] doReadBooleanArray(boolean raw) {
+ int hPos = (raw ? rawOff : off) - 1;
+
int len = doReadInt(raw);
in.position(raw ? rawOff : off);
boolean[] arr = in.readBooleanArray(len);
+ setHandler(arr, hPos);
+
if (raw)
rawOff += len;
else
@@ -2471,10 +2577,14 @@ public class PortableReaderExImpl implements PortableReader, PortableRawReaderEx
* @throws PortableException In case of error.
*/
private BigDecimal[] doReadDecimalArray(boolean raw) throws PortableException {
+ int hPos = (raw ? rawOff : off) - 1;
+
int len = doReadInt(raw);
BigDecimal[] arr = new BigDecimal[len];
+ setHandler(arr, hPos);
+
for (int i = 0; i < len; i++) {
byte flag = doReadByte(raw);
@@ -2497,10 +2607,14 @@ public class PortableReaderExImpl implements PortableReader, PortableRawReaderEx
* @throws PortableException In case of error.
*/
private String[] doReadStringArray(boolean raw) throws PortableException {
+ int hPos = (raw ? rawOff : off) - 1;
+
int len = doReadInt(raw);
String[] arr = new String[len];
+ setHandler(arr, hPos);
+
for (int i = 0; i < len; i++) {
byte flag = doReadByte(raw);
@@ -2523,10 +2637,14 @@ public class PortableReaderExImpl implements PortableReader, PortableRawReaderEx
* @throws PortableException In case of error.
*/
private UUID[] doReadUuidArray(boolean raw) throws PortableException {
+ int hPos = (raw ? rawOff : off) - 1;
+
int len = doReadInt(raw);
UUID[] arr = new UUID[len];
+ setHandler(arr, hPos);
+
for (int i = 0; i < len; i++) {
byte flag = doReadByte(raw);
@@ -2549,10 +2667,14 @@ public class PortableReaderExImpl implements PortableReader, PortableRawReaderEx
* @throws PortableException In case of error.
*/
private Date[] doReadDateArray(boolean raw) throws PortableException {
+ int hPos = (raw ? rawOff : off) - 1;
+
int len = doReadInt(raw);
Date[] arr = new Date[len];
+ setHandler(arr, hPos);
+
for (int i = 0; i < len; i++) {
byte flag = doReadByte(raw);
@@ -2576,12 +2698,16 @@ public class PortableReaderExImpl implements PortableReader, PortableRawReaderEx
* @throws PortableException In case of error.
*/
private Object[] doReadObjectArray(boolean raw, boolean deep) throws PortableException {
+ int hPos = (raw ? rawOff : off) - 1;
+
Class compType = doReadClass(raw);
int len = doReadInt(raw);
Object[] arr = deep ? (Object[])Array.newInstance(compType, len) : new Object[len];
+ setHandler(arr, hPos);
+
for (int i = 0; i < len; i++)
arr[i] = deep ? doReadObject(raw) : unmarshal(raw);
@@ -2598,6 +2724,8 @@ public class PortableReaderExImpl implements PortableReader, PortableRawReaderEx
@SuppressWarnings("unchecked")
private Collection<?> doReadCollection(boolean raw, boolean deep, @Nullable Class<? extends Collection> cls)
throws PortableException {
+ int hPos = (raw ? rawOff : off) - 1;
+
int size = doReadInt(raw);
assert size >= 0;
@@ -2667,6 +2795,8 @@ public class PortableReaderExImpl implements PortableReader, PortableRawReaderEx
}
}
+ setHandler(col, hPos);
+
for (int i = 0; i < size; i++)
col.add(deep ? doReadObject(raw) : unmarshal(raw));
@@ -2683,6 +2813,8 @@ public class PortableReaderExImpl implements PortableReader, PortableRawReaderEx
@SuppressWarnings("unchecked")
private Map<?, ?> doReadMap(boolean raw, boolean deep, @Nullable Class<? extends Map> cls)
throws PortableException {
+ int hPos = (raw ? rawOff : off) - 1;
+
int size = doReadInt(raw);
assert size >= 0;
@@ -2742,6 +2874,8 @@ public class PortableReaderExImpl implements PortableReader, PortableRawReaderEx
}
}
+ setHandler(map, hPos);
+
for (int i = 0; i < size; i++)
map.put(deep ? doReadObject(raw) : unmarshal(raw), deep ? doReadObject(raw) : unmarshal(raw));
@@ -2755,10 +2889,16 @@ public class PortableReaderExImpl implements PortableReader, PortableRawReaderEx
* @throws PortableException In case of error.
*/
private Map.Entry<?, ?> doReadMapEntry(boolean raw, boolean deep) throws PortableException {
+ int hPos = (raw ? rawOff : off) - 1;
+
Object val1 = deep ? doReadObject(raw) : unmarshal(raw);
Object val2 = deep ? doReadObject(raw) : unmarshal(raw);
- return new GridMapEntry<>(val1, val2);
+ GridMapEntry entry = new GridMapEntry<>(val1, val2);
+
+ setHandler(entry, hPos);
+
+ return entry;
}
/**
@@ -3017,4 +3157,4 @@ public class PortableReaderExImpl implements PortableReader, PortableRawReaderEx
@Override public void close() throws IOException {
// No-op.
}
-}
\ No newline at end of file
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/6ac9557e/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableUtils.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableUtils.java
index ce77783..7259cc9 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableUtils.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableUtils.java
@@ -33,6 +33,7 @@ import java.util.TreeSet;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentSkipListSet;
+import org.apache.ignite.internal.portable.builder.PortableLazyValue;
import org.apache.ignite.internal.util.typedef.internal.U;
import org.apache.ignite.portable.PortableObject;
import org.jetbrains.annotations.Nullable;
@@ -359,6 +360,16 @@ public class PortableUtils {
}
/**
+ * Checks whether an array type values can or can not contain references to other object.
+ *
+ * @param type Array type.
+ * @return {@code true} if content of serialized array value cannot contain references to other object.
+ */
+ public static boolean isPlainArrayType(int type) {
+ return type >= BYTE_ARR && type <= DATE_ARR;
+ }
+
+ /**
* @param cls Class.
* @return Portable field type.
*/
http://git-wip-us.apache.org/repos/asf/ignite/blob/6ac9557e/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableValueWithType.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableValueWithType.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableValueWithType.java
deleted file mode 100644
index ebc68c1..0000000
--- a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableValueWithType.java
+++ /dev/null
@@ -1,74 +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.portable;
-
-import org.apache.ignite.internal.processors.cache.portable.CacheObjectPortableProcessorImpl;
-import org.apache.ignite.internal.util.typedef.internal.S;
-
-/**
- *
- */
-class PortableValueWithType implements PortableLazyValue {
- /** */
- private byte type;
-
- /** */
- private Object val;
-
- /**
- * @param type Type
- * @param val Value.
- */
- PortableValueWithType(byte type, Object val) {
- this.type = type;
- this.val = val;
- }
-
- /** {@inheritDoc} */
- @Override public void writeTo(PortableWriterExImpl writer, PortableBuilderSerializer ctx) {
- if (val instanceof PortableBuilderSerializationAware)
- ((PortableBuilderSerializationAware)val).writeTo(writer, ctx);
- else
- ctx.writeValue(writer, val);
- }
-
- /** {@inheritDoc} */
- public String typeName() {
- return CacheObjectPortableProcessorImpl.fieldTypeName(type);
- }
-
- /** {@inheritDoc} */
- @Override public Object value() {
- if (val instanceof PortableLazyValue)
- return ((PortableLazyValue)val).value();
-
- return val;
- }
-
- /**
- * @param val New value.
- */
- public void value(Object val) {
- this.val = val;
- }
-
- /** {@inheritDoc} */
- @Override public String toString() {
- return S.toString(PortableValueWithType.class, this);
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/6ac9557e/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableWriterExImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableWriterExImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableWriterExImpl.java
index 6bcce2b..364d5f8 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableWriterExImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableWriterExImpl.java
@@ -156,7 +156,7 @@ public class PortableWriterExImpl implements PortableWriter, PortableRawWriterEx
* @param off Start offset.
* @param typeId Type ID.
*/
- PortableWriterExImpl(PortableContext ctx, int off, int typeId, boolean metaEnabled) {
+ public PortableWriterExImpl(PortableContext ctx, int off, int typeId, boolean metaEnabled) {
this(ctx, off);
this.typeId = typeId;
@@ -320,14 +320,14 @@ public class PortableWriterExImpl implements PortableWriter, PortableRawWriterEx
/**
* @return Array.
*/
- byte[] array() {
+ public byte[] array() {
return wCtx.out.arrayCopy();
}
/**
* @return Output stream.
*/
- PortableOutputStream outputStream() {
+ public PortableOutputStream outputStream() {
return wCtx.out;
}
@@ -351,7 +351,7 @@ public class PortableWriterExImpl implements PortableWriter, PortableRawWriterEx
* @param bytes Number of bytes to reserve.
* @return Offset.
*/
- int reserve(int bytes) {
+ public int reserve(int bytes) {
int pos = wCtx.out.position();
wCtx.out.position(pos + bytes);
@@ -363,7 +363,7 @@ public class PortableWriterExImpl implements PortableWriter, PortableRawWriterEx
* @param bytes Number of bytes to reserve.
* @return Offset.
*/
- int reserveAndMark(int bytes) {
+ public int reserveAndMark(int bytes) {
int off0 = reserve(bytes);
mark = wCtx.out.position();
@@ -374,21 +374,21 @@ public class PortableWriterExImpl implements PortableWriter, PortableRawWriterEx
/**
* @param off Offset.
*/
- void writeDelta(int off) {
+ public void writeDelta(int off) {
wCtx.out.writeInt(off, wCtx.out.position() - mark);
}
/**
*
*/
- void writeLength() {
+ public void writeLength() {
wCtx.out.writeInt(start + TOTAL_LEN_POS, wCtx.out.position() - start);
}
/**
*
*/
- void writeRawOffsetIfNeeded() {
+ public void writeRawOffsetIfNeeded() {
if (allowFields)
wCtx.out.writeInt(start + RAW_DATA_OFF_POS, wCtx.out.position() - start);
}
@@ -416,63 +416,63 @@ public class PortableWriterExImpl implements PortableWriter, PortableRawWriterEx
/**
* @param val Value.
*/
- void doWriteByte(byte val) {
+ public void doWriteByte(byte val) {
wCtx.out.writeByte(val);
}
/**
* @param val Value.
*/
- void doWriteShort(short val) {
+ public void doWriteShort(short val) {
wCtx.out.writeShort(val);
}
/**
* @param val Value.
*/
- void doWriteInt(int val) {
+ public void doWriteInt(int val) {
wCtx.out.writeInt(val);
}
/**
* @param val Value.
*/
- void doWriteLong(long val) {
+ public void doWriteLong(long val) {
wCtx.out.writeLong(val);
}
/**
* @param val Value.
*/
- void doWriteFloat(float val) {
+ public void doWriteFloat(float val) {
wCtx.out.writeFloat(val);
}
/**
* @param val Value.
*/
- void doWriteDouble(double val) {
+ public void doWriteDouble(double val) {
wCtx.out.writeDouble(val);
}
/**
* @param val Value.
*/
- void doWriteChar(char val) {
+ public void doWriteChar(char val) {
wCtx.out.writeChar(val);
}
/**
* @param val Value.
*/
- void doWriteBoolean(boolean val) {
+ public void doWriteBoolean(boolean val) {
wCtx.out.writeBoolean(val);
}
/**
* @param val String value.
*/
- void doWriteDecimal(@Nullable BigDecimal val) {
+ public void doWriteDecimal(@Nullable BigDecimal val) {
if (val == null)
doWriteByte(NULL);
else {
@@ -498,7 +498,7 @@ public class PortableWriterExImpl implements PortableWriter, PortableRawWriterEx
/**
* @param val String value.
*/
- void doWriteString(@Nullable String val) {
+ public void doWriteString(@Nullable String val) {
if (val == null)
doWriteByte(NULL);
else {
@@ -528,7 +528,7 @@ public class PortableWriterExImpl implements PortableWriter, PortableRawWriterEx
/**
* @param uuid UUID.
*/
- void doWriteUuid(@Nullable UUID uuid) {
+ public void doWriteUuid(@Nullable UUID uuid) {
if (uuid == null)
doWriteByte(NULL);
else {
@@ -541,7 +541,7 @@ public class PortableWriterExImpl implements PortableWriter, PortableRawWriterEx
/**
* @param date Date.
*/
- void doWriteDate(@Nullable Date date) {
+ public void doWriteDate(@Nullable Date date) {
if (date == null)
doWriteByte(NULL);
else {
@@ -554,7 +554,7 @@ public class PortableWriterExImpl implements PortableWriter, PortableRawWriterEx
/**
* @param ts Timestamp.
*/
- void doWriteTimestamp(@Nullable Timestamp ts) {
+ public void doWriteTimestamp(@Nullable Timestamp ts) {
if (ts == null)
doWriteByte(NULL);
else {
@@ -569,7 +569,7 @@ public class PortableWriterExImpl implements PortableWriter, PortableRawWriterEx
* @param detached Detached or not.
* @throws PortableException In case of error.
*/
- void doWriteObject(@Nullable Object obj, boolean detached) throws PortableException {
+ public void doWriteObject(@Nullable Object obj, boolean detached) throws PortableException {
if (obj == null)
doWriteByte(NULL);
else {
@@ -591,6 +591,9 @@ public class PortableWriterExImpl implements PortableWriter, PortableRawWriterEx
if (val == null)
doWriteByte(NULL);
else {
+ if (tryWriteAsHandle(val))
+ return;
+
doWriteByte(BYTE_ARR);
doWriteInt(val.length);
@@ -605,6 +608,9 @@ public class PortableWriterExImpl implements PortableWriter, PortableRawWriterEx
if (val == null)
doWriteByte(NULL);
else {
+ if (tryWriteAsHandle(val))
+ return;
+
doWriteByte(SHORT_ARR);
doWriteInt(val.length);
@@ -619,6 +625,9 @@ public class PortableWriterExImpl implements PortableWriter, PortableRawWriterEx
if (val == null)
doWriteByte(NULL);
else {
+ if (tryWriteAsHandle(val))
+ return;
+
doWriteByte(INT_ARR);
doWriteInt(val.length);
@@ -633,6 +642,9 @@ public class PortableWriterExImpl implements PortableWriter, PortableRawWriterEx
if (val == null)
doWriteByte(NULL);
else {
+ if (tryWriteAsHandle(val))
+ return;
+
doWriteByte(LONG_ARR);
doWriteInt(val.length);
@@ -647,6 +659,9 @@ public class PortableWriterExImpl implements PortableWriter, PortableRawWriterEx
if (val == null)
doWriteByte(NULL);
else {
+ if (tryWriteAsHandle(val))
+ return;
+
doWriteByte(FLOAT_ARR);
doWriteInt(val.length);
@@ -661,6 +676,9 @@ public class PortableWriterExImpl implements PortableWriter, PortableRawWriterEx
if (val == null)
doWriteByte(NULL);
else {
+ if (tryWriteAsHandle(val))
+ return;
+
doWriteByte(DOUBLE_ARR);
doWriteInt(val.length);
@@ -675,6 +693,9 @@ public class PortableWriterExImpl implements PortableWriter, PortableRawWriterEx
if (val == null)
doWriteByte(NULL);
else {
+ if (tryWriteAsHandle(val))
+ return;
+
doWriteByte(CHAR_ARR);
doWriteInt(val.length);
@@ -689,6 +710,9 @@ public class PortableWriterExImpl implements PortableWriter, PortableRawWriterEx
if (val == null)
doWriteByte(NULL);
else {
+ if (tryWriteAsHandle(val))
+ return;
+
doWriteByte(BOOLEAN_ARR);
doWriteInt(val.length);
@@ -703,6 +727,9 @@ public class PortableWriterExImpl implements PortableWriter, PortableRawWriterEx
if (val == null)
doWriteByte(NULL);
else {
+ if (tryWriteAsHandle(val))
+ return;
+
doWriteByte(DECIMAL_ARR);
doWriteInt(val.length);
@@ -718,6 +745,9 @@ public class PortableWriterExImpl implements PortableWriter, PortableRawWriterEx
if (val == null)
doWriteByte(NULL);
else {
+ if (tryWriteAsHandle(val))
+ return;
+
doWriteByte(STRING_ARR);
doWriteInt(val.length);
@@ -733,6 +763,9 @@ public class PortableWriterExImpl implements PortableWriter, PortableRawWriterEx
if (val == null)
doWriteByte(NULL);
else {
+ if (tryWriteAsHandle(val))
+ return;
+
doWriteByte(UUID_ARR);
doWriteInt(val.length);
@@ -748,6 +781,9 @@ public class PortableWriterExImpl implements PortableWriter, PortableRawWriterEx
if (val == null)
doWriteByte(NULL);
else {
+ if (tryWriteAsHandle(val))
+ return;
+
doWriteByte(DATE_ARR);
doWriteInt(val.length);
@@ -764,6 +800,9 @@ public class PortableWriterExImpl implements PortableWriter, PortableRawWriterEx
if (val == null)
doWriteByte(NULL);
else {
+ if (tryWriteAsHandle(val))
+ return;
+
PortableContext.Type type = ctx.typeId(val.getClass().getComponentType());
doWriteByte(OBJ_ARR);
@@ -790,6 +829,9 @@ public class PortableWriterExImpl implements PortableWriter, PortableRawWriterEx
if (col == null)
doWriteByte(NULL);
else {
+ if (tryWriteAsHandle(col))
+ return;
+
doWriteByte(COL);
doWriteInt(col.size());
doWriteByte(ctx.collectionType(col.getClass()));
@@ -807,6 +849,9 @@ public class PortableWriterExImpl implements PortableWriter, PortableRawWriterEx
if (map == null)
doWriteByte(NULL);
else {
+ if (tryWriteAsHandle(map))
+ return;
+
doWriteByte(MAP);
doWriteInt(map.size());
doWriteByte(ctx.mapType(map.getClass()));
@@ -826,6 +871,9 @@ public class PortableWriterExImpl implements PortableWriter, PortableRawWriterEx
if (e == null)
doWriteByte(NULL);
else {
+ if (tryWriteAsHandle(e))
+ return;
+
doWriteByte(MAP_ENTRY);
doWriteObject(e.getKey(), false);
doWriteObject(e.getValue(), false);
@@ -905,7 +953,7 @@ public class PortableWriterExImpl implements PortableWriter, PortableRawWriterEx
/**
* @param po Portable object.
*/
- void doWritePortableObject(@Nullable PortableObjectImpl po) {
+ public void doWritePortableObject(@Nullable PortableObjectImpl po) {
if (po == null)
doWriteByte(NULL);
else {
@@ -1106,64 +1154,88 @@ public class PortableWriterExImpl implements PortableWriter, PortableRawWriterEx
* @param val Value.
*/
void writeByteArrayField(@Nullable byte[] val) {
- doWriteInt(val != null ? 5 + val.length : 1);
+ int lenPos = reserveAndMark(4);
+
doWriteByteArray(val);
+
+ writeDelta(lenPos);
}
/**
* @param val Value.
*/
void writeShortArrayField(@Nullable short[] val) {
- doWriteInt(val != null ? 5 + (val.length << 1) : 1);
+ int lenPos = reserveAndMark(4);
+
doWriteShortArray(val);
+
+ writeDelta(lenPos);
}
/**
* @param val Value.
*/
void writeIntArrayField(@Nullable int[] val) {
- doWriteInt(val != null ? 5 + (val.length << 2) : 1);
+ int lenPos = reserveAndMark(4);
+
doWriteIntArray(val);
+
+ writeDelta(lenPos);
}
/**
* @param val Value.
*/
void writeLongArrayField(@Nullable long[] val) {
- doWriteInt(val != null ? 5 + (val.length << 3) : 1);
+ int lenPos = reserveAndMark(4);
+
doWriteLongArray(val);
+
+ writeDelta(lenPos);
}
/**
* @param val Value.
*/
void writeFloatArrayField(@Nullable float[] val) {
- doWriteInt(val != null ? 5 + (val.length << 2) : 1);
+ int lenPos = reserveAndMark(4);
+
doWriteFloatArray(val);
+
+ writeDelta(lenPos);
}
/**
* @param val Value.
*/
void writeDoubleArrayField(@Nullable double[] val) {
- doWriteInt(val != null ? 5 + (val.length << 3) : 1);
+ int lenPos = reserveAndMark(4);
+
doWriteDoubleArray(val);
+
+ writeDelta(lenPos);
}
/**
* @param val Value.
*/
void writeCharArrayField(@Nullable char[] val) {
- doWriteInt(val != null ? 5 + (val.length << 1) : 1);
+ int lenPos = reserveAndMark(4);
+
doWriteCharArray(val);
+
+ writeDelta(lenPos);
}
/**
* @param val Value.
*/
void writeBooleanArrayField(@Nullable boolean[] val) {
- doWriteInt(val != null ? 5 + val.length : 1);
+ int lenPos = reserveAndMark(4);
+
doWriteBooleanArray(val);
+
+ writeDelta(lenPos);
}
/**
@@ -1739,12 +1811,31 @@ public class PortableWriterExImpl implements PortableWriter, PortableRawWriterEx
doWriteInt(id);
}
+ /**
+ * Attempts to write the object as a handle.
+ *
+ * @param obj Object to write.
+ * @return {@code true} if the object has been written as a handle.
+ */
+ boolean tryWriteAsHandle(Object obj) {
+ int handle = handle(obj);
+
+ if (handle >= 0) {
+ doWriteByte(GridPortableMarshaller.HANDLE);
+ doWriteInt(handle);
+
+ return true;
+ }
+
+ return false;
+ }
+
/**
* Create new writer with same context.
* @param typeId type
* @return New writer.
*/
- PortableWriterExImpl newWriter(int typeId) {
+ public PortableWriterExImpl newWriter(int typeId) {
PortableWriterExImpl res = new PortableWriterExImpl(ctx, wCtx);
res.typeId = typeId;
@@ -1755,7 +1846,7 @@ public class PortableWriterExImpl implements PortableWriter, PortableRawWriterEx
/**
* @return Portable context.
*/
- PortableContext context() {
+ public PortableContext context() {
return ctx;
}
@@ -1803,4 +1894,4 @@ public class PortableWriterExImpl implements PortableWriter, PortableRawWriterEx
handles = new IdentityHashMap<>();
}
}
-}
\ No newline at end of file
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/6ac9557e/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableAbstractLazyValue.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableAbstractLazyValue.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableAbstractLazyValue.java
new file mode 100644
index 0000000..1f521ac
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableAbstractLazyValue.java
@@ -0,0 +1,57 @@
+/*
+ * 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.portable.builder;
+
+/**
+ *
+ */
+abstract class PortableAbstractLazyValue implements PortableLazyValue {
+ /** */
+ protected Object val;
+
+ /** */
+ protected final PortableBuilderReader reader;
+
+ /** */
+ protected final int valOff;
+
+ /**
+ * @param reader Reader.
+ * @param valOff Value.
+ */
+ protected PortableAbstractLazyValue(PortableBuilderReader reader, int valOff) {
+ this.reader = reader;
+ this.valOff = valOff;
+ }
+
+ /**
+ * @return Value.
+ */
+ protected abstract Object init();
+
+ /** {@inheritDoc} */
+ @Override public Object value() {
+ if (val == null) {
+ val = init();
+
+ assert val != null;
+ }
+
+ return val;
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/6ac9557e/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableBuilderEnum.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableBuilderEnum.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableBuilderEnum.java
new file mode 100644
index 0000000..1472d56
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableBuilderEnum.java
@@ -0,0 +1,116 @@
+/*
+ * 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.portable.builder;
+
+import org.apache.ignite.internal.portable.GridPortableMarshaller;
+import org.apache.ignite.internal.portable.PortableWriterExImpl;
+import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.portable.PortableInvalidClassException;
+
+/**
+ *
+ */
+public class PortableBuilderEnum implements PortableBuilderSerializationAware {
+ /** */
+ private final int ordinal;
+
+ /** */
+ private final int typeId;
+
+ /** */
+ private final String clsName;
+
+ /**
+ * @param typeId Type ID.
+ * @param anEnum Enum instance.
+ */
+ public PortableBuilderEnum(int typeId, Enum anEnum) {
+ ordinal = anEnum.ordinal();
+ this.typeId = typeId;
+ clsName = null;
+ }
+
+ /**
+ * @param reader PortableBuilderReader.
+ */
+ public PortableBuilderEnum(PortableBuilderReader reader) {
+ int typeId = reader.readInt();
+
+ if (typeId == GridPortableMarshaller.UNREGISTERED_TYPE_ID) {
+ clsName = reader.readString();
+
+ Class cls;
+
+ try {
+ // TODO: IGNITE-1272 - Is class loader needed here?
+ cls = U.forName(reader.readString(), null);
+ }
+ catch (ClassNotFoundException e) {
+ throw new PortableInvalidClassException("Failed to load the class: " + clsName, e);
+ }
+
+ this.typeId = reader.portableContext().descriptorForClass(cls).typeId();
+ }
+ else {
+ this.typeId = typeId;
+ this.clsName = null;
+ }
+
+ ordinal = reader.readInt();
+ }
+
+ /**
+ * @return Ordinal.
+ */
+ public int getOrdinal() {
+ return ordinal;
+ }
+
+ /** {@inheritDoc} */
+ @Override public void writeTo(PortableWriterExImpl writer, PortableBuilderSerializer ctx) {
+ writer.writeByte(GridPortableMarshaller.ENUM);
+
+ if (typeId == GridPortableMarshaller.UNREGISTERED_TYPE_ID) {
+ writer.writeInt(GridPortableMarshaller.UNREGISTERED_TYPE_ID);
+ writer.writeString(clsName);
+ }
+ else
+ writer.writeInt(typeId);
+
+ writer.writeInt(ordinal);
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean equals(Object o) {
+ if (o == null || getClass() != o.getClass())
+ return false;
+
+ PortableBuilderEnum that = (PortableBuilderEnum)o;
+
+ return ordinal == that.ordinal && typeId == that.typeId;
+ }
+
+ /** {@inheritDoc} */
+ @Override public int hashCode() {
+ int result = ordinal;
+
+ result = 31 * result + typeId;
+
+ return result;
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/6ac9557e/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableBuilderImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableBuilderImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableBuilderImpl.java
new file mode 100644
index 0000000..b2e4c0d
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableBuilderImpl.java
@@ -0,0 +1,537 @@
+/*
+ * 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.portable.builder;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Set;
+import org.apache.ignite.internal.processors.cache.portable.CacheObjectPortableProcessorImpl;
+import org.apache.ignite.internal.util.GridArgumentCheck;
+import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.portable.PortableBuilder;
+import org.apache.ignite.portable.PortableException;
+import org.apache.ignite.portable.PortableInvalidClassException;
+import org.apache.ignite.portable.PortableMetadata;
+import org.apache.ignite.portable.PortableObject;
+import org.jetbrains.annotations.Nullable;
+import org.apache.ignite.internal.portable.*;
+import org.apache.ignite.internal.processors.cache.portable.*;
+import org.apache.ignite.internal.util.*;
+import org.apache.ignite.internal.util.typedef.internal.*;
+import org.apache.ignite.portable.*;
+
+import static org.apache.ignite.internal.portable.GridPortableMarshaller.CLS_NAME_POS;
+import static org.apache.ignite.internal.portable.GridPortableMarshaller.DFLT_HDR_LEN;
+import static org.apache.ignite.internal.portable.GridPortableMarshaller.HASH_CODE_POS;
+import static org.apache.ignite.internal.portable.GridPortableMarshaller.RAW_DATA_OFF_POS;
+import static org.apache.ignite.internal.portable.GridPortableMarshaller.TOTAL_LEN_POS;
+import static org.apache.ignite.internal.portable.GridPortableMarshaller.TYPE_ID_POS;
+import static org.apache.ignite.internal.portable.GridPortableMarshaller.UNREGISTERED_TYPE_ID;
+
+/**
+ *
+ */
+public class PortableBuilderImpl implements PortableBuilder {
+ /** */
+ private static final Object REMOVED_FIELD_MARKER = new Object();
+
+ /** */
+ private final PortableContext ctx;
+
+ /** */
+ private final int typeId;
+
+ /** May be null. */
+ private String typeName;
+
+ /** May be null. */
+ private String clsNameToWrite;
+
+ /** */
+ private boolean registeredType = true;
+
+ /** */
+ private Map<String, Object> assignedVals;
+
+ /** */
+ private Map<Integer, Object> readCache;
+
+ /** Position of object in source array, or -1 if object is not created from PortableObject. */
+ private final int start;
+
+ /** Total header length */
+ private final int hdrLen;
+
+ /**
+ * Context of PortableObject reading process. Or {@code null} if object is not created from PortableObject.
+ */
+ private final PortableBuilderReader reader;
+
+ /** */
+ private int hashCode;
+
+ /**
+ * @param clsName Class name.
+ * @param ctx Portable context.
+ */
+ public PortableBuilderImpl(PortableContext ctx, String clsName) {
+ this(ctx, ctx.typeId(clsName), PortableContext.typeName(clsName));
+ }
+
+ /**
+ * @param typeId Type ID.
+ * @param ctx Portable context.
+ */
+ public PortableBuilderImpl(PortableContext ctx, int typeId) {
+ this(ctx, typeId, null);
+ }
+
+ /**
+ * @param typeName Type name.
+ * @param ctx Context.
+ * @param typeId Type id.
+ */
+ public PortableBuilderImpl(PortableContext ctx, int typeId, String typeName) {
+ this.typeId = typeId;
+ this.typeName = typeName;
+ this.ctx = ctx;
+
+ start = -1;
+ reader = null;
+ hdrLen = DFLT_HDR_LEN;
+
+ readCache = Collections.emptyMap();
+ }
+
+ /**
+ * @param obj Object to wrap.
+ */
+ public PortableBuilderImpl(PortableObjectImpl obj) {
+ this(new PortableBuilderReader(obj), obj.start());
+
+ reader.registerObject(this);
+ }
+
+ /**
+ * @param reader ctx
+ * @param start Start.
+ */
+ PortableBuilderImpl(PortableBuilderReader reader, int start) {
+ this.reader = reader;
+ this.start = start;
+
+ int typeId = reader.readIntAbsolute(start + TYPE_ID_POS);
+ ctx = reader.portableContext();
+ hashCode = reader.readIntAbsolute(start + HASH_CODE_POS);
+
+ if (typeId == UNREGISTERED_TYPE_ID) {
+ int mark = reader.position();
+
+ reader.position(start + CLS_NAME_POS);
+
+ clsNameToWrite = reader.readString();
+
+ Class cls;
+
+ try {
+ // TODO: IGNITE-1272 - Is class loader needed here?
+ cls = U.forName(clsNameToWrite, null);
+ }
+ catch (ClassNotFoundException e) {
+ throw new PortableInvalidClassException("Failed to load the class: " + clsNameToWrite, e);
+ }
+
+ this.typeId = ctx.descriptorForClass(cls).typeId();
+
+ registeredType = false;
+
+ hdrLen = reader.position() - mark;
+
+ reader.position(mark);
+ }
+ else {
+ this.typeId = typeId;
+ hdrLen = DFLT_HDR_LEN;
+ }
+ }
+
+ /** {@inheritDoc} */
+ @Override public PortableObject build() {
+ try (PortableWriterExImpl writer = new PortableWriterExImpl(ctx, 0, typeId, false)) {
+
+ PortableBuilderSerializer serializationCtx = new PortableBuilderSerializer();
+
+ serializationCtx.registerObjectWriting(this, 0);
+
+ serializeTo(writer, serializationCtx);
+
+ byte[] arr = writer.array();
+
+ return new PortableObjectImpl(ctx, arr, 0);
+ }
+ }
+
+ /**
+ * @param writer Writer.
+ * @param serializer Serializer.
+ */
+ void serializeTo(PortableWriterExImpl writer, PortableBuilderSerializer serializer) {
+ writer.doWriteByte(GridPortableMarshaller.OBJ);
+ writer.doWriteBoolean(true);
+ writer.doWriteInt(registeredType ? typeId : UNREGISTERED_TYPE_ID);
+ writer.doWriteInt(hashCode);
+
+ // Length and raw offset.
+ writer.reserve(8);
+
+ if (!registeredType)
+ writer.writeString(clsNameToWrite);
+
+ Set<Integer> remainsFlds = null;
+
+ if (reader != null) {
+ Map<Integer, Object> assignedFldsById;
+
+ if (assignedVals != null) {
+ assignedFldsById = U.newHashMap(assignedVals.size());
+
+ for (Map.Entry<String, Object> entry : assignedVals.entrySet()) {
+ int fldId = ctx.fieldId(typeId, entry.getKey());
+
+ assignedFldsById.put(fldId, entry.getValue());
+ }
+
+ remainsFlds = assignedFldsById.keySet();
+ }
+ else
+ assignedFldsById = Collections.emptyMap();
+
+ int rawOff = start + reader.readIntAbsolute(start + RAW_DATA_OFF_POS);
+
+ reader.position(start + hdrLen);
+
+ int cpStart = -1;
+
+ while (reader.position() < rawOff) {
+ int fldId = reader.readInt();
+
+ int len = reader.readInt();
+
+ if (assignedFldsById.containsKey(fldId)) {
+ if (cpStart >= 0) {
+ writer.write(reader.array(), cpStart, reader.position() - 4 - 4 - cpStart);
+
+ cpStart = -1;
+ }
+
+ Object assignedVal = assignedFldsById.remove(fldId);
+
+ reader.skip(len);
+
+ if (assignedVal != REMOVED_FIELD_MARKER) {
+ writer.writeInt(fldId);
+
+ int lenPos = writer.reserveAndMark(4);
+
+ serializer.writeValue(writer, assignedVal);
+
+ writer.writeDelta(lenPos);
+ }
+ }
+ else {
+ int type = len != 0 ? reader.readByte(0) : 0;
+
+ if (len != 0 && !PortableUtils.isPlainArrayType(type) && PortableUtils.isPlainType(type)) {
+ if (cpStart < 0)
+ cpStart = reader.position() - 4 - 4;
+
+ reader.skip(len);
+ }
+ else {
+ if (cpStart >= 0) {
+ writer.write(reader.array(), cpStart, reader.position() - 4 - cpStart);
+
+ cpStart = -1;
+ }
+ else
+ writer.writeInt(fldId);
+
+ Object val;
+
+ if (len == 0)
+ val = null;
+ else if (readCache == null) {
+ int savedPos = reader.position();
+
+ val = reader.parseValue();
+
+ assert reader.position() == savedPos + len;
+ }
+ else {
+ val = readCache.get(fldId);
+
+ reader.skip(len);
+ }
+
+ int lenPos = writer.reserveAndMark(4);
+
+ serializer.writeValue(writer, val);
+
+ writer.writeDelta(lenPos);
+ }
+ }
+ }
+
+ if (cpStart >= 0)
+ writer.write(reader.array(), cpStart, reader.position() - cpStart);
+ }
+
+ if (assignedVals != null && (remainsFlds == null || !remainsFlds.isEmpty())) {
+ boolean metadataEnabled = ctx.isMetaDataEnabled(typeId);
+
+ PortableMetadata metadata = null;
+
+ if (metadataEnabled)
+ metadata = ctx.metaData(typeId);
+
+ Map<String, String> newFldsMetadata = null;
+
+ for (Map.Entry<String, Object> entry : assignedVals.entrySet()) {
+ Object val = entry.getValue();
+
+ if (val == REMOVED_FIELD_MARKER)
+ continue;
+
+ String name = entry.getKey();
+
+ int fldId = ctx.fieldId(typeId, name);
+
+ if (remainsFlds != null && !remainsFlds.contains(fldId))
+ continue;
+
+ writer.writeInt(fldId);
+
+ int lenPos = writer.reserveAndMark(4);
+
+ serializer.writeValue(writer, val);
+
+ writer.writeDelta(lenPos);
+
+ if (metadataEnabled) {
+ String oldFldTypeName = metadata == null ? null : metadata.fieldTypeName(name);
+
+ String newFldTypeName;
+
+ if (val instanceof PortableValueWithType)
+ newFldTypeName = ((PortableValueWithType)val).typeName();
+ else {
+ byte type = PortableUtils.typeByClass(val.getClass());
+
+ newFldTypeName = CacheObjectPortableProcessorImpl.fieldTypeName(type);
+ }
+
+ if (oldFldTypeName == null) {
+ // It's a new field, we have to add it to metadata.
+
+ if (newFldsMetadata == null)
+ newFldsMetadata = new HashMap<>();
+
+ newFldsMetadata.put(name, newFldTypeName);
+ }
+ else {
+ if (!"Object".equals(oldFldTypeName) && !oldFldTypeName.equals(newFldTypeName)) {
+ throw new PortableException(
+ "Wrong value has been set [" +
+ "typeName=" + (typeName == null ? metadata.typeName() : typeName) +
+ ", fieldName=" + name +
+ ", fieldType=" + oldFldTypeName +
+ ", assignedValueType=" + newFldTypeName +
+ ", assignedValue=" + (((PortableValueWithType)val).value()) + ']'
+ );
+ }
+ }
+ }
+ }
+
+ if (newFldsMetadata != null) {
+ String typeName = this.typeName;
+
+ if (typeName == null)
+ typeName = metadata.typeName();
+
+ ctx.updateMetaData(typeId, typeName, newFldsMetadata);
+ }
+ }
+
+ writer.writeRawOffsetIfNeeded();
+
+ if (reader != null) {
+ int rawOff = reader.readIntAbsolute(start + RAW_DATA_OFF_POS);
+ int len = reader.readIntAbsolute(start + TOTAL_LEN_POS);
+
+ if (rawOff < len)
+ writer.write(reader.array(), rawOff, len - rawOff);
+ }
+
+ writer.writeLength();
+ }
+
+ /** {@inheritDoc} */
+ @Override public PortableBuilderImpl hashCode(int hashCode) {
+ this.hashCode = hashCode;
+
+ return this;
+ }
+
+ /**
+ *
+ */
+ private void ensureReadCacheInit() {
+ if (readCache == null) {
+ Map<Integer, Object> readCache = new HashMap<>();
+
+ int pos = start + hdrLen;
+ int end = start + reader.readIntAbsolute(start + RAW_DATA_OFF_POS);
+
+ while (pos < end) {
+ int fieldId = reader.readIntAbsolute(pos);
+
+ pos += 4;
+
+ int len = reader.readIntAbsolute(pos);
+
+ pos += 4;
+
+ Object val = reader.getValueQuickly(pos, len);
+
+ readCache.put(fieldId, val);
+
+ pos += len;
+ }
+
+ this.readCache = readCache;
+ }
+ }
+
+ /** {@inheritDoc} */
+ @Override public <F> F getField(String name) {
+ Object val;
+
+ if (assignedVals != null && assignedVals.containsKey(name)) {
+ val = assignedVals.get(name);
+
+ if (val == REMOVED_FIELD_MARKER)
+ return null;
+ }
+ else {
+ ensureReadCacheInit();
+
+ int fldId = ctx.fieldId(typeId, name);
+
+ val = readCache.get(fldId);
+ }
+
+ return (F)PortableUtils.unwrapLazy(val);
+ }
+
+ /** {@inheritDoc} */
+ @Override public PortableBuilder setField(String name, Object val) {
+ GridArgumentCheck.notNull(val, name);
+
+ if (assignedVals == null)
+ assignedVals = new LinkedHashMap<>();
+
+ Object oldVal = assignedVals.put(name, val);
+
+ if (oldVal instanceof PortableValueWithType) {
+ ((PortableValueWithType)oldVal).value(val);
+
+ assignedVals.put(name, oldVal);
+ }
+
+ return this;
+ }
+
+ /** {@inheritDoc} */
+ @Override public <T> PortableBuilder setField(String name, @Nullable T val, Class<? super T> type) {
+ if (assignedVals == null)
+ assignedVals = new LinkedHashMap<>();
+
+ //int fldId = ctx.fieldId(typeId, fldName);
+
+ assignedVals.put(name, new PortableValueWithType(PortableUtils.typeByClass(type), val));
+
+ return this;
+ }
+
+ /** {@inheritDoc} */
+ @Override public PortableBuilder setField(String name, @Nullable PortableBuilder builder) {
+ if (builder == null)
+ return setField(name, null, Object.class);
+ else
+ return setField(name, (Object)builder);
+ }
+
+ /**
+ * Removes field from portable object.
+ *
+ * @param name Field name.
+ * @return {@code this} instance for chaining.
+ */
+ @Override public PortableBuilderImpl removeField(String name) {
+ if (assignedVals == null)
+ assignedVals = new LinkedHashMap<>();
+
+ assignedVals.put(name, REMOVED_FIELD_MARKER);
+
+ return this;
+ }
+
+ /**
+ * Creates builder initialized by specified portable object.
+ *
+ * @param obj Portable object to initialize builder.
+ * @return New builder.
+ */
+ public static PortableBuilderImpl wrap(PortableObject obj) {
+ PortableObjectImpl heapObj;
+
+ if (obj instanceof PortableObjectOffheapImpl)
+ heapObj = (PortableObjectImpl)((PortableObjectOffheapImpl)obj).heapCopy();
+ else
+ heapObj = (PortableObjectImpl)obj;
+
+ return new PortableBuilderImpl(heapObj);
+ }
+
+ /**
+ * @return Object start position in source array.
+ */
+ int start() {
+ return start;
+ }
+
+ /**
+ * @return Object type id.
+ */
+ public int typeId() {
+ return typeId;
+ }
+}
\ No newline at end of file
[13/18] ignite git commit: ignite-1273: fixed cyclic references
processing by PortableMarshaller and ability to modify array fields returned
by PortableBuilder
Posted by sb...@apache.org.
ignite-1273: fixed cyclic references processing by PortableMarshaller and ability to modify array fields returned by PortableBuilder
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/6ac9557e
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/6ac9557e
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/6ac9557e
Branch: refs/heads/ignite-1349
Commit: 6ac9557ef71b7745eff90bcf15a4f7a958fcfa6b
Parents: 8bd8644
Author: Denis Magda <dm...@gridgain.com>
Authored: Thu Sep 3 08:30:36 2015 +0300
Committer: Denis Magda <dm...@gridgain.com>
Committed: Thu Sep 3 08:30:36 2015 +0300
----------------------------------------------------------------------
.../portable/GridPortableMarshaller.java | 44 +-
.../portable/PortableAbstractLazyValue.java | 57 --
.../internal/portable/PortableBuilderEnum.java | 114 ---
.../internal/portable/PortableBuilderImpl.java | 531 ------------
.../portable/PortableBuilderReader.java | 776 ------------------
.../PortableBuilderSerializationAware.java | 29 -
.../portable/PortableBuilderSerializer.java | 211 -----
.../portable/PortableClassDescriptor.java | 57 +-
.../internal/portable/PortableContext.java | 6 +-
.../portable/PortableEnumArrayLazyValue.java | 112 ---
.../portable/PortableLazyArrayList.java | 159 ----
.../portable/PortableLazyLinkedList.java | 215 -----
.../internal/portable/PortableLazyMap.java | 218 -----
.../internal/portable/PortableLazyMapEntry.java | 66 --
.../internal/portable/PortableLazySet.java | 89 ---
.../internal/portable/PortableLazyValue.java | 28 -
.../portable/PortableObjectArrayLazyValue.java | 89 ---
.../portable/PortablePlainLazyValue.java | 47 --
.../portable/PortablePlainPortableObject.java | 50 --
.../internal/portable/PortableReaderExImpl.java | 154 +++-
.../ignite/internal/portable/PortableUtils.java | 11 +
.../portable/PortableValueWithType.java | 74 --
.../internal/portable/PortableWriterExImpl.java | 159 +++-
.../builder/PortableAbstractLazyValue.java | 57 ++
.../portable/builder/PortableBuilderEnum.java | 116 +++
.../portable/builder/PortableBuilderImpl.java | 537 +++++++++++++
.../portable/builder/PortableBuilderReader.java | 800 +++++++++++++++++++
.../PortableBuilderSerializationAware.java | 31 +
.../builder/PortableBuilderSerializer.java | 214 +++++
.../builder/PortableEnumArrayLazyValue.java | 114 +++
.../portable/builder/PortableLazyArrayList.java | 166 ++++
.../builder/PortableLazyLinkedList.java | 217 +++++
.../portable/builder/PortableLazyMap.java | 220 +++++
.../portable/builder/PortableLazyMapEntry.java | 68 ++
.../portable/builder/PortableLazySet.java | 92 +++
.../portable/builder/PortableLazyValue.java | 28 +
.../builder/PortableModifiableLazyValue.java | 52 ++
.../builder/PortableObjectArrayLazyValue.java | 91 +++
.../builder/PortablePlainLazyValue.java | 49 ++
.../builder/PortablePlainPortableObject.java | 53 ++
.../portable/builder/PortableValueWithType.java | 75 ++
.../internal/portable/builder/package-info.java | 22 +
.../CacheObjectPortableProcessorImpl.java | 2 +-
.../resources/META-INF/classnames.properties | 2 +-
.../GridPortableBuilderAdditionalSelfTest.java | 232 +++++-
.../portable/GridPortableBuilderSelfTest.java | 1 +
.../GridPortableMarshallerSelfTest.java | 72 +-
.../GridPortableMetaDataDisabledSelfTest.java | 17 +
.../portable/GridPortableMetaDataSelfTest.java | 17 +
.../mutabletest/GridPortableTestClasses.java | 38 +-
...ClientNodePortableMetadataMultinodeTest.java | 11 +
51 files changed, 3687 insertions(+), 3003 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/6ac9557e/modules/core/src/main/java/org/apache/ignite/internal/portable/GridPortableMarshaller.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/GridPortableMarshaller.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/GridPortableMarshaller.java
index 3b2357e..c7a9e6f 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/portable/GridPortableMarshaller.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/portable/GridPortableMarshaller.java
@@ -142,67 +142,67 @@ public class GridPortableMarshaller {
public static final byte OBJ = (byte)103;
/** */
- static final byte USER_SET = -1;
+ public static final byte USER_SET = -1;
/** */
- static final byte USER_COL = 0;
+ public static final byte USER_COL = 0;
/** */
- static final byte ARR_LIST = 1;
+ public static final byte ARR_LIST = 1;
/** */
- static final byte LINKED_LIST = 2;
+ public static final byte LINKED_LIST = 2;
/** */
- static final byte HASH_SET = 3;
+ public static final byte HASH_SET = 3;
/** */
- static final byte LINKED_HASH_SET = 4;
+ public static final byte LINKED_HASH_SET = 4;
/** */
- static final byte TREE_SET = 5;
+ public static final byte TREE_SET = 5;
/** */
- static final byte CONC_SKIP_LIST_SET = 6;
+ public static final byte CONC_SKIP_LIST_SET = 6;
/** */
- static final byte HASH_MAP = 1;
+ public static final byte HASH_MAP = 1;
/** */
- static final byte LINKED_HASH_MAP = 2;
+ public static final byte LINKED_HASH_MAP = 2;
/** */
- static final byte TREE_MAP = 3;
+ public static final byte TREE_MAP = 3;
/** */
- static final byte CONC_HASH_MAP = 4;
+ public static final byte CONC_HASH_MAP = 4;
/** */
- static final byte PROPERTIES_MAP = 5;
+ public static final byte PROPERTIES_MAP = 5;
/** */
- static final int OBJECT_TYPE_ID = -1;
+ public static final int OBJECT_TYPE_ID = -1;
/** */
- static final int UNREGISTERED_TYPE_ID = 0;
+ public static final int UNREGISTERED_TYPE_ID = 0;
/** */
- static final int TYPE_ID_POS = 2;
+ public static final int TYPE_ID_POS = 2;
/** */
- static final int HASH_CODE_POS = 6;
+ public static final int HASH_CODE_POS = 6;
/** */
- static final int TOTAL_LEN_POS = 10;
+ public static final int TOTAL_LEN_POS = 10;
/** */
- static final byte RAW_DATA_OFF_POS = 14;
+ public static final byte RAW_DATA_OFF_POS = 14;
/** */
- static final int CLS_NAME_POS = 18;
+ public static final int CLS_NAME_POS = 18;
/** */
- static final byte DFLT_HDR_LEN = 18;
+ public static final byte DFLT_HDR_LEN = 18;
/** */
private final PortableContext ctx;
@@ -301,4 +301,4 @@ public class GridPortableMarshaller {
public PortableContext context() {
return ctx;
}
-}
\ No newline at end of file
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/6ac9557e/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableAbstractLazyValue.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableAbstractLazyValue.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableAbstractLazyValue.java
deleted file mode 100644
index 2b1c4b7..0000000
--- a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableAbstractLazyValue.java
+++ /dev/null
@@ -1,57 +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.portable;
-
-/**
- *
- */
-abstract class PortableAbstractLazyValue implements PortableLazyValue {
- /** */
- protected Object val;
-
- /** */
- protected final PortableBuilderReader reader;
-
- /** */
- protected final int valOff;
-
- /**
- * @param reader Reader.
- * @param valOff Value.
- */
- protected PortableAbstractLazyValue(PortableBuilderReader reader, int valOff) {
- this.reader = reader;
- this.valOff = valOff;
- }
-
- /**
- * @return Value.
- */
- protected abstract Object init();
-
- /** {@inheritDoc} */
- @Override public Object value() {
- if (val == null) {
- val = init();
-
- assert val != null;
- }
-
- return val;
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/6ac9557e/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableBuilderEnum.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableBuilderEnum.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableBuilderEnum.java
deleted file mode 100644
index b6ace99..0000000
--- a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableBuilderEnum.java
+++ /dev/null
@@ -1,114 +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.portable;
-
-import org.apache.ignite.internal.util.typedef.internal.U;
-import org.apache.ignite.portable.PortableInvalidClassException;
-
-/**
- *
- */
-public class PortableBuilderEnum implements PortableBuilderSerializationAware {
- /** */
- private final int ordinal;
-
- /** */
- private final int typeId;
-
- /** */
- private final String clsName;
-
- /**
- * @param typeId Type ID.
- * @param anEnum Enum instance.
- */
- public PortableBuilderEnum(int typeId, Enum anEnum) {
- ordinal = anEnum.ordinal();
- this.typeId = typeId;
- clsName = null;
- }
-
- /**
- * @param reader PortableBuilderReader.
- */
- public PortableBuilderEnum(PortableBuilderReader reader) {
- int typeId = reader.readInt();
-
- if (typeId == GridPortableMarshaller.UNREGISTERED_TYPE_ID) {
- clsName = reader.readString();
-
- Class cls;
-
- try {
- // TODO: IGNITE-1272 - Is class loader needed here?
- cls = U.forName(reader.readString(), null);
- }
- catch (ClassNotFoundException e) {
- throw new PortableInvalidClassException("Failed to load the class: " + clsName, e);
- }
-
- this.typeId = reader.portableContext().descriptorForClass(cls).typeId();
- }
- else {
- this.typeId = typeId;
- this.clsName = null;
- }
-
- ordinal = reader.readInt();
- }
-
- /**
- * @return Ordinal.
- */
- public int getOrdinal() {
- return ordinal;
- }
-
- /** {@inheritDoc} */
- @Override public void writeTo(PortableWriterExImpl writer, PortableBuilderSerializer ctx) {
- writer.writeByte(GridPortableMarshaller.ENUM);
-
- if (typeId == GridPortableMarshaller.UNREGISTERED_TYPE_ID) {
- writer.writeInt(GridPortableMarshaller.UNREGISTERED_TYPE_ID);
- writer.writeString(clsName);
- }
- else
- writer.writeInt(typeId);
-
- writer.writeInt(ordinal);
- }
-
- /** {@inheritDoc} */
- @Override public boolean equals(Object o) {
- if (o == null || getClass() != o.getClass())
- return false;
-
- PortableBuilderEnum that = (PortableBuilderEnum)o;
-
- return ordinal == that.ordinal && typeId == that.typeId;
- }
-
- /** {@inheritDoc} */
- @Override public int hashCode() {
- int result = ordinal;
-
- result = 31 * result + typeId;
-
- return result;
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/6ac9557e/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableBuilderImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableBuilderImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableBuilderImpl.java
deleted file mode 100644
index dac199a..0000000
--- a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableBuilderImpl.java
+++ /dev/null
@@ -1,531 +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.portable;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.Set;
-import org.apache.ignite.internal.processors.cache.portable.CacheObjectPortableProcessorImpl;
-import org.apache.ignite.internal.util.GridArgumentCheck;
-import org.apache.ignite.internal.util.typedef.internal.U;
-import org.apache.ignite.portable.PortableBuilder;
-import org.apache.ignite.portable.PortableException;
-import org.apache.ignite.portable.PortableInvalidClassException;
-import org.apache.ignite.portable.PortableMetadata;
-import org.apache.ignite.portable.PortableObject;
-import org.jetbrains.annotations.Nullable;
-
-import static org.apache.ignite.internal.portable.GridPortableMarshaller.CLS_NAME_POS;
-import static org.apache.ignite.internal.portable.GridPortableMarshaller.DFLT_HDR_LEN;
-import static org.apache.ignite.internal.portable.GridPortableMarshaller.HASH_CODE_POS;
-import static org.apache.ignite.internal.portable.GridPortableMarshaller.RAW_DATA_OFF_POS;
-import static org.apache.ignite.internal.portable.GridPortableMarshaller.TOTAL_LEN_POS;
-import static org.apache.ignite.internal.portable.GridPortableMarshaller.TYPE_ID_POS;
-import static org.apache.ignite.internal.portable.GridPortableMarshaller.UNREGISTERED_TYPE_ID;
-
-/**
- *
- */
-public class PortableBuilderImpl implements PortableBuilder {
- /** */
- private static final Object REMOVED_FIELD_MARKER = new Object();
-
- /** */
- private final PortableContext ctx;
-
- /** */
- private final int typeId;
-
- /** May be null. */
- private String typeName;
-
- /** May be null. */
- private String clsNameToWrite;
-
- /** */
- private boolean registeredType = true;
-
- /** */
- private Map<String, Object> assignedVals;
-
- /** */
- private Map<Integer, Object> readCache;
-
- /** Position of object in source array, or -1 if object is not created from PortableObject. */
- private final int start;
-
- /** Total header length */
- private final int hdrLen;
-
- /**
- * Context of PortableObject reading process. Or {@code null} if object is not created from PortableObject.
- */
- private final PortableBuilderReader reader;
-
- /** */
- private int hashCode;
-
- /**
- * @param clsName Class name.
- * @param ctx Portable context.
- */
- public PortableBuilderImpl(PortableContext ctx, String clsName) {
- this(ctx, ctx.typeId(clsName), PortableContext.typeName(clsName));
- }
-
- /**
- * @param typeId Type ID.
- * @param ctx Portable context.
- */
- public PortableBuilderImpl(PortableContext ctx, int typeId) {
- this(ctx, typeId, null);
- }
-
- /**
- * @param typeName Type name.
- * @param ctx Context.
- * @param typeId Type id.
- */
- public PortableBuilderImpl(PortableContext ctx, int typeId, String typeName) {
- this.typeId = typeId;
- this.typeName = typeName;
- this.ctx = ctx;
-
- start = -1;
- reader = null;
- hdrLen = DFLT_HDR_LEN;
-
- readCache = Collections.emptyMap();
- }
-
- /**
- * @param obj Object to wrap.
- */
- public PortableBuilderImpl(PortableObjectImpl obj) {
- this(new PortableBuilderReader(obj), obj.start());
-
- reader.registerObject(this);
- }
-
- /**
- * @param reader ctx
- * @param start Start.
- */
- PortableBuilderImpl(PortableBuilderReader reader, int start) {
- this.reader = reader;
- this.start = start;
-
- int typeId = reader.readIntAbsolute(start + TYPE_ID_POS);
- ctx = reader.portableContext();
- hashCode = reader.readIntAbsolute(start + HASH_CODE_POS);
-
- if (typeId == UNREGISTERED_TYPE_ID) {
- int mark = reader.position();
-
- reader.position(start + CLS_NAME_POS);
-
- clsNameToWrite = reader.readString();
-
- Class cls;
-
- try {
- // TODO: IGNITE-1272 - Is class loader needed here?
- cls = U.forName(clsNameToWrite, null);
- }
- catch (ClassNotFoundException e) {
- throw new PortableInvalidClassException("Failed to load the class: " + clsNameToWrite, e);
- }
-
- this.typeId = ctx.descriptorForClass(cls).typeId();
-
- registeredType = false;
-
- hdrLen = reader.position() - mark;
-
- reader.position(mark);
- }
- else {
- this.typeId = typeId;
- hdrLen = DFLT_HDR_LEN;
- }
- }
-
- /** {@inheritDoc} */
- @Override public PortableObject build() {
- try (PortableWriterExImpl writer = new PortableWriterExImpl(ctx, 0, typeId, false)) {
-
- PortableBuilderSerializer serializationCtx = new PortableBuilderSerializer();
-
- serializationCtx.registerObjectWriting(this, 0);
-
- serializeTo(writer, serializationCtx);
-
- byte[] arr = writer.array();
-
- return new PortableObjectImpl(ctx, arr, 0);
- }
- }
-
- /**
- * @param writer Writer.
- * @param serializer Serializer.
- */
- void serializeTo(PortableWriterExImpl writer, PortableBuilderSerializer serializer) {
- writer.doWriteByte(GridPortableMarshaller.OBJ);
- writer.doWriteBoolean(true);
- writer.doWriteInt(registeredType ? typeId : UNREGISTERED_TYPE_ID);
- writer.doWriteInt(hashCode);
-
- // Length and raw offset.
- writer.reserve(8);
-
- if (!registeredType)
- writer.writeString(clsNameToWrite);
-
-
- Set<Integer> remainsFlds = null;
-
- if (reader != null) {
- Map<Integer, Object> assignedFldsById;
-
- if (assignedVals != null) {
- assignedFldsById = U.newHashMap(assignedVals.size());
-
- for (Map.Entry<String, Object> entry : assignedVals.entrySet()) {
- int fldId = ctx.fieldId(typeId, entry.getKey());
-
- assignedFldsById.put(fldId, entry.getValue());
- }
-
- remainsFlds = assignedFldsById.keySet();
- }
- else
- assignedFldsById = Collections.emptyMap();
-
- int rawOff = start + reader.readIntAbsolute(start + RAW_DATA_OFF_POS);
-
- reader.position(start + hdrLen);
-
- int cpStart = -1;
-
- while (reader.position() < rawOff) {
- int fldId = reader.readInt();
-
- int len = reader.readInt();
-
- if (assignedFldsById.containsKey(fldId)) {
- if (cpStart >= 0) {
- writer.write(reader.array(), cpStart, reader.position() - 4 - 4 - cpStart);
-
- cpStart = -1;
- }
-
- Object assignedVal = assignedFldsById.remove(fldId);
-
- reader.skip(len);
-
- if (assignedVal != REMOVED_FIELD_MARKER) {
- writer.writeInt(fldId);
-
- int lenPos = writer.reserveAndMark(4);
-
- serializer.writeValue(writer, assignedVal);
-
- writer.writeDelta(lenPos);
- }
- }
- else {
- if (len != 0 && PortableUtils.isPlainType(reader.readByte(0))) {
- if (cpStart < 0)
- cpStart = reader.position() - 4 - 4;
-
- reader.skip(len);
- }
- else {
- if (cpStart >= 0) {
- writer.write(reader.array(), cpStart, reader.position() - 4 - cpStart);
-
- cpStart = -1;
- }
- else
- writer.writeInt(fldId);
-
- Object val;
-
- if (len == 0)
- val = null;
- else if (readCache == null) {
- int savedPos = reader.position();
-
- val = reader.parseValue();
-
- assert reader.position() == savedPos + len;
- }
- else {
- val = readCache.get(fldId);
-
- reader.skip(len);
- }
-
- int lenPos = writer.reserveAndMark(4);
-
- serializer.writeValue(writer, val);
-
- writer.writeDelta(lenPos);
- }
- }
- }
-
- if (cpStart >= 0)
- writer.write(reader.array(), cpStart, reader.position() - cpStart);
- }
-
- if (assignedVals != null && (remainsFlds == null || !remainsFlds.isEmpty())) {
- boolean metadataEnabled = ctx.isMetaDataEnabled(typeId);
-
- PortableMetadata metadata = null;
-
- if (metadataEnabled)
- metadata = ctx.metaData(typeId);
-
- Map<String, String> newFldsMetadata = null;
-
- for (Map.Entry<String, Object> entry : assignedVals.entrySet()) {
- Object val = entry.getValue();
-
- if (val == REMOVED_FIELD_MARKER)
- continue;
-
- String name = entry.getKey();
-
- int fldId = ctx.fieldId(typeId, name);
-
- if (remainsFlds != null && !remainsFlds.contains(fldId))
- continue;
-
- writer.writeInt(fldId);
-
- int lenPos = writer.reserveAndMark(4);
-
- serializer.writeValue(writer, val);
-
- writer.writeDelta(lenPos);
-
- if (metadataEnabled) {
- String oldFldTypeName = metadata == null ? null : metadata.fieldTypeName(name);
-
- String newFldTypeName;
-
- if (val instanceof PortableValueWithType)
- newFldTypeName = ((PortableValueWithType)val).typeName();
- else {
- byte type = PortableUtils.typeByClass(val.getClass());
-
- newFldTypeName = CacheObjectPortableProcessorImpl.fieldTypeName(type);
- }
-
- if (oldFldTypeName == null) {
- // It's a new field, we have to add it to metadata.
-
- if (newFldsMetadata == null)
- newFldsMetadata = new HashMap<>();
-
- newFldsMetadata.put(name, newFldTypeName);
- }
- else {
- if (!"Object".equals(oldFldTypeName) && !oldFldTypeName.equals(newFldTypeName)) {
- throw new PortableException(
- "Wrong value has been set [" +
- "typeName=" + (typeName == null ? metadata.typeName() : typeName) +
- ", fieldName=" + name +
- ", fieldType=" + oldFldTypeName +
- ", assignedValueType=" + newFldTypeName +
- ", assignedValue=" + (((PortableValueWithType)val).value()) + ']'
- );
- }
- }
- }
- }
-
- if (newFldsMetadata != null) {
- String typeName = this.typeName;
-
- if (typeName == null)
- typeName = metadata.typeName();
-
- ctx.updateMetaData(typeId, typeName, newFldsMetadata);
- }
- }
-
- writer.writeRawOffsetIfNeeded();
-
- if (reader != null) {
- int rawOff = reader.readIntAbsolute(start + RAW_DATA_OFF_POS);
- int len = reader.readIntAbsolute(start + TOTAL_LEN_POS);
-
- if (rawOff < len)
- writer.write(reader.array(), rawOff, len - rawOff);
- }
-
- writer.writeLength();
- }
-
- /** {@inheritDoc} */
- @Override public PortableBuilderImpl hashCode(int hashCode) {
- this.hashCode = hashCode;
-
- return this;
- }
-
- /**
- *
- */
- private void ensureReadCacheInit() {
- if (readCache == null) {
- Map<Integer, Object> readCache = new HashMap<>();
-
- int pos = start + hdrLen;
- int end = start + reader.readIntAbsolute(start + RAW_DATA_OFF_POS);
-
- while (pos < end) {
- int fieldId = reader.readIntAbsolute(pos);
-
- pos += 4;
-
- int len = reader.readIntAbsolute(pos);
-
- pos += 4;
-
- Object val = reader.getValueQuickly(pos, len);
-
- readCache.put(fieldId, val);
-
- pos += len;
- }
-
- this.readCache = readCache;
- }
- }
-
- /** {@inheritDoc} */
- @Override public <F> F getField(String name) {
- Object val;
-
- if (assignedVals != null && assignedVals.containsKey(name)) {
- val = assignedVals.get(name);
-
- if (val == REMOVED_FIELD_MARKER)
- return null;
- }
- else {
- ensureReadCacheInit();
-
- int fldId = ctx.fieldId(typeId, name);
-
- val = readCache.get(fldId);
- }
-
- return (F)PortableUtils.unwrapLazy(val);
- }
-
- /** {@inheritDoc} */
- @Override public PortableBuilder setField(String name, Object val) {
- GridArgumentCheck.notNull(val, "val");
-
- if (assignedVals == null)
- assignedVals = new LinkedHashMap<>();
-
- Object oldVal = assignedVals.put(name, val);
-
- if (oldVal instanceof PortableValueWithType) {
- ((PortableValueWithType)oldVal).value(val);
-
- assignedVals.put(name, oldVal);
- }
-
- return this;
- }
-
- /** {@inheritDoc} */
- @Override public <T> PortableBuilder setField(String name, @Nullable T val, Class<? super T> type) {
- if (assignedVals == null)
- assignedVals = new LinkedHashMap<>();
-
- //int fldId = ctx.fieldId(typeId, fldName);
-
- assignedVals.put(name, new PortableValueWithType(PortableUtils.typeByClass(type), val));
-
- return this;
- }
-
- /** {@inheritDoc} */
- @Override public PortableBuilder setField(String name, @Nullable PortableBuilder builder) {
- if (builder == null)
- return setField(name, null, Object.class);
- else
- return setField(name, (Object)builder);
- }
-
- /**
- * Removes field from portable object.
- *
- * @param name Field name.
- * @return {@code this} instance for chaining.
- */
- @Override public PortableBuilderImpl removeField(String name) {
- if (assignedVals == null)
- assignedVals = new LinkedHashMap<>();
-
- assignedVals.put(name, REMOVED_FIELD_MARKER);
-
- return this;
- }
-
- /**
- * Creates builder initialized by specified portable object.
- *
- * @param obj Portable object to initialize builder.
- * @return New builder.
- */
- public static PortableBuilderImpl wrap(PortableObject obj) {
- PortableObjectImpl heapObj;
-
- if (obj instanceof PortableObjectOffheapImpl)
- heapObj = (PortableObjectImpl)((PortableObjectOffheapImpl)obj).heapCopy();
- else
- heapObj = (PortableObjectImpl)obj;
-
- return new PortableBuilderImpl(heapObj);
- }
-
- /**
- * @return Object start position in source array.
- */
- int start() {
- return start;
- }
-
- /**
- * @return Object type id.
- */
- int typeId() {
- return typeId;
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/6ac9557e/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableBuilderReader.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableBuilderReader.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableBuilderReader.java
deleted file mode 100644
index 30b31f0..0000000
--- a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableBuilderReader.java
+++ /dev/null
@@ -1,776 +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.portable;
-
-import java.sql.Timestamp;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
-import org.apache.ignite.portable.PortableException;
-
-import static java.nio.charset.StandardCharsets.UTF_8;
-import static org.apache.ignite.internal.portable.GridPortableMarshaller.NULL;
-import static org.apache.ignite.internal.portable.GridPortableMarshaller.STRING;
-
-/**
- *
- */
-class PortableBuilderReader {
- /** */
- private static final PortablePrimitives PRIM = PortablePrimitives.get();
-
- /** */
- private final Map<Integer, PortableBuilderImpl> objMap = new HashMap<>();
-
- /** */
- private final PortableContext ctx;
-
- /** */
- private final PortableReaderExImpl reader;
-
- /** */
- private byte[] arr;
-
- /** */
- private int pos;
-
- /**
- * @param objImpl Portable object
- */
- PortableBuilderReader(PortableObjectImpl objImpl) {
- ctx = objImpl.context();
- arr = objImpl.array();
- pos = objImpl.start();
-
- // TODO: IGNITE-1272 - Is class loader needed here?
- reader = new PortableReaderExImpl(portableContext(), arr, pos, null);
- }
-
- /**
- * @return Portable context.
- */
- public PortableContext portableContext() {
- return ctx;
- }
-
- /**
- * @param obj Mutable portable object.
- */
- public void registerObject(PortableBuilderImpl obj) {
- objMap.put(obj.start(), obj);
- }
-
- /**
- * @return Read int value.
- */
- public int readInt() {
- int res = readInt(0);
-
- pos += 4;
-
- return res;
- }
-
- /**
- * @return Read int value.
- */
- public byte readByte() {
- return arr[pos++];
- }
-
- /**
- * @return Read boolean value.
- */
- public boolean readBoolean() {
- return readByte() == 1;
- }
-
- /**
- * @return Read int value.
- */
- public byte readByte(int off) {
- return arr[pos + off];
- }
-
- /**
- * @param off Offset related to {@link #pos}
- * @return Read int value.
- */
- public int readInt(int off) {
- return PRIM.readInt(arr, pos + off);
- }
-
- /**
- * @param pos Position in the source array.
- * @return Read int value.
- */
- public int readIntAbsolute(int pos) {
- return PRIM.readInt(arr, pos);
- }
-
- /**
- * @return Read length of array.
- */
- public int readLength() {
- return PRIM.readInt(arr, pos);
- }
-
- /**
- * Read string length.
- *
- * @return String length.
- */
- public int readStringLength() {
- boolean utf = PRIM.readBoolean(arr, pos);
-
- int arrLen = PRIM.readInt(arr, pos + 1);
-
- return 1 + (utf ? arrLen : arrLen << 1);
- }
-
- /**
- * Reads string.
- *
- * @return String.
- */
- public String readString() {
- byte flag = readByte();
-
- if (flag == NULL)
- return null;
-
- if (flag != STRING)
- throw new PortableException("Failed to deserialize String.");
-
- boolean convert = readBoolean();
- int len = readInt();
-
- String str;
-
- if (convert) {
- str = new String(arr, pos, len, UTF_8);
-
- pos += len;
- }
- else {
- str = String.valueOf(PRIM.readCharArray(arr, pos, len));
-
- pos += len << 1;
- }
-
- return str;
- }
-
- /**
- *
- */
- public void skipValue() {
- byte type = arr[pos++];
-
- int len;
-
- switch (type) {
- case GridPortableMarshaller.NULL:
- return;
-
- case GridPortableMarshaller.OBJ:
- pos += readInt(GridPortableMarshaller.TOTAL_LEN_POS - 1) - 1;
-
- return;
-
- case GridPortableMarshaller.BOOLEAN:
- case GridPortableMarshaller.BYTE:
- len = 1;
- break;
-
- case GridPortableMarshaller.CHAR:
- case GridPortableMarshaller.SHORT:
- len = 2;
-
- break;
-
- case GridPortableMarshaller.HANDLE:
- case GridPortableMarshaller.FLOAT:
- case GridPortableMarshaller.INT:
- len = 4;
-
- break;
-
- case GridPortableMarshaller.ENUM:
- //skipping type id and ordinal value
- len = 8;
-
- break;
-
- case GridPortableMarshaller.LONG:
- case GridPortableMarshaller.DOUBLE:
- len = 8;
-
- break;
-
- case GridPortableMarshaller.BYTE_ARR:
- case GridPortableMarshaller.BOOLEAN_ARR:
- len = 4 + readLength();
-
- break;
-
- case GridPortableMarshaller.STRING:
- len = 4 + readStringLength();
-
- break;
-
- case GridPortableMarshaller.DECIMAL:
- len = /** scale */ 4 + /** mag len */ 4 + /** mag bytes count */ readInt(4);
-
- break;
-
- case GridPortableMarshaller.UUID:
- len = 8 + 8;
-
- break;
-
- case GridPortableMarshaller.DATE:
- len = 8 + 4;
-
- break;
-
- case GridPortableMarshaller.CHAR_ARR:
- case GridPortableMarshaller.SHORT_ARR:
- len = 4 + readLength() * 2;
-
- break;
-
- case GridPortableMarshaller.INT_ARR:
- case GridPortableMarshaller.FLOAT_ARR:
- len = 4 + readLength() * 4;
-
- break;
-
- case GridPortableMarshaller.LONG_ARR:
- case GridPortableMarshaller.DOUBLE_ARR:
- len = 4 + readLength() * 8;
-
- break;
-
- case GridPortableMarshaller.DECIMAL_ARR:
- case GridPortableMarshaller.DATE_ARR:
- case GridPortableMarshaller.OBJ_ARR:
- case GridPortableMarshaller.ENUM_ARR:
- case GridPortableMarshaller.UUID_ARR:
- case GridPortableMarshaller.STRING_ARR: {
- int size = readInt();
-
- for (int i = 0; i < size; i++)
- skipValue();
-
- return;
- }
-
- case GridPortableMarshaller.COL: {
- int size = readInt();
-
- pos++; // skip collection type
-
- for (int i = 0; i < size; i++)
- skipValue();
-
- return;
- }
-
- case GridPortableMarshaller.MAP: {
- int size = readInt();
-
- pos++; // skip collection type
-
- for (int i = 0; i < size; i++) {
- skipValue(); // skip key.
- skipValue(); // skip value.
- }
-
- return;
- }
-
- case GridPortableMarshaller.MAP_ENTRY:
- skipValue();
- skipValue();
-
- return;
-
- case GridPortableMarshaller.PORTABLE_OBJ:
- len = readInt() + 4;
-
- break;
-
- default:
- throw new PortableException("Invalid flag value: " + type);
- }
-
- pos += len;
- }
-
- /**
- * @param pos Position.
- * @param len Length.
- * @return Object.
- */
- public Object getValueQuickly(int pos, int len) {
- byte type = arr[pos];
-
- switch (type) {
- case GridPortableMarshaller.NULL:
- return null;
-
- case GridPortableMarshaller.HANDLE: {
- int objStart = pos - readIntAbsolute(pos + 1);
-
- PortableBuilderImpl res = objMap.get(objStart);
-
- if (res == null) {
- res = new PortableBuilderImpl(this, objStart);
-
- objMap.put(objStart, res);
- }
-
- return res;
- }
-
- case GridPortableMarshaller.OBJ: {
- PortableBuilderImpl res = objMap.get(pos);
-
- if (res == null) {
- res = new PortableBuilderImpl(this, pos);
-
- objMap.put(pos, res);
- }
-
- return res;
- }
-
- case GridPortableMarshaller.BYTE:
- return arr[pos + 1];
-
- case GridPortableMarshaller.SHORT:
- return PRIM.readShort(arr, pos + 1);
-
- case GridPortableMarshaller.INT:
- return PRIM.readInt(arr, pos + 1);
-
- case GridPortableMarshaller.LONG:
- return PRIM.readLong(arr, pos + 1);
-
- case GridPortableMarshaller.FLOAT:
- return PRIM.readFloat(arr, pos + 1);
-
- case GridPortableMarshaller.DOUBLE:
- return PRIM.readDouble(arr, pos + 1);
-
- case GridPortableMarshaller.CHAR:
- return PRIM.readChar(arr, pos + 1);
-
- case GridPortableMarshaller.BOOLEAN:
- return arr[pos + 1] != 0;
-
- case GridPortableMarshaller.DECIMAL:
- case GridPortableMarshaller.STRING:
- case GridPortableMarshaller.UUID:
- case GridPortableMarshaller.DATE:
- case GridPortableMarshaller.BYTE_ARR:
- case GridPortableMarshaller.SHORT_ARR:
- case GridPortableMarshaller.INT_ARR:
- case GridPortableMarshaller.LONG_ARR:
- case GridPortableMarshaller.FLOAT_ARR:
- case GridPortableMarshaller.DOUBLE_ARR:
- case GridPortableMarshaller.CHAR_ARR:
- case GridPortableMarshaller.BOOLEAN_ARR:
- case GridPortableMarshaller.DECIMAL_ARR:
- case GridPortableMarshaller.DATE_ARR:
- case GridPortableMarshaller.UUID_ARR:
- case GridPortableMarshaller.STRING_ARR:
- return new PortablePlainLazyValue(this, pos, len);
-
- case GridPortableMarshaller.COL:
- case GridPortableMarshaller.OBJ_ARR:
- case GridPortableMarshaller.MAP:
- case GridPortableMarshaller.ENUM_ARR:
- case GridPortableMarshaller.MAP_ENTRY:
- return new LazyCollection(pos);
-
- case GridPortableMarshaller.ENUM: {
- if (len == 1) {
- assert readByte(pos) == GridPortableMarshaller.NULL;
-
- return null;
- }
-
- int mark = position();
- position(pos + 1);
-
- PortableBuilderEnum builderEnum = new PortableBuilderEnum(this);
-
- position(mark);
-
- return builderEnum;
- }
-
- case GridPortableMarshaller.PORTABLE_OBJ: {
- int size = readIntAbsolute(pos + 1);
-
- int start = readIntAbsolute(pos + 4 + size);
-
- PortableObjectImpl portableObj = new PortableObjectImpl(ctx, arr, pos + 4 + start);
-
- return new PortablePlainPortableObject(portableObj);
- }
-
- default:
- throw new PortableException("Invalid flag value: " + type);
- }
- }
-
- /**
- * @return Parsed value.
- */
- public Object parseValue() {
- int valPos = pos;
-
- byte type = arr[pos++];
-
- int plainLazyValLen;
-
- switch (type) {
- case GridPortableMarshaller.NULL:
- return null;
-
- case GridPortableMarshaller.HANDLE: {
- int objStart = pos - 1 - readInt();
-
- PortableBuilderImpl res = objMap.get(objStart);
-
- if (res == null) {
- res = new PortableBuilderImpl(this, objStart);
-
- objMap.put(objStart, res);
- }
-
- return res;
- }
-
- case GridPortableMarshaller.OBJ: {
- pos--;
-
- PortableBuilderImpl res = objMap.get(pos);
-
- if (res == null) {
- res = new PortableBuilderImpl(this, pos);
-
- objMap.put(pos, res);
- }
-
- pos += readInt(GridPortableMarshaller.TOTAL_LEN_POS);
-
- return res;
- }
-
- case GridPortableMarshaller.BYTE:
- return arr[pos++];
-
- case GridPortableMarshaller.SHORT: {
- Object res = PRIM.readShort(arr, pos);
- pos += 2;
- return res;
- }
-
- case GridPortableMarshaller.INT:
- return readInt();
-
- case GridPortableMarshaller.LONG:
- plainLazyValLen = 8;
-
- break;
-
- case GridPortableMarshaller.FLOAT:
- plainLazyValLen = 4;
-
- break;
-
- case GridPortableMarshaller.DOUBLE:
- plainLazyValLen = 8;
-
- break;
-
- case GridPortableMarshaller.CHAR:
- plainLazyValLen = 2;
-
- break;
-
- case GridPortableMarshaller.BOOLEAN:
- return arr[pos++] != 0;
-
- case GridPortableMarshaller.DECIMAL:
- plainLazyValLen = /** scale */ 4 + /** mag len */ 4 + /** mag bytes count */ readInt(4);
-
- break;
-
- case GridPortableMarshaller.STRING:
- plainLazyValLen = 4 + readStringLength();
-
- break;
-
- case GridPortableMarshaller.UUID:
- plainLazyValLen = 8 + 8;
-
- break;
-
- case GridPortableMarshaller.DATE:
- plainLazyValLen = 8 + 4;
-
- break;
-
- case GridPortableMarshaller.BYTE_ARR:
- plainLazyValLen = 4 + readLength();
-
- break;
-
- case GridPortableMarshaller.SHORT_ARR:
- plainLazyValLen = 4 + readLength() * 2;
-
- break;
-
- case GridPortableMarshaller.INT_ARR:
- plainLazyValLen = 4 + readLength() * 4;
-
- break;
-
- case GridPortableMarshaller.LONG_ARR:
- plainLazyValLen = 4 + readLength() * 8;
-
- break;
-
- case GridPortableMarshaller.FLOAT_ARR:
- plainLazyValLen = 4 + readLength() * 4;
-
- break;
-
- case GridPortableMarshaller.DOUBLE_ARR:
- plainLazyValLen = 4 + readLength() * 8;
-
- break;
-
- case GridPortableMarshaller.CHAR_ARR:
- plainLazyValLen = 4 + readLength() * 2;
-
- break;
-
- case GridPortableMarshaller.BOOLEAN_ARR:
- plainLazyValLen = 4 + readLength();
-
- break;
-
- case GridPortableMarshaller.OBJ_ARR:
- return new PortableObjectArrayLazyValue(this);
-
- case GridPortableMarshaller.DATE_ARR: {
- int size = readInt();
-
- Date[] res = new Date[size];
-
- for (int i = 0; i < res.length; i++) {
- byte flag = arr[pos++];
-
- if (flag == GridPortableMarshaller.NULL) continue;
-
- if (flag != GridPortableMarshaller.DATE)
- throw new PortableException("Invalid flag value: " + flag);
-
- long time = PRIM.readLong(arr, pos);
-
- pos += 8;
-
- if (ctx.isUseTimestamp()) {
- Timestamp ts = new Timestamp(time);
-
- ts.setNanos(ts.getNanos() + readInt());
-
- res[i] = ts;
- }
- else {
- res[i] = new Date(time);
-
- pos += 4;
- }
- }
-
- return res;
- }
-
- case GridPortableMarshaller.UUID_ARR:
- case GridPortableMarshaller.STRING_ARR:
- case GridPortableMarshaller.DECIMAL_ARR: {
- int size = readInt();
-
- for (int i = 0; i < size; i++) {
- byte flag = arr[pos++];
-
- if (flag == GridPortableMarshaller.UUID)
- pos += 8 + 8;
- else if (flag == GridPortableMarshaller.STRING)
- pos += 4 + readStringLength();
- else if (flag == GridPortableMarshaller.DECIMAL)
- pos += 4 + readLength();
- else
- assert flag == GridPortableMarshaller.NULL;
- }
-
- return new PortablePlainLazyValue(this, valPos, pos - valPos);
- }
-
- case GridPortableMarshaller.COL: {
- int size = readInt();
- byte colType = arr[pos++];
-
- switch (colType) {
- case GridPortableMarshaller.USER_COL:
- case GridPortableMarshaller.ARR_LIST:
- return new PortableLazyArrayList(this, size);
-
- case GridPortableMarshaller.LINKED_LIST:
- return new PortableLazyLinkedList(this, size);
-
- case GridPortableMarshaller.HASH_SET:
- case GridPortableMarshaller.LINKED_HASH_SET:
- case GridPortableMarshaller.TREE_SET:
- case GridPortableMarshaller.CONC_SKIP_LIST_SET:
- return new PortableLazySet(this, size);
- }
-
- throw new PortableException("Unknown collection type: " + colType);
- }
-
- case GridPortableMarshaller.MAP:
- return PortableLazyMap.parseMap(this);
-
- case GridPortableMarshaller.ENUM:
- return new PortableBuilderEnum(this);
-
- case GridPortableMarshaller.ENUM_ARR:
- return new PortableEnumArrayLazyValue(this);
-
- case GridPortableMarshaller.MAP_ENTRY:
- return new PortableLazyMapEntry(this);
-
- case GridPortableMarshaller.PORTABLE_OBJ: {
- int size = readInt();
-
- pos += size;
-
- int start = readInt();
-
- PortableObjectImpl portableObj = new PortableObjectImpl(ctx, arr,
- pos - 4 - size + start);
-
- return new PortablePlainPortableObject(portableObj);
- }
-
-
- default:
- throw new PortableException("Invalid flag value: " + type);
- }
-
- PortablePlainLazyValue res = new PortablePlainLazyValue(this, valPos, 1 + plainLazyValLen);
-
- pos += plainLazyValLen;
-
- return res;
- }
-
- /**
- * @return Array.
- */
- public byte[] array() {
- return arr;
- }
-
- /**
- * @return Position of reader.
- */
- public int position() {
- return pos;
- }
-
- /**
- * @param pos New pos.
- */
- public void position(int pos) {
- this.pos = pos;
- }
-
- /**
- * @param n Number of bytes to skip.
- */
- public void skip(int n) {
- pos += n;
- }
-
- /**
- * @return Reader.
- */
- PortableReaderExImpl reader() {
- return reader;
- }
-
- /**
- *
- */
- private class LazyCollection implements PortableLazyValue {
- /** */
- private final int valOff;
-
- /** */
- private Object col;
-
- /**
- * @param valOff Value.
- */
- protected LazyCollection(int valOff) {
- this.valOff = valOff;
- }
-
- /**
- * @return Object.
- */
- private Object wrappedCollection() {
- if (col == null) {
- position(valOff);
-
- col = parseValue();
- }
-
- return col;
- }
-
- /** {@inheritDoc} */
- @Override public void writeTo(PortableWriterExImpl writer, PortableBuilderSerializer ctx) {
- ctx.writeValue(writer, wrappedCollection());
- }
-
- /** {@inheritDoc} */
- @Override public Object value() {
- return PortableUtils.unwrapLazy(wrappedCollection());
- }
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/6ac9557e/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableBuilderSerializationAware.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableBuilderSerializationAware.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableBuilderSerializationAware.java
deleted file mode 100644
index d75cd7b..0000000
--- a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableBuilderSerializationAware.java
+++ /dev/null
@@ -1,29 +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.portable;
-
-/**
- *
- */
-interface PortableBuilderSerializationAware {
- /**
- * @param writer Writer.
- * @param ctx Context.
- */
- public void writeTo(PortableWriterExImpl writer, PortableBuilderSerializer ctx);
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/6ac9557e/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableBuilderSerializer.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableBuilderSerializer.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableBuilderSerializer.java
deleted file mode 100644
index 6ce9f4c..0000000
--- a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableBuilderSerializer.java
+++ /dev/null
@@ -1,211 +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.portable;
-
-import java.util.Collection;
-import java.util.IdentityHashMap;
-import java.util.Map;
-import org.apache.ignite.internal.util.GridConcurrentSkipListSet;
-import org.apache.ignite.portable.PortableObject;
-
-/**
- *
- */
-class PortableBuilderSerializer {
- /** */
- private final Map<PortableBuilderImpl, Integer> objToPos = new IdentityHashMap<>();
-
- /** */
- private Map<PortableObject, PortableBuilderImpl> portableObjToWrapper;
-
- /**
- * @param obj Mutable object.
- * @param posInResArr Object position in the array.
- */
- public void registerObjectWriting(PortableBuilderImpl obj, int posInResArr) {
- objToPos.put(obj, posInResArr);
- }
-
- /**
- * @param writer Writer.
- * @param val Value.
- */
- public void writeValue(PortableWriterExImpl writer, Object val) {
- if (val == null) {
- writer.writeByte(GridPortableMarshaller.NULL);
-
- return;
- }
-
- if (val instanceof PortableBuilderSerializationAware) {
- ((PortableBuilderSerializationAware)val).writeTo(writer, this);
-
- return;
- }
-
- if (val instanceof PortableObjectEx) {
- if (portableObjToWrapper == null)
- portableObjToWrapper = new IdentityHashMap<>();
-
- PortableBuilderImpl wrapper = portableObjToWrapper.get(val);
-
- if (wrapper == null) {
- wrapper = PortableBuilderImpl.wrap((PortableObject)val);
-
- portableObjToWrapper.put((PortableObject)val, wrapper);
- }
-
- val = wrapper;
- }
-
- if (val instanceof PortableBuilderImpl) {
- PortableBuilderImpl obj = (PortableBuilderImpl)val;
-
- Integer posInResArr = objToPos.get(obj);
-
- if (posInResArr == null) {
- objToPos.put(obj, writer.outputStream().position());
-
- obj.serializeTo(writer.newWriter(obj.typeId()), this);
- }
- else {
- int handle = writer.outputStream().position() - posInResArr;
-
- writer.writeByte(GridPortableMarshaller.HANDLE);
- writer.writeInt(handle);
- }
-
- return;
- }
-
- if (val.getClass().isEnum()) {
- writer.writeByte(GridPortableMarshaller.ENUM);
- writer.writeInt(writer.context().typeId(val.getClass().getName()));
- writer.writeInt(((Enum)val).ordinal());
-
- return;
- }
-
- if (val instanceof Collection) {
- Collection<?> c = (Collection<?>)val;
-
- writer.writeByte(GridPortableMarshaller.COL);
- writer.writeInt(c.size());
-
- byte colType;
-
- if (c instanceof GridConcurrentSkipListSet)
- colType = GridPortableMarshaller.CONC_SKIP_LIST_SET;
- else
- colType = writer.context().collectionType(c.getClass());
-
-
- writer.writeByte(colType);
-
- for (Object obj : c)
- writeValue(writer, obj);
-
- return;
- }
-
- if (val instanceof Map) {
- Map<?, ?> map = (Map<?, ?>)val;
-
- writer.writeByte(GridPortableMarshaller.MAP);
- writer.writeInt(map.size());
-
- writer.writeByte(writer.context().mapType(map.getClass()));
-
- for (Map.Entry<?, ?> entry : map.entrySet()) {
- writeValue(writer, entry.getKey());
- writeValue(writer, entry.getValue());
- }
-
- return;
- }
-
- Byte flag = PortableUtils.PLAIN_CLASS_TO_FLAG.get(val.getClass());
-
- if (flag != null) {
- PortableUtils.writePlainObject(writer, val);
-
- return;
- }
-
- if (val instanceof Object[]) {
- int compTypeId = writer.context().typeId(((Object[])val).getClass().getComponentType().getName());
-
- if (val instanceof PortableBuilderEnum[]) {
- writeArray(writer, GridPortableMarshaller.ENUM_ARR, (Object[])val, compTypeId);
-
- return;
- }
-
- if (((Object[])val).getClass().getComponentType().isEnum()) {
- Enum[] enumArr = (Enum[])val;
-
- writer.writeByte(GridPortableMarshaller.ENUM_ARR);
- writer.writeInt(compTypeId);
- writer.writeInt(enumArr.length);
-
- for (Enum anEnum : enumArr)
- writeValue(writer, anEnum);
-
- return;
- }
-
- writeArray(writer, GridPortableMarshaller.OBJ_ARR, (Object[])val, compTypeId);
-
- return;
- }
-
- writer.doWriteObject(val, false);
- }
-
- /**
- * @param writer Writer.
- * @param elementType Element type.
- * @param arr The array.
- * @param compTypeId Component type ID.
- */
- public void writeArray(PortableWriterExImpl writer, byte elementType, Object[] arr, int compTypeId) {
- writer.writeByte(elementType);
- writer.writeInt(compTypeId);
- writer.writeInt(arr.length);
-
- for (Object obj : arr)
- writeValue(writer, obj);
- }
-
- /**
- * @param writer Writer.
- * @param elementType Element type.
- * @param arr The array.
- * @param clsName Component class name.
- */
- public void writeArray(PortableWriterExImpl writer, byte elementType, Object[] arr, String clsName) {
- writer.writeByte(elementType);
- writer.writeInt(GridPortableMarshaller.UNREGISTERED_TYPE_ID);
- writer.writeString(clsName);
- writer.writeInt(arr.length);
-
- for (Object obj : arr)
- writeValue(writer, obj);
- }
-
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/6ac9557e/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableClassDescriptor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableClassDescriptor.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableClassDescriptor.java
index 7e4266c..24ad5ce 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableClassDescriptor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableClassDescriptor.java
@@ -48,7 +48,7 @@ import static java.lang.reflect.Modifier.isTransient;
/**
* Portable class descriptor.
*/
-class PortableClassDescriptor {
+public class PortableClassDescriptor {
/** */
private final PortableContext ctx;
@@ -123,7 +123,7 @@ class PortableClassDescriptor {
boolean keepDeserialized
) throws PortableException {
this(ctx, cls, userType, typeId, typeName, idMapper, serializer, useTs, metaDataEnabled, keepDeserialized,
- true);
+ true);
}
/**
@@ -285,7 +285,7 @@ class PortableClassDescriptor {
/**
* @return Type ID.
*/
- int typeId() {
+ public int typeId() {
return typeId;
}
@@ -399,7 +399,7 @@ class PortableClassDescriptor {
break;
case DECIMAL:
- writer.doWriteDecimal((BigDecimal) obj);
+ writer.doWriteDecimal((BigDecimal)obj);
break;
@@ -656,39 +656,32 @@ class PortableClassDescriptor {
* @return Whether further write is needed.
*/
private boolean writeHeader(Object obj, PortableWriterExImpl writer) {
- int handle = writer.handle(obj);
-
- if (handle >= 0) {
- writer.doWriteByte(GridPortableMarshaller.HANDLE);
- writer.doWriteInt(handle);
-
+ if (writer.tryWriteAsHandle(obj))
return false;
- }
- else {
- int pos = writer.position();
- writer.doWriteByte(GridPortableMarshaller.OBJ);
- writer.doWriteBoolean(userType);
- writer.doWriteInt(registered ? typeId : GridPortableMarshaller.UNREGISTERED_TYPE_ID);
- writer.doWriteInt(obj instanceof CacheObjectImpl ? 0 : obj.hashCode());
+ int pos = writer.position();
- // For length and raw offset.
- int reserved = writer.reserve(8);
+ writer.doWriteByte(GridPortableMarshaller.OBJ);
+ writer.doWriteBoolean(userType);
+ writer.doWriteInt(registered ? typeId : GridPortableMarshaller.UNREGISTERED_TYPE_ID);
+ writer.doWriteInt(obj instanceof CacheObjectImpl ? 0 : obj.hashCode());
- // Class name in case if typeId registration is failed.
- if (!registered)
- writer.doWriteString(cls.getName());
+ // For length and raw offset.
+ int reserved = writer.reserve(8);
- int current = writer.position();
- int len = current - pos;
+ // Class name in case if typeId registration is failed.
+ if (!registered)
+ writer.doWriteString(cls.getName());
- // Default raw offset (equal to header length).
- writer.position(reserved + 4);
- writer.doWriteInt(len);
- writer.position(current);
+ int current = writer.position();
+ int len = current - pos;
- return true;
- }
+ // Default raw offset (equal to header length).
+ writer.position(reserved + 4);
+ writer.doWriteInt(len);
+ writer.position(current);
+
+ return true;
}
/**
@@ -787,7 +780,7 @@ class PortableClassDescriptor {
else if (cls == PortableObjectImpl.class)
return Mode.PORTABLE_OBJ;
else if (PortableMarshalAware.class.isAssignableFrom(cls))
- return Mode.PORTABLE;
+ return Mode.PORTABLE;
else if (Externalizable.class.isAssignableFrom(cls))
return Mode.EXTERNALIZABLE;
else if (Map.Entry.class.isAssignableFrom(cls))
@@ -1352,4 +1345,4 @@ class PortableClassDescriptor {
return typeName;
}
}
-}
\ No newline at end of file
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/6ac9557e/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableContext.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableContext.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableContext.java
index 15b6433..db7e41e 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableContext.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableContext.java
@@ -794,10 +794,10 @@ public class PortableContext implements Externalizable {
* @param typeId Type ID.
* @return Whether meta data is enabled.
*/
- boolean isMetaDataEnabled(int typeId) {
+ public boolean isMetaDataEnabled(int typeId) {
Boolean enabled = metaEnabled.get(typeId);
- return enabled != null ? enabled : true;
+ return enabled != null ? enabled : metaDataEnabled;
}
/**
@@ -827,7 +827,7 @@ public class PortableContext implements Externalizable {
* @param fields Fields map.
* @throws PortableException In case of error.
*/
- void updateMetaData(int typeId, String typeName, Map<String, String> fields) throws PortableException {
+ public void updateMetaData(int typeId, String typeName, Map<String, String> fields) throws PortableException {
updateMetaData(typeId, new PortableMetaDataImpl(typeName, fields, null));
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/6ac9557e/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableEnumArrayLazyValue.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableEnumArrayLazyValue.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableEnumArrayLazyValue.java
deleted file mode 100644
index c953bb3..0000000
--- a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableEnumArrayLazyValue.java
+++ /dev/null
@@ -1,112 +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.portable;
-
-import org.apache.ignite.internal.util.typedef.internal.U;
-import org.apache.ignite.portable.PortableException;
-import org.apache.ignite.portable.PortableInvalidClassException;
-
-/**
- *
- */
-class PortableEnumArrayLazyValue extends PortableAbstractLazyValue {
- /** */
- private final int len;
-
- /** */
- private final int compTypeId;
-
- /** */
- private final String clsName;
-
- /**
- * @param reader Reader.
- */
- protected PortableEnumArrayLazyValue(PortableBuilderReader reader) {
- super(reader, reader.position() - 1);
-
- int typeId = reader.readInt();
-
- if (typeId == GridPortableMarshaller.UNREGISTERED_TYPE_ID) {
- clsName = reader.readString();
-
- Class cls;
-
- try {
- // TODO: IGNITE-1272 - Is class loader needed here?
- cls = U.forName(reader.readString(), null);
- }
- catch (ClassNotFoundException e) {
- throw new PortableInvalidClassException("Failed to load the class: " + clsName, e);
- }
-
- compTypeId = reader.portableContext().descriptorForClass(cls).typeId();
- }
- else {
- compTypeId = typeId;
- clsName = null;
- }
-
- int size = reader.readInt();
-
- for (int i = 0; i < size; i++)
- reader.skipValue();
-
- len = reader.position() - valOff;
- }
-
- /** {@inheritDoc} */
- @Override protected Object init() {
- reader.position(valOff + 1);
-
- //skipping component type id
- reader.readInt();
-
- int size = reader.readInt();
-
- PortableBuilderEnum[] res = new PortableBuilderEnum[size];
-
- for (int i = 0; i < size; i++) {
- byte flag = reader.readByte();
-
- if (flag == GridPortableMarshaller.NULL)
- continue;
-
- if (flag != GridPortableMarshaller.ENUM)
- throw new PortableException("Invalid flag value: " + flag);
-
- res[i] = new PortableBuilderEnum(reader);
- }
-
- return res;
- }
-
- /** {@inheritDoc} */
- @Override public void writeTo(PortableWriterExImpl writer, PortableBuilderSerializer ctx) {
- if (val != null) {
- if (clsName != null)
- ctx.writeArray(writer, GridPortableMarshaller.ENUM_ARR, (Object[])val, clsName);
- else
- ctx.writeArray(writer, GridPortableMarshaller.ENUM_ARR, (Object[])val, compTypeId);
-
- return;
- }
-
- writer.write(reader.array(), valOff, len);
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/6ac9557e/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableLazyArrayList.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableLazyArrayList.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableLazyArrayList.java
deleted file mode 100644
index 84a0c22..0000000
--- a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableLazyArrayList.java
+++ /dev/null
@@ -1,159 +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.portable;
-
-import java.util.AbstractList;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-/**
- *
- */
-class PortableLazyArrayList extends AbstractList<Object> implements PortableBuilderSerializationAware {
- /** */
- private final PortableBuilderReader reader;
-
- /** */
- private final int off;
-
- /** */
- private List<Object> delegate;
-
- /**
- * @param reader Reader.
- * @param size Size,
- */
- PortableLazyArrayList(PortableBuilderReader reader, int size) {
- this.reader = reader;
- off = reader.position() - 1/* flag */ - 4/* size */ - 1/* col type */;
-
- assert size >= 0;
-
- for (int i = 0; i < size; i++)
- reader.skipValue();
- }
-
- /**
- *
- */
- private void ensureDelegateInit() {
- if (delegate == null) {
- int size = reader.readIntAbsolute(off + 1);
-
- reader.position(off + 1/* flag */ + 4/* size */ + 1/* col type */);
-
- delegate = new ArrayList<>(size);
-
- for (int i = 0; i < size; i++)
- delegate.add(reader.parseValue());
- }
- }
-
- /** {@inheritDoc} */
- @Override public Object get(int idx) {
- ensureDelegateInit();
-
- return PortableUtils.unwrapLazy(delegate.get(idx));
- }
-
- /** {@inheritDoc} */
- @Override public boolean add(Object o) {
- ensureDelegateInit();
-
- return delegate.add(o);
- }
-
- /** {@inheritDoc} */
- @Override public void add(int idx, Object element) {
- ensureDelegateInit();
-
- delegate.add(idx, element);
- }
-
- /** {@inheritDoc} */
- @Override public Object set(int idx, Object element) {
- ensureDelegateInit();
-
- return PortableUtils.unwrapLazy(delegate.set(idx, element));
- }
-
- /** {@inheritDoc} */
- @Override public Object remove(int idx) {
- ensureDelegateInit();
-
- return PortableUtils.unwrapLazy(delegate.remove(idx));
- }
-
- /** {@inheritDoc} */
- @Override public void clear() {
- if (delegate == null)
- delegate = new ArrayList<>();
- else
- delegate.clear();
- }
-
- /** {@inheritDoc} */
- @Override public boolean addAll(int idx, Collection<?> c) {
- return delegate.addAll(idx, c);
- }
-
- /** {@inheritDoc} */
- @Override protected void removeRange(int fromIdx, int toIdx) {
- ensureDelegateInit();
-
- delegate.subList(fromIdx, toIdx).clear();
- }
-
- /** {@inheritDoc} */
- @Override public int size() {
- if (delegate == null)
- return reader.readIntAbsolute(off + 1);
-
- return delegate.size();
- }
-
- /** {@inheritDoc} */
- @Override public void writeTo(PortableWriterExImpl writer, PortableBuilderSerializer ctx) {
- if (delegate == null) {
- int size = reader.readIntAbsolute(off + 1);
-
- int hdrSize = 1 /* flag */ + 4 /* size */ + 1 /* col type */;
-
- writer.write(reader.array(), off, hdrSize);
-
- reader.position(off + hdrSize);
-
- for (int i = 0; i < size; i++) {
- Object o = reader.parseValue();
-
- ctx.writeValue(writer, o);
- }
- }
- else {
- writer.writeByte(GridPortableMarshaller.COL);
- writer.writeInt(delegate.size());
-
- byte colType = reader.array()[off + 1 /* flag */ + 4 /* size */];
- writer.writeByte(colType);
-
- for (Object o : delegate)
- ctx.writeValue(writer, o);
- }
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/6ac9557e/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableLazyLinkedList.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableLazyLinkedList.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableLazyLinkedList.java
deleted file mode 100644
index 7b2e15a..0000000
--- a/modules/core/src/main/java/org/apache/ignite/internal/portable/PortableLazyLinkedList.java
+++ /dev/null
@@ -1,215 +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.portable;
-
-import java.util.AbstractList;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.ListIterator;
-
-/**
- *
- */
-class PortableLazyLinkedList extends AbstractList<Object> implements PortableBuilderSerializationAware {
- /** */
- private final PortableBuilderReader reader;
-
- /** */
- private final int off;
-
- /** */
- private List<Object> delegate;
-
- /**
- * @param reader Reader.
- * @param size Size,
- */
- PortableLazyLinkedList(PortableBuilderReader reader, int size) {
- this.reader = reader;
- off = reader.position() - 1/* flag */ - 4/* size */ - 1/* col type */;
-
- assert size >= 0;
-
- for (int i = 0; i < size; i++)
- reader.skipValue();
- }
-
- /**
- *
- */
- private void ensureDelegateInit() {
- if (delegate == null) {
- int size = reader.readIntAbsolute(off + 1);
-
- reader.position(off + 1/* flag */ + 4/* size */ + 1/* col type */);
-
- delegate = new LinkedList<>();
-
- for (int i = 0; i < size; i++)
- delegate.add(reader.parseValue());
- }
- }
-
- /** {@inheritDoc} */
- @Override public Object get(int idx) {
- ensureDelegateInit();
-
- return PortableUtils.unwrapLazy(delegate.get(idx));
- }
-
- /** {@inheritDoc} */
- @Override public boolean add(Object o) {
- ensureDelegateInit();
-
- return delegate.add(o);
- }
-
- /** {@inheritDoc} */
- @Override public void add(int idx, Object element) {
- ensureDelegateInit();
-
- delegate.add(idx, element);
- }
-
- /** {@inheritDoc} */
- @Override public Object set(int idx, Object element) {
- ensureDelegateInit();
-
- return PortableUtils.unwrapLazy(delegate.set(idx, element));
- }
-
- /** {@inheritDoc} */
- @Override public Object remove(int idx) {
- ensureDelegateInit();
-
- return PortableUtils.unwrapLazy(delegate.remove(idx));
- }
-
- /** {@inheritDoc} */
- @Override public void clear() {
- if (delegate == null)
- delegate = new LinkedList<>();
- else
- delegate.clear();
- }
-
- /** {@inheritDoc} */
- @Override public boolean addAll(int idx, Collection<?> c) {
- ensureDelegateInit();
-
- return delegate.addAll(idx, c);
- }
-
- /** {@inheritDoc} */
- @Override protected void removeRange(int fromIdx, int toIdx) {
- ensureDelegateInit();
-
- delegate.subList(fromIdx, toIdx).clear();
- }
-
- /** {@inheritDoc} */
- @Override public int size() {
- if (delegate == null)
- return reader.readIntAbsolute(off + 1);
-
- return delegate.size();
- }
-
- /** {@inheritDoc} */
- @Override public ListIterator<Object> listIterator(final int idx) {
- ensureDelegateInit();
-
- return new ListIterator<Object>() {
- /** */
- private final ListIterator<Object> delegate = PortableLazyLinkedList.super.listIterator(idx);
-
- @Override public boolean hasNext() {
- return delegate.hasNext();
- }
-
- @Override public Object next() {
- return PortableUtils.unwrapLazy(delegate.next());
- }
-
- @Override public boolean hasPrevious() {
- return delegate.hasPrevious();
- }
-
- @Override public Object previous() {
- return PortableUtils.unwrapLazy(delegate.previous());
- }
-
- @Override public int nextIndex() {
- return delegate.nextIndex();
- }
-
- @Override public int previousIndex() {
- return delegate.previousIndex();
- }
-
- @Override public void remove() {
- delegate.remove();
- }
-
- @Override public void set(Object o) {
- delegate.set(o);
- }
-
- @Override public void add(Object o) {
- delegate.add(o);
- }
- };
- }
-
- /** {@inheritDoc} */
- @Override public Iterator<Object> iterator() {
- ensureDelegateInit();
-
- return PortableUtils.unwrapLazyIterator(super.iterator());
- }
-
- /** {@inheritDoc} */
- @Override public void writeTo(PortableWriterExImpl writer, PortableBuilderSerializer ctx) {
- if (delegate == null) {
- int size = reader.readIntAbsolute(off + 1);
-
- int hdrSize = 1 /* flag */ + 4 /* size */ + 1 /* col type */;
- writer.write(reader.array(), off, hdrSize);
-
- reader.position(off + hdrSize);
-
- for (int i = 0; i < size; i++) {
- Object o = reader.parseValue();
-
- ctx.writeValue(writer, o);
- }
- }
- else {
- writer.writeByte(GridPortableMarshaller.COL);
- writer.writeInt(delegate.size());
-
- byte colType = reader.array()[off + 1 /* flag */ + 4 /* size */];
- writer.writeByte(colType);
-
- for (Object o : delegate)
- ctx.writeValue(writer, o);
- }
- }
-}
\ No newline at end of file
[11/18] ignite git commit: ignite-1273: fixed cyclic references
processing by PortableMarshaller and ability to modify array fields returned
by PortableBuilder
Posted by sb...@apache.org.
http://git-wip-us.apache.org/repos/asf/ignite/blob/6ac9557e/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableBuilderReader.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableBuilderReader.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableBuilderReader.java
new file mode 100644
index 0000000..45355d7
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableBuilderReader.java
@@ -0,0 +1,800 @@
+/*
+ * 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.portable.builder;
+
+import java.sql.Timestamp;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.ignite.internal.portable.GridPortableMarshaller;
+import org.apache.ignite.internal.portable.PortableContext;
+import org.apache.ignite.internal.portable.PortableObjectImpl;
+import org.apache.ignite.internal.portable.PortablePrimitives;
+import org.apache.ignite.internal.portable.PortableReaderExImpl;
+import org.apache.ignite.internal.portable.PortableUtils;
+import org.apache.ignite.internal.portable.PortableWriterExImpl;
+import org.apache.ignite.portable.PortableException;
+
+import static java.nio.charset.StandardCharsets.UTF_8;
+import static org.apache.ignite.internal.portable.GridPortableMarshaller.NULL;
+import static org.apache.ignite.internal.portable.GridPortableMarshaller.STRING;
+
+/**
+ *
+ */
+class PortableBuilderReader {
+ /** */
+ private static final PortablePrimitives PRIM = PortablePrimitives.get();
+
+ /** */
+ private final Map<Integer, PortableBuilderImpl> objMap = new HashMap<>();
+
+ /** */
+ private final PortableContext ctx;
+
+ /** */
+ private final PortableReaderExImpl reader;
+
+ /** */
+ private byte[] arr;
+
+ /** */
+ private int pos;
+
+ /**
+ * @param objImpl Portable object
+ */
+ PortableBuilderReader(PortableObjectImpl objImpl) {
+ ctx = objImpl.context();
+ arr = objImpl.array();
+ pos = objImpl.start();
+
+ // TODO: IGNITE-1272 - Is class loader needed here?
+ reader = new PortableReaderExImpl(portableContext(), arr, pos, null);
+ }
+
+ /**
+ * @return Portable context.
+ */
+ public PortableContext portableContext() {
+ return ctx;
+ }
+
+ /**
+ * @param obj Mutable portable object.
+ */
+ public void registerObject(PortableBuilderImpl obj) {
+ objMap.put(obj.start(), obj);
+ }
+
+ /**
+ * @return Read int value.
+ */
+ public int readInt() {
+ int res = readInt(0);
+
+ pos += 4;
+
+ return res;
+ }
+
+ /**
+ * @return Read int value.
+ */
+ public byte readByte() {
+ return arr[pos++];
+ }
+
+ /**
+ * @return Read boolean value.
+ */
+ public boolean readBoolean() {
+ return readByte() == 1;
+ }
+
+ /**
+ * @return Read int value.
+ */
+ public byte readByte(int off) {
+ return arr[pos + off];
+ }
+
+ /**
+ * @param off Offset related to {@link #pos}
+ * @return Read int value.
+ */
+ public int readInt(int off) {
+ return PRIM.readInt(arr, pos + off);
+ }
+
+ /**
+ * @param pos Position in the source array.
+ * @return Read int value.
+ */
+ public int readIntAbsolute(int pos) {
+ return PRIM.readInt(arr, pos);
+ }
+
+ /**
+ * @return Read length of array.
+ */
+ public int readLength() {
+ return PRIM.readInt(arr, pos);
+ }
+
+ /**
+ * Read string length.
+ *
+ * @return String length.
+ */
+ public int readStringLength() {
+ boolean utf = PRIM.readBoolean(arr, pos);
+
+ int arrLen = PRIM.readInt(arr, pos + 1);
+
+ return 1 + (utf ? arrLen : arrLen << 1);
+ }
+
+ /**
+ * Reads string.
+ *
+ * @return String.
+ */
+ public String readString() {
+ byte flag = readByte();
+
+ if (flag == NULL)
+ return null;
+
+ if (flag != STRING)
+ throw new PortableException("Failed to deserialize String.");
+
+ boolean convert = readBoolean();
+ int len = readInt();
+
+ String str;
+
+ if (convert) {
+ str = new String(arr, pos, len, UTF_8);
+
+ pos += len;
+ }
+ else {
+ str = String.valueOf(PRIM.readCharArray(arr, pos, len));
+
+ pos += len << 1;
+ }
+
+ return str;
+ }
+
+ /**
+ *
+ */
+ public void skipValue() {
+ byte type = arr[pos++];
+
+ int len;
+
+ switch (type) {
+ case GridPortableMarshaller.NULL:
+ return;
+
+ case GridPortableMarshaller.OBJ:
+ pos += readInt(GridPortableMarshaller.TOTAL_LEN_POS - 1) - 1;
+
+ return;
+
+ case GridPortableMarshaller.BOOLEAN:
+ case GridPortableMarshaller.BYTE:
+ len = 1;
+ break;
+
+ case GridPortableMarshaller.CHAR:
+ case GridPortableMarshaller.SHORT:
+ len = 2;
+
+ break;
+
+ case GridPortableMarshaller.HANDLE:
+ case GridPortableMarshaller.FLOAT:
+ case GridPortableMarshaller.INT:
+ len = 4;
+
+ break;
+
+ case GridPortableMarshaller.ENUM:
+ //skipping type id and ordinal value
+ len = 8;
+
+ break;
+
+ case GridPortableMarshaller.LONG:
+ case GridPortableMarshaller.DOUBLE:
+ len = 8;
+
+ break;
+
+ case GridPortableMarshaller.BYTE_ARR:
+ case GridPortableMarshaller.BOOLEAN_ARR:
+ len = 4 + readLength();
+
+ break;
+
+ case GridPortableMarshaller.STRING:
+ len = 4 + readStringLength();
+
+ break;
+
+ case GridPortableMarshaller.DECIMAL:
+ len = /** scale */ 4 + /** mag len */ 4 + /** mag bytes count */ readInt(4);
+
+ break;
+
+ case GridPortableMarshaller.UUID:
+ len = 8 + 8;
+
+ break;
+
+ case GridPortableMarshaller.DATE:
+ len = 8 + 4;
+
+ break;
+
+ case GridPortableMarshaller.CHAR_ARR:
+ case GridPortableMarshaller.SHORT_ARR:
+ len = 4 + readLength() * 2;
+
+ break;
+
+ case GridPortableMarshaller.INT_ARR:
+ case GridPortableMarshaller.FLOAT_ARR:
+ len = 4 + readLength() * 4;
+
+ break;
+
+ case GridPortableMarshaller.LONG_ARR:
+ case GridPortableMarshaller.DOUBLE_ARR:
+ len = 4 + readLength() * 8;
+
+ break;
+
+ case GridPortableMarshaller.DECIMAL_ARR:
+ case GridPortableMarshaller.DATE_ARR:
+ case GridPortableMarshaller.OBJ_ARR:
+ case GridPortableMarshaller.ENUM_ARR:
+ case GridPortableMarshaller.UUID_ARR:
+ case GridPortableMarshaller.STRING_ARR: {
+ int size = readInt();
+
+ for (int i = 0; i < size; i++)
+ skipValue();
+
+ return;
+ }
+
+ case GridPortableMarshaller.COL: {
+ int size = readInt();
+
+ pos++; // skip collection type
+
+ for (int i = 0; i < size; i++)
+ skipValue();
+
+ return;
+ }
+
+ case GridPortableMarshaller.MAP: {
+ int size = readInt();
+
+ pos++; // skip collection type
+
+ for (int i = 0; i < size; i++) {
+ skipValue(); // skip key.
+ skipValue(); // skip value.
+ }
+
+ return;
+ }
+
+ case GridPortableMarshaller.MAP_ENTRY:
+ skipValue();
+ skipValue();
+
+ return;
+
+ case GridPortableMarshaller.PORTABLE_OBJ:
+ len = readInt() + 4;
+
+ break;
+
+ default:
+ throw new PortableException("Invalid flag value: " + type);
+ }
+
+ pos += len;
+ }
+
+ /**
+ * @param pos Position.
+ * @param len Length.
+ * @return Object.
+ */
+ public Object getValueQuickly(int pos, int len) {
+ byte type = arr[pos];
+
+ switch (type) {
+ case GridPortableMarshaller.NULL:
+ return null;
+
+ case GridPortableMarshaller.HANDLE: {
+ int objStart = pos - readIntAbsolute(pos + 1);
+
+ PortableBuilderImpl res = objMap.get(objStart);
+
+ if (res == null) {
+ res = new PortableBuilderImpl(this, objStart);
+
+ objMap.put(objStart, res);
+ }
+
+ return res;
+ }
+
+ case GridPortableMarshaller.OBJ: {
+ PortableBuilderImpl res = objMap.get(pos);
+
+ if (res == null) {
+ res = new PortableBuilderImpl(this, pos);
+
+ objMap.put(pos, res);
+ }
+
+ return res;
+ }
+
+ case GridPortableMarshaller.BYTE:
+ return arr[pos + 1];
+
+ case GridPortableMarshaller.SHORT:
+ return PRIM.readShort(arr, pos + 1);
+
+ case GridPortableMarshaller.INT:
+ return PRIM.readInt(arr, pos + 1);
+
+ case GridPortableMarshaller.LONG:
+ return PRIM.readLong(arr, pos + 1);
+
+ case GridPortableMarshaller.FLOAT:
+ return PRIM.readFloat(arr, pos + 1);
+
+ case GridPortableMarshaller.DOUBLE:
+ return PRIM.readDouble(arr, pos + 1);
+
+ case GridPortableMarshaller.CHAR:
+ return PRIM.readChar(arr, pos + 1);
+
+ case GridPortableMarshaller.BOOLEAN:
+ return arr[pos + 1] != 0;
+
+ case GridPortableMarshaller.DECIMAL:
+ case GridPortableMarshaller.STRING:
+ case GridPortableMarshaller.UUID:
+ case GridPortableMarshaller.DATE:
+ return new PortablePlainLazyValue(this, pos, len);
+
+ case GridPortableMarshaller.BYTE_ARR:
+ case GridPortableMarshaller.SHORT_ARR:
+ case GridPortableMarshaller.INT_ARR:
+ case GridPortableMarshaller.LONG_ARR:
+ case GridPortableMarshaller.FLOAT_ARR:
+ case GridPortableMarshaller.DOUBLE_ARR:
+ case GridPortableMarshaller.CHAR_ARR:
+ case GridPortableMarshaller.BOOLEAN_ARR:
+ case GridPortableMarshaller.DECIMAL_ARR:
+ case GridPortableMarshaller.DATE_ARR:
+ case GridPortableMarshaller.UUID_ARR:
+ case GridPortableMarshaller.STRING_ARR:
+ case GridPortableMarshaller.ENUM_ARR:
+ case GridPortableMarshaller.OBJ_ARR:
+ case GridPortableMarshaller.COL:
+ case GridPortableMarshaller.MAP:
+ case GridPortableMarshaller.MAP_ENTRY:
+ return new LazyCollection(pos);
+
+ case GridPortableMarshaller.ENUM: {
+ if (len == 1) {
+ assert readByte(pos) == GridPortableMarshaller.NULL;
+
+ return null;
+ }
+
+ int mark = position();
+ position(pos + 1);
+
+ PortableBuilderEnum builderEnum = new PortableBuilderEnum(this);
+
+ position(mark);
+
+ return builderEnum;
+ }
+
+ case GridPortableMarshaller.PORTABLE_OBJ: {
+ int size = readIntAbsolute(pos + 1);
+
+ int start = readIntAbsolute(pos + 4 + size);
+
+ PortableObjectImpl portableObj = new PortableObjectImpl(ctx, arr, pos + 4 + start);
+
+ return new PortablePlainPortableObject(portableObj);
+ }
+
+ default:
+ throw new PortableException("Invalid flag value: " + type);
+ }
+ }
+
+ /**
+ * @return Parsed value.
+ */
+ public Object parseValue() {
+ int valPos = pos;
+
+ byte type = arr[pos++];
+
+ int plainLazyValLen;
+
+ boolean modifiableLazyVal = false;
+
+ switch (type) {
+ case GridPortableMarshaller.NULL:
+ return null;
+
+ case GridPortableMarshaller.HANDLE: {
+ int objStart = pos - 1 - readInt();
+
+ PortableBuilderImpl res = objMap.get(objStart);
+
+ if (res == null) {
+ res = new PortableBuilderImpl(this, objStart);
+
+ objMap.put(objStart, res);
+ }
+
+ return res;
+ }
+
+ case GridPortableMarshaller.OBJ: {
+ pos--;
+
+ PortableBuilderImpl res = objMap.get(pos);
+
+ if (res == null) {
+ res = new PortableBuilderImpl(this, pos);
+
+ objMap.put(pos, res);
+ }
+
+ pos += readInt(GridPortableMarshaller.TOTAL_LEN_POS);
+
+ return res;
+ }
+
+ case GridPortableMarshaller.BYTE:
+ return arr[pos++];
+
+ case GridPortableMarshaller.SHORT: {
+ Object res = PRIM.readShort(arr, pos);
+ pos += 2;
+ return res;
+ }
+
+ case GridPortableMarshaller.INT:
+ return readInt();
+
+ case GridPortableMarshaller.LONG:
+ plainLazyValLen = 8;
+
+ break;
+
+ case GridPortableMarshaller.FLOAT:
+ plainLazyValLen = 4;
+
+ break;
+
+ case GridPortableMarshaller.DOUBLE:
+ plainLazyValLen = 8;
+
+ break;
+
+ case GridPortableMarshaller.CHAR:
+ plainLazyValLen = 2;
+
+ break;
+
+ case GridPortableMarshaller.BOOLEAN:
+ return arr[pos++] != 0;
+
+ case GridPortableMarshaller.DECIMAL:
+ plainLazyValLen = /** scale */ 4 + /** mag len */ 4 + /** mag bytes count */ readInt(4);
+
+ break;
+
+ case GridPortableMarshaller.STRING:
+ plainLazyValLen = 4 + readStringLength();
+
+ break;
+
+ case GridPortableMarshaller.UUID:
+ plainLazyValLen = 8 + 8;
+
+ break;
+
+ case GridPortableMarshaller.DATE:
+ plainLazyValLen = 8 + 4;
+
+ break;
+
+ case GridPortableMarshaller.BYTE_ARR:
+ plainLazyValLen = 4 + readLength();
+ modifiableLazyVal = true;
+
+ break;
+
+ case GridPortableMarshaller.SHORT_ARR:
+ plainLazyValLen = 4 + readLength() * 2;
+ modifiableLazyVal = true;
+
+ break;
+
+ case GridPortableMarshaller.INT_ARR:
+ plainLazyValLen = 4 + readLength() * 4;
+ modifiableLazyVal = true;
+
+ break;
+
+ case GridPortableMarshaller.LONG_ARR:
+ plainLazyValLen = 4 + readLength() * 8;
+ modifiableLazyVal = true;
+
+ break;
+
+ case GridPortableMarshaller.FLOAT_ARR:
+ plainLazyValLen = 4 + readLength() * 4;
+ modifiableLazyVal = true;
+
+ break;
+
+ case GridPortableMarshaller.DOUBLE_ARR:
+ plainLazyValLen = 4 + readLength() * 8;
+ modifiableLazyVal = true;
+
+ break;
+
+ case GridPortableMarshaller.CHAR_ARR:
+ plainLazyValLen = 4 + readLength() * 2;
+ modifiableLazyVal = true;
+
+ break;
+
+ case GridPortableMarshaller.BOOLEAN_ARR:
+ plainLazyValLen = 4 + readLength();
+ modifiableLazyVal = true;
+
+ break;
+
+ case GridPortableMarshaller.OBJ_ARR:
+ return new PortableObjectArrayLazyValue(this);
+
+ case GridPortableMarshaller.DATE_ARR: {
+ int size = readInt();
+
+ Date[] res = new Date[size];
+
+ for (int i = 0; i < res.length; i++) {
+ byte flag = arr[pos++];
+
+ if (flag == GridPortableMarshaller.NULL) continue;
+
+ if (flag != GridPortableMarshaller.DATE)
+ throw new PortableException("Invalid flag value: " + flag);
+
+ long time = PRIM.readLong(arr, pos);
+
+ pos += 8;
+
+ if (ctx.isUseTimestamp()) {
+ Timestamp ts = new Timestamp(time);
+
+ ts.setNanos(ts.getNanos() + readInt());
+
+ res[i] = ts;
+ }
+ else {
+ res[i] = new Date(time);
+
+ pos += 4;
+ }
+ }
+
+ return res;
+ }
+
+ case GridPortableMarshaller.UUID_ARR:
+ case GridPortableMarshaller.STRING_ARR:
+ case GridPortableMarshaller.DECIMAL_ARR: {
+ int size = readInt();
+
+ for (int i = 0; i < size; i++) {
+ byte flag = arr[pos++];
+
+ if (flag == GridPortableMarshaller.UUID)
+ pos += 8 + 8;
+ else if (flag == GridPortableMarshaller.STRING)
+ pos += 4 + readStringLength();
+ else if (flag == GridPortableMarshaller.DECIMAL) {
+ pos += 4; // scale value
+ pos += 4 + readLength();
+ }
+ else
+ assert flag == GridPortableMarshaller.NULL;
+ }
+
+ return new PortableModifiableLazyValue(this, valPos, pos - valPos);
+ }
+
+ case GridPortableMarshaller.COL: {
+ int size = readInt();
+ byte colType = arr[pos++];
+
+ switch (colType) {
+ case GridPortableMarshaller.USER_COL:
+ case GridPortableMarshaller.ARR_LIST:
+ return new PortableLazyArrayList(this, size);
+
+ case GridPortableMarshaller.LINKED_LIST:
+ return new PortableLazyLinkedList(this, size);
+
+ case GridPortableMarshaller.HASH_SET:
+ case GridPortableMarshaller.LINKED_HASH_SET:
+ case GridPortableMarshaller.TREE_SET:
+ case GridPortableMarshaller.CONC_SKIP_LIST_SET:
+ return new PortableLazySet(this, size);
+ }
+
+ throw new PortableException("Unknown collection type: " + colType);
+ }
+
+ case GridPortableMarshaller.MAP:
+ return PortableLazyMap.parseMap(this);
+
+ case GridPortableMarshaller.ENUM:
+ return new PortableBuilderEnum(this);
+
+ case GridPortableMarshaller.ENUM_ARR:
+ return new PortableEnumArrayLazyValue(this);
+
+ case GridPortableMarshaller.MAP_ENTRY:
+ return new PortableLazyMapEntry(this);
+
+ case GridPortableMarshaller.PORTABLE_OBJ: {
+ int size = readInt();
+
+ pos += size;
+
+ int start = readInt();
+
+ PortableObjectImpl portableObj = new PortableObjectImpl(ctx, arr,
+ pos - 4 - size + start);
+
+ return new PortablePlainPortableObject(portableObj);
+ }
+
+
+ default:
+ throw new PortableException("Invalid flag value: " + type);
+ }
+
+ PortableAbstractLazyValue res;
+
+ if (modifiableLazyVal)
+ res = new PortableModifiableLazyValue(this, valPos, 1 + plainLazyValLen);
+ else
+ res = new PortablePlainLazyValue(this, valPos, 1 + plainLazyValLen);
+
+ pos += plainLazyValLen;
+
+ return res;
+ }
+
+ /**
+ * @return Array.
+ */
+ public byte[] array() {
+ return arr;
+ }
+
+ /**
+ * @return Position of reader.
+ */
+ public int position() {
+ return pos;
+ }
+
+ /**
+ * @param pos New pos.
+ */
+ public void position(int pos) {
+ this.pos = pos;
+ }
+
+ /**
+ * @param n Number of bytes to skip.
+ */
+ public void skip(int n) {
+ pos += n;
+ }
+
+ /**
+ * @return Reader.
+ */
+ PortableReaderExImpl reader() {
+ return reader;
+ }
+
+ /**
+ *
+ */
+ private class LazyCollection implements PortableLazyValue {
+ /** */
+ private final int valOff;
+
+ /** */
+ private Object col;
+
+ /**
+ * @param valOff Value.
+ */
+ protected LazyCollection(int valOff) {
+ this.valOff = valOff;
+ }
+
+ /**
+ * @return Object.
+ */
+ private Object wrappedCollection() {
+ if (col == null) {
+ position(valOff);
+
+ col = parseValue();
+ }
+
+ return col;
+ }
+
+ /** {@inheritDoc} */
+ @Override public void writeTo(PortableWriterExImpl writer, PortableBuilderSerializer ctx) {
+ ctx.writeValue(writer, wrappedCollection());
+ }
+
+ /** {@inheritDoc} */
+ @Override public Object value() {
+ return PortableUtils.unwrapLazy(wrappedCollection());
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/6ac9557e/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableBuilderSerializationAware.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableBuilderSerializationAware.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableBuilderSerializationAware.java
new file mode 100644
index 0000000..976059a
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableBuilderSerializationAware.java
@@ -0,0 +1,31 @@
+/*
+ * 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.portable.builder;
+
+import org.apache.ignite.internal.portable.*;
+
+/**
+ *
+ */
+interface PortableBuilderSerializationAware {
+ /**
+ * @param writer Writer.
+ * @param ctx Context.
+ */
+ public void writeTo(PortableWriterExImpl writer, PortableBuilderSerializer ctx);
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/6ac9557e/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableBuilderSerializer.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableBuilderSerializer.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableBuilderSerializer.java
new file mode 100644
index 0000000..2d9c961
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableBuilderSerializer.java
@@ -0,0 +1,214 @@
+/*
+ * 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.portable.builder;
+
+import org.apache.ignite.internal.portable.GridPortableMarshaller;
+import org.apache.ignite.internal.portable.PortableObjectEx;
+import org.apache.ignite.internal.portable.PortableUtils;
+import org.apache.ignite.internal.portable.PortableWriterExImpl;
+import org.apache.ignite.internal.util.*;
+import org.apache.ignite.portable.*;
+
+import java.util.*;
+
+/**
+ *
+ */
+class PortableBuilderSerializer {
+ /** */
+ private final Map<PortableBuilderImpl, Integer> objToPos = new IdentityHashMap<>();
+
+ /** */
+ private Map<PortableObject, PortableBuilderImpl> portableObjToWrapper;
+
+ /**
+ * @param obj Mutable object.
+ * @param posInResArr Object position in the array.
+ */
+ public void registerObjectWriting(PortableBuilderImpl obj, int posInResArr) {
+ objToPos.put(obj, posInResArr);
+ }
+
+ /**
+ * @param writer Writer.
+ * @param val Value.
+ */
+ public void writeValue(PortableWriterExImpl writer, Object val) {
+ if (val == null) {
+ writer.writeByte(GridPortableMarshaller.NULL);
+
+ return;
+ }
+
+ if (val instanceof PortableBuilderSerializationAware) {
+ ((PortableBuilderSerializationAware)val).writeTo(writer, this);
+
+ return;
+ }
+
+ if (val instanceof PortableObjectEx) {
+ if (portableObjToWrapper == null)
+ portableObjToWrapper = new IdentityHashMap<>();
+
+ PortableBuilderImpl wrapper = portableObjToWrapper.get(val);
+
+ if (wrapper == null) {
+ wrapper = PortableBuilderImpl.wrap((PortableObject)val);
+
+ portableObjToWrapper.put((PortableObject)val, wrapper);
+ }
+
+ val = wrapper;
+ }
+
+ if (val instanceof PortableBuilderImpl) {
+ PortableBuilderImpl obj = (PortableBuilderImpl)val;
+
+ Integer posInResArr = objToPos.get(obj);
+
+ if (posInResArr == null) {
+ objToPos.put(obj, writer.outputStream().position());
+
+ obj.serializeTo(writer.newWriter(obj.typeId()), this);
+ }
+ else {
+ int handle = writer.outputStream().position() - posInResArr;
+
+ writer.writeByte(GridPortableMarshaller.HANDLE);
+ writer.writeInt(handle);
+ }
+
+ return;
+ }
+
+ if (val.getClass().isEnum()) {
+ writer.writeByte(GridPortableMarshaller.ENUM);
+ writer.writeInt(writer.context().typeId(val.getClass().getName()));
+ writer.writeInt(((Enum)val).ordinal());
+
+ return;
+ }
+
+ if (val instanceof Collection) {
+ Collection<?> c = (Collection<?>)val;
+
+ writer.writeByte(GridPortableMarshaller.COL);
+ writer.writeInt(c.size());
+
+ byte colType;
+
+ if (c instanceof GridConcurrentSkipListSet)
+ colType = GridPortableMarshaller.CONC_SKIP_LIST_SET;
+ else
+ colType = writer.context().collectionType(c.getClass());
+
+
+ writer.writeByte(colType);
+
+ for (Object obj : c)
+ writeValue(writer, obj);
+
+ return;
+ }
+
+ if (val instanceof Map) {
+ Map<?, ?> map = (Map<?, ?>)val;
+
+ writer.writeByte(GridPortableMarshaller.MAP);
+ writer.writeInt(map.size());
+
+ writer.writeByte(writer.context().mapType(map.getClass()));
+
+ for (Map.Entry<?, ?> entry : map.entrySet()) {
+ writeValue(writer, entry.getKey());
+ writeValue(writer, entry.getValue());
+ }
+
+ return;
+ }
+
+ Byte flag = PortableUtils.PLAIN_CLASS_TO_FLAG.get(val.getClass());
+
+ if (flag != null) {
+ PortableUtils.writePlainObject(writer, val);
+
+ return;
+ }
+
+ if (val instanceof Object[]) {
+ int compTypeId = writer.context().typeId(((Object[])val).getClass().getComponentType().getName());
+
+ if (val instanceof PortableBuilderEnum[]) {
+ writeArray(writer, GridPortableMarshaller.ENUM_ARR, (Object[])val, compTypeId);
+
+ return;
+ }
+
+ if (((Object[])val).getClass().getComponentType().isEnum()) {
+ Enum[] enumArr = (Enum[])val;
+
+ writer.writeByte(GridPortableMarshaller.ENUM_ARR);
+ writer.writeInt(compTypeId);
+ writer.writeInt(enumArr.length);
+
+ for (Enum anEnum : enumArr)
+ writeValue(writer, anEnum);
+
+ return;
+ }
+
+ writeArray(writer, GridPortableMarshaller.OBJ_ARR, (Object[])val, compTypeId);
+
+ return;
+ }
+
+ writer.doWriteObject(val, false);
+ }
+
+ /**
+ * @param writer Writer.
+ * @param elementType Element type.
+ * @param arr The array.
+ * @param compTypeId Component type ID.
+ */
+ public void writeArray(PortableWriterExImpl writer, byte elementType, Object[] arr, int compTypeId) {
+ writer.writeByte(elementType);
+ writer.writeInt(compTypeId);
+ writer.writeInt(arr.length);
+
+ for (Object obj : arr)
+ writeValue(writer, obj);
+ }
+
+ /**
+ * @param writer Writer.
+ * @param elementType Element type.
+ * @param arr The array.
+ * @param clsName Component class name.
+ */
+ public void writeArray(PortableWriterExImpl writer, byte elementType, Object[] arr, String clsName) {
+ writer.writeByte(elementType);
+ writer.writeInt(GridPortableMarshaller.UNREGISTERED_TYPE_ID);
+ writer.writeString(clsName);
+ writer.writeInt(arr.length);
+
+ for (Object obj : arr)
+ writeValue(writer, obj);
+ }
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/6ac9557e/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableEnumArrayLazyValue.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableEnumArrayLazyValue.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableEnumArrayLazyValue.java
new file mode 100644
index 0000000..d864a6e
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableEnumArrayLazyValue.java
@@ -0,0 +1,114 @@
+/*
+ * 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.portable.builder;
+
+import org.apache.ignite.internal.portable.GridPortableMarshaller;
+import org.apache.ignite.internal.portable.PortableWriterExImpl;
+import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.portable.PortableException;
+import org.apache.ignite.portable.PortableInvalidClassException;
+
+/**
+ *
+ */
+class PortableEnumArrayLazyValue extends PortableAbstractLazyValue {
+ /** */
+ private final int len;
+
+ /** */
+ private final int compTypeId;
+
+ /** */
+ private final String clsName;
+
+ /**
+ * @param reader Reader.
+ */
+ protected PortableEnumArrayLazyValue(PortableBuilderReader reader) {
+ super(reader, reader.position() - 1);
+
+ int typeId = reader.readInt();
+
+ if (typeId == GridPortableMarshaller.UNREGISTERED_TYPE_ID) {
+ clsName = reader.readString();
+
+ Class cls;
+
+ try {
+ // TODO: IGNITE-1272 - Is class loader needed here?
+ cls = U.forName(reader.readString(), null);
+ }
+ catch (ClassNotFoundException e) {
+ throw new PortableInvalidClassException("Failed to load the class: " + clsName, e);
+ }
+
+ compTypeId = reader.portableContext().descriptorForClass(cls).typeId();
+ }
+ else {
+ compTypeId = typeId;
+ clsName = null;
+ }
+
+ int size = reader.readInt();
+
+ for (int i = 0; i < size; i++)
+ reader.skipValue();
+
+ len = reader.position() - valOff;
+ }
+
+ /** {@inheritDoc} */
+ @Override protected Object init() {
+ reader.position(valOff + 1);
+
+ //skipping component type id
+ reader.readInt();
+
+ int size = reader.readInt();
+
+ PortableBuilderEnum[] res = new PortableBuilderEnum[size];
+
+ for (int i = 0; i < size; i++) {
+ byte flag = reader.readByte();
+
+ if (flag == GridPortableMarshaller.NULL)
+ continue;
+
+ if (flag != GridPortableMarshaller.ENUM)
+ throw new PortableException("Invalid flag value: " + flag);
+
+ res[i] = new PortableBuilderEnum(reader);
+ }
+
+ return res;
+ }
+
+ /** {@inheritDoc} */
+ @Override public void writeTo(PortableWriterExImpl writer, PortableBuilderSerializer ctx) {
+ if (val != null) {
+ if (clsName != null)
+ ctx.writeArray(writer, GridPortableMarshaller.ENUM_ARR, (Object[])val, clsName);
+ else
+ ctx.writeArray(writer, GridPortableMarshaller.ENUM_ARR, (Object[])val, compTypeId);
+
+ return;
+ }
+
+ writer.write(reader.array(), valOff, len);
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/6ac9557e/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableLazyArrayList.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableLazyArrayList.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableLazyArrayList.java
new file mode 100644
index 0000000..a08cfdd
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableLazyArrayList.java
@@ -0,0 +1,166 @@
+/*
+ * 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.portable.builder;
+
+import org.apache.ignite.internal.portable.*;
+
+import java.util.AbstractList;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ *
+ */
+class PortableLazyArrayList extends AbstractList<Object> implements PortableBuilderSerializationAware {
+ /** */
+ private final PortableBuilderReader reader;
+
+ /** */
+ private final int off;
+
+ /** */
+ private List<Object> delegate;
+
+ /**
+ * @param reader Reader.
+ * @param size Size,
+ */
+ PortableLazyArrayList(PortableBuilderReader reader, int size) {
+ this.reader = reader;
+ off = reader.position() - 1/* flag */ - 4/* size */ - 1/* col type */;
+
+ assert size >= 0;
+
+ for (int i = 0; i < size; i++)
+ reader.skipValue();
+ }
+
+ /**
+ *
+ */
+ private void ensureDelegateInit() {
+ if (delegate == null) {
+ int size = reader.readIntAbsolute(off + 1);
+
+ reader.position(off + 1/* flag */ + 4/* size */ + 1/* col type */);
+
+ delegate = new ArrayList<>(size);
+
+ for (int i = 0; i < size; i++)
+ delegate.add(reader.parseValue());
+ }
+ }
+
+ /** {@inheritDoc} */
+ @Override public Object get(int idx) {
+ ensureDelegateInit();
+
+ return PortableUtils.unwrapLazy(delegate.get(idx));
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean add(Object o) {
+ ensureDelegateInit();
+
+ return delegate.add(o);
+ }
+
+ /** {@inheritDoc} */
+ @Override public void add(int idx, Object element) {
+ ensureDelegateInit();
+
+ delegate.add(idx, element);
+ }
+
+ /** {@inheritDoc} */
+ @Override public Object set(int idx, Object element) {
+ ensureDelegateInit();
+
+ return PortableUtils.unwrapLazy(delegate.set(idx, element));
+ }
+
+ /** {@inheritDoc} */
+ @Override public Object remove(int idx) {
+ ensureDelegateInit();
+
+ return PortableUtils.unwrapLazy(delegate.remove(idx));
+ }
+
+ /** {@inheritDoc} */
+ @Override public void clear() {
+ if (delegate == null)
+ delegate = new ArrayList<>();
+ else
+ delegate.clear();
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean addAll(int idx, Collection<?> c) {
+ return delegate.addAll(idx, c);
+ }
+
+ /** {@inheritDoc} */
+ @Override protected void removeRange(int fromIdx, int toIdx) {
+ ensureDelegateInit();
+
+ delegate.subList(fromIdx, toIdx).clear();
+ }
+
+ /** {@inheritDoc} */
+ @Override public int size() {
+ if (delegate == null)
+ return reader.readIntAbsolute(off + 1);
+
+ return delegate.size();
+ }
+
+ /** {@inheritDoc} */
+ @Override public void writeTo(PortableWriterExImpl writer, PortableBuilderSerializer ctx) {
+ if (delegate == null) {
+ int size = reader.readIntAbsolute(off + 1);
+
+ int hdrSize = 1 /* flag */ + 4 /* size */ + 1 /* col type */;
+
+ writer.write(reader.array(), off, hdrSize);
+
+ reader.position(off + hdrSize);
+
+ for (int i = 0; i < size; i++) {
+ Object o = reader.parseValue();
+
+ ctx.writeValue(writer, o);
+ }
+ }
+ else {
+ writer.writeByte(GridPortableMarshaller.COL);
+ writer.writeInt(delegate.size());
+
+ byte colType = reader.array()[off + 1 /* flag */ + 4 /* size */];
+ writer.writeByte(colType);
+
+ int oldPos = reader.position();
+
+ for (Object o : delegate)
+ ctx.writeValue(writer, o);
+
+ // PortableBuilderImpl might have been written. It could override reader's position.
+ reader.position(oldPos);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/6ac9557e/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableLazyLinkedList.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableLazyLinkedList.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableLazyLinkedList.java
new file mode 100644
index 0000000..f793d7a
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableLazyLinkedList.java
@@ -0,0 +1,217 @@
+/*
+ * 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.portable.builder;
+
+import org.apache.ignite.internal.portable.*;
+
+import java.util.AbstractList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.ListIterator;
+
+/**
+ *
+ */
+class PortableLazyLinkedList extends AbstractList<Object> implements PortableBuilderSerializationAware {
+ /** */
+ private final PortableBuilderReader reader;
+
+ /** */
+ private final int off;
+
+ /** */
+ private List<Object> delegate;
+
+ /**
+ * @param reader Reader.
+ * @param size Size,
+ */
+ PortableLazyLinkedList(PortableBuilderReader reader, int size) {
+ this.reader = reader;
+ off = reader.position() - 1/* flag */ - 4/* size */ - 1/* col type */;
+
+ assert size >= 0;
+
+ for (int i = 0; i < size; i++)
+ reader.skipValue();
+ }
+
+ /**
+ *
+ */
+ private void ensureDelegateInit() {
+ if (delegate == null) {
+ int size = reader.readIntAbsolute(off + 1);
+
+ reader.position(off + 1/* flag */ + 4/* size */ + 1/* col type */);
+
+ delegate = new LinkedList<>();
+
+ for (int i = 0; i < size; i++)
+ delegate.add(reader.parseValue());
+ }
+ }
+
+ /** {@inheritDoc} */
+ @Override public Object get(int idx) {
+ ensureDelegateInit();
+
+ return PortableUtils.unwrapLazy(delegate.get(idx));
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean add(Object o) {
+ ensureDelegateInit();
+
+ return delegate.add(o);
+ }
+
+ /** {@inheritDoc} */
+ @Override public void add(int idx, Object element) {
+ ensureDelegateInit();
+
+ delegate.add(idx, element);
+ }
+
+ /** {@inheritDoc} */
+ @Override public Object set(int idx, Object element) {
+ ensureDelegateInit();
+
+ return PortableUtils.unwrapLazy(delegate.set(idx, element));
+ }
+
+ /** {@inheritDoc} */
+ @Override public Object remove(int idx) {
+ ensureDelegateInit();
+
+ return PortableUtils.unwrapLazy(delegate.remove(idx));
+ }
+
+ /** {@inheritDoc} */
+ @Override public void clear() {
+ if (delegate == null)
+ delegate = new LinkedList<>();
+ else
+ delegate.clear();
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean addAll(int idx, Collection<?> c) {
+ ensureDelegateInit();
+
+ return delegate.addAll(idx, c);
+ }
+
+ /** {@inheritDoc} */
+ @Override protected void removeRange(int fromIdx, int toIdx) {
+ ensureDelegateInit();
+
+ delegate.subList(fromIdx, toIdx).clear();
+ }
+
+ /** {@inheritDoc} */
+ @Override public int size() {
+ if (delegate == null)
+ return reader.readIntAbsolute(off + 1);
+
+ return delegate.size();
+ }
+
+ /** {@inheritDoc} */
+ @Override public ListIterator<Object> listIterator(final int idx) {
+ ensureDelegateInit();
+
+ return new ListIterator<Object>() {
+ /** */
+ private final ListIterator<Object> delegate = PortableLazyLinkedList.super.listIterator(idx);
+
+ @Override public boolean hasNext() {
+ return delegate.hasNext();
+ }
+
+ @Override public Object next() {
+ return PortableUtils.unwrapLazy(delegate.next());
+ }
+
+ @Override public boolean hasPrevious() {
+ return delegate.hasPrevious();
+ }
+
+ @Override public Object previous() {
+ return PortableUtils.unwrapLazy(delegate.previous());
+ }
+
+ @Override public int nextIndex() {
+ return delegate.nextIndex();
+ }
+
+ @Override public int previousIndex() {
+ return delegate.previousIndex();
+ }
+
+ @Override public void remove() {
+ delegate.remove();
+ }
+
+ @Override public void set(Object o) {
+ delegate.set(o);
+ }
+
+ @Override public void add(Object o) {
+ delegate.add(o);
+ }
+ };
+ }
+
+ /** {@inheritDoc} */
+ @Override public Iterator<Object> iterator() {
+ ensureDelegateInit();
+
+ return PortableUtils.unwrapLazyIterator(super.iterator());
+ }
+
+ /** {@inheritDoc} */
+ @Override public void writeTo(PortableWriterExImpl writer, PortableBuilderSerializer ctx) {
+ if (delegate == null) {
+ int size = reader.readIntAbsolute(off + 1);
+
+ int hdrSize = 1 /* flag */ + 4 /* size */ + 1 /* col type */;
+ writer.write(reader.array(), off, hdrSize);
+
+ reader.position(off + hdrSize);
+
+ for (int i = 0; i < size; i++) {
+ Object o = reader.parseValue();
+
+ ctx.writeValue(writer, o);
+ }
+ }
+ else {
+ writer.writeByte(GridPortableMarshaller.COL);
+ writer.writeInt(delegate.size());
+
+ byte colType = reader.array()[off + 1 /* flag */ + 4 /* size */];
+ writer.writeByte(colType);
+
+ for (Object o : delegate)
+ ctx.writeValue(writer, o);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/6ac9557e/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableLazyMap.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableLazyMap.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableLazyMap.java
new file mode 100644
index 0000000..12cbfd6
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableLazyMap.java
@@ -0,0 +1,220 @@
+/*
+ * 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.portable.builder;
+
+import org.apache.ignite.internal.portable.*;
+
+import java.util.AbstractMap;
+import java.util.AbstractSet;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Set;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ *
+ */
+class PortableLazyMap extends AbstractMap<Object, Object> implements PortableBuilderSerializationAware {
+ /** */
+ private final PortableBuilderReader reader;
+
+ /** */
+ private final int off;
+
+ /** */
+ private Map<Object, Object> delegate;
+
+ /**
+ * @param reader Reader.
+ * @param off Offset.
+ */
+ private PortableLazyMap(PortableBuilderReader reader, int off) {
+ this.reader = reader;
+ this.off = off;
+ }
+
+ /**
+ * @param reader Reader.
+ * @return PortableLazyMap.
+ */
+ @Nullable public static PortableLazyMap parseMap(PortableBuilderReader reader) {
+ int off = reader.position() - 1;
+
+ int size = reader.readInt();
+
+ reader.skip(1); // map type.
+
+ for (int i = 0; i < size; i++) {
+ reader.skipValue(); // skip key
+ reader.skipValue(); // skip value
+ }
+
+ return new PortableLazyMap(reader, off);
+ }
+
+ /**
+ *
+ */
+ private void ensureDelegateInit() {
+ if (delegate == null) {
+ int size = reader.readIntAbsolute(off + 1);
+
+ reader.position(off + 1/* flag */ + 4/* size */ + 1/* col type */);
+
+ delegate = new LinkedHashMap<>();
+
+ for (int i = 0; i < size; i++)
+ delegate.put(PortableUtils.unwrapLazy(reader.parseValue()), reader.parseValue());
+ }
+ }
+
+ /** {@inheritDoc} */
+ @Override public void writeTo(PortableWriterExImpl writer, PortableBuilderSerializer ctx) {
+ if (delegate == null) {
+ int size = reader.readIntAbsolute(off + 1);
+
+ int hdrSize = 1 /* flag */ + 4 /* size */ + 1 /* col type */;
+ writer.write(reader.array(), off, hdrSize);
+
+ reader.position(off + hdrSize);
+
+ for (int i = 0; i < size; i++) {
+ ctx.writeValue(writer, reader.parseValue()); // key
+ ctx.writeValue(writer, reader.parseValue()); // value
+ }
+ }
+ else {
+ writer.writeByte(GridPortableMarshaller.MAP);
+ writer.writeInt(delegate.size());
+
+ byte colType = reader.array()[off + 1 /* flag */ + 4 /* size */];
+
+ writer.writeByte(colType);
+
+ for (Entry<Object, Object> entry : delegate.entrySet()) {
+ ctx.writeValue(writer, entry.getKey());
+ ctx.writeValue(writer, entry.getValue());
+ }
+ }
+ }
+
+ /** {@inheritDoc} */
+ @Override public int size() {
+ if (delegate == null)
+ return reader.readIntAbsolute(off + 1);
+
+ return delegate.size();
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean containsKey(Object key) {
+ ensureDelegateInit();
+
+ return delegate.containsKey(key);
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean containsValue(Object val) {
+ return values().contains(val);
+ }
+
+ /** {@inheritDoc} */
+ @Override public Set<Object> keySet() {
+ ensureDelegateInit();
+
+ return delegate.keySet();
+ }
+
+ /** {@inheritDoc} */
+ @Override public void clear() {
+ if (delegate == null)
+ delegate = new LinkedHashMap<>();
+ else
+ delegate.clear();
+ }
+
+ /** {@inheritDoc} */
+ @Override public Object get(Object key) {
+ ensureDelegateInit();
+
+ return PortableUtils.unwrapLazy(delegate.get(key));
+ }
+
+ /** {@inheritDoc} */
+ @Override public Object put(Object key, Object val) {
+ ensureDelegateInit();
+
+ return PortableUtils.unwrapLazy(delegate.put(key, val));
+ }
+
+ /** {@inheritDoc} */
+ @Override public Object remove(Object key) {
+ ensureDelegateInit();
+
+ return PortableUtils.unwrapLazy(delegate.remove(key));
+ }
+
+ /** {@inheritDoc} */
+ @Override public Set<Entry<Object, Object>> entrySet() {
+ ensureDelegateInit();
+
+ return new AbstractSet<Entry<Object, Object>>() {
+ @Override public boolean contains(Object o) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override public Iterator<Entry<Object, Object>> iterator() {
+ return new Iterator<Entry<Object, Object>>() {
+ /** */
+ private final Iterator<Entry<Object, Object>> itr = delegate.entrySet().iterator();
+
+ @Override public boolean hasNext() {
+ return itr.hasNext();
+ }
+
+ @Override public Entry<Object, Object> next() {
+ Entry<Object, Object> res = itr.next();
+
+ final Object val = res.getValue();
+
+ if (val instanceof PortableLazyValue) {
+ return new SimpleEntry<Object, Object>(res.getKey(), val) {
+ private static final long serialVersionUID = 0L;
+
+ @Override public Object getValue() {
+ return ((PortableLazyValue)val).value();
+ }
+ };
+ }
+
+ return res;
+ }
+
+ @Override public void remove() {
+ itr.remove();
+ }
+ };
+ }
+
+ @Override public int size() {
+ return delegate.size();
+ }
+ };
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/6ac9557e/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableLazyMapEntry.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableLazyMapEntry.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableLazyMapEntry.java
new file mode 100644
index 0000000..bd027f5
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableLazyMapEntry.java
@@ -0,0 +1,68 @@
+/*
+ * 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.portable.builder;
+
+import org.apache.ignite.internal.portable.*;
+
+import java.util.Map;
+
+/**
+ *
+ */
+class PortableLazyMapEntry implements Map.Entry<Object, Object>, PortableBuilderSerializationAware {
+ /** */
+ private final Object key;
+
+ /** */
+ private Object val;
+
+ /**
+ * @param reader GridMutablePortableReader
+ */
+ PortableLazyMapEntry(PortableBuilderReader reader) {
+ key = reader.parseValue();
+ val = reader.parseValue();
+ }
+
+ /** {@inheritDoc} */
+ @Override public Object getKey() {
+ return PortableUtils.unwrapLazy(key);
+ }
+
+ /** {@inheritDoc} */
+ @Override public Object getValue() {
+ return PortableUtils.unwrapLazy(val);
+ }
+
+ /** {@inheritDoc} */
+ @Override public Object setValue(Object val) {
+ Object res = getValue();
+
+ this.val = val;
+
+ return res;
+ }
+
+ /** {@inheritDoc} */
+ @Override public void writeTo(PortableWriterExImpl writer, PortableBuilderSerializer ctx) {
+ writer.writeByte(GridPortableMarshaller.MAP_ENTRY);
+
+ ctx.writeValue(writer, key);
+ ctx.writeValue(writer, val);
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/6ac9557e/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableLazySet.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableLazySet.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableLazySet.java
new file mode 100644
index 0000000..16772af
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableLazySet.java
@@ -0,0 +1,92 @@
+/*
+ * 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.portable.builder;
+
+import java.util.Collection;
+import java.util.Set;
+import org.apache.ignite.internal.portable.GridPortableMarshaller;
+import org.apache.ignite.internal.portable.PortableUtils;
+import org.apache.ignite.internal.portable.PortableWriterExImpl;
+import org.apache.ignite.internal.util.typedef.internal.U;
+
+/**
+ *
+ */
+class PortableLazySet extends PortableAbstractLazyValue {
+ /** */
+ private final int off;
+
+ /**
+ * @param reader Reader.
+ * @param size Size.
+ */
+ PortableLazySet(PortableBuilderReader reader, int size) {
+ super(reader, reader.position() - 1);
+
+ off = reader.position() - 1/* flag */ - 4/* size */ - 1/* col type */;
+
+ assert size >= 0;
+
+ for (int i = 0; i < size; i++)
+ reader.skipValue();
+ }
+
+ /** {@inheritDoc} */
+ @Override public void writeTo(PortableWriterExImpl writer, PortableBuilderSerializer ctx) {
+ if (val == null) {
+ int size = reader.readIntAbsolute(off + 1);
+
+ int hdrSize = 1 /* flag */ + 4 /* size */ + 1 /* col type */;
+ writer.write(reader.array(), off, hdrSize);
+
+ reader.position(off + hdrSize);
+
+ for (int i = 0; i < size; i++) {
+ Object o = reader.parseValue();
+
+ ctx.writeValue(writer, o);
+ }
+ }
+ else {
+ Collection<Object> c = (Collection<Object>)val;
+
+ writer.writeByte(GridPortableMarshaller.COL);
+ writer.writeInt(c.size());
+
+ byte colType = reader.array()[off + 1 /* flag */ + 4 /* size */];
+ writer.writeByte(colType);
+
+ for (Object o : c)
+ ctx.writeValue(writer, o);
+ }
+ }
+
+ /** {@inheritDoc} */
+ @Override protected Object init() {
+ int size = reader.readIntAbsolute(off + 1);
+
+ reader.position(off + 1/* flag */ + 4/* size */ + 1/* col type */);
+
+ Set<Object> res = U.newLinkedHashSet(size);
+
+ for (int i = 0; i < size; i++)
+ res.add(PortableUtils.unwrapLazy(reader.parseValue()));
+
+ return res;
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/6ac9557e/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableLazyValue.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableLazyValue.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableLazyValue.java
new file mode 100644
index 0000000..5d8d586
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableLazyValue.java
@@ -0,0 +1,28 @@
+/*
+ * 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.portable.builder;
+
+/**
+ *
+ */
+public interface PortableLazyValue extends PortableBuilderSerializationAware {
+ /**
+ * @return Value.
+ */
+ public Object value();
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/6ac9557e/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableModifiableLazyValue.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableModifiableLazyValue.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableModifiableLazyValue.java
new file mode 100644
index 0000000..09fb844
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableModifiableLazyValue.java
@@ -0,0 +1,52 @@
+/*
+ * 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.portable.builder;
+
+import org.apache.ignite.internal.portable.*;
+
+/**
+ *
+ */
+public class PortableModifiableLazyValue extends PortableAbstractLazyValue {
+ /** */
+ protected final int len;
+
+ /**
+ * @param reader
+ * @param valOff
+ * @param len
+ */
+ public PortableModifiableLazyValue(PortableBuilderReader reader, int valOff, int len) {
+ super(reader, valOff);
+
+ this.len = len;
+ }
+
+ /** {@inheritDoc} */
+ @Override protected Object init() {
+ return reader.reader().unmarshal(valOff);
+ }
+
+ /** {@inheritDoc} */
+ @Override public void writeTo(PortableWriterExImpl writer, PortableBuilderSerializer ctx) {
+ if (val == null)
+ writer.write(reader.array(), valOff, len);
+ else
+ writer.writeObject(val);
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/6ac9557e/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableObjectArrayLazyValue.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableObjectArrayLazyValue.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableObjectArrayLazyValue.java
new file mode 100644
index 0000000..1126a3c
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableObjectArrayLazyValue.java
@@ -0,0 +1,91 @@
+/*
+ * 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.portable.builder;
+
+import org.apache.ignite.internal.portable.GridPortableMarshaller;
+import org.apache.ignite.internal.portable.PortableWriterExImpl;
+import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.portable.PortableInvalidClassException;
+
+/**
+ *
+ */
+class PortableObjectArrayLazyValue extends PortableAbstractLazyValue {
+ /** */
+ private Object[] lazyValsArr;
+
+ /** */
+ private int compTypeId;
+
+ /** */
+ private String clsName;
+
+ /**
+ * @param reader Reader.
+ */
+ protected PortableObjectArrayLazyValue(PortableBuilderReader reader) {
+ super(reader, reader.position() - 1);
+
+ int typeId = reader.readInt();
+
+ if (typeId == GridPortableMarshaller.UNREGISTERED_TYPE_ID) {
+ clsName = reader.readString();
+
+ Class cls;
+
+ try {
+ // TODO: IGNITE-1272 - Is class loader needed here?
+ cls = U.forName(reader.readString(), null);
+ }
+ catch (ClassNotFoundException e) {
+ throw new PortableInvalidClassException("Failed to load the class: " + clsName, e);
+ }
+
+ compTypeId = reader.portableContext().descriptorForClass(cls).typeId();
+ }
+ else {
+ compTypeId = typeId;
+ clsName = null;
+ }
+
+ int size = reader.readInt();
+
+ lazyValsArr = new Object[size];
+
+ for (int i = 0; i < size; i++)
+ lazyValsArr[i] = reader.parseValue();
+ }
+
+ /** {@inheritDoc} */
+ @Override protected Object init() {
+ for (int i = 0; i < lazyValsArr.length; i++) {
+ if (lazyValsArr[i] instanceof PortableLazyValue)
+ lazyValsArr[i] = ((PortableLazyValue)lazyValsArr[i]).value();
+ }
+
+ return lazyValsArr;
+ }
+
+ /** {@inheritDoc} */
+ @Override public void writeTo(PortableWriterExImpl writer, PortableBuilderSerializer ctx) {
+ if (clsName == null)
+ ctx.writeArray(writer, GridPortableMarshaller.OBJ_ARR, lazyValsArr, compTypeId);
+ else
+ ctx.writeArray(writer, GridPortableMarshaller.OBJ_ARR, lazyValsArr, clsName);
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/6ac9557e/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortablePlainLazyValue.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortablePlainLazyValue.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortablePlainLazyValue.java
new file mode 100644
index 0000000..136958a
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortablePlainLazyValue.java
@@ -0,0 +1,49 @@
+/*
+ * 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.portable.builder;
+
+import org.apache.ignite.internal.portable.*;
+
+/**
+ *
+ */
+class PortablePlainLazyValue extends PortableAbstractLazyValue {
+ /** */
+ protected final int len;
+
+ /**
+ * @param reader Reader
+ * @param valOff Offset
+ * @param len Length.
+ */
+ protected PortablePlainLazyValue(PortableBuilderReader reader, int valOff, int len) {
+ super(reader, valOff);
+
+ this.len = len;
+ }
+
+ /** {@inheritDoc} */
+ @Override protected Object init() {
+ return reader.reader().unmarshal(valOff);
+ }
+
+ /** {@inheritDoc} */
+ @Override public void writeTo(PortableWriterExImpl writer, PortableBuilderSerializer ctx) {
+ writer.write(reader.array(), valOff, len);
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/6ac9557e/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortablePlainPortableObject.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortablePlainPortableObject.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortablePlainPortableObject.java
new file mode 100644
index 0000000..8743fbe
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortablePlainPortableObject.java
@@ -0,0 +1,53 @@
+/*
+ * 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.portable.builder;
+
+import org.apache.ignite.internal.portable.PortableObjectImpl;
+import org.apache.ignite.internal.portable.PortableObjectOffheapImpl;
+import org.apache.ignite.internal.portable.PortableWriterExImpl;
+import org.apache.ignite.portable.PortableObject;
+
+/**
+ *
+ */
+public class PortablePlainPortableObject implements PortableLazyValue {
+ /** */
+ private final PortableObject portableObj;
+
+ /**
+ * @param portableObj Portable object.
+ */
+ public PortablePlainPortableObject(PortableObject portableObj) {
+ this.portableObj = portableObj;
+ }
+
+ /** {@inheritDoc} */
+ @Override public Object value() {
+ return portableObj;
+ }
+
+ /** {@inheritDoc} */
+ @Override public void writeTo(PortableWriterExImpl writer, PortableBuilderSerializer ctx) {
+ PortableObject val = portableObj;
+
+ if (val instanceof PortableObjectOffheapImpl)
+ val = ((PortableObjectOffheapImpl)val).heapCopy();
+
+ writer.doWritePortableObject((PortableObjectImpl)val);
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/6ac9557e/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableValueWithType.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableValueWithType.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableValueWithType.java
new file mode 100644
index 0000000..2e031f0
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/PortableValueWithType.java
@@ -0,0 +1,75 @@
+/*
+ * 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.portable.builder;
+
+import org.apache.ignite.internal.portable.PortableWriterExImpl;
+import org.apache.ignite.internal.processors.cache.portable.CacheObjectPortableProcessorImpl;
+import org.apache.ignite.internal.util.typedef.internal.S;
+
+/**
+ *
+ */
+class PortableValueWithType implements PortableLazyValue {
+ /** */
+ private byte type;
+
+ /** */
+ private Object val;
+
+ /**
+ * @param type Type
+ * @param val Value.
+ */
+ PortableValueWithType(byte type, Object val) {
+ this.type = type;
+ this.val = val;
+ }
+
+ /** {@inheritDoc} */
+ @Override public void writeTo(PortableWriterExImpl writer, PortableBuilderSerializer ctx) {
+ if (val instanceof PortableBuilderSerializationAware)
+ ((PortableBuilderSerializationAware)val).writeTo(writer, ctx);
+ else
+ ctx.writeValue(writer, val);
+ }
+
+ /** {@inheritDoc} */
+ public String typeName() {
+ return CacheObjectPortableProcessorImpl.fieldTypeName(type);
+ }
+
+ /** {@inheritDoc} */
+ @Override public Object value() {
+ if (val instanceof PortableLazyValue)
+ return ((PortableLazyValue)val).value();
+
+ return val;
+ }
+
+ /**
+ * @param val New value.
+ */
+ public void value(Object val) {
+ this.val = val;
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return S.toString(PortableValueWithType.class, this);
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/6ac9557e/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/package-info.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/package-info.java b/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/package-info.java
new file mode 100644
index 0000000..e069f3e
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/portable/builder/package-info.java
@@ -0,0 +1,22 @@
+/*
+ * 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 description. -->
+ * Contains classes specific to portable builder API.
+ */
+package org.apache.ignite.internal.portable.builder;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/6ac9557e/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/portable/CacheObjectPortableProcessorImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/portable/CacheObjectPortableProcessorImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/portable/CacheObjectPortableProcessorImpl.java
index b33c643..1be5aea 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/portable/CacheObjectPortableProcessorImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/portable/CacheObjectPortableProcessorImpl.java
@@ -45,13 +45,13 @@ import org.apache.ignite.cluster.ClusterNode;
import org.apache.ignite.configuration.CacheConfiguration;
import org.apache.ignite.internal.GridKernalContext;
import org.apache.ignite.internal.portable.GridPortableMarshaller;
-import org.apache.ignite.internal.portable.PortableBuilderImpl;
import org.apache.ignite.internal.portable.PortableContext;
import org.apache.ignite.internal.portable.PortableMetaDataHandler;
import org.apache.ignite.internal.portable.PortableMetaDataImpl;
import org.apache.ignite.internal.portable.PortableObjectImpl;
import org.apache.ignite.internal.portable.PortableObjectOffheapImpl;
import org.apache.ignite.internal.portable.PortableUtils;
+import org.apache.ignite.internal.portable.builder.PortableBuilderImpl;
import org.apache.ignite.internal.portable.streams.PortableInputStream;
import org.apache.ignite.internal.portable.streams.PortableOffheapInputStream;
import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion;
http://git-wip-us.apache.org/repos/asf/ignite/blob/6ac9557e/modules/core/src/main/resources/META-INF/classnames.properties
----------------------------------------------------------------------
diff --git a/modules/core/src/main/resources/META-INF/classnames.properties b/modules/core/src/main/resources/META-INF/classnames.properties
index d80cc49..dd8c3f3 100644
--- a/modules/core/src/main/resources/META-INF/classnames.properties
+++ b/modules/core/src/main/resources/META-INF/classnames.properties
@@ -281,7 +281,7 @@ org.apache.ignite.internal.managers.loadbalancer.GridLoadBalancerManager$1
org.apache.ignite.internal.processors.platform.PlatformAwareEventFilter
org.apache.ignite.internal.portable.PortableClassDescriptor$Mode
org.apache.ignite.internal.portable.PortableContext
-org.apache.ignite.internal.portable.PortableLazyMap$1$1$1
+org.apache.ignite.internal.portable.builder.PortableLazyMap$1$1$1
org.apache.ignite.internal.portable.PortableMetaDataImpl
org.apache.ignite.internal.portable.PortableObjectEx
org.apache.ignite.internal.portable.PortableObjectImpl
[02/18] ignite git commit: IGNITE-1357: Moved bootstrap logic to
Ignite.
Posted by sb...@apache.org.
IGNITE-1357: Moved bootstrap logic to Ignite.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/61aad3c3
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/61aad3c3
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/61aad3c3
Branch: refs/heads/ignite-1349
Commit: 61aad3c32cd5823e355f4492eda359e6ff060263
Parents: 86ab3a7
Author: vozerov-gridgain <vo...@gridgain.com>
Authored: Wed Sep 2 15:17:47 2015 +0300
Committer: vozerov-gridgain <vo...@gridgain.com>
Committed: Wed Sep 2 15:17:47 2015 +0300
----------------------------------------------------------------------
...processors.platform.PlatformBootstrapFactory | 2 +
.../PlatformAbstractConfigurationClosure.java | 61 +++++
.../platform/PlatformConfigurationEx.java | 48 ++++
.../platform/cpp/PlatformCppBootstrap.java | 31 +++
.../cpp/PlatformCppBootstrapFactory.java | 39 +++
.../cpp/PlatformCppConfigurationClosure.java | 99 +++++++
.../cpp/PlatformCppConfigurationEx.java | 82 ++++++
.../dotnet/PlatformDotNetBootstrap.java | 31 +++
.../dotnet/PlatformDotNetBootstrapFactory.java | 39 +++
.../PlatformDotNetConfigurationClosure.java | 255 +++++++++++++++++++
.../dotnet/PlatformDotNetConfigurationEx.java | 91 +++++++
.../platform/utils/PlatformUtils.java | 14 +
12 files changed, 792 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/61aad3c3/modules/platform/src/main/java/META-INF/services/org.apache.ignite.internal.processors.platform.PlatformBootstrapFactory
----------------------------------------------------------------------
diff --git a/modules/platform/src/main/java/META-INF/services/org.apache.ignite.internal.processors.platform.PlatformBootstrapFactory b/modules/platform/src/main/java/META-INF/services/org.apache.ignite.internal.processors.platform.PlatformBootstrapFactory
new file mode 100644
index 0000000..7f015e7
--- /dev/null
+++ b/modules/platform/src/main/java/META-INF/services/org.apache.ignite.internal.processors.platform.PlatformBootstrapFactory
@@ -0,0 +1,2 @@
+org.apache.ignite.internal.processors.platform.cpp.PlatformCppBootstrapFactory
+org.apache.ignite.internal.processors.platform.dotnet.PlatformDotNetBootstrapFactory
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/61aad3c3/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/PlatformAbstractConfigurationClosure.java
----------------------------------------------------------------------
diff --git a/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/PlatformAbstractConfigurationClosure.java b/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/PlatformAbstractConfigurationClosure.java
new file mode 100644
index 0000000..2f7af71
--- /dev/null
+++ b/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/PlatformAbstractConfigurationClosure.java
@@ -0,0 +1,61 @@
+/*
+ * 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.platform;
+
+import org.apache.ignite.configuration.IgniteConfiguration;
+import org.apache.ignite.internal.processors.platform.callback.PlatformCallbackGateway;
+import org.apache.ignite.lang.IgniteClosure;
+
+/**
+ * Abstract interop configuration closure.
+ */
+public abstract class PlatformAbstractConfigurationClosure
+ implements IgniteClosure<IgniteConfiguration, IgniteConfiguration> {
+ /** */
+ private static final long serialVersionUID = 0L;
+
+ /** Native gateway. */
+ protected final PlatformCallbackGateway gate;
+
+ /**
+ * Constructor.
+ *
+ * @param envPtr Environment pointer.
+ */
+ protected PlatformAbstractConfigurationClosure(long envPtr) {
+ this.gate = new PlatformCallbackGateway(envPtr);
+ }
+
+ /** {@inheritDoc} */
+ @Override public IgniteConfiguration apply(IgniteConfiguration igniteCfg) {
+ assert igniteCfg != null;
+
+ IgniteConfiguration igniteCfg0 = new IgniteConfiguration(igniteCfg);
+
+ apply0(igniteCfg0);
+
+ return igniteCfg0;
+ }
+
+ /**
+ * Internal apply routine.
+ *
+ * @param igniteCfg Ignite configuration.
+ */
+ protected abstract void apply0(IgniteConfiguration igniteCfg);
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/61aad3c3/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/PlatformConfigurationEx.java
----------------------------------------------------------------------
diff --git a/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/PlatformConfigurationEx.java b/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/PlatformConfigurationEx.java
new file mode 100644
index 0000000..66eff8b
--- /dev/null
+++ b/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/PlatformConfigurationEx.java
@@ -0,0 +1,48 @@
+/*
+ * 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.platform;
+
+import org.apache.ignite.internal.processors.platform.callback.PlatformCallbackGateway;
+import org.apache.ignite.internal.processors.platform.memory.PlatformMemoryManagerImpl;
+
+import java.util.Collection;
+
+/**
+ * Extended platform configuration.
+ */
+public interface PlatformConfigurationEx {
+ /*
+ * @return Native gateway.
+ */
+ public PlatformCallbackGateway gate();
+
+ /**
+ * @return Memory manager.
+ */
+ public PlatformMemoryManagerImpl memory();
+
+ /**
+ * @return Platform name.
+ */
+ public String platform();
+
+ /**
+ * @return Warnings to be displayed on grid start.
+ */
+ public Collection<String> warnings();
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/61aad3c3/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/cpp/PlatformCppBootstrap.java
----------------------------------------------------------------------
diff --git a/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/cpp/PlatformCppBootstrap.java b/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/cpp/PlatformCppBootstrap.java
new file mode 100644
index 0000000..d066296
--- /dev/null
+++ b/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/cpp/PlatformCppBootstrap.java
@@ -0,0 +1,31 @@
+/*
+ * 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.platform.cpp;
+
+import org.apache.ignite.internal.processors.platform.PlatformAbstractBootstrap;
+import org.apache.ignite.internal.processors.platform.PlatformAbstractConfigurationClosure;
+
+/**
+ * Platform .Net bootstrap.
+ */
+public class PlatformCppBootstrap extends PlatformAbstractBootstrap {
+ /** {@inheritDoc} */
+ @Override protected PlatformAbstractConfigurationClosure closure(long envPtr) {
+ return new PlatformCppConfigurationClosure(envPtr);
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/61aad3c3/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/cpp/PlatformCppBootstrapFactory.java
----------------------------------------------------------------------
diff --git a/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/cpp/PlatformCppBootstrapFactory.java b/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/cpp/PlatformCppBootstrapFactory.java
new file mode 100644
index 0000000..4933713
--- /dev/null
+++ b/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/cpp/PlatformCppBootstrapFactory.java
@@ -0,0 +1,39 @@
+/*
+ * 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.platform.cpp;
+
+import org.apache.ignite.internal.processors.platform.PlatformBootstrap;
+import org.apache.ignite.internal.processors.platform.PlatformBootstrapFactory;
+
+/**
+ * Platform .Net bootstrap factory.
+ */
+public class PlatformCppBootstrapFactory implements PlatformBootstrapFactory {
+ /** Bootstrap ID. */
+ public static final int ID = 2;
+
+ /** {@inheritDoc} */
+ @Override public int id() {
+ return ID;
+ }
+
+ /** {@inheritDoc} */
+ @Override public PlatformBootstrap create() {
+ return new PlatformCppBootstrap();
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/61aad3c3/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/cpp/PlatformCppConfigurationClosure.java
----------------------------------------------------------------------
diff --git a/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/cpp/PlatformCppConfigurationClosure.java b/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/cpp/PlatformCppConfigurationClosure.java
new file mode 100644
index 0000000..648726b
--- /dev/null
+++ b/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/cpp/PlatformCppConfigurationClosure.java
@@ -0,0 +1,99 @@
+/*
+ * 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.platform.cpp;
+
+import org.apache.ignite.IgniteCheckedException;
+import org.apache.ignite.IgniteException;
+import org.apache.ignite.configuration.IgniteConfiguration;
+import org.apache.ignite.configuration.PlatformConfiguration;
+import org.apache.ignite.internal.processors.platform.PlatformAbstractConfigurationClosure;
+import org.apache.ignite.internal.processors.platform.memory.PlatformMemoryManagerImpl;
+import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.marshaller.Marshaller;
+import org.apache.ignite.marshaller.portable.PortableMarshaller;
+import org.apache.ignite.platform.cpp.PlatformCppConfiguration;
+
+import java.util.Collections;
+
+/**
+ * Interop CPP configuration closure.
+ */
+public class PlatformCppConfigurationClosure extends PlatformAbstractConfigurationClosure {
+ /** */
+ private static final long serialVersionUID = 0L;
+
+ /**
+ * Constructor.
+ *
+ * @param envPtr Environment pointer.
+ */
+ public PlatformCppConfigurationClosure(long envPtr) {
+ super(envPtr);
+ }
+
+ /** {@inheritDoc} */
+ @SuppressWarnings("deprecation")
+ @Override protected void apply0(IgniteConfiguration igniteCfg) {
+ // 3. Validate and copy Interop configuration setting environment pointer along the way.
+ PlatformConfiguration interopCfg = igniteCfg.getPlatformConfiguration();
+
+ if (interopCfg != null && !(interopCfg instanceof PlatformCppConfiguration))
+ throw new IgniteException("Illegal interop configuration (must be of type " +
+ PlatformCppConfiguration.class.getName() + "): " + interopCfg.getClass().getName());
+
+ PlatformCppConfiguration cppCfg = interopCfg != null ? (PlatformCppConfiguration)interopCfg : null;
+
+ if (cppCfg == null)
+ cppCfg = new PlatformCppConfiguration();
+
+ PlatformMemoryManagerImpl memMgr = new PlatformMemoryManagerImpl(gate, 1024);
+
+ PlatformCppConfigurationEx cppCfg0 = new PlatformCppConfigurationEx(cppCfg, gate, memMgr);
+
+ igniteCfg.setPlatformConfiguration(cppCfg0);
+
+ // Check marshaller
+ Marshaller marsh = igniteCfg.getMarshaller();
+
+ if (marsh == null) {
+ igniteCfg.setMarshaller(new PortableMarshaller());
+
+ cppCfg0.warnings(Collections.singleton("Marshaller is automatically set to " +
+ PortableMarshaller.class.getName() + " (other nodes must have the same marshaller type)."));
+ }
+ else if (!(marsh instanceof PortableMarshaller))
+ throw new IgniteException("Unsupported marshaller (only " + PortableMarshaller.class.getName() +
+ " can be used when running Ignite for C++): " + marsh.getClass().getName());
+
+ // Set Ignite home so that marshaller context works.
+ String ggHome = igniteCfg.getIgniteHome();
+
+ if (ggHome == null)
+ ggHome = U.getIgniteHome();
+ else
+ // If user provided IGNITE_HOME - set it as a system property.
+ U.setIgniteHome(ggHome);
+
+ try {
+ U.setWorkDirectory(igniteCfg.getWorkDirectory(), ggHome);
+ }
+ catch (IgniteCheckedException e) {
+ throw U.convertException(e);
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/61aad3c3/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/cpp/PlatformCppConfigurationEx.java
----------------------------------------------------------------------
diff --git a/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/cpp/PlatformCppConfigurationEx.java b/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/cpp/PlatformCppConfigurationEx.java
new file mode 100644
index 0000000..ea11ce9
--- /dev/null
+++ b/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/cpp/PlatformCppConfigurationEx.java
@@ -0,0 +1,82 @@
+/*
+ * 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.platform.cpp;
+
+import org.apache.ignite.internal.processors.platform.PlatformConfigurationEx;
+import org.apache.ignite.internal.processors.platform.callback.PlatformCallbackGateway;
+import org.apache.ignite.internal.processors.platform.memory.PlatformMemoryManagerImpl;
+import org.apache.ignite.internal.processors.platform.utils.PlatformUtils;
+import org.apache.ignite.platform.cpp.PlatformCppConfiguration;
+
+import java.util.Collection;
+
+/**
+ * Internal interop CPP configuration.
+ */
+public class PlatformCppConfigurationEx extends PlatformCppConfiguration implements PlatformConfigurationEx {
+ /** Native gateway. */
+ private final PlatformCallbackGateway gate;
+
+ /** Memory manager. */
+ private final PlatformMemoryManagerImpl memMgr;
+
+ /** Warnings */
+ private Collection<String> warns;
+
+ /**
+ * Copy constructor.
+ *
+ * @param cfg Configuration to copy.
+ * @param gate Native gateway.
+ * @param memMgr Memory manager.
+ */
+ public PlatformCppConfigurationEx(PlatformCppConfiguration cfg, PlatformCallbackGateway gate,
+ PlatformMemoryManagerImpl memMgr) {
+ super(cfg);
+
+ this.gate = gate;
+ this.memMgr = memMgr;
+ }
+
+ /** {@inheritDoc} */
+ @Override public PlatformCallbackGateway gate() {
+ return gate;
+ }
+
+ /** {@inheritDoc} */
+ @Override public PlatformMemoryManagerImpl memory() {
+ return memMgr;
+ }
+
+ /** {@inheritDoc} */
+ @Override public String platform() {
+ return PlatformUtils.PLATFORM_CPP;
+ }
+
+ /** {@inheritDoc} */
+ @Override public Collection<String> warnings() {
+ return warns;
+ }
+
+ /**
+ * @param warnings Warnings.
+ */
+ public void warnings(Collection<String> warnings) {
+ this.warns = warnings;
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/61aad3c3/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetBootstrap.java
----------------------------------------------------------------------
diff --git a/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetBootstrap.java b/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetBootstrap.java
new file mode 100644
index 0000000..837ded9
--- /dev/null
+++ b/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetBootstrap.java
@@ -0,0 +1,31 @@
+/*
+ * 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.platform.dotnet;
+
+import org.apache.ignite.internal.processors.platform.PlatformAbstractBootstrap;
+import org.apache.ignite.internal.processors.platform.PlatformAbstractConfigurationClosure;
+
+/**
+ * Interop .Net bootstrap.
+ */
+public class PlatformDotNetBootstrap extends PlatformAbstractBootstrap {
+ /** {@inheritDoc} */
+ @Override protected PlatformAbstractConfigurationClosure closure(long envPtr) {
+ return new PlatformDotNetConfigurationClosure(envPtr);
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/61aad3c3/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetBootstrapFactory.java
----------------------------------------------------------------------
diff --git a/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetBootstrapFactory.java b/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetBootstrapFactory.java
new file mode 100644
index 0000000..6b2a6cd
--- /dev/null
+++ b/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetBootstrapFactory.java
@@ -0,0 +1,39 @@
+/*
+ * 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.platform.dotnet;
+
+import org.apache.ignite.internal.processors.platform.PlatformBootstrap;
+import org.apache.ignite.internal.processors.platform.PlatformBootstrapFactory;
+
+/**
+ * Interop .Net bootstrap factory.
+ */
+public class PlatformDotNetBootstrapFactory implements PlatformBootstrapFactory {
+ /** Bootstrap ID. */
+ public static final int ID = 1;
+
+ /** {@inheritDoc} */
+ @Override public int id() {
+ return ID;
+ }
+
+ /** {@inheritDoc} */
+ @Override public PlatformBootstrap create() {
+ return new PlatformDotNetBootstrap();
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/61aad3c3/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetConfigurationClosure.java
----------------------------------------------------------------------
diff --git a/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetConfigurationClosure.java b/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetConfigurationClosure.java
new file mode 100644
index 0000000..56351e6
--- /dev/null
+++ b/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetConfigurationClosure.java
@@ -0,0 +1,255 @@
+/*
+ * 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.platform.dotnet;
+
+import org.apache.ignite.IgniteCheckedException;
+import org.apache.ignite.IgniteException;
+import org.apache.ignite.configuration.IgniteConfiguration;
+import org.apache.ignite.configuration.PlatformConfiguration;
+import org.apache.ignite.internal.MarshallerContextImpl;
+import org.apache.ignite.internal.portable.GridPortableMarshaller;
+import org.apache.ignite.internal.portable.PortableContext;
+import org.apache.ignite.internal.portable.PortableMetaDataHandler;
+import org.apache.ignite.internal.portable.PortableRawWriterEx;
+import org.apache.ignite.internal.processors.platform.PlatformAbstractConfigurationClosure;
+import org.apache.ignite.internal.processors.platform.lifecycle.PlatformLifecycleBean;
+import org.apache.ignite.internal.processors.platform.memory.PlatformInputStream;
+import org.apache.ignite.internal.processors.platform.memory.PlatformMemory;
+import org.apache.ignite.internal.processors.platform.memory.PlatformMemoryManagerImpl;
+import org.apache.ignite.internal.processors.platform.memory.PlatformOutputStream;
+import org.apache.ignite.internal.processors.platform.utils.PlatformUtils;
+import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.lifecycle.LifecycleBean;
+import org.apache.ignite.marshaller.Marshaller;
+import org.apache.ignite.marshaller.portable.PortableMarshaller;
+import org.apache.ignite.platform.dotnet.PlatformDotNetConfiguration;
+import org.apache.ignite.platform.dotnet.PlatformDotNetLifecycleBean;
+import org.apache.ignite.portable.PortableException;
+import org.apache.ignite.portable.PortableMetadata;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * Closure to apply dot net configuration.
+ */
+@SuppressWarnings({"UnusedDeclaration"})
+public class PlatformDotNetConfigurationClosure extends PlatformAbstractConfigurationClosure {
+ /** */
+ private static final long serialVersionUID = 0L;
+
+ /** Configuration. */
+ private IgniteConfiguration cfg;
+
+ /** Memory manager. */
+ private PlatformMemoryManagerImpl memMgr;
+
+ /**
+ * Constructor.
+ *
+ * @param envPtr Environment pointer.
+ */
+ public PlatformDotNetConfigurationClosure(long envPtr) {
+ super(envPtr);
+ }
+
+ /** {@inheritDoc} */
+ @SuppressWarnings("deprecation")
+ @Override protected void apply0(IgniteConfiguration igniteCfg) {
+ // 3. Validate and copy Interop configuration setting environment pointer along the way.
+ PlatformConfiguration interopCfg = igniteCfg.getPlatformConfiguration();
+
+ if (interopCfg != null && !(interopCfg instanceof PlatformDotNetConfiguration))
+ throw new IgniteException("Illegal platform configuration (must be of type " +
+ PlatformDotNetConfiguration.class.getName() + "): " + interopCfg.getClass().getName());
+
+ PlatformDotNetConfiguration dotNetCfg = interopCfg != null ? (PlatformDotNetConfiguration)interopCfg : null;
+
+ if (dotNetCfg == null)
+ dotNetCfg = new PlatformDotNetConfiguration();
+
+ memMgr = new PlatformMemoryManagerImpl(gate, 1024);
+
+ PlatformDotNetConfigurationEx dotNetCfg0 = new PlatformDotNetConfigurationEx(dotNetCfg, gate, memMgr);
+
+ igniteCfg.setPlatformConfiguration(dotNetCfg0);
+
+ // Check marshaller
+ Marshaller marsh = igniteCfg.getMarshaller();
+
+ if (marsh == null) {
+ igniteCfg.setMarshaller(new PortableMarshaller());
+
+ dotNetCfg0.warnings(Collections.singleton("Marshaller is automatically set to " +
+ PortableMarshaller.class.getName() + " (other nodes must have the same marshaller type)."));
+ }
+ else if (!(marsh instanceof PortableMarshaller))
+ throw new IgniteException("Unsupported marshaller (only " + PortableMarshaller.class.getName() +
+ " can be used when running Ignite for .Net): " + marsh.getClass().getName());
+
+ // Set Ignite home so that marshaller context works.
+ String ggHome = igniteCfg.getIgniteHome();
+
+ if (ggHome == null)
+ ggHome = U.getIgniteHome();
+ else
+ // If user provided IGNITE_HOME - set it as a system property.
+ U.setIgniteHome(ggHome);
+
+ try {
+ U.setWorkDirectory(igniteCfg.getWorkDirectory(), ggHome);
+ }
+ catch (IgniteCheckedException e) {
+ throw U.convertException(e);
+ }
+
+ // 4. Callback to .Net.
+ prepare(igniteCfg, dotNetCfg0);
+ }
+
+ /**
+ * Prepare .Net size.
+ *
+ * @param igniteCfg Ignite configuration.
+ * @param interopCfg Interop configuration.
+ */
+ @SuppressWarnings("ConstantConditions")
+ private void prepare(IgniteConfiguration igniteCfg, PlatformDotNetConfigurationEx interopCfg) {
+ this.cfg = igniteCfg;
+
+ try (PlatformMemory outMem = memMgr.allocate()) {
+ try (PlatformMemory inMem = memMgr.allocate()) {
+ PlatformOutputStream out = outMem.output();
+
+ PortableRawWriterEx writer = marshaller().writer(out);
+
+ writer.writeObject(interopCfg.unwrap());
+
+ List<PlatformDotNetLifecycleBean> beans = beans(igniteCfg);
+
+ writer.writeInt(beans.size());
+
+ for (PlatformDotNetLifecycleBean bean : beans) {
+ writer.writeString(bean.getAssemblyName());
+ writer.writeString(bean.getClassName());
+ writer.writeMap(bean.getProperties());
+ }
+
+ out.synchronize();
+
+ gate.extensionCallbackInLongLongOutLong(
+ PlatformUtils.OP_PREPARE_DOT_NET, outMem.pointer(), inMem.pointer());
+
+ processPrepareResult(inMem.input());
+ }
+ }
+ }
+
+ /**
+ * Process prepare result.
+ *
+ * @param in Input stream.
+ */
+ private void processPrepareResult(PlatformInputStream in) {
+ assert cfg != null;
+
+ List<PlatformDotNetLifecycleBean> beans = beans(cfg);
+ List<PlatformLifecycleBean> newBeans = new ArrayList<>();
+
+ int len = in.readInt();
+
+ for (int i = 0; i < len; i++) {
+ if (i < beans.size())
+ // Existing bean.
+ beans.get(i).initialize(gate, in.readLong());
+ else
+ // This bean is defined in .Net.
+ newBeans.add(new PlatformLifecycleBean(gate, in.readLong()));
+ }
+
+ if (!newBeans.isEmpty()) {
+ LifecycleBean[] newBeans0 = newBeans.toArray(new LifecycleBean[newBeans.size()]);
+
+ // New beans were added. Let's append them to the tail of the rest configured lifecycle beans.
+ LifecycleBean[] oldBeans = cfg.getLifecycleBeans();
+
+ if (oldBeans == null)
+ cfg.setLifecycleBeans(newBeans0);
+ else {
+ LifecycleBean[] mergedBeans = new LifecycleBean[oldBeans.length + newBeans.size()];
+
+ System.arraycopy(oldBeans, 0, mergedBeans, 0, oldBeans.length);
+ System.arraycopy(newBeans0, 0, mergedBeans, oldBeans.length, newBeans0.length);
+
+ cfg.setLifecycleBeans(mergedBeans);
+ }
+ }
+ }
+
+ /**
+ * Find .Net lifecycle beans in configuration.
+ *
+ * @param cfg Configuration.
+ * @return Beans.
+ */
+ private static List<PlatformDotNetLifecycleBean> beans(IgniteConfiguration cfg) {
+ List<PlatformDotNetLifecycleBean> res = new ArrayList<>();
+
+ if (cfg.getLifecycleBeans() != null) {
+ for (LifecycleBean bean : cfg.getLifecycleBeans()) {
+ if (bean instanceof PlatformDotNetLifecycleBean)
+ res.add((PlatformDotNetLifecycleBean)bean);
+ }
+ }
+
+ return res;
+ }
+
+ /**
+ * Create portable marshaller.
+ *
+ * @return Marshaller.
+ */
+ @SuppressWarnings("deprecation")
+ private static GridPortableMarshaller marshaller() {
+ try {
+ PortableContext ctx = new PortableContext(new PortableMetaDataHandler() {
+ @Override public void addMeta(int typeId, PortableMetadata meta)
+ throws PortableException {
+ // No-op.
+ }
+
+ @Override public PortableMetadata metadata(int typeId) throws PortableException {
+ return null;
+ }
+ }, null);
+
+ PortableMarshaller marsh = new PortableMarshaller();
+
+ marsh.setContext(new MarshallerContextImpl(null));
+
+ ctx.configure(marsh);
+
+ return new GridPortableMarshaller(ctx);
+ }
+ catch (IgniteCheckedException e) {
+ throw U.convertException(e);
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/61aad3c3/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetConfigurationEx.java
----------------------------------------------------------------------
diff --git a/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetConfigurationEx.java b/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetConfigurationEx.java
new file mode 100644
index 0000000..eaf0997
--- /dev/null
+++ b/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetConfigurationEx.java
@@ -0,0 +1,91 @@
+/*
+ * 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.platform.dotnet;
+
+import org.apache.ignite.internal.processors.platform.PlatformConfigurationEx;
+import org.apache.ignite.internal.processors.platform.callback.PlatformCallbackGateway;
+import org.apache.ignite.internal.processors.platform.memory.PlatformMemoryManagerImpl;
+import org.apache.ignite.internal.processors.platform.utils.PlatformUtils;
+import org.apache.ignite.platform.dotnet.PlatformDotNetConfiguration;
+
+import java.util.Collection;
+
+/**
+ * Extended .Net configuration.
+ */
+public class PlatformDotNetConfigurationEx extends PlatformDotNetConfiguration implements PlatformConfigurationEx {
+ /** Native gateway. */
+ private final PlatformCallbackGateway gate;
+
+ /** Memory manager. */
+ private final PlatformMemoryManagerImpl memMgr;
+
+ /** Warnings */
+ private Collection<String> warnings;
+
+ /**
+ * Copy constructor.
+ *
+ * @param cfg Configuration to copy.
+ * @param gate Native gateway.
+ * @param memMgr Memory manager.
+ */
+ public PlatformDotNetConfigurationEx(PlatformDotNetConfiguration cfg, PlatformCallbackGateway gate,
+ PlatformMemoryManagerImpl memMgr) {
+ super(cfg);
+
+ this.gate = gate;
+ this.memMgr = memMgr;
+ }
+
+ /** {@inheritDoc} */
+ @Override public PlatformCallbackGateway gate() {
+ return gate;
+ }
+
+ /** {@inheritDoc} */
+ @Override public PlatformMemoryManagerImpl memory() {
+ return memMgr;
+ }
+
+ /** {@inheritDoc} */
+ @Override public String platform() {
+ return PlatformUtils.PLATFORM_DOTNET;
+ }
+
+ /** {@inheritDoc} */
+ @Override public Collection<String> warnings() {
+ return warnings;
+ }
+
+ /**
+ * @param warnings Warnings.
+ */
+ public void warnings(Collection<String> warnings) {
+ this.warnings = warnings;
+ }
+
+ /**
+ * Unwrap extended configuration.
+ *
+ * @return Original configuration.
+ */
+ public PlatformDotNetConfiguration unwrap() {
+ return new PlatformDotNetConfiguration(this);
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/61aad3c3/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/utils/PlatformUtils.java
----------------------------------------------------------------------
diff --git a/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/utils/PlatformUtils.java b/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/utils/PlatformUtils.java
index 2e1da0b..ee3124d 100644
--- a/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/utils/PlatformUtils.java
+++ b/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/utils/PlatformUtils.java
@@ -48,11 +48,25 @@ import org.apache.ignite.lang.IgnitePredicate;
import org.apache.ignite.lang.IgniteUuid;
import org.jetbrains.annotations.Nullable;
+import static org.apache.ignite.internal.IgniteNodeAttributes.ATTR_PREFIX;
+
/**
* Platform utility methods.
*/
@SuppressWarnings({"UnusedDeclaration", "unchecked"})
public class PlatformUtils {
+ /** Node attribute: platform. */
+ public static final String ATTR_PLATFORM = ATTR_PREFIX + ".platform";
+
+ /** Platform: CPP. */
+ public static final String PLATFORM_CPP = "cpp";
+
+ /** Platform: .Net. */
+ public static final String PLATFORM_DOTNET = "dotnet";
+
+ /** Operation: prepare .Net platform. */
+ public static final int OP_PREPARE_DOT_NET = 1;
+
/** Amount of peek modes available. */
private static final int CACHE_PEEK_MODES_CNT = CachePeekMode.values().length;
[07/18] ignite git commit: Merge remote-tracking branch
'origin/master'
Posted by sb...@apache.org.
Merge remote-tracking branch 'origin/master'
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/414f26ea
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/414f26ea
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/414f26ea
Branch: refs/heads/ignite-1349
Commit: 414f26eaa2a232c72174b9768c0be8d5442f5f09
Parents: ff6c2c8 9fe121c
Author: vozerov-gridgain <vo...@gridgain.com>
Authored: Wed Sep 2 17:27:08 2015 +0300
Committer: vozerov-gridgain <vo...@gridgain.com>
Committed: Wed Sep 2 17:27:08 2015 +0300
----------------------------------------------------------------------
.../ignite/internal/processors/platform/cache/PlatformCache.java | 2 +-
parent/pom.xml | 1 +
2 files changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
[06/18] ignite git commit: IGNITE-1359: Created logic for platform
processor instantiation.
Posted by sb...@apache.org.
IGNITE-1359: Created logic for platform processor instantiation.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/ff6c2c83
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/ff6c2c83
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/ff6c2c83
Branch: refs/heads/ignite-1349
Commit: ff6c2c83f387ade46c712fa253771bcfbb8cd3b2
Parents: 9910b6f
Author: vozerov-gridgain <vo...@gridgain.com>
Authored: Wed Sep 2 17:26:44 2015 +0300
Committer: vozerov-gridgain <vo...@gridgain.com>
Committed: Wed Sep 2 17:26:44 2015 +0300
----------------------------------------------------------------------
.../java/org/apache/ignite/internal/IgniteKernal.java | 14 ++++++++++----
1 file changed, 10 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/ff6c2c83/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
index d9fef86..5ce646e 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
@@ -3101,13 +3101,19 @@ public class IgniteKernal implements IgniteEx, IgniteMXBean, Externalizable {
if (cls.equals(DiscoveryNodeValidationProcessor.class))
return (T)new OsDiscoveryNodeValidationProcessor(ctx);
- if (cls.equals(PlatformProcessor.class))
- return (T)new PlatformNoopProcessor(ctx);
-
Class<T> implCls = null;
try {
- implCls = (Class<T>)Class.forName(componentClassName(cls));
+ String clsName;
+
+ // Handle special case for PlatformProcessor
+ if (cls.equals(PlatformProcessor.class))
+ clsName = ctx.config().getPlatformConfiguration() == null ?
+ PlatformNoopProcessor.class.getName() : cls.getName() + "Impl";
+ else
+ clsName = componentClassName(cls);
+
+ implCls = (Class<T>)Class.forName(clsName);
}
catch (ClassNotFoundException ignore) {
// No-op.
[03/18] ignite git commit: IGNITE-1347: Created real platform
processor.
Posted by sb...@apache.org.
IGNITE-1347: Created real platform processor.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/9910b6f6
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/9910b6f6
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/9910b6f6
Branch: refs/heads/ignite-1349
Commit: 9910b6f6bb3755269c1655a2aad15319a8e7e557
Parents: 61aad3c
Author: vozerov-gridgain <vo...@gridgain.com>
Authored: Wed Sep 2 16:19:27 2015 +0300
Committer: vozerov-gridgain <vo...@gridgain.com>
Committed: Wed Sep 2 16:19:27 2015 +0300
----------------------------------------------------------------------
.../cache/store/CacheOsStoreManager.java | 32 +-
.../cache/store/CacheStoreManager.java | 10 +
.../store/GridCacheStoreManagerAdapter.java | 5 -
.../platform/PlatformNoopProcessor.java | 11 +-
.../processors/platform/PlatformProcessor.java | 10 +
.../cache/store/PlatformCacheStore.java | 25 ++
.../platform/PlatformProcessorImpl.java | 360 +++++++++++++++++++
.../cache/store/PlatformCacheStore.java | 25 --
8 files changed, 444 insertions(+), 34 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/9910b6f6/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/store/CacheOsStoreManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/store/CacheOsStoreManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/store/CacheOsStoreManager.java
index 6f73ad4..f7f5f4e 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/store/CacheOsStoreManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/store/CacheOsStoreManager.java
@@ -17,8 +17,12 @@
package org.apache.ignite.internal.processors.cache.store;
+import org.apache.ignite.IgniteCheckedException;
+import org.apache.ignite.cache.store.CacheStore;
import org.apache.ignite.configuration.CacheConfiguration;
import org.apache.ignite.internal.GridKernalContext;
+import org.apache.ignite.internal.processors.platform.PlatformProcessor;
+import org.apache.ignite.internal.processors.platform.cache.store.PlatformCacheStore;
import org.apache.ignite.marshaller.portable.PortableMarshaller;
/**
@@ -43,6 +47,25 @@ public class CacheOsStoreManager extends GridCacheStoreManagerAdapter {
}
/** {@inheritDoc} */
+ @Override protected void start0() throws IgniteCheckedException {
+ if (configured()) {
+ CacheStore store = configuredStore();
+
+ assert store != null;
+ assert !(store instanceof GridCacheWriteBehindStore);
+
+ if (store instanceof PlatformCacheStore) {
+ PlatformProcessor proc = ctx.platform();
+
+ proc.registerStore((PlatformCacheStore)store, configuredConvertPortable());
+ }
+ }
+
+ super.start0();
+ }
+
+
+ /** {@inheritDoc} */
@Override protected GridKernalContext igniteContext() {
return ctx;
}
@@ -53,7 +76,12 @@ public class CacheOsStoreManager extends GridCacheStoreManagerAdapter {
}
/** {@inheritDoc} */
- @Override protected boolean convertPortable() {
- return !(cfg.isKeepPortableInStore() && ctx.config().getMarshaller() instanceof PortableMarshaller);
+ @Override public boolean convertPortable() {
+ return configuredConvertPortable() && !(cfgStore instanceof PlatformCacheStore);
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean configuredConvertPortable() {
+ return !(ctx.config().getMarshaller() instanceof PortableMarshaller && cfg.isKeepPortableInStore());
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/9910b6f6/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/store/CacheStoreManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/store/CacheStoreManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/store/CacheStoreManager.java
index f5fc473..509c806 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/store/CacheStoreManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/store/CacheStoreManager.java
@@ -186,4 +186,14 @@ public interface CacheStoreManager<K, V> extends GridCacheManager<K, V> {
* @throws IgniteCheckedException If failed.
*/
public void forceFlush() throws IgniteCheckedException;
+
+ /**
+ * @return Convert-portable flag.
+ */
+ public boolean convertPortable();
+
+ /**
+ * @return Configured convert portable flag.
+ */
+ public boolean configuredConvertPortable();
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/9910b6f6/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/store/GridCacheStoreManagerAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/store/GridCacheStoreManagerAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/store/GridCacheStoreManagerAdapter.java
index 420d011..174e1ce 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/store/GridCacheStoreManagerAdapter.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/store/GridCacheStoreManagerAdapter.java
@@ -858,11 +858,6 @@ public abstract class GridCacheStoreManagerAdapter extends GridCacheManagerAdapt
protected abstract CacheConfiguration cacheConfiguration();
/**
- * @return Convert-portable flag.
- */
- protected abstract boolean convertPortable();
-
- /**
*
*/
private static class SessionData {
http://git-wip-us.apache.org/repos/asf/ignite/blob/9910b6f6/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/PlatformNoopProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/PlatformNoopProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/PlatformNoopProcessor.java
index 8cba731..0f108cf 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/PlatformNoopProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/PlatformNoopProcessor.java
@@ -21,6 +21,7 @@ import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCheckedException;
import org.apache.ignite.internal.GridKernalContext;
import org.apache.ignite.internal.processors.GridProcessorAdapter;
+import org.apache.ignite.internal.processors.platform.cache.store.PlatformCacheStore;
import org.jetbrains.annotations.Nullable;
/**
@@ -101,8 +102,8 @@ public class PlatformNoopProcessor extends GridProcessorAdapter implements Platf
return null;
}
- @Override
- public PlatformTarget events(PlatformTarget grp) {
+ /** {@inheritDoc} */
+ @Override public PlatformTarget events(PlatformTarget grp) {
return null;
}
@@ -115,4 +116,10 @@ public class PlatformNoopProcessor extends GridProcessorAdapter implements Platf
@Override public PlatformTarget extensions() {
return null;
}
+
+ /** {@inheritDoc} */
+ @Override public void registerStore(PlatformCacheStore store, boolean convertPortable)
+ throws IgniteCheckedException {
+ // No-op.
+ }
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/9910b6f6/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/PlatformProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/PlatformProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/PlatformProcessor.java
index a53c6b1..e1fa891 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/PlatformProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/PlatformProcessor.java
@@ -20,6 +20,7 @@ package org.apache.ignite.internal.processors.platform;
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCheckedException;
import org.apache.ignite.internal.processors.GridProcessor;
+import org.apache.ignite.internal.processors.platform.cache.store.PlatformCacheStore;
import org.jetbrains.annotations.Nullable;
/**
@@ -159,4 +160,13 @@ public interface PlatformProcessor extends GridProcessor {
* @return Platform extensions.
*/
public PlatformTarget extensions();
+
+ /**
+ * Register cache store.
+ *
+ * @param store Store.
+ * @param convertPortable Convert portable flag.
+ * @throws IgniteCheckedException If failed.
+ */
+ public void registerStore(PlatformCacheStore store, boolean convertPortable) throws IgniteCheckedException;
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/9910b6f6/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/cache/store/PlatformCacheStore.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/cache/store/PlatformCacheStore.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/cache/store/PlatformCacheStore.java
new file mode 100644
index 0000000..3d54979
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/cache/store/PlatformCacheStore.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.internal.processors.platform.cache.store;
+
+/**
+ * Marker interface denoting that this instance is platform cache store.
+ */
+public interface PlatformCacheStore {
+ // No-op.
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/9910b6f6/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/PlatformProcessorImpl.java
----------------------------------------------------------------------
diff --git a/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/PlatformProcessorImpl.java b/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/PlatformProcessorImpl.java
new file mode 100644
index 0000000..e5e7a57
--- /dev/null
+++ b/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/PlatformProcessorImpl.java
@@ -0,0 +1,360 @@
+/*
+ * 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.platform;
+
+import org.apache.ignite.Ignite;
+import org.apache.ignite.IgniteCheckedException;
+import org.apache.ignite.IgniteDataStreamer;
+import org.apache.ignite.IgniteException;
+import org.apache.ignite.IgniteLogger;
+import org.apache.ignite.configuration.PlatformConfiguration;
+import org.apache.ignite.internal.GridKernalContext;
+import org.apache.ignite.internal.IgniteComputeImpl;
+import org.apache.ignite.internal.cluster.ClusterGroupAdapter;
+import org.apache.ignite.internal.portable.PortableRawWriterEx;
+import org.apache.ignite.internal.processors.GridProcessorAdapter;
+import org.apache.ignite.internal.processors.cache.IgniteCacheProxy;
+import org.apache.ignite.internal.processors.datastreamer.DataStreamerImpl;
+import org.apache.ignite.internal.processors.platform.cache.PlatformCache;
+import org.apache.ignite.internal.processors.platform.cache.affinity.PlatformAffinity;
+import org.apache.ignite.internal.processors.platform.cache.store.PlatformCacheStore;
+import org.apache.ignite.internal.processors.platform.cluster.PlatformClusterGroup;
+import org.apache.ignite.internal.processors.platform.compute.PlatformCompute;
+import org.apache.ignite.internal.processors.platform.datastreamer.PlatformDataStreamer;
+import org.apache.ignite.internal.processors.platform.dotnet.PlatformDotNetCacheStore;
+import org.apache.ignite.internal.processors.platform.events.PlatformEvents;
+import org.apache.ignite.internal.processors.platform.memory.PlatformMemory;
+import org.apache.ignite.internal.processors.platform.memory.PlatformOutputStream;
+import org.apache.ignite.internal.processors.platform.messaging.PlatformMessaging;
+import org.apache.ignite.internal.processors.platform.services.PlatformServices;
+import org.apache.ignite.internal.processors.platform.transactions.PlatformTransactions;
+import org.apache.ignite.internal.processors.platform.utils.PlatformUtils;
+import org.apache.ignite.internal.util.typedef.F;
+import org.apache.ignite.internal.util.typedef.internal.U;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.locks.ReadWriteLock;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
+
+/**
+ * GridGain platform processor.
+ */
+public class PlatformProcessorImpl extends GridProcessorAdapter implements PlatformProcessor {
+ /** Start latch. */
+ private final CountDownLatch startLatch = new CountDownLatch(1);
+
+ /** Stores pending initialization. */
+ private final Collection<StoreInfo> pendingStores =
+ Collections.newSetFromMap(new ConcurrentHashMap<StoreInfo, Boolean>());
+
+ /** Started stores. */
+ private final Collection<PlatformCacheStore> stores =
+ Collections.newSetFromMap(new ConcurrentHashMap<PlatformCacheStore, Boolean>());
+
+ /** Lock for store lifecycle operations. */
+ private final ReadWriteLock storeLock = new ReentrantReadWriteLock();
+
+ /** Logger. */
+ private final IgniteLogger log;
+
+ /** Context. */
+ private final PlatformContext platformCtx;
+
+ /** Interop configuration. */
+ private final PlatformConfigurationEx interopCfg;
+
+ /** Whether processor is started. */
+ private boolean started;
+
+ /** Whether processor if stopped (or stopping). */
+ private boolean stopped;
+
+ /**
+ * Constructor.
+ *
+ * @param ctx Kernal context.
+ */
+ public PlatformProcessorImpl(GridKernalContext ctx) {
+ super(ctx);
+
+ log = ctx.log(PlatformProcessorImpl.class);
+
+ PlatformConfiguration interopCfg0 = ctx.config().getPlatformConfiguration();
+
+ assert interopCfg0 != null : "Must be checked earlier during component creation.";
+
+ if (!(interopCfg0 instanceof PlatformConfigurationEx))
+ throw new IgniteException("Unsupported platform configuration: " + interopCfg0.getClass().getName());
+
+ interopCfg = (PlatformConfigurationEx)interopCfg0;
+
+ if (!F.isEmpty(interopCfg.warnings())) {
+ for (String w : interopCfg.warnings())
+ U.warn(log, w);
+ }
+
+ platformCtx = new PlatformContextImpl(ctx, interopCfg.gate(), interopCfg.memory());
+ }
+
+ /** {@inheritDoc} */
+ @Override public void start() throws IgniteCheckedException {
+ try (PlatformMemory mem = platformCtx.memory().allocate()) {
+ PlatformOutputStream out = mem.output();
+
+ PortableRawWriterEx writer = platformCtx.writer(out);
+
+ writer.writeString(ctx.gridName());
+
+ out.synchronize();
+
+ platformCtx.gateway().onStart(mem.pointer());
+ }
+
+ // At this moment all necessary native libraries must be loaded, so we can process with store creation.
+ storeLock.writeLock().lock();
+
+ try {
+ for (StoreInfo store : pendingStores)
+ registerStore0(store.store, store.convertPortable);
+
+ pendingStores.clear();
+
+ started = true;
+ }
+ finally {
+ storeLock.writeLock().unlock();
+ }
+
+ // Add Interop node attributes.
+ ctx.addNodeAttribute(PlatformUtils.ATTR_PLATFORM, interopCfg.platform());
+ }
+
+ /** {@inheritDoc} */
+ @Override public void onKernalStop(boolean cancel) {
+ startLatch.countDown();
+ }
+
+ /** {@inheritDoc} */
+ @Override public void stop(boolean cancel) throws IgniteCheckedException {
+ if (platformCtx != null) {
+ // Destroy cache stores.
+ storeLock.writeLock().lock();
+
+ try {
+ for (PlatformCacheStore store : stores) {
+ if (store != null) {
+ if (store instanceof PlatformDotNetCacheStore) {
+ PlatformDotNetCacheStore store0 = (PlatformDotNetCacheStore)store;
+
+ try {
+ store0.destroy(platformCtx.kernalContext());
+ }
+ catch (Exception e) {
+ U.error(log, "Failed to destroy .Net cache store [store=" + store0 +
+ ", err=" + e.getMessage() + ']');
+ }
+ }
+ else
+ assert false : "Invalid interop cache store type: " + store;
+ }
+ }
+ }
+ finally {
+ stopped = true;
+
+ storeLock.writeLock().unlock();
+ }
+
+ platformCtx.gateway().onStop();
+ }
+ }
+
+ /** {@inheritDoc} */
+ @Override public Ignite ignite() {
+ return ctx.grid();
+ }
+
+ /** {@inheritDoc} */
+ @Override public long environmentPointer() {
+ return platformCtx.gateway().environmentPointer();
+ }
+
+ /** {@inheritDoc} */
+ public void releaseStart() {
+ startLatch.countDown();
+ }
+
+ /** {@inheritDoc} */
+ public void awaitStart() throws IgniteCheckedException {
+ U.await(startLatch);
+ }
+
+ /** {@inheritDoc} */
+ @Override public PlatformContext context() {
+ return platformCtx;
+ }
+
+ /** {@inheritDoc} */
+ @Override public PlatformTarget cache(@Nullable String name) throws IgniteCheckedException {
+ IgniteCacheProxy cache = (IgniteCacheProxy)ctx.grid().cache(name);
+
+ if (cache == null)
+ throw new IllegalArgumentException("Cache doesn't exist: " + name);
+
+ return new PlatformCache(platformCtx, cache.keepPortable(), false);
+ }
+
+ /** {@inheritDoc} */
+ @Override public PlatformTarget createCache(@Nullable String name) throws IgniteCheckedException {
+ IgniteCacheProxy cache = (IgniteCacheProxy)ctx.grid().createCache(name);
+
+ assert cache != null;
+
+ return new PlatformCache(platformCtx, cache.keepPortable(), false);
+ }
+
+ /** {@inheritDoc} */
+ @Override public PlatformTarget getOrCreateCache(@Nullable String name) throws IgniteCheckedException {
+ IgniteCacheProxy cache = (IgniteCacheProxy)ctx.grid().getOrCreateCache(name);
+
+ assert cache != null;
+
+ return new PlatformCache(platformCtx, cache.keepPortable(), false);
+ }
+
+ /** {@inheritDoc} */
+ @Override public PlatformTarget affinity(@Nullable String name) throws IgniteCheckedException {
+ return new PlatformAffinity(platformCtx, ctx, name);
+ }
+
+ /** {@inheritDoc} */
+ @Override public PlatformTarget dataStreamer(@Nullable String cacheName, boolean keepPortable)
+ throws IgniteCheckedException {
+ IgniteDataStreamer ldr = ctx.dataStream().dataStreamer(cacheName);
+
+ return new PlatformDataStreamer(platformCtx, cacheName, (DataStreamerImpl)ldr, keepPortable);
+ }
+
+ /** {@inheritDoc} */
+ @Override public PlatformTarget transactions() {
+ return new PlatformTransactions(platformCtx);
+ }
+
+ /** {@inheritDoc} */
+ @Override public PlatformTarget projection() throws IgniteCheckedException {
+ return new PlatformClusterGroup(platformCtx, ctx.grid().cluster());
+ }
+
+ /** {@inheritDoc} */
+ @Override public PlatformTarget compute(PlatformTarget grp) {
+ PlatformClusterGroup grp0 = (PlatformClusterGroup)grp;
+
+ assert grp0.projection() instanceof ClusterGroupAdapter; // Safety for very complex ClusterGroup hierarchy.
+
+ return new PlatformCompute(platformCtx, (IgniteComputeImpl)((ClusterGroupAdapter)grp0.projection()).compute());
+ }
+
+ /** {@inheritDoc} */
+ @Override public PlatformTarget message(PlatformTarget grp) {
+ PlatformClusterGroup grp0 = (PlatformClusterGroup)grp;
+
+ return new PlatformMessaging(platformCtx, grp0.projection().ignite().message(grp0.projection()));
+ }
+
+ /** {@inheritDoc} */
+ @Override public PlatformTarget events(PlatformTarget grp) {
+ PlatformClusterGroup grp0 = (PlatformClusterGroup)grp;
+
+ return new PlatformEvents(platformCtx, grp0.projection().ignite().events(grp0.projection()));
+ }
+
+ /** {@inheritDoc} */
+ @Override public PlatformTarget services(PlatformTarget grp) {
+ PlatformClusterGroup grp0 = (PlatformClusterGroup)grp;
+
+ return new PlatformServices(platformCtx, grp0.projection().ignite().services(grp0.projection()), false);
+ }
+
+ /** {@inheritDoc} */
+ @Override public PlatformTarget extensions() {
+ return null;
+ }
+
+ /** {@inheritDoc} */
+ @Override public void registerStore(PlatformCacheStore store, boolean convertPortable)
+ throws IgniteCheckedException {
+ storeLock.readLock().lock();
+
+ try {
+ if (stopped)
+ throw new IgniteCheckedException("Failed to initialize interop store becuase node is stopping: " +
+ store);
+
+ if (started)
+ registerStore0(store, convertPortable);
+ else
+ pendingStores.add(new StoreInfo(store, convertPortable));
+ }
+ finally {
+ storeLock.readLock().unlock();
+ }
+ }
+
+ /**
+ * Internal store initialization routine.
+ *
+ * @param store Store.
+ * @param convertPortable Convert portable flag.
+ * @throws IgniteCheckedException If failed.
+ */
+ private void registerStore0(PlatformCacheStore store, boolean convertPortable) throws IgniteCheckedException {
+ if (store instanceof PlatformDotNetCacheStore) {
+ PlatformDotNetCacheStore store0 = (PlatformDotNetCacheStore)store;
+
+ store0.initialize(ctx, convertPortable);
+ }
+ else
+ throw new IgniteCheckedException("Unsupported interop store: " + store);
+ }
+
+ /**
+ * Store and manager pair.
+ */
+ private static class StoreInfo {
+ /** Store. */
+ private final PlatformCacheStore store;
+
+ /** Convert portable flag. */
+ private final boolean convertPortable;
+
+ /**
+ * Constructor.
+ *
+ * @param store Store.
+ * @param convertPortable Convert portable flag.
+ */
+ private StoreInfo(PlatformCacheStore store, boolean convertPortable) {
+ this.store = store;
+ this.convertPortable = convertPortable;
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/9910b6f6/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/cache/store/PlatformCacheStore.java
----------------------------------------------------------------------
diff --git a/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/cache/store/PlatformCacheStore.java b/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/cache/store/PlatformCacheStore.java
deleted file mode 100644
index 3d54979..0000000
--- a/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/cache/store/PlatformCacheStore.java
+++ /dev/null
@@ -1,25 +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.platform.cache.store;
-
-/**
- * Marker interface denoting that this instance is platform cache store.
- */
-public interface PlatformCacheStore {
- // No-op.
-}
\ No newline at end of file
[18/18] ignite git commit: Merge remote-tracking branch
'remotes/origin/ignite-1.4' into ignite-1349
Posted by sb...@apache.org.
Merge remote-tracking branch 'remotes/origin/ignite-1.4' into ignite-1349
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/e7cea68e
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/e7cea68e
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/e7cea68e
Branch: refs/heads/ignite-1349
Commit: e7cea68ec08397a1f7378c5a49ba2826d92c7d4b
Parents: 6320fde 27cd615
Author: sboikov <sb...@gridgain.com>
Authored: Thu Sep 3 13:09:44 2015 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Thu Sep 3 13:09:44 2015 +0300
----------------------------------------------------------------------
.../configuration/PlatformConfiguration.java | 2 +-
.../apache/ignite/internal/IgniteKernal.java | 111 +++--
.../dht/GridPartitionedGetFuture.java | 19 +-
.../distributed/near/GridNearGetFuture.java | 22 +-
.../cache/store/CacheOsStoreManager.java | 32 +-
.../cache/store/CacheStoreManager.java | 10 +
.../store/GridCacheStoreManagerAdapter.java | 5 -
.../platform/PlatformNoopProcessor.java | 11 +-
.../processors/platform/PlatformProcessor.java | 10 +
.../cache/store/PlatformCacheStore.java | 25 +
.../ignite/internal/util/lang/GridFunc.java | 1 +
...processors.platform.PlatformBootstrapFactory | 2 +
.../PlatformAbstractConfigurationClosure.java | 61 +++
.../platform/PlatformConfigurationEx.java | 48 ++
.../platform/PlatformProcessorImpl.java | 360 ++++++++++++++
.../cache/store/PlatformCacheStore.java | 25 -
.../platform/cpp/PlatformCppBootstrap.java | 31 ++
.../cpp/PlatformCppBootstrapFactory.java | 39 ++
.../cpp/PlatformCppConfigurationClosure.java | 99 ++++
.../cpp/PlatformCppConfigurationEx.java | 82 +++
.../dotnet/PlatformDotNetBootstrap.java | 31 ++
.../dotnet/PlatformDotNetBootstrapFactory.java | 39 ++
.../dotnet/PlatformDotNetCacheStore.java | 497 +++++++++++++++++++
.../PlatformDotNetConfigurationClosure.java | 255 ++++++++++
.../dotnet/PlatformDotNetConfigurationEx.java | 91 ++++
.../platform/utils/PlatformUtils.java | 14 +
.../platform/cpp/PlatformCppConfiguration.java | 47 ++
.../dotnet/PlatformDotNetCacheStoreFactory.java | 139 ++++++
.../dotnet/PlatformDotNetConfiguration.java | 119 +++++
.../dotnet/PlatformDotNetLifecycleBean.java | 109 ++++
.../PlatformDotNetPortableConfiguration.java | 228 +++++++++
...PlatformDotNetPortableTypeConfiguration.java | 248 +++++++++
parent/pom.xml | 1 +
33 files changed, 2743 insertions(+), 70 deletions(-)
----------------------------------------------------------------------
[08/18] ignite git commit: IGNITE-1083
Posted by sb...@apache.org.
IGNITE-1083
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/0214ea90
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/0214ea90
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/0214ea90
Branch: refs/heads/ignite-1349
Commit: 0214ea903ae09eeacce4e348252aba8a17af752b
Parents: 414f26ea
Author: Anton Vinogradov <av...@apache.org>
Authored: Wed Sep 2 19:51:41 2015 +0300
Committer: Anton Vinogradov <av...@apache.org>
Committed: Wed Sep 2 19:51:41 2015 +0300
----------------------------------------------------------------------
modules/aop/pom.xml | 1 +
modules/apache-license-gen/pom.xml | 1 +
modules/aws/pom.xml | 1 +
modules/clients/pom.xml | 1 +
modules/cloud/pom.xml | 1 +
modules/codegen/pom.xml | 1 +
modules/core/pom.xml | 1 +
modules/gce/pom.xml | 1 +
modules/geospatial/pom.xml | 1 +
modules/hadoop/pom.xml | 1 +
modules/hibernate/pom.xml | 1 +
modules/indexing/pom.xml | 1 +
modules/jcl/pom.xml | 1 +
modules/jms11/pom.xml | 1 +
modules/jta/pom.xml | 1 +
modules/kafka/pom.xml | 1 +
modules/log4j/pom.xml | 1 +
modules/log4j2/pom.xml | 1 +
modules/mesos/pom.xml | 1 +
modules/platform/pom.xml | 1 +
modules/rest-http/pom.xml | 1 +
modules/scalar-2.10/pom.xml | 1 +
modules/scalar/pom.xml | 1 +
modules/schedule/pom.xml | 1 +
modules/schema-import/pom.xml | 1 +
modules/slf4j/pom.xml | 1 +
modules/spark-2.10/pom.xml | 1 +
modules/spark/pom.xml | 1 +
modules/spring/pom.xml | 1 +
modules/ssh/pom.xml | 1 +
modules/tools/pom.xml | 1 +
modules/urideploy/pom.xml | 1 +
modules/visor-console-2.10/pom.xml | 1 +
modules/visor-console/pom.xml | 1 +
modules/visor-plugins/pom.xml | 1 +
modules/web/pom.xml | 1 +
modules/yardstick/pom.xml | 1 +
modules/yarn/pom.xml | 1 +
modules/zookeeper/pom.xml | 1 +
39 files changed, 39 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/0214ea90/modules/aop/pom.xml
----------------------------------------------------------------------
diff --git a/modules/aop/pom.xml b/modules/aop/pom.xml
index ce5cd10..a080b57 100644
--- a/modules/aop/pom.xml
+++ b/modules/aop/pom.xml
@@ -32,6 +32,7 @@
<artifactId>ignite-aop</artifactId>
<version>1.4.1-SNAPSHOT</version>
+ <url>http://ignite.apache.org</url>
<dependencies>
<dependency>
http://git-wip-us.apache.org/repos/asf/ignite/blob/0214ea90/modules/apache-license-gen/pom.xml
----------------------------------------------------------------------
diff --git a/modules/apache-license-gen/pom.xml b/modules/apache-license-gen/pom.xml
index 4054004..2d15ad4 100644
--- a/modules/apache-license-gen/pom.xml
+++ b/modules/apache-license-gen/pom.xml
@@ -33,6 +33,7 @@
<groupId>org.apache.ignite</groupId>
<artifactId>ignite-apache-license-gen</artifactId>
<version>1.4.1-SNAPSHOT</version>
+ <url>http://ignite.apache.org</url>
<build>
<plugins>
http://git-wip-us.apache.org/repos/asf/ignite/blob/0214ea90/modules/aws/pom.xml
----------------------------------------------------------------------
diff --git a/modules/aws/pom.xml b/modules/aws/pom.xml
index 8c660ab..63d454d 100644
--- a/modules/aws/pom.xml
+++ b/modules/aws/pom.xml
@@ -32,6 +32,7 @@
<artifactId>ignite-aws</artifactId>
<version>1.4.1-SNAPSHOT</version>
+ <url>http://ignite.apache.org</url>
<dependencies>
<dependency>
http://git-wip-us.apache.org/repos/asf/ignite/blob/0214ea90/modules/clients/pom.xml
----------------------------------------------------------------------
diff --git a/modules/clients/pom.xml b/modules/clients/pom.xml
index 0374bdf..303a274 100644
--- a/modules/clients/pom.xml
+++ b/modules/clients/pom.xml
@@ -32,6 +32,7 @@
<artifactId>ignite-clients</artifactId>
<version>1.4.1-SNAPSHOT</version>
+ <url>http://ignite.apache.org</url>
<dependencies>
<dependency>
http://git-wip-us.apache.org/repos/asf/ignite/blob/0214ea90/modules/cloud/pom.xml
----------------------------------------------------------------------
diff --git a/modules/cloud/pom.xml b/modules/cloud/pom.xml
index 47aedd5..e735804 100644
--- a/modules/cloud/pom.xml
+++ b/modules/cloud/pom.xml
@@ -30,6 +30,7 @@
<artifactId>ignite-cloud</artifactId>
<version>1.4.1-SNAPSHOT</version>
+ <url>http://ignite.apache.org</url>
<properties>
<jcloud.version>1.9.0</jcloud.version>
http://git-wip-us.apache.org/repos/asf/ignite/blob/0214ea90/modules/codegen/pom.xml
----------------------------------------------------------------------
diff --git a/modules/codegen/pom.xml b/modules/codegen/pom.xml
index 261e588..a39da2f 100644
--- a/modules/codegen/pom.xml
+++ b/modules/codegen/pom.xml
@@ -32,6 +32,7 @@
<artifactId>ignite-codegen</artifactId>
<version>1.4.1-SNAPSHOT</version>
+ <url>http://ignite.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
http://git-wip-us.apache.org/repos/asf/ignite/blob/0214ea90/modules/core/pom.xml
----------------------------------------------------------------------
diff --git a/modules/core/pom.xml b/modules/core/pom.xml
index 698606e..57abba0 100644
--- a/modules/core/pom.xml
+++ b/modules/core/pom.xml
@@ -32,6 +32,7 @@
<artifactId>ignite-core</artifactId>
<version>1.4.1-SNAPSHOT</version>
+ <url>http://ignite.apache.org</url>
<repositories>
<repository>
http://git-wip-us.apache.org/repos/asf/ignite/blob/0214ea90/modules/gce/pom.xml
----------------------------------------------------------------------
diff --git a/modules/gce/pom.xml b/modules/gce/pom.xml
index 0e545bf..b3fbb32 100644
--- a/modules/gce/pom.xml
+++ b/modules/gce/pom.xml
@@ -32,6 +32,7 @@
<artifactId>ignite-gce</artifactId>
<version>1.4.1-SNAPSHOT</version>
+ <url>http://ignite.apache.org</url>
<dependencies>
<dependency>
http://git-wip-us.apache.org/repos/asf/ignite/blob/0214ea90/modules/geospatial/pom.xml
----------------------------------------------------------------------
diff --git a/modules/geospatial/pom.xml b/modules/geospatial/pom.xml
index ba29dcf..1330cf5 100644
--- a/modules/geospatial/pom.xml
+++ b/modules/geospatial/pom.xml
@@ -32,6 +32,7 @@
<artifactId>ignite-geospatial</artifactId>
<version>1.4.1-SNAPSHOT</version>
+ <url>http://ignite.apache.org</url>
<dependencies>
<dependency>
http://git-wip-us.apache.org/repos/asf/ignite/blob/0214ea90/modules/hadoop/pom.xml
----------------------------------------------------------------------
diff --git a/modules/hadoop/pom.xml b/modules/hadoop/pom.xml
index d7f5ac8..9fdfd99 100644
--- a/modules/hadoop/pom.xml
+++ b/modules/hadoop/pom.xml
@@ -32,6 +32,7 @@
<artifactId>ignite-hadoop</artifactId>
<version>1.4.1-SNAPSHOT</version>
+ <url>http://ignite.apache.org</url>
<dependencies>
<dependency>
http://git-wip-us.apache.org/repos/asf/ignite/blob/0214ea90/modules/hibernate/pom.xml
----------------------------------------------------------------------
diff --git a/modules/hibernate/pom.xml b/modules/hibernate/pom.xml
index f8f915b..2d6d893 100644
--- a/modules/hibernate/pom.xml
+++ b/modules/hibernate/pom.xml
@@ -32,6 +32,7 @@
<artifactId>ignite-hibernate</artifactId>
<version>1.4.1-SNAPSHOT</version>
+ <url>http://ignite.apache.org</url>
<dependencies>
<dependency>
http://git-wip-us.apache.org/repos/asf/ignite/blob/0214ea90/modules/indexing/pom.xml
----------------------------------------------------------------------
diff --git a/modules/indexing/pom.xml b/modules/indexing/pom.xml
index ddbd1e3..4bcadc8 100644
--- a/modules/indexing/pom.xml
+++ b/modules/indexing/pom.xml
@@ -32,6 +32,7 @@
<artifactId>ignite-indexing</artifactId>
<version>1.4.1-SNAPSHOT</version>
+ <url>http://ignite.apache.org</url>
<dependencies>
<dependency>
http://git-wip-us.apache.org/repos/asf/ignite/blob/0214ea90/modules/jcl/pom.xml
----------------------------------------------------------------------
diff --git a/modules/jcl/pom.xml b/modules/jcl/pom.xml
index 0c405ee..0b2c48b 100644
--- a/modules/jcl/pom.xml
+++ b/modules/jcl/pom.xml
@@ -32,6 +32,7 @@
<artifactId>ignite-jcl</artifactId>
<version>1.4.1-SNAPSHOT</version>
+ <url>http://ignite.apache.org</url>
<dependencies>
<dependency>
http://git-wip-us.apache.org/repos/asf/ignite/blob/0214ea90/modules/jms11/pom.xml
----------------------------------------------------------------------
diff --git a/modules/jms11/pom.xml b/modules/jms11/pom.xml
index c93ea9a..ff80007 100644
--- a/modules/jms11/pom.xml
+++ b/modules/jms11/pom.xml
@@ -33,6 +33,7 @@
<artifactId>ignite-jms11</artifactId>
<version>1.4.1-SNAPSHOT</version>
+ <url>http://ignite.apache.org</url>
<properties>
<activemq.version>5.11.1</activemq.version>
http://git-wip-us.apache.org/repos/asf/ignite/blob/0214ea90/modules/jta/pom.xml
----------------------------------------------------------------------
diff --git a/modules/jta/pom.xml b/modules/jta/pom.xml
index 2df9bda..7965dd9 100644
--- a/modules/jta/pom.xml
+++ b/modules/jta/pom.xml
@@ -32,6 +32,7 @@
<artifactId>ignite-jta</artifactId>
<version>1.4.1-SNAPSHOT</version>
+ <url>http://ignite.apache.org</url>
<dependencies>
<dependency>
http://git-wip-us.apache.org/repos/asf/ignite/blob/0214ea90/modules/kafka/pom.xml
----------------------------------------------------------------------
diff --git a/modules/kafka/pom.xml b/modules/kafka/pom.xml
index 9b9d95c..ed192ab 100644
--- a/modules/kafka/pom.xml
+++ b/modules/kafka/pom.xml
@@ -32,6 +32,7 @@
<artifactId>ignite-kafka</artifactId>
<version>1.4.1-SNAPSHOT</version>
+ <url>http://ignite.apache.org</url>
<dependencies>
<dependency>
http://git-wip-us.apache.org/repos/asf/ignite/blob/0214ea90/modules/log4j/pom.xml
----------------------------------------------------------------------
diff --git a/modules/log4j/pom.xml b/modules/log4j/pom.xml
index fbba149..c3c4a84 100644
--- a/modules/log4j/pom.xml
+++ b/modules/log4j/pom.xml
@@ -32,6 +32,7 @@
<artifactId>ignite-log4j</artifactId>
<version>1.4.1-SNAPSHOT</version>
+ <url>http://ignite.apache.org</url>
<dependencies>
<dependency>
http://git-wip-us.apache.org/repos/asf/ignite/blob/0214ea90/modules/log4j2/pom.xml
----------------------------------------------------------------------
diff --git a/modules/log4j2/pom.xml b/modules/log4j2/pom.xml
index 58dc05e..0628b47 100644
--- a/modules/log4j2/pom.xml
+++ b/modules/log4j2/pom.xml
@@ -32,6 +32,7 @@
<artifactId>ignite-log4j2</artifactId>
<version>1.4.1-SNAPSHOT</version>
+ <url>http://ignite.apache.org</url>
<dependencies>
<dependency>
http://git-wip-us.apache.org/repos/asf/ignite/blob/0214ea90/modules/mesos/pom.xml
----------------------------------------------------------------------
diff --git a/modules/mesos/pom.xml b/modules/mesos/pom.xml
index 525137f..07bd13d 100644
--- a/modules/mesos/pom.xml
+++ b/modules/mesos/pom.xml
@@ -32,6 +32,7 @@
<artifactId>ignite-mesos</artifactId>
<version>1.4.1-SNAPSHOT</version>
+ <url>http://ignite.apache.org</url>
<properties>
<mesos.version>0.22.0</mesos.version>
http://git-wip-us.apache.org/repos/asf/ignite/blob/0214ea90/modules/platform/pom.xml
----------------------------------------------------------------------
diff --git a/modules/platform/pom.xml b/modules/platform/pom.xml
index e583f6a..4bff370 100644
--- a/modules/platform/pom.xml
+++ b/modules/platform/pom.xml
@@ -32,6 +32,7 @@
<artifactId>ignite-platform</artifactId>
<version>1.4.1-SNAPSHOT</version>
+ <url>http://ignite.apache.org</url>
<dependencies>
<dependency>
http://git-wip-us.apache.org/repos/asf/ignite/blob/0214ea90/modules/rest-http/pom.xml
----------------------------------------------------------------------
diff --git a/modules/rest-http/pom.xml b/modules/rest-http/pom.xml
index 4ce41ae..8156887 100644
--- a/modules/rest-http/pom.xml
+++ b/modules/rest-http/pom.xml
@@ -32,6 +32,7 @@
<artifactId>ignite-rest-http</artifactId>
<version>1.4.1-SNAPSHOT</version>
+ <url>http://ignite.apache.org</url>
<dependencies>
<dependency>
http://git-wip-us.apache.org/repos/asf/ignite/blob/0214ea90/modules/scalar-2.10/pom.xml
----------------------------------------------------------------------
diff --git a/modules/scalar-2.10/pom.xml b/modules/scalar-2.10/pom.xml
index e21ba47..42fb9b9 100644
--- a/modules/scalar-2.10/pom.xml
+++ b/modules/scalar-2.10/pom.xml
@@ -32,6 +32,7 @@
<artifactId>ignite-scalar_2.10</artifactId>
<version>1.4.1-SNAPSHOT</version>
+ <url>http://ignite.apache.org</url>
<dependencies>
<dependency>
http://git-wip-us.apache.org/repos/asf/ignite/blob/0214ea90/modules/scalar/pom.xml
----------------------------------------------------------------------
diff --git a/modules/scalar/pom.xml b/modules/scalar/pom.xml
index 81f4427..982fcaf 100644
--- a/modules/scalar/pom.xml
+++ b/modules/scalar/pom.xml
@@ -32,6 +32,7 @@
<artifactId>ignite-scalar</artifactId>
<version>1.4.1-SNAPSHOT</version>
+ <url>http://ignite.apache.org</url>
<dependencies>
<dependency>
http://git-wip-us.apache.org/repos/asf/ignite/blob/0214ea90/modules/schedule/pom.xml
----------------------------------------------------------------------
diff --git a/modules/schedule/pom.xml b/modules/schedule/pom.xml
index b3e1c18..e64059a 100644
--- a/modules/schedule/pom.xml
+++ b/modules/schedule/pom.xml
@@ -32,6 +32,7 @@
<artifactId>ignite-schedule</artifactId>
<version>1.4.1-SNAPSHOT</version>
+ <url>http://ignite.apache.org</url>
<dependencies>
<dependency>
http://git-wip-us.apache.org/repos/asf/ignite/blob/0214ea90/modules/schema-import/pom.xml
----------------------------------------------------------------------
diff --git a/modules/schema-import/pom.xml b/modules/schema-import/pom.xml
index 7364e1e..0ba8597 100644
--- a/modules/schema-import/pom.xml
+++ b/modules/schema-import/pom.xml
@@ -32,6 +32,7 @@
<artifactId>ignite-schema-import</artifactId>
<version>1.4.1-SNAPSHOT</version>
+ <url>http://ignite.apache.org</url>
<dependencies>
<dependency>
http://git-wip-us.apache.org/repos/asf/ignite/blob/0214ea90/modules/slf4j/pom.xml
----------------------------------------------------------------------
diff --git a/modules/slf4j/pom.xml b/modules/slf4j/pom.xml
index cf98419..5cdf791 100644
--- a/modules/slf4j/pom.xml
+++ b/modules/slf4j/pom.xml
@@ -32,6 +32,7 @@
<artifactId>ignite-slf4j</artifactId>
<version>1.4.1-SNAPSHOT</version>
+ <url>http://ignite.apache.org</url>
<dependencies>
<dependency>
http://git-wip-us.apache.org/repos/asf/ignite/blob/0214ea90/modules/spark-2.10/pom.xml
----------------------------------------------------------------------
diff --git a/modules/spark-2.10/pom.xml b/modules/spark-2.10/pom.xml
index 848d550..6c44006 100644
--- a/modules/spark-2.10/pom.xml
+++ b/modules/spark-2.10/pom.xml
@@ -32,6 +32,7 @@
<artifactId>ignite-spark_2.10</artifactId>
<version>1.4.1-SNAPSHOT</version>
+ <url>http://ignite.apache.org</url>
<dependencies>
<dependency>
http://git-wip-us.apache.org/repos/asf/ignite/blob/0214ea90/modules/spark/pom.xml
----------------------------------------------------------------------
diff --git a/modules/spark/pom.xml b/modules/spark/pom.xml
index 3783a40..1fb2753 100644
--- a/modules/spark/pom.xml
+++ b/modules/spark/pom.xml
@@ -32,6 +32,7 @@
<artifactId>ignite-spark</artifactId>
<version>1.4.1-SNAPSHOT</version>
+ <url>http://ignite.apache.org</url>
<dependencies>
<dependency>
http://git-wip-us.apache.org/repos/asf/ignite/blob/0214ea90/modules/spring/pom.xml
----------------------------------------------------------------------
diff --git a/modules/spring/pom.xml b/modules/spring/pom.xml
index f5563f5..4ed1fd7 100644
--- a/modules/spring/pom.xml
+++ b/modules/spring/pom.xml
@@ -32,6 +32,7 @@
<artifactId>ignite-spring</artifactId>
<version>1.4.1-SNAPSHOT</version>
+ <url>http://ignite.apache.org</url>
<dependencies>
<dependency>
http://git-wip-us.apache.org/repos/asf/ignite/blob/0214ea90/modules/ssh/pom.xml
----------------------------------------------------------------------
diff --git a/modules/ssh/pom.xml b/modules/ssh/pom.xml
index 2d77c80..7922f53 100644
--- a/modules/ssh/pom.xml
+++ b/modules/ssh/pom.xml
@@ -32,6 +32,7 @@
<artifactId>ignite-ssh</artifactId>
<version>1.4.1-SNAPSHOT</version>
+ <url>http://ignite.apache.org</url>
<dependencies>
<dependency>
http://git-wip-us.apache.org/repos/asf/ignite/blob/0214ea90/modules/tools/pom.xml
----------------------------------------------------------------------
diff --git a/modules/tools/pom.xml b/modules/tools/pom.xml
index 30b1a3e..5e3465e 100644
--- a/modules/tools/pom.xml
+++ b/modules/tools/pom.xml
@@ -32,6 +32,7 @@
<artifactId>ignite-tools</artifactId>
<version>1.4.1-SNAPSHOT</version>
+ <url>http://ignite.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
http://git-wip-us.apache.org/repos/asf/ignite/blob/0214ea90/modules/urideploy/pom.xml
----------------------------------------------------------------------
diff --git a/modules/urideploy/pom.xml b/modules/urideploy/pom.xml
index 94dc956..7dd0431 100644
--- a/modules/urideploy/pom.xml
+++ b/modules/urideploy/pom.xml
@@ -32,6 +32,7 @@
<artifactId>ignite-urideploy</artifactId>
<version>1.4.1-SNAPSHOT</version>
+ <url>http://ignite.apache.org</url>
<dependencies>
<dependency>
http://git-wip-us.apache.org/repos/asf/ignite/blob/0214ea90/modules/visor-console-2.10/pom.xml
----------------------------------------------------------------------
diff --git a/modules/visor-console-2.10/pom.xml b/modules/visor-console-2.10/pom.xml
index 167708b..a0edeaf 100644
--- a/modules/visor-console-2.10/pom.xml
+++ b/modules/visor-console-2.10/pom.xml
@@ -32,6 +32,7 @@
<artifactId>ignite-visor-console_2.10</artifactId>
<version>1.4.1-SNAPSHOT</version>
+ <url>http://ignite.apache.org</url>
<dependencies>
<dependency>
http://git-wip-us.apache.org/repos/asf/ignite/blob/0214ea90/modules/visor-console/pom.xml
----------------------------------------------------------------------
diff --git a/modules/visor-console/pom.xml b/modules/visor-console/pom.xml
index 9cadedb..d6f373a 100644
--- a/modules/visor-console/pom.xml
+++ b/modules/visor-console/pom.xml
@@ -32,6 +32,7 @@
<artifactId>ignite-visor-console</artifactId>
<version>1.4.1-SNAPSHOT</version>
+ <url>http://ignite.apache.org</url>
<dependencies>
<dependency>
http://git-wip-us.apache.org/repos/asf/ignite/blob/0214ea90/modules/visor-plugins/pom.xml
----------------------------------------------------------------------
diff --git a/modules/visor-plugins/pom.xml b/modules/visor-plugins/pom.xml
index ae038cd..04142fa 100644
--- a/modules/visor-plugins/pom.xml
+++ b/modules/visor-plugins/pom.xml
@@ -32,6 +32,7 @@
<artifactId>ignite-visor-plugins</artifactId>
<version>1.4.1-SNAPSHOT</version>
+ <url>http://ignite.apache.org</url>
<dependencies>
<!-- Ignite dependencies -->
http://git-wip-us.apache.org/repos/asf/ignite/blob/0214ea90/modules/web/pom.xml
----------------------------------------------------------------------
diff --git a/modules/web/pom.xml b/modules/web/pom.xml
index a682210..4432d81 100644
--- a/modules/web/pom.xml
+++ b/modules/web/pom.xml
@@ -32,6 +32,7 @@
<artifactId>ignite-web</artifactId>
<version>1.4.1-SNAPSHOT</version>
+ <url>http://ignite.apache.org</url>
<dependencies>
<dependency>
http://git-wip-us.apache.org/repos/asf/ignite/blob/0214ea90/modules/yardstick/pom.xml
----------------------------------------------------------------------
diff --git a/modules/yardstick/pom.xml b/modules/yardstick/pom.xml
index dc4a033..3f3774a 100644
--- a/modules/yardstick/pom.xml
+++ b/modules/yardstick/pom.xml
@@ -32,6 +32,7 @@
<artifactId>ignite-yardstick</artifactId>
<version>1.4.1-SNAPSHOT</version>
+ <url>http://ignite.apache.org</url>
<properties>
<yardstick.version>0.7.0</yardstick.version>
http://git-wip-us.apache.org/repos/asf/ignite/blob/0214ea90/modules/yarn/pom.xml
----------------------------------------------------------------------
diff --git a/modules/yarn/pom.xml b/modules/yarn/pom.xml
index ad17f6b..079a173 100644
--- a/modules/yarn/pom.xml
+++ b/modules/yarn/pom.xml
@@ -32,6 +32,7 @@
<artifactId>ignite-yarn</artifactId>
<version>1.4.1-SNAPSHOT</version>
+ <url>http://ignite.apache.org</url>
<properties>
<hadoop.version>2.7.0</hadoop.version>
http://git-wip-us.apache.org/repos/asf/ignite/blob/0214ea90/modules/zookeeper/pom.xml
----------------------------------------------------------------------
diff --git a/modules/zookeeper/pom.xml b/modules/zookeeper/pom.xml
index bf0c578..ba10101 100644
--- a/modules/zookeeper/pom.xml
+++ b/modules/zookeeper/pom.xml
@@ -32,6 +32,7 @@
<artifactId>ignite-zookeeper</artifactId>
<version>1.4.1-SNAPSHOT</version>
+ <url>http://ignite.apache.org</url>
<properties>
<curator.version>2.8.0</curator.version>
[15/18] ignite git commit: More debug info for 'get' futures.
Posted by sb...@apache.org.
More debug info for 'get' futures.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/3de5f98c
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/3de5f98c
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/3de5f98c
Branch: refs/heads/ignite-1349
Commit: 3de5f98cf91f17a2848b0ffae8326011e88e7e7e
Parents: 3a280a0
Author: sboikov <sb...@gridgain.com>
Authored: Thu Sep 3 11:39:33 2015 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Thu Sep 3 11:39:33 2015 +0300
----------------------------------------------------------------------
.../dht/GridPartitionedGetFuture.java | 19 +++++++++++++++--
.../distributed/near/GridNearGetFuture.java | 22 +++++++++++++++++++-
.../ignite/internal/util/lang/GridFunc.java | 1 +
3 files changed, 39 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/3de5f98c/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridPartitionedGetFuture.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridPartitionedGetFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridPartitionedGetFuture.java
index 82ff69f..2f0de86 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridPartitionedGetFuture.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridPartitionedGetFuture.java
@@ -290,7 +290,7 @@ public class GridPartitionedGetFuture<K, V> extends GridCompoundIdentityFuture<M
* @param f Future.
* @return {@code True} if mini-future.
*/
- private boolean isMini(IgniteInternalFuture<Map<K, V>> f) {
+ private boolean isMini(IgniteInternalFuture<?> f) {
return f.getClass().equals(MiniFuture.class);
}
@@ -598,7 +598,22 @@ public class GridPartitionedGetFuture<K, V> extends GridCompoundIdentityFuture<M
/** {@inheritDoc} */
@Override public String toString() {
- return S.toString(GridPartitionedGetFuture.class, this, super.toString());
+ Collection<String> futs = F.viewReadOnly(futures(), new C1<IgniteInternalFuture<?>, String>() {
+ @SuppressWarnings("unchecked")
+ @Override public String apply(IgniteInternalFuture<?> f) {
+ if (isMini(f)) {
+ return "[node=" + ((MiniFuture)f).node().id() +
+ ", loc=" + ((MiniFuture)f).node().isLocal() +
+ ", done=" + f.isDone() + "]";
+ }
+ else
+ return "[loc=true, done=" + f.isDone() + "]";
+ }
+ });
+
+ return S.toString(GridPartitionedGetFuture.class, this,
+ "innerFuts", futs,
+ "super", super.toString());
}
/**
http://git-wip-us.apache.org/repos/asf/ignite/blob/3de5f98c/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearGetFuture.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearGetFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearGetFuture.java
index 4de8294..9d2113e 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearGetFuture.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearGetFuture.java
@@ -291,7 +291,7 @@ public final class GridNearGetFuture<K, V> extends GridCompoundIdentityFuture<Ma
* @param f Future.
* @return {@code True} if mini-future.
*/
- private boolean isMini(IgniteInternalFuture<Map<K, V>> f) {
+ private boolean isMini(IgniteInternalFuture<?> f) {
return f.getClass().equals(MiniFuture.class);
}
@@ -721,6 +721,26 @@ public final class GridNearGetFuture<K, V> extends GridCompoundIdentityFuture<Ma
return map;
}
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ Collection<String> futs = F.viewReadOnly(futures(), new C1<IgniteInternalFuture<?>, String>() {
+ @SuppressWarnings("unchecked")
+ @Override public String apply(IgniteInternalFuture<?> f) {
+ if (isMini(f)) {
+ return "[node=" + ((MiniFuture)f).node().id() +
+ ", loc=" + ((MiniFuture)f).node().isLocal() +
+ ", done=" + f.isDone() + "]";
+ }
+ else
+ return "[loc=true, done=" + f.isDone() + "]";
+ }
+ });
+
+ return S.toString(GridNearGetFuture.class, this,
+ "innerFuts", futs,
+ "super", super.toString());
+ }
+
/**
* Mini-future for get operations. Mini-futures are only waiting on a single
* node as opposed to multiple nodes.
http://git-wip-us.apache.org/repos/asf/ignite/blob/3de5f98c/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridFunc.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridFunc.java b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridFunc.java
index a9e6cd0..ffeeca0 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridFunc.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridFunc.java
@@ -1658,6 +1658,7 @@ public class GridFunc {
* @return Light-weight view on given collection with provided predicate.
*/
@SuppressWarnings("RedundantTypeArguments")
+ @SafeVarargs
public static <T1, T2> Collection<T2> viewReadOnly(@Nullable final Collection<? extends T1> c,
final IgniteClosure<? super T1, T2> trans, @Nullable final IgnitePredicate<? super T1>... p) {
A.notNull(trans, "trans");
[10/18] ignite git commit: ignite-1273: fixed cyclic references
processing by PortableMarshaller and ability to modify array fields returned
by PortableBuilder
Posted by sb...@apache.org.
http://git-wip-us.apache.org/repos/asf/ignite/blob/6ac9557e/modules/core/src/test/java/org/apache/ignite/internal/portable/GridPortableBuilderAdditionalSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/portable/GridPortableBuilderAdditionalSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/portable/GridPortableBuilderAdditionalSelfTest.java
index 488361c..61ec714 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/portable/GridPortableBuilderAdditionalSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/portable/GridPortableBuilderAdditionalSelfTest.java
@@ -22,6 +22,7 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import java.lang.reflect.Field;
+import java.math.BigDecimal;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Arrays;
@@ -38,6 +39,8 @@ import org.apache.ignite.IgniteCheckedException;
import org.apache.ignite.IgnitePortables;
import org.apache.ignite.configuration.CacheConfiguration;
import org.apache.ignite.configuration.IgniteConfiguration;
+import org.apache.ignite.internal.portable.builder.PortableBuilderEnum;
+import org.apache.ignite.internal.portable.builder.PortableBuilderImpl;
import org.apache.ignite.internal.portable.mutabletest.GridPortableMarshalerAwareTestClass;
import org.apache.ignite.internal.processors.cache.portable.CacheObjectPortableProcessorImpl;
import org.apache.ignite.internal.processors.cache.portable.IgnitePortablesImpl;
@@ -237,10 +240,214 @@ public class GridPortableBuilderAdditionalSelfTest extends GridCommonAbstractTes
/**
*
*/
- public void testSimpleArrayModification() {
+ public void testDateArrayModification() {
TestObjectAllTypes obj = new TestObjectAllTypes();
- obj.strArr = new String[]{"a", "a", "a"};
+ obj.dateArr = new Date[] {new Date(11111), new Date(11111), new Date(11111)};
+
+ PortableBuilderImpl mutObj = wrap(obj);
+
+ Date[] arr = mutObj.getField("dateArr");
+ arr[0] = new Date(22222);
+
+ TestObjectAllTypes res = mutObj.build().deserialize();
+
+ Assert.assertArrayEquals(new Date[] {new Date(22222), new Date(11111), new Date(11111)}, res.dateArr);
+ }
+
+ /**
+ *
+ */
+ public void testUUIDArrayModification() {
+ TestObjectAllTypes obj = new TestObjectAllTypes();
+
+ obj.uuidArr = new UUID[] {new UUID(1, 1), new UUID(1, 1), new UUID(1, 1)};
+
+ PortableBuilderImpl mutObj = wrap(obj);
+
+ UUID[] arr = mutObj.getField("uuidArr");
+ arr[0] = new UUID(2, 2);
+
+ TestObjectAllTypes res = mutObj.build().deserialize();
+
+ Assert.assertArrayEquals(new UUID[] {new UUID(2, 2), new UUID(1, 1), new UUID(1, 1)}, res.uuidArr);
+ }
+
+ /**
+ *
+ */
+ public void testDecimalArrayModification() {
+ TestObjectAllTypes obj = new TestObjectAllTypes();
+
+ obj.bdArr = new BigDecimal[] {new BigDecimal(1000), new BigDecimal(1000), new BigDecimal(1000)};
+
+ PortableBuilderImpl mutObj = wrap(obj);
+
+ BigDecimal[] arr = mutObj.getField("bdArr");
+ arr[0] = new BigDecimal(2000);
+
+ TestObjectAllTypes res = mutObj.build().deserialize();
+
+ Assert.assertArrayEquals(new BigDecimal[] {new BigDecimal(1000), new BigDecimal(1000), new BigDecimal(1000)},
+ res.bdArr);
+ }
+
+ /**
+ *
+ */
+ public void testBooleanArrayModification() {
+ TestObjectAllTypes obj = new TestObjectAllTypes();
+
+ obj.zArr = new boolean[] {false, false, false};
+
+ PortableBuilderImpl mutObj = wrap(obj);
+
+ boolean[] arr = mutObj.getField("zArr");
+ arr[0] = true;
+
+ TestObjectAllTypes res = mutObj.build().deserialize();
+
+ boolean[] expected = new boolean[] {true, false, false};
+
+ assertEquals(expected.length, res.zArr.length);
+
+ for (int i = 0; i < expected.length; i++)
+ assertEquals(expected[i], res.zArr[i]);
+ }
+
+ /**
+ *
+ */
+ public void testCharArrayModification() {
+ TestObjectAllTypes obj = new TestObjectAllTypes();
+
+ obj.cArr = new char[] {'a', 'a', 'a'};
+
+ PortableBuilderImpl mutObj = wrap(obj);
+
+ char[] arr = mutObj.getField("cArr");
+ arr[0] = 'b';
+
+ TestObjectAllTypes res = mutObj.build().deserialize();
+
+ Assert.assertArrayEquals(new char[] {'b', 'a', 'a'}, res.cArr);
+ }
+
+ /**
+ *
+ */
+ public void testDoubleArrayModification() {
+ TestObjectAllTypes obj = new TestObjectAllTypes();
+
+ obj.dArr = new double[] {1.0, 1.0, 1.0};
+
+ PortableBuilderImpl mutObj = wrap(obj);
+
+ double[] arr = mutObj.getField("dArr");
+ arr[0] = 2.0;
+
+ TestObjectAllTypes res = mutObj.build().deserialize();
+
+ Assert.assertArrayEquals(new double[] {2.0, 1.0, 1.0}, res.dArr, 0);
+ }
+
+ /**
+ *
+ */
+ public void testFloatArrayModification() {
+ TestObjectAllTypes obj = new TestObjectAllTypes();
+
+ obj.fArr = new float[] {1.0f, 1.0f, 1.0f};
+
+ PortableBuilderImpl mutObj = wrap(obj);
+
+ float[] arr = mutObj.getField("fArr");
+ arr[0] = 2.0f;
+
+ TestObjectAllTypes res = mutObj.build().deserialize();
+
+ Assert.assertArrayEquals(new float[] {2.0f, 1.0f, 1.0f}, res.fArr, 0);
+ }
+
+ /**
+ *
+ */
+ public void testLongArrayModification() {
+ TestObjectAllTypes obj = new TestObjectAllTypes();
+
+ obj.lArr = new long[] {1, 1, 1};
+
+ PortableBuilderImpl mutObj = wrap(obj);
+
+ long[] arr = mutObj.getField("lArr");
+ arr[0] = 2;
+
+ TestObjectAllTypes res = mutObj.build().deserialize();
+
+ Assert.assertArrayEquals(new long[] {2, 1, 1}, res.lArr);
+ }
+
+ /**
+ *
+ */
+ public void testIntArrayModification() {
+ TestObjectAllTypes obj = new TestObjectAllTypes();
+
+ obj.iArr = new int[] {1, 1, 1};
+
+ PortableBuilderImpl mutObj = wrap(obj);
+
+ int[] arr = mutObj.getField("iArr");
+ arr[0] = 2;
+
+ TestObjectAllTypes res = mutObj.build().deserialize();
+
+ Assert.assertArrayEquals(new int[] {2, 1, 1}, res.iArr);
+ }
+
+ /**
+ *
+ */
+ public void testShortArrayModification() {
+ TestObjectAllTypes obj = new TestObjectAllTypes();
+
+ obj.sArr = new short[] {1, 1, 1};
+
+ PortableBuilderImpl mutObj = wrap(obj);
+
+ short[] arr = mutObj.getField("sArr");
+ arr[0] = 2;
+
+ TestObjectAllTypes res = mutObj.build().deserialize();
+
+ Assert.assertArrayEquals(new short[] {2, 1, 1}, res.sArr);
+ }
+
+ /**
+ *
+ */
+ public void testByteArrayModification() {
+ TestObjectAllTypes obj = new TestObjectAllTypes();
+
+ obj.bArr = new byte[] {1, 1, 1};
+
+ PortableBuilderImpl mutObj = wrap(obj);
+
+ byte[] arr = mutObj.getField("bArr");
+ arr[0] = 2;
+
+ TestObjectAllTypes res = mutObj.build().deserialize();
+
+ Assert.assertArrayEquals(new byte[] {2, 1, 1}, res.bArr);
+ }
+
+ /**
+ *
+ */
+ public void testStringArrayModification() {
+ TestObjectAllTypes obj = new TestObjectAllTypes();
+
+ obj.strArr = new String[] {"a", "a", "a"};
PortableBuilderImpl mutObj = wrap(obj);
@@ -249,29 +456,27 @@ public class GridPortableBuilderAdditionalSelfTest extends GridCommonAbstractTes
TestObjectAllTypes res = mutObj.build().deserialize();
- Assert.assertArrayEquals(obj.strArr, res.strArr);
+ Assert.assertArrayEquals(new String[] {"b", "a", "a"}, res.strArr);
}
/**
*
*/
public void testModifyObjectArray() {
- fail("https://issues.apache.org/jira/browse/IGNITE-1273");
-
TestObjectContainer obj = new TestObjectContainer();
- obj.foo = new Object[]{"a"};
+ obj.foo = new Object[] {"a"};
PortableBuilderImpl mutObj = wrap(obj);
Object[] arr = mutObj.getField("foo");
- Assert.assertArrayEquals(new Object[]{"a"}, arr);
+ Assert.assertArrayEquals(new Object[] {"a"}, arr);
arr[0] = "b";
TestObjectContainer res = mutObj.build().deserialize();
- Assert.assertArrayEquals(new Object[] {"a"}, (Object[])res.foo);
+ Assert.assertArrayEquals(new Object[] {"b"}, (Object[])res.foo);
}
/**
@@ -280,7 +485,7 @@ public class GridPortableBuilderAdditionalSelfTest extends GridCommonAbstractTes
public void testOverrideObjectArrayField() {
PortableBuilderImpl mutObj = wrap(new TestObjectContainer());
- Object[] createdArr = {mutObj, "a", 1, new String[] {"s", "s"}, new byte[]{1, 2}, new UUID(3, 0)};
+ Object[] createdArr = {mutObj, "a", 1, new String[] {"s", "s"}, new byte[] {1, 2}, new UUID(3, 0)};
mutObj.setField("foo", createdArr.clone());
@@ -296,7 +501,7 @@ public class GridPortableBuilderAdditionalSelfTest extends GridCommonAbstractTes
*/
public void testDeepArray() {
TestObjectContainer obj = new TestObjectContainer();
- obj.foo = new Object[]{new Object[]{"a", obj}};
+ obj.foo = new Object[] {new Object[] {"a", obj}};
PortableBuilderImpl mutObj = wrap(obj);
@@ -633,7 +838,7 @@ public class GridPortableBuilderAdditionalSelfTest extends GridCommonAbstractTes
public void testEnumArrayModification() {
TestObjectAllTypes obj = new TestObjectAllTypes();
- obj.enumArr = new TestObjectEnum[]{TestObjectEnum.A, TestObjectEnum.B};
+ obj.enumArr = new TestObjectEnum[] {TestObjectEnum.A, TestObjectEnum.B};
PortableBuilderImpl mutObj = wrap(obj);
@@ -953,12 +1158,10 @@ public class GridPortableBuilderAdditionalSelfTest extends GridCommonAbstractTes
*
*/
public void testCyclicArrays() {
- fail("https://issues.apache.org/jira/browse/IGNITE-1273");
-
TestObjectContainer obj = new TestObjectContainer();
Object[] arr1 = new Object[1];
- Object[] arr2 = new Object[]{arr1};
+ Object[] arr2 = new Object[] {arr1};
arr1[0] = arr2;
@@ -976,7 +1179,6 @@ public class GridPortableBuilderAdditionalSelfTest extends GridCommonAbstractTes
*/
@SuppressWarnings("TypeMayBeWeakened")
public void testCyclicArrayList() {
- fail("https://issues.apache.org/jira/browse/IGNITE-1273");
TestObjectContainer obj = new TestObjectContainer();
List<Object> arr1 = new ArrayList<>();
http://git-wip-us.apache.org/repos/asf/ignite/blob/6ac9557e/modules/core/src/test/java/org/apache/ignite/internal/portable/GridPortableBuilderSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/portable/GridPortableBuilderSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/portable/GridPortableBuilderSelfTest.java
index 3ba0a92..7f23c1f 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/portable/GridPortableBuilderSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/portable/GridPortableBuilderSelfTest.java
@@ -28,6 +28,7 @@ import java.util.UUID;
import org.apache.ignite.IgniteCheckedException;
import org.apache.ignite.IgnitePortables;
import org.apache.ignite.configuration.IgniteConfiguration;
+import org.apache.ignite.internal.portable.builder.PortableBuilderImpl;
import org.apache.ignite.internal.portable.mutabletest.GridPortableTestClasses.TestObjectAllTypes;
import org.apache.ignite.internal.portable.mutabletest.GridPortableTestClasses.TestObjectContainer;
import org.apache.ignite.internal.portable.mutabletest.GridPortableTestClasses.TestObjectInner;
http://git-wip-us.apache.org/repos/asf/ignite/blob/6ac9557e/modules/core/src/test/java/org/apache/ignite/internal/portable/GridPortableMarshallerSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/portable/GridPortableMarshallerSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/portable/GridPortableMarshallerSelfTest.java
index 11e316a..c8287a0 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/portable/GridPortableMarshallerSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/portable/GridPortableMarshallerSelfTest.java
@@ -40,6 +40,7 @@ import java.util.concurrent.Callable;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentSkipListSet;
import org.apache.ignite.IgniteCheckedException;
+import org.apache.ignite.internal.portable.builder.PortableBuilderImpl;
import org.apache.ignite.internal.util.GridUnsafe;
import org.apache.ignite.internal.util.IgniteUtils;
import org.apache.ignite.internal.util.lang.GridMapEntry;
@@ -68,6 +69,7 @@ import sun.misc.Unsafe;
import static org.apache.ignite.internal.portable.PortableThreadLocalMemoryAllocator.THREAD_LOCAL_ALLOC;
import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertTrue;
/**
* Portable marshaller tests.
@@ -1547,11 +1549,11 @@ public class GridPortableMarshallerSelfTest extends GridCommonAbstractTest {
PortableObject copy = copy(po, F.<String, Object>asMap("bArr", new byte[]{1, 2, 3}));
- assertArrayEquals(new byte[]{1, 2, 3}, copy.<byte[]>field("bArr"));
+ assertArrayEquals(new byte[] {1, 2, 3}, copy.<byte[]>field("bArr"));
SimpleObject obj0 = copy.deserialize();
- assertArrayEquals(new byte[]{1, 2, 3}, obj0.bArr);
+ assertArrayEquals(new byte[] {1, 2, 3}, obj0.bArr);
}
/**
@@ -1796,7 +1798,7 @@ public class GridPortableMarshallerSelfTest extends GridCommonAbstractTest {
assertEquals("str555", obj0.str);
assertEquals(newObj, obj0.inner);
- assertArrayEquals(new byte[]{6, 7, 9}, obj0.bArr);
+ assertArrayEquals(new byte[] {6, 7, 9}, obj0.bArr);
}
/**
@@ -1832,7 +1834,7 @@ public class GridPortableMarshallerSelfTest extends GridCommonAbstractTest {
assertEquals("str555", copy.<String>field("str"));
assertEquals(newObj, copy.<PortableObject>field("inner").deserialize());
assertEquals((short)2323, copy.<Short>field("s").shortValue());
- assertArrayEquals(new byte[]{6, 7, 9}, copy.<byte[]>field("bArr"));
+ assertArrayEquals(new byte[] {6, 7, 9}, copy.<byte[]>field("bArr"));
assertEquals((byte)111, copy.<Byte>field("b").byteValue());
SimpleObject obj0 = copy.deserialize();
@@ -1841,7 +1843,7 @@ public class GridPortableMarshallerSelfTest extends GridCommonAbstractTest {
assertEquals("str555", obj0.str);
assertEquals(newObj, obj0.inner);
assertEquals((short)2323, obj0.s);
- assertArrayEquals(new byte[]{6, 7, 9}, obj0.bArr);
+ assertArrayEquals(new byte[] {6, 7, 9}, obj0.bArr);
assertEquals((byte)111, obj0.b);
}
@@ -2239,6 +2241,53 @@ public class GridPortableMarshallerSelfTest extends GridCommonAbstractTest {
}
/**
+ * @throws Exception If failed.
+ */
+ public void testCyclicReferencesMarshalling() throws Exception {
+ PortableMarshaller marsh = new PortableMarshaller();
+
+ SimpleObject obj = simpleObject();
+
+ obj.bArr = obj.inner.bArr;
+ obj.cArr = obj.inner.cArr;
+ obj.boolArr = obj.inner.boolArr;
+ obj.sArr = obj.inner.sArr;
+ obj.strArr = obj.inner.strArr;
+ obj.iArr = obj.inner.iArr;
+ obj.lArr = obj.inner.lArr;
+ obj.fArr = obj.inner.fArr;
+ obj.dArr = obj.inner.dArr;
+ obj.dateArr = obj.inner.dateArr;
+ obj.uuidArr = obj.inner.uuidArr;
+ obj.objArr = obj.inner.objArr;
+ obj.bdArr = obj.inner.bdArr;
+ obj.map = obj.inner.map;
+ obj.col = obj.inner.col;
+ obj.mEntry = obj.inner.mEntry;
+
+ SimpleObject res = (SimpleObject)marshalUnmarshal(obj, marsh);
+
+ assertEquals(obj, res);
+
+ assertTrue(res.bArr == res.inner.bArr);
+ assertTrue(res.cArr == res.inner.cArr);
+ assertTrue(res.boolArr == res.inner.boolArr);
+ assertTrue(res.sArr == res.inner.sArr);
+ assertTrue(res.strArr == res.inner.strArr);
+ assertTrue(res.iArr == res.inner.iArr);
+ assertTrue(res.lArr == res.inner.lArr);
+ assertTrue(res.fArr == res.inner.fArr);
+ assertTrue(res.dArr == res.inner.dArr);
+ assertTrue(res.dateArr == res.inner.dateArr);
+ assertTrue(res.uuidArr == res.inner.uuidArr);
+ assertTrue(res.objArr == res.inner.objArr);
+ assertTrue(res.bdArr == res.inner.bdArr);
+ assertTrue(res.map == res.inner.map);
+ assertTrue(res.col == res.inner.col);
+ assertTrue(res.mEntry == res.inner.mEntry);
+ }
+
+ /**
*
*/
private static class ObjectWithClassFields {
@@ -2424,6 +2473,7 @@ public class GridPortableMarshallerSelfTest extends GridCommonAbstractTest {
inner.map = new HashMap<>();
inner.enumVal = TestEnum.A;
inner.enumArr = new TestEnum[] {TestEnum.A, TestEnum.B};
+ inner.bdArr = new BigDecimal[] {new BigDecimal(1000), BigDecimal.ONE};
inner.col.add("str1");
inner.col.add("str2");
@@ -2433,6 +2483,8 @@ public class GridPortableMarshallerSelfTest extends GridCommonAbstractTest {
inner.map.put(2, "str2");
inner.map.put(3, "str3");
+ inner.mEntry = inner.map.entrySet().iterator().next();
+
SimpleObject outer = new SimpleObject();
outer.b = 2;
@@ -2464,6 +2516,8 @@ public class GridPortableMarshallerSelfTest extends GridCommonAbstractTest {
outer.enumVal = TestEnum.B;
outer.enumArr = new TestEnum[] {TestEnum.B, TestEnum.C};
outer.inner = inner;
+ outer.bdArr = new BigDecimal[] {new BigDecimal(5000), BigDecimal.TEN};
+
outer.col.add("str4");
outer.col.add("str5");
@@ -2473,6 +2527,8 @@ public class GridPortableMarshallerSelfTest extends GridCommonAbstractTest {
outer.map.put(5, "str5");
outer.map.put(6, "str6");
+ outer.mEntry = outer.map.entrySet().iterator().next();
+
return outer;
}
@@ -2757,6 +2813,9 @@ public class GridPortableMarshallerSelfTest extends GridCommonAbstractTest {
private Object[] objArr;
/** */
+ private BigDecimal[] bdArr;
+
+ /** */
private Collection<String> col;
/** */
@@ -2769,6 +2828,9 @@ public class GridPortableMarshallerSelfTest extends GridCommonAbstractTest {
private TestEnum[] enumArr;
/** */
+ private Map.Entry<Integer, String> mEntry;
+
+ /** */
private SimpleObject inner;
/** {@inheritDoc} */
http://git-wip-us.apache.org/repos/asf/ignite/blob/6ac9557e/modules/core/src/test/java/org/apache/ignite/internal/portable/GridPortableMetaDataDisabledSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/portable/GridPortableMetaDataDisabledSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/portable/GridPortableMetaDataDisabledSelfTest.java
index d329818..05df23b 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/portable/GridPortableMetaDataDisabledSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/portable/GridPortableMetaDataDisabledSelfTest.java
@@ -20,6 +20,7 @@ import java.util.Arrays;
import org.apache.ignite.IgnitePortables;
import org.apache.ignite.configuration.IgniteConfiguration;
import org.apache.ignite.marshaller.portable.PortableMarshaller;
+import org.apache.ignite.portable.PortableBuilder;
import org.apache.ignite.portable.PortableException;
import org.apache.ignite.portable.PortableMarshalAware;
import org.apache.ignite.portable.PortableReader;
@@ -68,9 +69,17 @@ public class GridPortableMetaDataDisabledSelfTest extends GridCommonAbstractTest
portables().toPortable(new TestObject1());
portables().toPortable(new TestObject2());
+ portables().toPortable(new TestObject3());
assertEquals(0, portables().metadata(TestObject1.class).fields().size());
assertEquals(0, portables().metadata(TestObject2.class).fields().size());
+
+ PortableBuilder bldr = portables().builder("FakeType");
+
+ bldr.setField("field1", 0).setField("field2", "value").build();
+
+ assertNull(portables().metadata("FakeType"));
+ assertNull(portables().metadata(TestObject3.class));
}
finally {
stopGrid();
@@ -218,4 +227,12 @@ public class GridPortableMetaDataDisabledSelfTest extends GridCommonAbstractTest
// No-op.
}
}
+
+ /**
+ */
+ @SuppressWarnings("UnusedDeclaration")
+ private static class TestObject3 {
+ /** */
+ private int field;
+ }
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/6ac9557e/modules/core/src/test/java/org/apache/ignite/internal/portable/GridPortableMetaDataSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/portable/GridPortableMetaDataSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/portable/GridPortableMetaDataSelfTest.java
index f6d7627..9054297 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/portable/GridPortableMetaDataSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/portable/GridPortableMetaDataSelfTest.java
@@ -147,6 +147,15 @@ public class GridPortableMetaDataSelfTest extends GridCommonAbstractTest {
/**
* @throws Exception If failed.
*/
+ public void testNoConfiguration() throws Exception {
+ portables().toPortable(new TestObject3());
+
+ assertNotNull(portables().metadata(TestObject3.class));
+ }
+
+ /**
+ * @throws Exception If failed.
+ */
public void testReflection() throws Exception {
PortableMetadata meta = portables().metadata(TestObject1.class);
@@ -349,4 +358,12 @@ public class GridPortableMetaDataSelfTest extends GridCommonAbstractTest {
// No-op.
}
}
+
+ /**
+ */
+ @SuppressWarnings("UnusedDeclaration")
+ private static class TestObject3 {
+ /** */
+ private int intVal;
+ }
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/6ac9557e/modules/core/src/test/java/org/apache/ignite/internal/portable/mutabletest/GridPortableTestClasses.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/portable/mutabletest/GridPortableTestClasses.java b/modules/core/src/test/java/org/apache/ignite/internal/portable/mutabletest/GridPortableTestClasses.java
index ce97a8d..e49514b 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/portable/mutabletest/GridPortableTestClasses.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/portable/mutabletest/GridPortableTestClasses.java
@@ -23,6 +23,7 @@ import java.io.IOException;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
import java.io.Serializable;
+import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@@ -182,7 +183,6 @@ public class GridPortableTestClasses {
/** */
public Date date;
-
/** */
public byte[] bArr;
@@ -208,12 +208,18 @@ public class GridPortableTestClasses {
public boolean[] zArr;
/** */
+ public BigDecimal[] bdArr;
+
+ /** */
public String[] strArr;
/** */
public UUID[] uuidArr;
/** */
+ public Date[] dateArr;
+
+ /** */
public TestObjectEnum anEnum;
/** */
@@ -222,8 +228,6 @@ public class GridPortableTestClasses {
/** */
public Map.Entry entry;
- //public Date[] dateArr; // todo test date array.
-
/**
* @return Array.
*/
@@ -270,21 +274,23 @@ public class GridPortableTestClasses {
uuid = new UUID(1, 1);
date = new Date(1000000);
- bArr = new byte[]{1, 2, 3};
- sArr = new short[]{1, 2, 3};
- iArr = new int[]{1, 2, 3};
- lArr = new long[]{1, 2, 3};
- fArr = new float[]{1, 2, 3};
- dArr = new double[]{1, 2, 3};
- cArr = new char[]{1, 2, 3};
- zArr = new boolean[]{true, false};
+ bArr = new byte[] {1, 2, 3};
+ sArr = new short[] {1, 2, 3};
+ iArr = new int[] {1, 2, 3};
+ lArr = new long[] {1, 2, 3};
+ fArr = new float[] {1, 2, 3};
+ dArr = new double[] {1, 2, 3};
+ cArr = new char[] {1, 2, 3};
+ zArr = new boolean[] {true, false};
- strArr = new String[]{"abc", "ab", "a"};
- uuidArr = new UUID[]{new UUID(1, 1), new UUID(2, 2)};
+ strArr = new String[] {"abc", "ab", "a"};
+ uuidArr = new UUID[] {new UUID(1, 1), new UUID(2, 2)};
+ bdArr = new BigDecimal[] {new BigDecimal(1000), BigDecimal.TEN};
+ dateArr = new Date[] {new Date(1000000), new Date(200000)};
anEnum = TestObjectEnum.A;
- enumArr = new TestObjectEnum[]{TestObjectEnum.B};
+ enumArr = new TestObjectEnum[] {TestObjectEnum.B};
entry = new GridMapEntry<>(1, "a");
}
@@ -388,7 +394,6 @@ public class GridPortableTestClasses {
private Map<String, List<Company>> companyByStreet = new TreeMap<>();
/**
- *
* @param street Street.
* @return Company.
*/
@@ -397,7 +402,6 @@ public class GridPortableTestClasses {
}
/**
- *
* @param company Company.
*/
public void addCompany(Company company) {
@@ -413,7 +417,6 @@ public class GridPortableTestClasses {
}
/**
- *
* @return map
*/
public Map<String, List<Company>> getCompanyByStreet() {
@@ -421,7 +424,6 @@ public class GridPortableTestClasses {
}
/**
- *
* @param companyByStreet map
*/
public void setCompanyByStreet(Map<String, List<Company>> companyByStreet) {
http://git-wip-us.apache.org/repos/asf/ignite/blob/6ac9557e/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/portable/GridCacheClientNodePortableMetadataMultinodeTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/portable/GridCacheClientNodePortableMetadataMultinodeTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/portable/GridCacheClientNodePortableMetadataMultinodeTest.java
index aa67574..1ba3d4d 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/portable/GridCacheClientNodePortableMetadataMultinodeTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/portable/GridCacheClientNodePortableMetadataMultinodeTest.java
@@ -31,6 +31,7 @@ import org.apache.ignite.IgnitePortables;
import org.apache.ignite.configuration.CacheConfiguration;
import org.apache.ignite.configuration.IgniteConfiguration;
import org.apache.ignite.internal.IgniteInternalFuture;
+import org.apache.ignite.internal.util.lang.GridAbsPredicate;
import org.apache.ignite.internal.util.typedef.internal.U;
import org.apache.ignite.marshaller.portable.PortableMarshaller;
import org.apache.ignite.portable.PortableBuilder;
@@ -233,6 +234,16 @@ public class GridCacheClientNodePortableMetadataMultinodeTest extends GridCommon
portables = ignite(i).portables();
+ final IgnitePortables p0 = portables;
+
+ GridTestUtils.waitForCondition(new GridAbsPredicate() {
+ @Override public boolean apply() {
+ Collection<PortableMetadata> metaCol = p0.metadata();
+
+ return metaCol.size() == 1000;
+ }
+ }, getTestTimeout());
+
Collection<PortableMetadata> metaCol = portables.metadata();
assertEquals(1000, metaCol.size());
[17/18] ignite git commit: Merge remote-tracking branch
'remotes/upstream/master' into ignite-1.4
Posted by sb...@apache.org.
Merge remote-tracking branch 'remotes/upstream/master' into ignite-1.4
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/27cd6154
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/27cd6154
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/27cd6154
Branch: refs/heads/ignite-1349
Commit: 27cd6154747155c77e29d194d98f9ba9bf6a1455
Parents: 662bc33 6ac9557
Author: ptupitsyn <pt...@gridgain.com>
Authored: Thu Sep 3 11:42:30 2015 +0300
Committer: ptupitsyn <pt...@gridgain.com>
Committed: Thu Sep 3 11:42:30 2015 +0300
----------------------------------------------------------------------
.../configuration/PlatformConfiguration.java | 2 +-
.../apache/ignite/internal/IgniteKernal.java | 14 +-
.../cache/store/CacheOsStoreManager.java | 32 +-
.../cache/store/CacheStoreManager.java | 10 +
.../store/GridCacheStoreManagerAdapter.java | 5 -
.../platform/PlatformNoopProcessor.java | 11 +-
.../processors/platform/PlatformProcessor.java | 10 +
.../cache/store/PlatformCacheStore.java | 25 +
...processors.platform.PlatformBootstrapFactory | 2 +
.../PlatformAbstractConfigurationClosure.java | 61 +++
.../platform/PlatformConfigurationEx.java | 48 ++
.../platform/PlatformProcessorImpl.java | 360 ++++++++++++++
.../cache/store/PlatformCacheStore.java | 25 -
.../platform/cpp/PlatformCppBootstrap.java | 31 ++
.../cpp/PlatformCppBootstrapFactory.java | 39 ++
.../cpp/PlatformCppConfigurationClosure.java | 99 ++++
.../cpp/PlatformCppConfigurationEx.java | 82 +++
.../dotnet/PlatformDotNetBootstrap.java | 31 ++
.../dotnet/PlatformDotNetBootstrapFactory.java | 39 ++
.../dotnet/PlatformDotNetCacheStore.java | 497 +++++++++++++++++++
.../PlatformDotNetConfigurationClosure.java | 255 ++++++++++
.../dotnet/PlatformDotNetConfigurationEx.java | 91 ++++
.../platform/utils/PlatformUtils.java | 14 +
.../platform/cpp/PlatformCppConfiguration.java | 47 ++
.../dotnet/PlatformDotNetCacheStoreFactory.java | 139 ++++++
.../dotnet/PlatformDotNetConfiguration.java | 119 +++++
.../dotnet/PlatformDotNetLifecycleBean.java | 109 ++++
.../PlatformDotNetPortableConfiguration.java | 228 +++++++++
...PlatformDotNetPortableTypeConfiguration.java | 248 +++++++++
parent/pom.xml | 1 +
30 files changed, 2635 insertions(+), 39 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/27cd6154/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
----------------------------------------------------------------------
[16/18] ignite git commit: Merge remote-tracking branch
'origin/ignite-1.4' into ignite-1.4
Posted by sb...@apache.org.
Merge remote-tracking branch 'origin/ignite-1.4' into ignite-1.4
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/662bc331
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/662bc331
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/662bc331
Branch: refs/heads/ignite-1349
Commit: 662bc331ce6e26b72809901bdd6edd64364814f9
Parents: 3de5f98 0b9d7ca
Author: sboikov <sb...@gridgain.com>
Authored: Thu Sep 3 11:40:07 2015 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Thu Sep 3 11:40:07 2015 +0300
----------------------------------------------------------------------
.../apache/ignite/internal/IgniteKernal.java | 97 ++++++++++++++------
1 file changed, 69 insertions(+), 28 deletions(-)
----------------------------------------------------------------------
[14/18] ignite git commit: IGNITE-1362: Fixed IgniteKernal instance
leak to update notifier.
Posted by sb...@apache.org.
IGNITE-1362: Fixed IgniteKernal instance leak to update notifier.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/0b9d7cab
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/0b9d7cab
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/0b9d7cab
Branch: refs/heads/ignite-1349
Commit: 0b9d7cab98dddeabdc05e4981457a960c332b26d
Parents: 3a280a0
Author: vozerov-gridgain <vo...@gridgain.com>
Authored: Thu Sep 3 11:25:00 2015 +0300
Committer: vozerov-gridgain <vo...@gridgain.com>
Committed: Thu Sep 3 11:25:00 2015 +0300
----------------------------------------------------------------------
.../apache/ignite/internal/IgniteKernal.java | 97 ++++++++++++++------
1 file changed, 69 insertions(+), 28 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/0b9d7cab/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
index d9fef86..9a724df 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
@@ -28,6 +28,7 @@ import java.io.ObjectStreamException;
import java.io.Serializable;
import java.lang.management.ManagementFactory;
import java.lang.management.RuntimeMXBean;
+import java.lang.ref.WeakReference;
import java.lang.reflect.Constructor;
import java.text.DateFormat;
import java.text.DecimalFormat;
@@ -820,34 +821,8 @@ public class IgniteKernal implements IgniteEx, IgniteMXBean, Externalizable {
updateNtfTimer = new Timer("ignite-update-notifier-timer", true);
// Setup periodic version check.
- updateNtfTimer.scheduleAtFixedRate(new GridTimerTask() {
- private boolean first = true;
-
- @Override public void safeRun() throws InterruptedException {
- if (!first)
- verChecker.topologySize(cluster().nodes().size());
-
- verChecker.checkForNewVersion(execSvc, log);
-
- // Just wait for 10 secs.
- Thread.sleep(PERIODIC_VER_CHECK_CONN_TIMEOUT);
-
- // Just wait another 60 secs in order to get
- // version info even on slow connection.
- for (int i = 0; i < 60 && verChecker.latestVersion() == null; i++)
- Thread.sleep(1000);
-
- // Report status if one is available.
- // No-op if status is NOT available.
- verChecker.reportStatus(log);
-
- if (first) {
- first = false;
-
- verChecker.reportOnlyNew(true);
- }
- }
- }, 0, PERIODIC_VER_CHECK_DELAY);
+ updateNtfTimer.scheduleAtFixedRate(new UpdateNotifierTimerTask(this, verChecker),
+ 0, PERIODIC_VER_CHECK_DELAY);
}
catch (IgniteCheckedException e) {
if (log.isDebugEnabled())
@@ -3194,4 +3169,70 @@ public class IgniteKernal implements IgniteEx, IgniteMXBean, Externalizable {
@Override public String toString() {
return S.toString(IgniteKernal.class, this);
}
+
+ /**
+ * Update notifier timer task.
+ */
+ private static class UpdateNotifierTimerTask extends GridTimerTask {
+ /** Reference to kernal. */
+ private final WeakReference<IgniteKernal> kernalRef;
+
+ /** Logger. */
+ private final IgniteLogger log;
+
+ /** Executor service. */
+ private final ExecutorService execSvc;
+
+ /** Version checker. */
+ private final GridUpdateNotifier verChecker;
+
+ /** Whether this is the first run. */
+ private boolean first = true;
+
+ /**
+ * Constructor.
+ *
+ * @param kernal Kernal.
+ * @param verChecker Version checker.
+ */
+ private UpdateNotifierTimerTask(IgniteKernal kernal, GridUpdateNotifier verChecker) {
+ kernalRef = new WeakReference<>(kernal);
+
+ log = kernal.log.getLogger(UpdateNotifierTimerTask.class);
+
+ execSvc = kernal.executorService();
+
+ this.verChecker = verChecker;
+ }
+
+ /** {@inheritDoc} */
+ @Override public void safeRun() throws InterruptedException {
+ if (!first) {
+ IgniteKernal kernal = kernalRef.get();
+
+ if (kernal != null)
+ verChecker.topologySize(kernal.cluster().nodes().size());
+ }
+
+ verChecker.checkForNewVersion(execSvc, log);
+
+ // Just wait for 10 secs.
+ Thread.sleep(PERIODIC_VER_CHECK_CONN_TIMEOUT);
+
+ // Just wait another 60 secs in order to get
+ // version info even on slow connection.
+ for (int i = 0; i < 60 && verChecker.latestVersion() == null; i++)
+ Thread.sleep(1000);
+
+ // Report status if one is available.
+ // No-op if status is NOT available.
+ verChecker.reportStatus(log);
+
+ if (first) {
+ first = false;
+
+ verChecker.reportOnlyNew(true);
+ }
+ }
+ }
}
[05/18] ignite git commit: Merge remote-tracking branch
'origin/master'
Posted by sb...@apache.org.
Merge remote-tracking branch 'origin/master'
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/9fe121cc
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/9fe121cc
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/9fe121cc
Branch: refs/heads/ignite-1349
Commit: 9fe121cc45584017aaeb720f4f1cd1c52ea7aba6
Parents: 1225751 9910b6f
Author: Anton Vinogradov <av...@apache.org>
Authored: Wed Sep 2 16:27:32 2015 +0300
Committer: Anton Vinogradov <av...@apache.org>
Committed: Wed Sep 2 16:27:32 2015 +0300
----------------------------------------------------------------------
.../configuration/PlatformConfiguration.java | 2 +-
.../affinity/GridAffinityProcessor.java | 4 +
.../cache/store/CacheOsStoreManager.java | 32 +-
.../cache/store/CacheStoreManager.java | 10 +
.../store/GridCacheStoreManagerAdapter.java | 5 -
.../processors/platform/PlatformContext.java | 4 +-
.../processors/platform/PlatformException.java | 71 +++
.../platform/PlatformExtendedException.java | 57 ++
.../platform/PlatformNativeException.java | 77 +++
.../platform/PlatformNoCallbackException.java | 50 ++
.../platform/PlatformNoopProcessor.java | 11 +-
.../processors/platform/PlatformProcessor.java | 10 +
.../cache/store/PlatformCacheStore.java | 25 +
.../callback/PlatformCallbackGateway.java | 10 +-
.../internal/util/GridStripedSpinBusyLock.java | 127 ++++
.../CachePutAllFailoverAbstractTest.java | 234 +++++++
.../distributed/CachePutAllFailoverTxTest.java | 30 +
.../igfs/IgfsProcessorValidationSelfTest.java | 26 +-
...processors.platform.PlatformBootstrapFactory | 2 +
.../PlatformAbstractConfigurationClosure.java | 61 ++
.../platform/PlatformAbstractTarget.java | 34 +-
.../platform/PlatformConfigurationEx.java | 48 ++
.../platform/PlatformContextImpl.java | 621 +++++++++++++++++++
.../processors/platform/PlatformException.java | 71 ---
.../platform/PlatformExtendedException.java | 39 --
.../platform/PlatformNoCallbackException.java | 50 --
.../platform/PlatformProcessorImpl.java | 360 +++++++++++
.../platform/cache/PlatformCache.java | 44 +-
.../PlatformCachePartialUpdateException.java | 24 +-
.../cache/store/PlatformCacheStore.java | 25 -
.../platform/compute/PlatformAbstractTask.java | 1 +
.../compute/PlatformNativeException.java | 77 ---
.../platform/cpp/PlatformCppBootstrap.java | 31 +
.../cpp/PlatformCppBootstrapFactory.java | 39 ++
.../cpp/PlatformCppConfigurationClosure.java | 99 +++
.../cpp/PlatformCppConfigurationEx.java | 82 +++
.../datastreamer/PlatformDataStreamer.java | 2 +-
.../dotnet/PlatformDotNetBootstrap.java | 31 +
.../dotnet/PlatformDotNetBootstrapFactory.java | 39 ++
.../dotnet/PlatformDotNetCacheStore.java | 497 +++++++++++++++
.../PlatformDotNetConfigurationClosure.java | 255 ++++++++
.../dotnet/PlatformDotNetConfigurationEx.java | 91 +++
.../lifecycle/PlatformLifecycleBean.java | 4 +-
.../messaging/PlatformMessageFilterImpl.java | 2 +-
.../transactions/PlatformTransactions.java | 2 +-
.../platform/utils/PlatformFutureUtils.java | 82 ++-
.../platform/utils/PlatformUtils.java | 16 +-
.../platform/cpp/PlatformCppConfiguration.java | 47 ++
.../dotnet/PlatformDotNetCacheStoreFactory.java | 139 +++++
.../dotnet/PlatformDotNetConfiguration.java | 119 ++++
.../dotnet/PlatformDotNetLifecycleBean.java | 109 ++++
.../PlatformDotNetPortableConfiguration.java | 228 +++++++
...PlatformDotNetPortableTypeConfiguration.java | 248 ++++++++
parent/pom.xml | 6 +-
54 files changed, 4036 insertions(+), 374 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/9fe121cc/modules/platform/src/main/java/org/apache/ignite/internal/processors/platform/cache/PlatformCache.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/9fe121cc/parent/pom.xml
----------------------------------------------------------------------
[09/18] ignite git commit: Fixed RAT
Posted by sb...@apache.org.
Fixed RAT
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/8bd86447
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/8bd86447
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/8bd86447
Branch: refs/heads/ignite-1349
Commit: 8bd86447ed7aa2a9e4ef70d34ec37d3d1320737d
Parents: 0214ea9
Author: Valentin Kulichenko <va...@gmail.com>
Authored: Wed Sep 2 12:54:18 2015 -0700
Committer: Valentin Kulichenko <va...@gmail.com>
Committed: Wed Sep 2 12:54:18 2015 -0700
----------------------------------------------------------------------
parent/pom.xml | 1 +
1 file changed, 1 insertion(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/8bd86447/parent/pom.xml
----------------------------------------------------------------------
diff --git a/parent/pom.xml b/parent/pom.xml
index f56b064..ebe691f 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -738,6 +738,7 @@
<exclude>src/main/dotnet/Apache.Ignite.Core/Apache.Ignite.Core.csproj</exclude>
<exclude>src/main/dotnet/Apache.Ignite.sln</exclude>
<exclude>src/main/dotnet/Apache.Ignite.sln.DotSettings</exclude>
+ <exclude>src/main/java/META-INF/services/org.apache.ignite.internal.processors.platform.PlatformBootstrapFactory</exclude>
<exclude>src/test/dotnet/Apache.Ignite.Core.Tests/Apache.Ignite.Core.Tests.csproj</exclude>
<exclude>src/test/portables/repo/org/apache/ignite/portable/test1/1.1/test1-1.1.jar</exclude>
<exclude>src/test/portables/repo/org/apache/ignite/portable/test2/1.1/test2-1.1.jar</exclude>