This is an automated email from the ASF dual-hosted git repository.
nizhikov pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git
The following commit(s) were added to refs/heads/master by this push:
new af2741d6a41 IGNITE-28819 [2/N] Thin client extraction (#13322)
af2741d6a41 is described below
commit af2741d6a41c6cf6189b2845ca7e6ff52e9952fc
Author: Nikolay <[email protected]>
AuthorDate: Wed Jul 8 13:17:54 2026 +0300
IGNITE-28819 [2/N] Thin client extraction (#13322)
---
.../apache/ignite/internal/binary/BinaryUtils.java | 11 ++++
.../marshaller/IgniteMarshallerClassFilter.java | 0
.../ignite/marshaller/IgniteObjectInputFilter.java | 0
.../apache/ignite/marshaller/MarshallerUtils.java | 31 +++---------
.../ignite/IgniteCommonsSystemProperties.java | 32 ++++++++++++
.../org/apache/ignite/cache/CacheEntryVersion.java | 18 +++----
.../ignite/cache/query/CacheEntryEventAdapter.java | 0
.../org/apache/ignite/cache/query/IndexQuery.java | 0
.../ignite/cache/query/IndexQueryCriterion.java | 0
.../org/apache/ignite/cache/query/SqlQuery.java | 6 +--
.../java/org/apache/ignite/internal/ClassSet.java | 0
.../cache/query/InIndexQueryCriterion.java | 0
.../cache/query/RangeIndexQueryCriterion.java | 0
.../communication/UnknownMessageException.java | 0
.../processors/cache/CacheInvokeResult.java | 10 +---
.../processors/cache/version/GridCacheVersion.java | 9 ----
.../apache/ignite/internal/util/CommonUtils.java | 58 ++++++++++++++++++++++
.../ignite/platform/PlatformServiceMethod.java | 0
.../plugin/extensions/communication/Message.java | 0
...CommandHandlerCheckIncrementalSnapshotTest.java | 11 ++--
.../org/apache/ignite/IgniteSystemProperties.java | 32 ------------
.../ignite/internal/MarshallerContextImpl.java | 28 ++++++++++-
.../internal/client/thin/ReliableChannelImpl.java | 6 +--
.../internal/client/thin/TcpIgniteClient.java | 7 +--
.../internal/jdbc/thin/JdbcThinConnection.java | 2 +-
.../management/tx/FetchNearXidVersionTask.java | 3 +-
.../ignite/internal/management/tx/TxTask.java | 7 +--
.../internal/processors/cache/GridCacheReturn.java | 5 +-
.../internal/processors/cache/GridCacheUtils.java | 23 +++++++++
.../cache/distributed/dht/GridDhtLockFuture.java | 5 +-
.../distributed/dht/atomic/GridDhtAtomicCache.java | 2 +-
.../cache/transactions/IgniteTxAdapter.java | 3 +-
.../internal/processors/query/QueryUtils.java | 42 +---------------
.../internal/codegen/MessageProcessorTest.java | 4 +-
.../IncrementalSnapshotJoiningClientTest.java | 3 +-
.../IncrementalSnapshotRestoreTest.java | 3 +-
.../TxPartitionCounterStateAbstractTest.java | 22 ++++----
...rtitionCounterStateOnePrimaryOneBackupTest.java | 3 +-
38 files changed, 222 insertions(+), 164 deletions(-)
diff --git
a/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java
b/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java
index bbf64210804..fcbd74fe0c5 100644
---
a/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java
+++
b/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java
@@ -79,6 +79,7 @@ import org.apache.ignite.cache.affinity.AffinityKeyMapped;
import org.apache.ignite.configuration.BinaryConfiguration;
import org.apache.ignite.internal.binary.streams.BinaryInputStream;
import org.apache.ignite.internal.binary.streams.BinaryOutputStream;
+import org.apache.ignite.internal.processors.cache.version.GridCacheVersion;
import org.apache.ignite.internal.util.CommonUtils;
import org.apache.ignite.internal.util.MutableSingletonList;
import org.apache.ignite.internal.util.typedef.F;
@@ -3283,4 +3284,14 @@ public class BinaryUtils {
listeners.clear();
}
}
+
+ /**
+ * Represents the given cache version as an {@link IgniteUuid}.
+ *
+ * @param ver Cache version.
+ * @return Version represented as {@code IgniteUuid}.
+ */
+ public static IgniteUuid asIgniteUuid(GridCacheVersion ver) {
+ return new IgniteUuid(new UUID(ver.topologyVersion(),
ver.nodeOrderAndDrIdRaw()), ver.order());
+ }
}
diff --git
a/modules/core/src/main/java/org/apache/ignite/marshaller/IgniteMarshallerClassFilter.java
b/modules/binary/api/src/main/java/org/apache/ignite/marshaller/IgniteMarshallerClassFilter.java
similarity index 100%
rename from
modules/core/src/main/java/org/apache/ignite/marshaller/IgniteMarshallerClassFilter.java
rename to
modules/binary/api/src/main/java/org/apache/ignite/marshaller/IgniteMarshallerClassFilter.java
diff --git
a/modules/core/src/main/java/org/apache/ignite/marshaller/IgniteObjectInputFilter.java
b/modules/binary/api/src/main/java/org/apache/ignite/marshaller/IgniteObjectInputFilter.java
similarity index 100%
rename from
modules/core/src/main/java/org/apache/ignite/marshaller/IgniteObjectInputFilter.java
rename to
modules/binary/api/src/main/java/org/apache/ignite/marshaller/IgniteObjectInputFilter.java
diff --git
a/modules/core/src/main/java/org/apache/ignite/marshaller/MarshallerUtils.java
b/modules/binary/api/src/main/java/org/apache/ignite/marshaller/MarshallerUtils.java
similarity index 86%
rename from
modules/core/src/main/java/org/apache/ignite/marshaller/MarshallerUtils.java
rename to
modules/binary/api/src/main/java/org/apache/ignite/marshaller/MarshallerUtils.java
index 4d474aa826a..9248181aa07 100644
---
a/modules/core/src/main/java/org/apache/ignite/marshaller/MarshallerUtils.java
+++
b/modules/binary/api/src/main/java/org/apache/ignite/marshaller/MarshallerUtils.java
@@ -26,19 +26,16 @@ import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.ObjectInputFilter;
import java.net.URL;
-import java.util.Collection;
import java.util.Enumeration;
import java.util.Objects;
import java.util.function.Consumer;
import org.apache.ignite.IgniteCheckedException;
+import org.apache.ignite.IgniteCommonsSystemProperties;
import org.apache.ignite.IgniteException;
-import org.apache.ignite.IgniteSystemProperties;
import org.apache.ignite.internal.ClassSet;
-import org.apache.ignite.plugin.PluginProvider;
-import org.jetbrains.annotations.Nullable;
-import static
org.apache.ignite.IgniteSystemProperties.IGNITE_ENABLE_OBJECT_INPUT_FILTER_AUTOCONFIGURATION;
-import static
org.apache.ignite.IgniteSystemProperties.IGNITE_MARSHALLER_BLACKLIST;
+import static
org.apache.ignite.IgniteCommonsSystemProperties.IGNITE_ENABLE_OBJECT_INPUT_FILTER_AUTOCONFIGURATION;
+import static
org.apache.ignite.IgniteCommonsSystemProperties.IGNITE_MARSHALLER_BLACKLIST;
/**
* Utility marshaller methods.
@@ -81,7 +78,7 @@ public class MarshallerUtils {
* @throws IgniteCheckedException if autoconfiguration failed.
*/
public static void
autoconfigureObjectInputFilter(IgniteMarshallerClassFilter clsFilter) throws
IgniteCheckedException {
- if
(!IgniteSystemProperties.getBoolean(IGNITE_ENABLE_OBJECT_INPUT_FILTER_AUTOCONFIGURATION,
true))
+ if
(!IgniteCommonsSystemProperties.getBoolean(IGNITE_ENABLE_OBJECT_INPUT_FILTER_AUTOCONFIGURATION,
true))
return;
synchronized (MUX) {
@@ -116,7 +113,7 @@ public class MarshallerUtils {
private static ClassSet classWhiteList(ClassLoader clsLdr) throws
IgniteCheckedException {
ClassSet clsSet = null;
- String fileName =
IgniteSystemProperties.getString(IgniteSystemProperties.IGNITE_MARSHALLER_WHITELIST);
+ String fileName =
IgniteCommonsSystemProperties.getString(IgniteCommonsSystemProperties.IGNITE_MARSHALLER_WHITELIST);
if (fileName != null) {
clsSet = new ClassSet();
@@ -139,7 +136,7 @@ public class MarshallerUtils {
addClassNames(DEFAULT_BLACKLIST_CLS_NAMES_FILE, clsSet, clsLdr);
- String blackListFileName =
IgniteSystemProperties.getString(IGNITE_MARSHALLER_BLACKLIST);
+ String blackListFileName =
IgniteCommonsSystemProperties.getString(IGNITE_MARSHALLER_BLACKLIST);
if (blackListFileName != null)
addClassNames(blackListFileName, clsSet, clsLdr);
@@ -197,11 +194,9 @@ public class MarshallerUtils {
* Find all system class names (for JDK or Ignite classes) and process
them with a given consumer.
*
* @param ldr Class loader.
- * @param plugins Plugins.
* @param proc Class processor (class name consumer).
*/
- public static void processSystemClasses(ClassLoader ldr, @Nullable
Collection<PluginProvider> plugins,
- Consumer<String> proc) throws IOException {
+ public static void processSystemClasses(ClassLoader ldr, Consumer<String>
proc) throws IOException {
Enumeration<URL> urls = ldr.getResources(CLS_NAMES_FILE);
boolean foundClsNames = false;
@@ -223,16 +218,6 @@ public class MarshallerUtils {
"[file=" + JDK_CLS_NAMES_FILE + ", ldr=" + ldr + ']');
processResource(jdkClsNames, proc);
-
- if (plugins != null && !plugins.isEmpty()) {
- for (PluginProvider plugin : plugins) {
- Enumeration<URL> pluginUrls = ldr.getResources("META-INF/" +
plugin.name().toLowerCase()
- + ".classnames.properties");
-
- while (pluginUrls.hasMoreElements())
- processResource(pluginUrls.nextElement(), proc);
- }
- }
}
/**
@@ -242,7 +227,7 @@ public class MarshallerUtils {
* @param proc Class processor (class name consumer).
* @throws IOException In case of error.
*/
- private static void processResource(URL url, Consumer<String> proc) throws
IOException {
+ public static void processResource(URL url, Consumer<String> proc) throws
IOException {
try (BufferedReader rdr = new BufferedReader(new
InputStreamReader(url.openStream()))) {
String line;
diff --git
a/modules/commons/src/main/java/org/apache/ignite/IgniteCommonsSystemProperties.java
b/modules/commons/src/main/java/org/apache/ignite/IgniteCommonsSystemProperties.java
index 6aa8c01e957..d424f23cfe7 100644
---
a/modules/commons/src/main/java/org/apache/ignite/IgniteCommonsSystemProperties.java
+++
b/modules/commons/src/main/java/org/apache/ignite/IgniteCommonsSystemProperties.java
@@ -19,6 +19,7 @@ package org.apache.ignite;
import java.io.Serializable;
import org.apache.ignite.internal.util.GridLogThrottle;
+import org.apache.ignite.lang.IgniteExperimental;
import org.jetbrains.annotations.Nullable;
import static
org.apache.ignite.internal.util.CommonUtils.DFLT_MARSHAL_BUFFERS_PER_THREAD_POOL_SIZE;
@@ -153,6 +154,37 @@ public class IgniteCommonsSystemProperties {
"memory block is released. This will help to recognize cases when
already released memory is accessed")
public static final String IGNITE_OFFHEAP_SAFE_RELEASE =
"IGNITE_OFFHEAP_SAFE_RELEASE";
+ /** Human-readable ID of a data center where the node is running. */
+ @IgniteExperimental
+ @SystemProperty(value = "Data Center ID where local node is running. Not
required for a single Data Center deployments",
+ type = String.class)
+ public static final String IGNITE_DATA_CENTER_ID = "IGNITE_DATA_CENTER_ID";
+
+ /** Defines path to the file that contains list of classes allowed to safe
deserialization.*/
+ @SystemProperty(value = "Path to the file that contains list of classes
allowed to safe deserialization",
+ type = String.class)
+ public static final String IGNITE_MARSHALLER_WHITELIST =
"IGNITE_MARSHALLER_WHITELIST";
+
+ /** Defines path to the file that contains list of classes disallowed to
safe deserialization.*/
+ @SystemProperty(value = "Path to the file that contains list of classes
disallowed to safe deserialization",
+ type = String.class)
+ public static final String IGNITE_MARSHALLER_BLACKLIST =
"IGNITE_MARSHALLER_BLACKLIST";
+
+ /**
+ * If this parameter is set to true, Ignite will automatically configure
an ObjectInputFilter instance for the
+ * current JVM it is running in.
+ * Default value is {@code true}.
+ */
+ @SystemProperty(
+ value = "If this parameter is set to true, Ignite will automatically
configure an ObjectInputFilter" +
+ " instance for the current JVM it is running in. Filtering is
based on class lists defined by the" +
+ " `IGNITE_MARSHALLER_WHITELIST` and `IGNITE_MARSHALLER_BLACKLIST`
system properties or their default values." +
+ " Disabling it is not recommended because the Ignite host may be
vulnerable to RCE attacks based on Java" +
+ " serialization mechanisms",
+ defaults = "true"
+ )
+ public static final String
IGNITE_ENABLE_OBJECT_INPUT_FILTER_AUTOCONFIGURATION =
"IGNITE_ENABLE_OBJECT_INPUT_FILTER_AUTOCONFIGURATION";
+
/**
* @param enumCls Enum type.
* @param name Name of the system property or environment variable.
diff --git
a/modules/core/src/main/java/org/apache/ignite/cache/CacheEntryVersion.java
b/modules/commons/src/main/java/org/apache/ignite/cache/CacheEntryVersion.java
similarity index 74%
rename from
modules/core/src/main/java/org/apache/ignite/cache/CacheEntryVersion.java
rename to
modules/commons/src/main/java/org/apache/ignite/cache/CacheEntryVersion.java
index 0953740f957..71046d1239c 100644
--- a/modules/core/src/main/java/org/apache/ignite/cache/CacheEntryVersion.java
+++
b/modules/commons/src/main/java/org/apache/ignite/cache/CacheEntryVersion.java
@@ -18,18 +18,15 @@
package org.apache.ignite.cache;
import java.io.Serializable;
-import java.util.Map;
-import
org.apache.ignite.internal.processors.cache.CacheConflictResolutionManager;
-import org.apache.ignite.internal.processors.cache.IgniteInternalCache;
-import
org.apache.ignite.internal.processors.cache.version.GridCacheVersionManager;
/**
* Entry event order.
* Two concurrent updates of the same entry can be ordered based on {@link
CacheEntryVersion} comparsion.
* Greater value means that event occurs later.
*
- * @see CacheConflictResolutionManager
- * @see GridCacheVersionManager#dataCenterId(byte)
+ *
+ * {@ignitelink
org.apache.ignite.internal.processors.cache.CacheConflictResolutionManager}
+ * {@ignitelink
org.apache.ignite.internal.processors.cache.version.GridCacheVersionManager#dataCenterId(byte)}
*/
public interface CacheEntryVersion extends Comparable<CacheEntryVersion>,
Serializable {
/**
@@ -44,7 +41,7 @@ public interface CacheEntryVersion extends
Comparable<CacheEntryVersion>, Serial
/**
* Cluster id is a value to distinguish updates in case user wants to
aggregate and sort updates from several
* Ignite clusters. {@code clusterId} id can be set for the node using
- * {@link GridCacheVersionManager#dataCenterId(byte)}.
+ * {@ignitelink
org.apache.ignite.internal.processors.cache.version.GridCacheVersionManager#dataCenterId(byte)}
*
* @return Cluster id.
*/
@@ -55,11 +52,12 @@ public interface CacheEntryVersion extends
Comparable<CacheEntryVersion>, Serial
/**
* If source of the update is "local" cluster then {@code null} will be
returned.
- * If updated comes from the other cluster using {@link
IgniteInternalCache#putAllConflict(Map)}
+ * If updated comes from the other cluster using
+ * {@ignitelink
org.apache.ignite.internal.processors.cache.IgniteInternalCache#putAllConflict(Map)}
* then entry version for other cluster.
* @return Replication version.
- * @see IgniteInternalCache#putAllConflict(Map)
- * @see IgniteInternalCache#removeAllConflict(Map)
+ * {@ignitelink
org.apache.ignite.internal.processors.cache.IgniteInternalCache#putAllConflict(Map)}
+ * {@ignitelink
org.apache.ignite.internal.processors.cache.IgniteInternalCache#removeAllConflict(Map)}
*/
public CacheEntryVersion otherClusterVersion();
}
diff --git
a/modules/core/src/main/java/org/apache/ignite/cache/query/CacheEntryEventAdapter.java
b/modules/commons/src/main/java/org/apache/ignite/cache/query/CacheEntryEventAdapter.java
similarity index 100%
rename from
modules/core/src/main/java/org/apache/ignite/cache/query/CacheEntryEventAdapter.java
rename to
modules/commons/src/main/java/org/apache/ignite/cache/query/CacheEntryEventAdapter.java
diff --git
a/modules/core/src/main/java/org/apache/ignite/cache/query/IndexQuery.java
b/modules/commons/src/main/java/org/apache/ignite/cache/query/IndexQuery.java
similarity index 100%
rename from
modules/core/src/main/java/org/apache/ignite/cache/query/IndexQuery.java
rename to
modules/commons/src/main/java/org/apache/ignite/cache/query/IndexQuery.java
diff --git
a/modules/core/src/main/java/org/apache/ignite/cache/query/IndexQueryCriterion.java
b/modules/commons/src/main/java/org/apache/ignite/cache/query/IndexQueryCriterion.java
similarity index 100%
rename from
modules/core/src/main/java/org/apache/ignite/cache/query/IndexQueryCriterion.java
rename to
modules/commons/src/main/java/org/apache/ignite/cache/query/IndexQueryCriterion.java
diff --git
a/modules/core/src/main/java/org/apache/ignite/cache/query/SqlQuery.java
b/modules/commons/src/main/java/org/apache/ignite/cache/query/SqlQuery.java
similarity index 97%
rename from
modules/core/src/main/java/org/apache/ignite/cache/query/SqlQuery.java
rename to
modules/commons/src/main/java/org/apache/ignite/cache/query/SqlQuery.java
index 64864b35104..b7be00fc6b7 100644
--- a/modules/core/src/main/java/org/apache/ignite/cache/query/SqlQuery.java
+++ b/modules/commons/src/main/java/org/apache/ignite/cache/query/SqlQuery.java
@@ -19,8 +19,6 @@ package org.apache.ignite.cache.query;
import java.util.concurrent.TimeUnit;
import javax.cache.Cache;
-import org.apache.ignite.IgniteCache;
-import org.apache.ignite.internal.processors.query.QueryUtils;
import org.apache.ignite.internal.util.CommonUtils;
import org.apache.ignite.internal.util.tostring.GridToStringInclude;
import org.apache.ignite.internal.util.typedef.internal.A;
@@ -30,7 +28,7 @@ import org.jetbrains.annotations.Nullable;
/**
* SQL Query.
*
- * @see IgniteCache#query(Query)
+ * {@ignitelink org.apache.ignite.IgniteCache#query(Query)}
*
* @deprecated Since 2.8, please use {@link SqlFieldsQuery} instead.
*/
@@ -209,7 +207,7 @@ public final class SqlQuery<K, V> extends
Query<Cache.Entry<K, V>> {
* @return {@code this} For chaining.
*/
public SqlQuery<K, V> setType(Class<?> type) {
- return setType(QueryUtils.typeName(type));
+ return setType(CommonUtils.typeName(type));
}
/**
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/ClassSet.java
b/modules/commons/src/main/java/org/apache/ignite/internal/ClassSet.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/internal/ClassSet.java
rename to modules/commons/src/main/java/org/apache/ignite/internal/ClassSet.java
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/InIndexQueryCriterion.java
b/modules/commons/src/main/java/org/apache/ignite/internal/cache/query/InIndexQueryCriterion.java
similarity index 100%
rename from
modules/core/src/main/java/org/apache/ignite/internal/cache/query/InIndexQueryCriterion.java
rename to
modules/commons/src/main/java/org/apache/ignite/internal/cache/query/InIndexQueryCriterion.java
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/RangeIndexQueryCriterion.java
b/modules/commons/src/main/java/org/apache/ignite/internal/cache/query/RangeIndexQueryCriterion.java
similarity index 100%
rename from
modules/core/src/main/java/org/apache/ignite/internal/cache/query/RangeIndexQueryCriterion.java
rename to
modules/commons/src/main/java/org/apache/ignite/internal/cache/query/RangeIndexQueryCriterion.java
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/UnknownMessageException.java
b/modules/commons/src/main/java/org/apache/ignite/internal/managers/communication/UnknownMessageException.java
similarity index 100%
rename from
modules/core/src/main/java/org/apache/ignite/internal/managers/communication/UnknownMessageException.java
rename to
modules/commons/src/main/java/org/apache/ignite/internal/managers/communication/UnknownMessageException.java
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheInvokeResult.java
b/modules/commons/src/main/java/org/apache/ignite/internal/processors/cache/CacheInvokeResult.java
similarity index 88%
rename from
modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheInvokeResult.java
rename to
modules/commons/src/main/java/org/apache/ignite/internal/processors/cache/CacheInvokeResult.java
index 23605aabe2f..b868064804c 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheInvokeResult.java
+++
b/modules/commons/src/main/java/org/apache/ignite/internal/processors/cache/CacheInvokeResult.java
@@ -25,9 +25,6 @@ import javax.cache.processor.EntryProcessor;
import javax.cache.processor.EntryProcessorException;
import javax.cache.processor.EntryProcessorResult;
import javax.cache.processor.MutableEntry;
-import org.apache.ignite.IgniteException;
-import org.apache.ignite.internal.UnregisteredBinaryTypeException;
-import org.apache.ignite.internal.UnregisteredClassException;
import org.apache.ignite.internal.util.tostring.GridToStringInclude;
import org.apache.ignite.internal.util.typedef.internal.S;
@@ -99,11 +96,8 @@ public class CacheInvokeResult<T> implements
EntryProcessorResult<T>, Externaliz
/** {@inheritDoc} */
@Override public T get() throws EntryProcessorException {
if (err != null) {
- if (err instanceof UnregisteredClassException || err instanceof
UnregisteredBinaryTypeException)
- throw (IgniteException)err;
-
- if (err instanceof EntryProcessorException)
- throw (EntryProcessorException)err;
+ if (err instanceof RuntimeException)
+ throw (RuntimeException)err;
throw new EntryProcessorException(err);
}
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersion.java
b/modules/commons/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersion.java
similarity index 96%
rename from
modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersion.java
rename to
modules/commons/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersion.java
index e85a97ba55d..ed2a945685b 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersion.java
+++
b/modules/commons/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersion.java
@@ -21,9 +21,7 @@ import java.io.Externalizable;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
-import java.util.UUID;
import org.apache.ignite.cache.CacheEntryVersion;
-import org.apache.ignite.lang.IgniteUuid;
/**
* Grid unique version.
@@ -183,13 +181,6 @@ public class GridCacheVersion implements Externalizable,
CacheEntryVersion {
return compareTo(ver) < 0;
}
- /**
- * @return Version represented as {@code IgniteUuid}
- */
- public IgniteUuid asIgniteUuid() {
- return new IgniteUuid(new UUID(topVer, nodeOrderDrId), order);
- }
-
/** {@inheritDoc} */
@Override public void writeExternal(ObjectOutput out) throws IOException {
out.writeInt(topVer);
diff --git
a/modules/commons/src/main/java/org/apache/ignite/internal/util/CommonUtils.java
b/modules/commons/src/main/java/org/apache/ignite/internal/util/CommonUtils.java
index c821bfb1d62..3cda23f41ea 100644
---
a/modules/commons/src/main/java/org/apache/ignite/internal/util/CommonUtils.java
+++
b/modules/commons/src/main/java/org/apache/ignite/internal/util/CommonUtils.java
@@ -2534,4 +2534,62 @@ public abstract class CommonUtils {
? (IgniteCheckedException)t
: new IgniteCheckedException(t);
}
+
+ /**
+ * Gets type name by class name.
+ *
+ * @param clsName Class name.
+ * @return Type name.
+ */
+ public static String typeName(String clsName) {
+ int genericStart = clsName.indexOf('`'); // .NET generic, not valid
for Java class name.
+
+ if (genericStart >= 0)
+ clsName = clsName.substring(0, genericStart);
+
+ int pkgEnd = clsName.lastIndexOf('.');
+
+ if (pkgEnd >= 0 && pkgEnd < clsName.length() - 1)
+ clsName = clsName.substring(pkgEnd + 1);
+
+ if (clsName.endsWith("[]"))
+ clsName = clsName.substring(0, clsName.length() - 2) + "_array";
+
+ int parentEnd = clsName.lastIndexOf('$');
+
+ if (parentEnd >= 0)
+ clsName = clsName.substring(parentEnd + 1);
+
+ parentEnd = clsName.lastIndexOf('+'); // .NET parent
+
+ if (parentEnd >= 0)
+ clsName = clsName.substring(parentEnd + 1);
+
+ return clsName;
+ }
+
+ /**
+ * Gets type name by class.
+ *
+ * @param cls Class.
+ * @return Type name.
+ */
+ public static String typeName(Class<?> cls) {
+ String typeName = cls.getSimpleName();
+
+ // To protect from failure on anonymous classes.
+ if (typeName.isEmpty()) {
+ String pkg = cls.getPackage().getName();
+
+ typeName = cls.getName().substring(pkg.length() + (pkg.isEmpty() ?
0 : 1));
+ }
+
+ if (cls.isArray()) {
+ assert typeName.endsWith("[]");
+
+ typeName = typeName.substring(0, typeName.length() - 2) + "_array";
+ }
+
+ return typeName;
+ }
}
diff --git
a/modules/core/src/main/java/org/apache/ignite/platform/PlatformServiceMethod.java
b/modules/commons/src/main/java/org/apache/ignite/platform/PlatformServiceMethod.java
similarity index 100%
rename from
modules/core/src/main/java/org/apache/ignite/platform/PlatformServiceMethod.java
rename to
modules/commons/src/main/java/org/apache/ignite/platform/PlatformServiceMethod.java
diff --git
a/modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/Message.java
b/modules/commons/src/main/java/org/apache/ignite/plugin/extensions/communication/Message.java
similarity index 100%
rename from
modules/core/src/main/java/org/apache/ignite/plugin/extensions/communication/Message.java
rename to
modules/commons/src/main/java/org/apache/ignite/plugin/extensions/communication/Message.java
diff --git
a/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerCheckIncrementalSnapshotTest.java
b/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerCheckIncrementalSnapshotTest.java
index 21fe7d40913..766d312dbcd 100644
---
a/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerCheckIncrementalSnapshotTest.java
+++
b/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerCheckIncrementalSnapshotTest.java
@@ -29,6 +29,7 @@ import org.apache.ignite.configuration.IgniteConfiguration;
import org.apache.ignite.internal.GridKernalContext;
import org.apache.ignite.internal.IgniteEx;
import org.apache.ignite.internal.TestRecordingCommunicationSpi;
+import org.apache.ignite.internal.binary.BinaryUtils;
import org.apache.ignite.internal.management.cache.IdleVerifyResult;
import org.apache.ignite.internal.pagemem.wal.IgniteWriteAheadLogManager;
import org.apache.ignite.internal.pagemem.wal.record.DataRecord;
@@ -223,7 +224,7 @@ public class GridCommandHandlerCheckIncrementalSnapshotTest
extends GridCommandH
load(xid -> {
if (skipTxRec == null) {
skipTxRec = (consId, rec) ->
- grid(0).localNode().consistentId().equals(consId) &&
xid.equals(rec.nearXidVersion().asIgniteUuid());
+ grid(0).localNode().consistentId().equals(consId) &&
xid.equals(BinaryUtils.asIgniteUuid(rec.nearXidVersion()));
}
});
@@ -248,7 +249,7 @@ public class GridCommandHandlerCheckIncrementalSnapshotTest
extends GridCommandH
load(xid -> {
if (skipTxRec == null) {
skipTxRec = (consId, rec) ->
- grid(0).localNode().consistentId().equals(consId) &&
xid.equals(rec.nearXidVersion().asIgniteUuid());
+ grid(0).localNode().consistentId().equals(consId) &&
xid.equals(BinaryUtils.asIgniteUuid(rec.nearXidVersion()));
}
});
@@ -308,7 +309,7 @@ public class GridCommandHandlerCheckIncrementalSnapshotTest
extends GridCommandH
if (skipDataRec == null) {
skipDataRec = (consId, rec) ->
grid(0).localNode().consistentId().equals(consId)
- &&
xid.equals(rec.writeEntries().get(0).nearXidVersion().asIgniteUuid());
+ &&
xid.equals(BinaryUtils.asIgniteUuid(rec.writeEntries().get(0).nearXidVersion()));
}
});
@@ -325,14 +326,14 @@ public class
GridCommandHandlerCheckIncrementalSnapshotTest extends GridCommandH
if (skipDataRec == null) {
skipDataRec = (consId, rec) ->
grid(0).localNode().consistentId().equals(consId)
- &&
xid.equals(rec.writeEntries().get(0).nearXidVersion().asIgniteUuid());
+ &&
xid.equals(BinaryUtils.asIgniteUuid(rec.writeEntries().get(0).nearXidVersion()));
return;
}
if (skipTxRec == null) {
skipTxRec = (consId, rec) ->
- grid(0).localNode().consistentId().equals(consId) &&
xid.equals(rec.nearXidVersion().asIgniteUuid());
+ grid(0).localNode().consistentId().equals(consId) &&
xid.equals(BinaryUtils.asIgniteUuid(rec.nearXidVersion()));
}
});
diff --git
a/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java
b/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java
index b1c36a90158..18b3e0f86fb 100644
--- a/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java
+++ b/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java
@@ -41,7 +41,6 @@ import
org.apache.ignite.internal.processors.performancestatistics.FilePerforman
import
org.apache.ignite.internal.processors.query.schema.SchemaIndexCachePartitionWorker;
import org.apache.ignite.internal.processors.rest.GridRestCommand;
import org.apache.ignite.internal.util.IgniteUtils;
-import org.apache.ignite.lang.IgniteExperimental;
import org.apache.ignite.mxbean.MetricsMxBean;
import org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi;
import org.apache.ignite.spi.metric.ReadOnlyMetricRegistry;
@@ -744,12 +743,6 @@ public final class IgniteSystemProperties extends
IgniteCommonsSystemProperties
defaults = "" + DFLT_DISCOVERY_HISTORY_SIZE)
public static final String IGNITE_DISCOVERY_HISTORY_SIZE =
"IGNITE_DISCOVERY_HISTORY_SIZE";
- /** Human-readable ID of a data center where the node is running. */
- @IgniteExperimental
- @SystemProperty(value = "Data Center ID where local node is running. Not
required for a single Data Center deployments",
- type = String.class)
- public static final String IGNITE_DATA_CENTER_ID = "IGNITE_DATA_CENTER_ID";
-
/** Maximum number of discovery message history used to support client
reconnect. */
@SystemProperty(value = "Maximum number of discovery message history used
to support client reconnect",
type = Integer.class, defaults = "" +
DFLT_DISCOVERY_CLIENT_RECONNECT_HISTORY_SIZE)
@@ -814,31 +807,6 @@ public final class IgniteSystemProperties extends
IgniteCommonsSystemProperties
@SystemProperty("Enables local store keeps primary only. Backward
compatibility flag")
public static final String IGNITE_LOCAL_STORE_KEEPS_PRIMARY_ONLY =
"IGNITE_LOCAL_STORE_KEEPS_PRIMARY_ONLY";
- /** Defines path to the file that contains list of classes allowed to safe
deserialization.*/
- @SystemProperty(value = "Path to the file that contains list of classes
allowed to safe deserialization",
- type = String.class)
- public static final String IGNITE_MARSHALLER_WHITELIST =
"IGNITE_MARSHALLER_WHITELIST";
-
- /** Defines path to the file that contains list of classes disallowed to
safe deserialization.*/
- @SystemProperty(value = "Path to the file that contains list of classes
disallowed to safe deserialization",
- type = String.class)
- public static final String IGNITE_MARSHALLER_BLACKLIST =
"IGNITE_MARSHALLER_BLACKLIST";
-
- /**
- * If this parameter is set to true, Ignite will automatically configure
an ObjectInputFilter instance for the
- * current JVM it is running in.
- * Default value is {@code true}.
- */
- @SystemProperty(
- value = "If this parameter is set to true, Ignite will automatically
configure an ObjectInputFilter" +
- " instance for the current JVM it is running in. Filtering is
based on class lists defined by the" +
- " `IGNITE_MARSHALLER_WHITELIST` and `IGNITE_MARSHALLER_BLACKLIST`
system properties or their default values." +
- " Disabling it is not recommended because the Ignite host may be
vulnerable to RCE attacks based on Java" +
- " serialization mechanisms",
- defaults = "true"
- )
- public static final String
IGNITE_ENABLE_OBJECT_INPUT_FILTER_AUTOCONFIGURATION =
"IGNITE_ENABLE_OBJECT_INPUT_FILTER_AUTOCONFIGURATION";
-
/**
* If set to {@code true}, then default selected keys set is used inside
* {@code GridNioServer} which lead to some extra garbage generation when
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextImpl.java
b/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextImpl.java
index fda923e3596..2521be22a8e 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextImpl.java
+++
b/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextImpl.java
@@ -19,10 +19,12 @@ package org.apache.ignite.internal;
import java.io.File;
import java.io.IOException;
+import java.net.URL;
import java.util.AbstractMap;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
+import java.util.Enumeration;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
@@ -34,6 +36,7 @@ import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.ExecutorService;
import java.util.function.BiPredicate;
+import java.util.function.Consumer;
import java.util.function.Function;
import javax.management.MBeanServer;
import org.apache.ignite.IgniteCheckedException;
@@ -125,7 +128,7 @@ public class MarshallerContextImpl implements
MarshallerContext {
try {
ClassLoader ldr = U.gridClassLoader();
- MarshallerUtils.processSystemClasses(ldr, plugins, clsName -> {
+ processSystemClasses(ldr, plugins, clsName -> {
int typeId = clsName.hashCode();
MappedName oldClsName;
@@ -709,6 +712,29 @@ public class MarshallerContextImpl implements
MarshallerContext {
this.marshallerMappingFileStoreDir = marshallerMappingFileStoreDir;
}
+ /**
+ * Finds all system class names (JDK, Ignite and plugin classes) and
processes them with the given consumer.
+ *
+ * @param ldr Class loader.
+ * @param plugins Plugins (may be {@code null}).
+ * @param proc Class processor (class name consumer).
+ * @throws IOException In case of error.
+ */
+ private static void processSystemClasses(ClassLoader ldr, @Nullable
Collection<PluginProvider> plugins,
+ Consumer<String> proc) throws
IOException {
+ MarshallerUtils.processSystemClasses(ldr, proc);
+
+ if (plugins != null && !plugins.isEmpty()) {
+ for (PluginProvider plugin : plugins) {
+ Enumeration<URL> pluginUrls = ldr.getResources("META-INF/" +
plugin.name().toLowerCase()
+ + ".classnames.properties");
+
+ while (pluginUrls.hasMoreElements())
+ MarshallerUtils.processResource(pluginUrls.nextElement(),
proc);
+ }
+ }
+ }
+
/**
*
*/
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/client/thin/ReliableChannelImpl.java
b/modules/core/src/main/java/org/apache/ignite/internal/client/thin/ReliableChannelImpl.java
index 931a9dfb772..b29bb69629f 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/client/thin/ReliableChannelImpl.java
+++
b/modules/core/src/main/java/org/apache/ignite/internal/client/thin/ReliableChannelImpl.java
@@ -39,8 +39,8 @@ import java.util.function.Consumer;
import java.util.function.Function;
import java.util.stream.Collectors;
import org.apache.ignite.IgniteBinary;
+import org.apache.ignite.IgniteCommonsSystemProperties;
import org.apache.ignite.IgniteLogger;
-import org.apache.ignite.IgniteSystemProperties;
import org.apache.ignite.client.ClientAuthenticationException;
import org.apache.ignite.client.ClientConnectionException;
import org.apache.ignite.client.ClientException;
@@ -141,10 +141,10 @@ final class ReliableChannelImpl implements
ReliableChannelEx {
partitionAwarenessEnabled = clientCfg.isPartitionAwarenessEnabled();
- String dcId =
IgniteSystemProperties.getString(IgniteSystemProperties.IGNITE_DATA_CENTER_ID);
+ String dcId =
IgniteCommonsSystemProperties.getString(IgniteCommonsSystemProperties.IGNITE_DATA_CENTER_ID);
if (dcId == null && !F.isEmpty(clientCfg.getUserAttributes()))
- dcId =
clientCfg.getUserAttributes().get(IgniteSystemProperties.IGNITE_DATA_CENTER_ID);
+ dcId =
clientCfg.getUserAttributes().get(IgniteCommonsSystemProperties.IGNITE_DATA_CENTER_ID);
affinityCtx = new ClientCacheAffinityContext(
binary,
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/client/thin/TcpIgniteClient.java
b/modules/core/src/main/java/org/apache/ignite/internal/client/thin/TcpIgniteClient.java
index b21eca85781..3aca5f9fde6 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/client/thin/TcpIgniteClient.java
+++
b/modules/core/src/main/java/org/apache/ignite/internal/client/thin/TcpIgniteClient.java
@@ -71,9 +71,9 @@ import
org.apache.ignite.internal.client.thin.TcpClientTransactions.TcpClientTra
import org.apache.ignite.internal.client.thin.io.ClientConnectionMultiplexer;
import org.apache.ignite.internal.processors.platform.client.ClientStatus;
import
org.apache.ignite.internal.processors.platform.client.IgniteClientException;
+import org.apache.ignite.internal.util.CommonUtils;
import org.apache.ignite.internal.util.GridArgumentCheck;
import org.apache.ignite.internal.util.typedef.F;
-import org.apache.ignite.internal.util.typedef.internal.U;
import org.apache.ignite.lang.IgnitePredicate;
import org.apache.ignite.logger.NullLogger;
import org.apache.ignite.marshaller.MarshallerContext;
@@ -792,7 +792,7 @@ public class TcpIgniteClient implements IgniteClient {
*/
public ClientMarshallerContext() {
try {
- MarshallerUtils.processSystemClasses(U.gridClassLoader(),
null, sysTypes::add);
+
MarshallerUtils.processSystemClasses(CommonUtils.gridClassLoader(),
sysTypes::add);
}
catch (IOException e) {
throw new IllegalStateException("Failed to initialize
marshaller context.", e);
@@ -858,7 +858,8 @@ public class TcpIgniteClient implements IgniteClient {
@Override public Class getClass(int typeId, ClassLoader ldr)
throws ClassNotFoundException, IgniteCheckedException {
- return U.forName(getClassName(MarshallerPlatformIds.JAVA_ID,
typeId), ldr, null);
+ return
CommonUtils.forName(getClassName(MarshallerPlatformIds.JAVA_ID, typeId), ldr,
null,
+ Marshallers.USE_CACHE.get());
}
/** {@inheritDoc} */
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinConnection.java
b/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinConnection.java
index 619057cd6ce..64e1fb2f45c 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinConnection.java
+++
b/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinConnection.java
@@ -2427,7 +2427,7 @@ public class JdbcThinConnection implements Connection {
*/
public JdbcMarshallerContext() {
try {
- processSystemClasses(U.gridClassLoader(), null, sysTypes::add);
+ processSystemClasses(U.gridClassLoader(), sysTypes::add);
}
catch (IOException e) {
throw new IgniteException("Unable to initialize marshaller
context", e);
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/management/tx/FetchNearXidVersionTask.java
b/modules/core/src/main/java/org/apache/ignite/internal/management/tx/FetchNearXidVersionTask.java
index 519dd55a756..7845fbf8998 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/management/tx/FetchNearXidVersionTask.java
+++
b/modules/core/src/main/java/org/apache/ignite/internal/management/tx/FetchNearXidVersionTask.java
@@ -23,6 +23,7 @@ import java.util.stream.Collectors;
import org.apache.ignite.IgniteException;
import org.apache.ignite.cluster.ClusterNode;
import org.apache.ignite.compute.ComputeJobResult;
+import org.apache.ignite.internal.binary.BinaryUtils;
import
org.apache.ignite.internal.processors.cache.transactions.IgniteInternalTx;
import
org.apache.ignite.internal.processors.cache.transactions.IgniteTxManager;
import org.apache.ignite.internal.processors.cache.version.GridCacheVersion;
@@ -78,7 +79,7 @@ public class FetchNearXidVersionTask extends
VisorMultiNodeTask<TxInfoCommandArg
for (IgniteInternalTx tx : transactions) {
if (tx.xid().equals(arg.uuid()) ||
- tx.nearXidVersion().asIgniteUuid().equals(arg.uuid()) ||
+
BinaryUtils.asIgniteUuid(tx.nearXidVersion()).equals(arg.uuid()) ||
tx.xidVersion().equals(arg.gridCacheVersion()) ||
tx.nearXidVersion().equals(arg.gridCacheVersion()))
return tx.nearXidVersion();
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/management/tx/TxTask.java
b/modules/core/src/main/java/org/apache/ignite/internal/management/tx/TxTask.java
index ffd7a6a31ab..4e07c6525f0 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/management/tx/TxTask.java
+++
b/modules/core/src/main/java/org/apache/ignite/internal/management/tx/TxTask.java
@@ -38,6 +38,7 @@ import org.apache.ignite.cluster.ClusterNode;
import org.apache.ignite.compute.ComputeJobResult;
import org.apache.ignite.internal.IgniteEx;
import org.apache.ignite.internal.IgniteInternalFuture;
+import org.apache.ignite.internal.binary.BinaryUtils;
import org.apache.ignite.internal.management.tx.TxCommand.AbstractTxCommandArg;
import org.apache.ignite.internal.managers.discovery.DiscoCache;
import org.apache.ignite.internal.processors.cache.GridCacheContext;
@@ -351,7 +352,7 @@ public class TxTask
infos.add(new TxInfo(locTx.xid(), locTx.startTime(), duration,
locTx.isolation(),
locTx.concurrency(), locTx.timeout(), lb, mappings,
locTx.state(), size,
- locTx.nearXidVersion().asIgniteUuid(),
locTx.masterNodeIds(), locTx.topologyVersionSnapshot(),
+ BinaryUtils.asIgniteUuid(locTx.nearXidVersion()),
locTx.masterNodeIds(), locTx.topologyVersionSnapshot(),
verboseInfo));
if (arg.kill())
@@ -367,9 +368,9 @@ public class TxTask
if (completed != null) {
if (Boolean.TRUE.equals(completed))
- infos.add(new
TxInfo(infoArg.gridCacheVersion().asIgniteUuid(), COMMITTED));
+ infos.add(new
TxInfo(BinaryUtils.asIgniteUuid(infoArg.gridCacheVersion()), COMMITTED));
else if (Boolean.FALSE.equals(completed))
- infos.add(new
TxInfo(infoArg.gridCacheVersion().asIgniteUuid(), ROLLED_BACK));
+ infos.add(new
TxInfo(BinaryUtils.asIgniteUuid(infoArg.gridCacheVersion()), ROLLED_BACK));
}
}
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheReturn.java
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheReturn.java
index 7c78a10a5cf..b18f4ddef15 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheReturn.java
+++
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheReturn.java
@@ -259,7 +259,8 @@ public class GridCacheReturn implements Message {
throw (UnregisteredBinaryTypeException)err;
}
- CacheInvokeResult res0 = err == null ?
CacheInvokeResult.fromResult(res) : CacheInvokeResult.fromError(err);
+ CacheInvokeResult res0 = err == null ?
CacheInvokeResult.fromResult(res)
+ :
CacheInvokeResult.fromError(CU.prepareEntryProcessorError(err));
Object resKey = key0 != null ? key0 :
((keepBinary && key instanceof BinaryObject) ? key :
CU.value(key, cctx, true));
@@ -367,7 +368,7 @@ public class GridCacheReturn implements Message {
for (CacheInvokeDirectResult res : invokeResCol) {
CacheInvokeResult<?> res0 = res.error() == null ?
CacheInvokeResult.fromResult(ctx.cacheObjectContext().unwrapBinaryIfNeeded(res.result(),
true, false, null)) :
- CacheInvokeResult.fromError(res.error());
+
CacheInvokeResult.fromError(CU.prepareEntryProcessorError(res.error()));
map0.put(ctx.cacheObjectContext().unwrapBinaryIfNeeded(res.key(), true, false,
null), res0);
}
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java
index c9c47475f4d..7f0b4d36bd1 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java
+++
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java
@@ -41,6 +41,7 @@ import javax.cache.expiry.ExpiryPolicy;
import javax.cache.integration.CacheLoader;
import javax.cache.integration.CacheWriter;
import javax.cache.integration.CacheWriterException;
+import javax.cache.processor.EntryProcessorException;
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.IgniteCheckedException;
@@ -65,6 +66,8 @@ import org.apache.ignite.internal.GridKernalContext;
import org.apache.ignite.internal.IgniteClientDisconnectedCheckedException;
import org.apache.ignite.internal.IgniteInternalFuture;
import org.apache.ignite.internal.IgniteNodeAttributes;
+import org.apache.ignite.internal.UnregisteredBinaryTypeException;
+import org.apache.ignite.internal.UnregisteredClassException;
import org.apache.ignite.internal.cluster.ClusterGroupEmptyCheckedException;
import org.apache.ignite.internal.cluster.ClusterTopologyCheckedException;
import
org.apache.ignite.internal.cluster.ClusterTopologyServerNotFoundException;
@@ -2214,6 +2217,26 @@ public class GridCacheUtils {
return affFields;
}
+ /**
+ * Prepares an entry processor error so it can be stored in a {@link
CacheInvokeResult} and rethrown
+ * as-is by {@link CacheInvokeResult#get()}: an {@link
UnregisteredClassException} or
+ * {@link UnregisteredBinaryTypeException} (which must propagate
unwrapped) and an existing
+ * {@link EntryProcessorException} are returned unchanged; any other error
is wrapped in an
+ * {@link EntryProcessorException}.
+ *
+ * @param err Error thrown by the entry processor.
+ * @return Prepared error to store in the cache invoke result.
+ */
+ public static Throwable prepareEntryProcessorError(Throwable err) {
+ if (err instanceof UnregisteredClassException || err instanceof
UnregisteredBinaryTypeException)
+ return err;
+
+ if (err instanceof EntryProcessorException)
+ return err;
+
+ return new EntryProcessorException(err);
+ }
+
/**
*
*/
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLockFuture.java
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLockFuture.java
index 0f2e50892fb..10d87957edb 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLockFuture.java
+++
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLockFuture.java
@@ -34,6 +34,7 @@ import org.apache.ignite.IgniteLogger;
import org.apache.ignite.cluster.ClusterNode;
import org.apache.ignite.internal.IgniteInternalFuture;
import org.apache.ignite.internal.NodeStoppingException;
+import org.apache.ignite.internal.binary.BinaryUtils;
import org.apache.ignite.internal.cluster.ClusterTopologyCheckedException;
import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion;
import org.apache.ignite.internal.processors.cache.CacheLockCandidates;
@@ -1258,7 +1259,7 @@ public final class GridDhtLockFuture extends
GridCacheCompoundIdentityFuture<Boo
sb.append("Transaction tx=").append(tx.getClass().getSimpleName());
sb.append(" [xid=").append(tx.xid());
sb.append(", xidVer=").append(tx.xidVersion());
- sb.append(", nearXid=").append(tx.nearXidVersion().asIgniteUuid());
+ sb.append(",
nearXid=").append(BinaryUtils.asIgniteUuid(tx.nearXidVersion()));
sb.append(", nearXidVer=").append(tx.nearXidVersion());
sb.append(", nearNodeId=").append(tx.nearNodeId());
sb.append(", label=").append(tx.label());
@@ -1284,7 +1285,7 @@ public final class GridDhtLockFuture extends
GridCacheCompoundIdentityFuture<Boo
sb.append("key=").append(key).append(",
owner=");
sb.append("[xid=").append(itx.xid()).append(",
");
sb.append("xidVer=").append(itx.xidVersion()).append(", ");
-
sb.append("nearXid=").append(itx.nearXidVersion().asIgniteUuid()).append(", ");
+
sb.append("nearXid=").append(BinaryUtils.asIgniteUuid(itx.nearXidVersion())).append(",
");
sb.append("nearXidVer=").append(itx.nearXidVersion()).append(", ");
sb.append("label=").append(itx.label()).append(", ");
sb.append("nearNodeId=").append(candidate.otherNodeId()).append("]");
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java
index 71b36a3cef0..4de175ded7d 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java
+++
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java
@@ -2237,7 +2237,7 @@ public class GridDhtAtomicCache<K, V> extends
GridDhtCacheAdapter<K, V> {
throw e;
}
catch (Exception e) {
- curInvokeRes = CacheInvokeResult.fromError(e);
+ curInvokeRes =
CacheInvokeResult.fromError(CU.prepareEntryProcessorError(e));
updated = old;
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxAdapter.java
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxAdapter.java
index 1529d53b5ce..9eb50bc0c65 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxAdapter.java
+++
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxAdapter.java
@@ -41,6 +41,7 @@ import org.apache.ignite.cache.store.CacheStore;
import org.apache.ignite.cluster.ClusterNode;
import org.apache.ignite.events.TransactionStateChangedEvent;
import org.apache.ignite.internal.IgniteInternalFuture;
+import org.apache.ignite.internal.binary.BinaryUtils;
import org.apache.ignite.internal.managers.discovery.ConsistentIdMapper;
import
org.apache.ignite.internal.managers.eventstorage.GridEventStorageManager;
import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion;
@@ -693,7 +694,7 @@ public abstract class IgniteTxAdapter extends
GridMetadataAwareAdapter implement
/** {@inheritDoc} */
@Override public IgniteUuid xid() {
- return xidVer.asIgniteUuid();
+ return BinaryUtils.asIgniteUuid(xidVer);
}
/** {@inheritDoc} */
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryUtils.java
b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryUtils.java
index 332a7d1ab27..21a16ba4d61 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryUtils.java
+++
b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryUtils.java
@@ -1138,30 +1138,7 @@ public class QueryUtils {
* @return Type name.
*/
public static String typeName(String clsName) {
- int genericStart = clsName.indexOf('`'); // .NET generic, not valid
for Java class name.
-
- if (genericStart >= 0)
- clsName = clsName.substring(0, genericStart);
-
- int pkgEnd = clsName.lastIndexOf('.');
-
- if (pkgEnd >= 0 && pkgEnd < clsName.length() - 1)
- clsName = clsName.substring(pkgEnd + 1);
-
- if (clsName.endsWith("[]"))
- clsName = clsName.substring(0, clsName.length() - 2) + "_array";
-
- int parentEnd = clsName.lastIndexOf('$');
-
- if (parentEnd >= 0)
- clsName = clsName.substring(parentEnd + 1);
-
- parentEnd = clsName.lastIndexOf('+'); // .NET parent
-
- if (parentEnd >= 0)
- clsName = clsName.substring(parentEnd + 1);
-
- return clsName;
+ return CommonUtils.typeName(clsName);
}
/**
@@ -1171,22 +1148,7 @@ public class QueryUtils {
* @return Type name.
*/
public static String typeName(Class<?> cls) {
- String typeName = cls.getSimpleName();
-
- // To protect from failure on anonymous classes.
- if (F.isEmpty(typeName)) {
- String pkg = cls.getPackage().getName();
-
- typeName = cls.getName().substring(pkg.length() + (pkg.isEmpty() ?
0 : 1));
- }
-
- if (cls.isArray()) {
- assert typeName.endsWith("[]");
-
- typeName = typeName.substring(0, typeName.length() - 2) + "_array";
- }
-
- return typeName;
+ return CommonUtils.typeName(cls);
}
/**
diff --git
a/modules/core/src/test/java/org/apache/ignite/internal/codegen/MessageProcessorTest.java
b/modules/core/src/test/java/org/apache/ignite/internal/codegen/MessageProcessorTest.java
index e1e2e38dbbf..5e4fdf0b35c 100644
---
a/modules/core/src/test/java/org/apache/ignite/internal/codegen/MessageProcessorTest.java
+++
b/modules/core/src/test/java/org/apache/ignite/internal/codegen/MessageProcessorTest.java
@@ -36,9 +36,9 @@ import org.apache.ignite.internal.MessageProcessor;
import org.apache.ignite.internal.Order;
import org.apache.ignite.internal.cache.query.QueryIndexMessage;
import org.apache.ignite.internal.util.CommonUtils;
+import org.apache.ignite.internal.util.IgniteUtils;
import org.apache.ignite.internal.util.typedef.F;
import org.apache.ignite.lang.IgniteUuid;
-import org.apache.ignite.plugin.extensions.communication.Message;
import
org.apache.ignite.plugin.extensions.communication.mappers.DefaultEnumMapper;
import org.apache.ignite.transactions.TransactionIsolation;
import org.junit.Test;
@@ -363,7 +363,7 @@ public class MessageProcessorTest {
for (String srcFile: srcFiles)
input.add(javaFile(srcFile));
- File igniteCoreJar = jarForClass(Message.class);
+ File igniteCoreJar = jarForClass(IgniteUtils.class);
File igniteCodegenJar = jarForClass(Order.class);
File igniteBinaryApiJar = jarForClass(IgniteUuid.class);
File igniteCommonsJar = jarForClass(CommonUtils.class);
diff --git
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/incremental/IncrementalSnapshotJoiningClientTest.java
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/incremental/IncrementalSnapshotJoiningClientTest.java
index fd42dc16fbf..d40a1686776 100644
---
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/incremental/IncrementalSnapshotJoiningClientTest.java
+++
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/incremental/IncrementalSnapshotJoiningClientTest.java
@@ -29,6 +29,7 @@ import org.apache.ignite.configuration.IgniteConfiguration;
import org.apache.ignite.internal.IgniteEx;
import org.apache.ignite.internal.IgniteInternalFuture;
import org.apache.ignite.internal.TestRecordingCommunicationSpi;
+import org.apache.ignite.internal.binary.BinaryUtils;
import org.apache.ignite.internal.pagemem.wal.WALIterator;
import
org.apache.ignite.internal.pagemem.wal.record.IncrementalSnapshotFinishRecord;
import org.apache.ignite.internal.pagemem.wal.record.WALRecord;
@@ -183,7 +184,7 @@ public class IncrementalSnapshotJoiningClientTest extends
AbstractIncrementalSna
if (rec.type() ==
WALRecord.RecordType.INCREMENTAL_SNAPSHOT_FINISH_RECORD) {
IncrementalSnapshotFinishRecord finRec =
(IncrementalSnapshotFinishRecord)rec;
- assertTrue(finRec.excluded().stream().anyMatch(id ->
id.asIgniteUuid().equals(txId)));
+ assertTrue(finRec.excluded().stream().anyMatch(id ->
BinaryUtils.asIgniteUuid(id).equals(txId)));
return true;
}
diff --git
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/incremental/IncrementalSnapshotRestoreTest.java
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/incremental/IncrementalSnapshotRestoreTest.java
index 5cad5b48d5c..d6553f9fa3d 100644
---
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/incremental/IncrementalSnapshotRestoreTest.java
+++
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/incremental/IncrementalSnapshotRestoreTest.java
@@ -53,6 +53,7 @@ import org.apache.ignite.internal.GridKernalContext;
import org.apache.ignite.internal.IgniteEx;
import org.apache.ignite.internal.TestRecordingCommunicationSpi;
import org.apache.ignite.internal.binary.BinaryContext;
+import org.apache.ignite.internal.binary.BinaryUtils;
import
org.apache.ignite.internal.management.consistency.ConsistencyRepairCommandArg;
import org.apache.ignite.internal.management.consistency.ConsistencyRepairTask;
import org.apache.ignite.internal.management.consistency.ConsistencyTaskResult;
@@ -675,7 +676,7 @@ public class IncrementalSnapshotRestoreTest extends
AbstractIncrementalSnapshotT
for (int n = 1; n < nodes(); n++) {
TestRecordingCommunicationSpi.spi(grid(n)).blockMessages((node,
msg) ->
msg instanceof GridNearTxPrepareResponse
- &&
((GridNearTxPrepareResponse)msg).version().asIgniteUuid().equals(exclTxId.get()));
+ &&
BinaryUtils.asIgniteUuid(((GridNearTxPrepareResponse)msg).version()).equals(exclTxId.get()));
}
msgBlkSet.countDown();
diff --git
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxPartitionCounterStateAbstractTest.java
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxPartitionCounterStateAbstractTest.java
index 65ef7afee2c..232cef9e2a3 100644
---
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxPartitionCounterStateAbstractTest.java
+++
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxPartitionCounterStateAbstractTest.java
@@ -45,6 +45,7 @@ import org.apache.ignite.internal.IgniteEx;
import org.apache.ignite.internal.IgniteInternalFuture;
import org.apache.ignite.internal.IgnitionEx;
import org.apache.ignite.internal.TestRecordingCommunicationSpi;
+import org.apache.ignite.internal.binary.BinaryUtils;
import org.apache.ignite.internal.processors.cache.PartitionUpdateCounter;
import
org.apache.ignite.internal.processors.cache.distributed.GridCacheTxRecoveryRequest;
import
org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTxFinishRequest;
@@ -313,7 +314,7 @@ public abstract class TxPartitionCounterStateAbstractTest
extends GridCommonAbst
futMap.put(req.futureId(), req.version());
- return cb.beforePrimaryPrepare(to,
req.version().asIgniteUuid(), createSendFuture(clientWrappedSpi, msg));
+ return cb.beforePrimaryPrepare(to,
BinaryUtils.asIgniteUuid(req.version()), createSendFuture(clientWrappedSpi,
msg));
}
else if (msg instanceof GridNearTxFinishRequest) {
IgniteEx to = IgnitionEx.gridxx(node.id());
@@ -440,7 +441,8 @@ public abstract class TxPartitionCounterStateAbstractTest
extends GridCommonAbst
IgniteInternalTx primTx = findTx(from, nearVer, true);
IgniteInternalTx backupTx = findTx(to, nearVer, false);
- return cb.beforeBackupFinish(from, to, primTx, backupTx,
nearVer.asIgniteUuid(), createSendFuture(wrappedPrimSpi, msg));
+ return cb.beforeBackupFinish(from, to, primTx, backupTx,
BinaryUtils.asIgniteUuid(nearVer),
+ createSendFuture(wrappedPrimSpi, msg));
}
else if (msg instanceof GridNearTxPrepareResponse) {
GridNearTxPrepareResponse resp =
(GridNearTxPrepareResponse)msg;
@@ -451,7 +453,7 @@ public abstract class TxPartitionCounterStateAbstractTest
extends GridCommonAbst
IgniteInternalTx primTx = findTx(from, ver, true);
- return cb.afterPrimaryPrepare(from, primTx,
ver.asIgniteUuid(), createSendFuture(wrappedPrimSpi, msg));
+ return cb.afterPrimaryPrepare(from, primTx,
BinaryUtils.asIgniteUuid(ver), createSendFuture(wrappedPrimSpi, msg));
}
else if (msg instanceof GridNearTxFinishResponse) {
IgniteEx to = IgnitionEx.gridxx(node.id());
@@ -460,7 +462,7 @@ public abstract class TxPartitionCounterStateAbstractTest
extends GridCommonAbst
IgniteEx from = fromNode(wrappedPrimSpi);
- IgniteUuid nearVer = futMap.get(req.futureId()).asIgniteUuid();
+ IgniteUuid nearVer =
BinaryUtils.asIgniteUuid(futMap.get(req.futureId()));
return cb.afterPrimaryFinish(from, nearVer,
createSendFuture(wrappedPrimSpi, msg));
}
@@ -490,7 +492,7 @@ public abstract class TxPartitionCounterStateAbstractTest
extends GridCommonAbst
IgniteInternalTx backupTx = findTx(from, ver, false);
- return cb.afterBackupPrepare(to, from, backupTx,
ver.asIgniteUuid(), createSendFuture(wrappedBackupSpi, msg));
+ return cb.afterBackupPrepare(to, from, backupTx,
BinaryUtils.asIgniteUuid(ver), createSendFuture(wrappedBackupSpi, msg));
}
else if (msg instanceof GridDhtTxFinishResponse) {
IgniteEx from = fromNode(wrappedBackupSpi);
@@ -504,7 +506,7 @@ public abstract class TxPartitionCounterStateAbstractTest
extends GridCommonAbst
return false; // Message from parallel partition.
// Version is null if message is a response to
checkCommittedRequest.
- return cb.afterBackupFinish(to, from, ver.asIgniteUuid(),
createSendFuture(wrappedBackupSpi, msg));
+ return cb.afterBackupFinish(to, from,
BinaryUtils.asIgniteUuid(ver), createSendFuture(wrappedBackupSpi, msg));
}
return false;
@@ -973,7 +975,7 @@ public abstract class TxPartitionCounterStateAbstractTest
extends GridCommonAbst
return false;
runAsync(() -> {
- futures.put(new T3<>(primary, TxState.COMMIT,
tx.nearXidVersion().asIgniteUuid()), proceedFut);
+ futures.put(new T3<>(primary, TxState.COMMIT,
BinaryUtils.asIgniteUuid(tx.nearXidVersion())), proceedFut);
if (countForNode(primary, TxState.COMMIT) == txCnt)
futures.remove(new T3<>(primary, TxState.COMMIT,
version(commits.get(primary).poll()))).onDone();
@@ -993,11 +995,11 @@ public abstract class TxPartitionCounterStateAbstractTest
extends GridCommonAbst
runAsync(() -> {
if (assigns.get(primary) != null) {
- int v0 = assignCntr.compute(new T2<>(primary,
primaryTx.nearXidVersion().asIgniteUuid()),
+ int v0 = assignCntr.compute(new T2<>(primary,
BinaryUtils.asIgniteUuid(primaryTx.nearXidVersion())),
(key, val) -> (val == null ? 0 : val) + 1);
if (v0 == 2) {
- onCounterAssigned(primary, primaryTx,
order(primaryTx.nearXidVersion().asIgniteUuid()));
+ onCounterAssigned(primary, primaryTx,
order(BinaryUtils.asIgniteUuid(primaryTx.nearXidVersion())));
if (!assigns.get(primary).isEmpty())
futures.remove(new T3<>(primary, TxState.ASSIGN,
@@ -1006,7 +1008,7 @@ public abstract class TxPartitionCounterStateAbstractTest
extends GridCommonAbst
}
if (prepares.get(backup) != null) {
- futures.put(new T3<>(backup, TxState.PREPARE,
primaryTx.nearXidVersion().asIgniteUuid()), proceedFut);
+ futures.put(new T3<>(backup, TxState.PREPARE,
BinaryUtils.asIgniteUuid(primaryTx.nearXidVersion())), proceedFut);
// Wait until all prep requests queued and force prepare
order.
if (countForNode(backup, TxState.PREPARE) == txCnt) {
diff --git
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxPartitionCounterStateOnePrimaryOneBackupTest.java
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxPartitionCounterStateOnePrimaryOneBackupTest.java
index cab77867215..219f188ded0 100644
---
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxPartitionCounterStateOnePrimaryOneBackupTest.java
+++
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxPartitionCounterStateOnePrimaryOneBackupTest.java
@@ -29,6 +29,7 @@ import org.apache.ignite.cache.CachePeekMode;
import org.apache.ignite.internal.IgniteEx;
import org.apache.ignite.internal.IgniteInternalFuture;
import org.apache.ignite.internal.TestRecordingCommunicationSpi;
+import org.apache.ignite.internal.binary.BinaryUtils;
import org.apache.ignite.internal.processors.cache.PartitionUpdateCounter;
import
org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionSupplyMessage;
import org.apache.ignite.internal.util.future.GridFutureAdapter;
@@ -348,7 +349,7 @@ public class TxPartitionCounterStateOnePrimaryOneBackupTest
extends TxPartitionC
@Override public boolean beforeBackupPrepare(IgniteEx primary,
IgniteEx backup, IgniteInternalTx primaryTx,
GridFutureAdapter<?> proceedFut) {
runAsync(() -> {
- IgniteUuid nearXidVer =
primaryTx.nearXidVersion().asIgniteUuid();
+ IgniteUuid nearXidVer =
BinaryUtils.asIgniteUuid(primaryTx.nearXidVersion());
onPrimaryPrepared(primary, primaryTx, order(nearXidVer));