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 49d65fa65b0 IGNITE-26463 Remove usages of 
CacheObjectValueContext#kernalContext (#12357)
49d65fa65b0 is described below

commit 49d65fa65b047295039e17ebd34b86e4f0409caf
Author: Nikolay <[email protected]>
AuthorDate: Fri Sep 19 12:41:28 2025 +0300

    IGNITE-26463 Remove usages of CacheObjectValueContext#kernalContext (#12357)
---
 .../internal/binary/BinaryEnumObjectImpl.java      |  3 +-
 .../ignite/internal/binary/BinaryObjectImpl.java   | 10 +--
 .../apache/ignite/internal/binary/BinaryUtils.java |  4 +-
 .../internal/binary/GridBinaryMarshaller.java      | 17 +----
 .../defragmentation/IndexingDefragmentation.java   |  4 +-
 .../pagemem/wal/record/UnwrapDataEntry.java        |  4 +-
 .../cache/AbstractCacheObjectContext.java          | 85 ++++++++++++++++++++++
 .../processors/cache/CacheObjectAdapter.java       |  4 +-
 .../processors/cache/CacheObjectContext.java       | 12 +--
 .../internal/processors/cache/CacheObjectImpl.java | 16 ++--
 .../processors/cache/CacheObjectValueContext.java  | 55 ++++++++++++++
 .../processors/cache/GridCacheProcessor.java       | 11 +--
 .../internal/processors/cache/GridCacheUtils.java  |  6 +-
 .../processors/cache/GridLocalConfigManager.java   |  2 +-
 .../processors/cache/KeyCacheObjectImpl.java       |  6 +-
 .../binary/CacheObjectBinaryProcessorImpl.java     | 20 ++---
 .../dht/preloader/GridDhtPartitionDemander.java    |  2 +-
 .../cache/persistence/CacheDataRowAdapter.java     | 17 +++--
 .../wal/reader/StandaloneWalRecordsIterator.java   | 10 ++-
 .../cache/version/GridCacheRawVersionedEntry.java  |  4 +-
 .../cacheobject/IgniteCacheObjectProcessor.java    | 15 ++++
 .../cacheobject/UserCacheObjectImpl.java           |  2 +-
 .../cacheobject/UserKeyCacheObjectImpl.java        |  8 +-
 .../query/CacheQueryObjectValueContext.java        | 14 +---
 .../processors/query/GridQueryProcessor.java       |  2 +-
 .../processors/query/QueryTypeDescriptorImpl.java  | 32 +++++---
 .../internal/processors/query/QueryUtils.java      | 17 +++--
 .../processors/query/h2/opt/GridLuceneIndex.java   |  2 +-
 28 files changed, 260 insertions(+), 124 deletions(-)

diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryEnumObjectImpl.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryEnumObjectImpl.java
index 98ef4ec44c9..bed1815de78 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryEnumObjectImpl.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryEnumObjectImpl.java
@@ -30,7 +30,6 @@ import org.apache.ignite.binary.BinaryType;
 import org.apache.ignite.internal.processors.cache.CacheObject;
 import org.apache.ignite.internal.processors.cache.CacheObjectAdapter;
 import org.apache.ignite.internal.processors.cache.CacheObjectValueContext;
-import 
org.apache.ignite.internal.processors.cache.binary.CacheObjectBinaryProcessorImpl;
 import org.apache.ignite.internal.util.CommonUtils;
 import org.apache.ignite.internal.util.GridUnsafe;
 import org.apache.ignite.internal.util.typedef.internal.S;
@@ -373,7 +372,7 @@ class BinaryEnumObjectImpl implements BinaryObjectEx, 
Externalizable, CacheObjec
 
     /** {@inheritDoc} */
     @Override public void finishUnmarshal(CacheObjectValueContext ctx, 
ClassLoader ldr) throws IgniteCheckedException {
-        this.ctx = 
((CacheObjectBinaryProcessorImpl)ctx.kernalContext().cacheObjects()).binaryContext();
+        this.ctx = ctx.binaryContext();
     }
 
     /** {@inheritDoc} */
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImpl.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImpl.java
index a238b58f0f3..350b2c24160 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImpl.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImpl.java
@@ -39,7 +39,6 @@ import 
org.apache.ignite.internal.processors.cache.CacheObjectAdapter;
 import org.apache.ignite.internal.processors.cache.CacheObjectTransformerUtils;
 import org.apache.ignite.internal.processors.cache.CacheObjectValueContext;
 import org.apache.ignite.internal.processors.cache.KeyCacheObject;
-import 
org.apache.ignite.internal.processors.cache.binary.CacheObjectBinaryProcessorImpl;
 import org.apache.ignite.internal.util.GridUnsafe;
 import org.apache.ignite.internal.util.typedef.F;
 import org.apache.ignite.marshaller.Marshallers;
@@ -233,11 +232,9 @@ final class BinaryObjectImpl extends BinaryObjectExImpl 
implements Externalizabl
         if (arr == null)
             arr = arrayFromValueBytes(ctx);
 
-        CacheObjectBinaryProcessorImpl binaryProc = 
(CacheObjectBinaryProcessorImpl)ctx.kernalContext().cacheObjects();
+        this.ctx = ctx.binaryContext();
 
-        this.ctx = binaryProc.binaryContext();
-
-        binaryProc.waitMetadataWriteIfNeeded(typeId());
+        ctx.waitMetadataWriteIfNeeded(typeId());
     }
 
     /** {@inheritDoc} */
@@ -799,8 +796,7 @@ final class BinaryObjectImpl extends BinaryObjectExImpl 
implements Externalizabl
      * @return Object.
      */
     private Object deserializeValue(@Nullable CacheObjectValueContext coCtx) {
-        BinaryReaderEx reader = reader(null, coCtx != null ?
-            coCtx.kernalContext().config().getClassLoader() : 
ctx.classLoader(), true);
+        BinaryReaderEx reader = reader(null, coCtx != null ? 
coCtx.classLoader() : ctx.classLoader(), true);
 
         Object obj0 = reader.deserialize();
 
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java 
b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java
index 7f84277ac53..c8a3692e381 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java
@@ -72,7 +72,7 @@ import 
org.apache.ignite.internal.binary.streams.BinaryInputStream;
 import org.apache.ignite.internal.binary.streams.BinaryOutputStream;
 import org.apache.ignite.internal.binary.streams.BinaryStreams;
 import org.apache.ignite.internal.processors.cache.CacheObjectValueContext;
-import 
org.apache.ignite.internal.processors.cache.binary.CacheObjectBinaryProcessorImpl;
+import 
org.apache.ignite.internal.processors.cacheobject.IgniteCacheObjectProcessor;
 import org.apache.ignite.internal.util.CommonUtils;
 import org.apache.ignite.internal.util.GridUnsafe;
 import org.apache.ignite.internal.util.MutableSingletonList;
@@ -2762,7 +2762,7 @@ public class BinaryUtils {
      * @param typeId Type id.
      * @param schemaId Schema id.
      */
-    public static int[] getSchema(CacheObjectBinaryProcessorImpl cacheObjProc, 
int typeId, int schemaId) {
+    public static int[] getSchema(IgniteCacheObjectProcessor cacheObjProc, int 
typeId, int schemaId) {
         assert cacheObjProc != null;
 
         BinarySchemaRegistry schemaReg = 
cacheObjProc.binaryContext().schemaRegistry(typeId);
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/GridBinaryMarshaller.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/binary/GridBinaryMarshaller.java
index 2e4c7de280e..774a781b88d 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/GridBinaryMarshaller.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/binary/GridBinaryMarshaller.java
@@ -20,16 +20,12 @@ package org.apache.ignite.internal.binary;
 import java.lang.reflect.Array;
 import java.util.Collection;
 import java.util.Map;
-import org.apache.ignite.IgniteIllegalStateException;
 import org.apache.ignite.binary.BinaryObject;
 import org.apache.ignite.binary.BinaryObjectException;
-import org.apache.ignite.internal.IgniteKernal;
 import org.apache.ignite.internal.IgnitionEx;
 import org.apache.ignite.internal.binary.streams.BinaryInputStream;
 import org.apache.ignite.internal.binary.streams.BinaryOutputStream;
 import org.apache.ignite.internal.binary.streams.BinaryStreams;
-import 
org.apache.ignite.internal.processors.cache.binary.CacheObjectBinaryProcessorImpl;
-import 
org.apache.ignite.internal.processors.cacheobject.IgniteCacheObjectProcessor;
 import org.apache.ignite.internal.util.CommonUtils;
 import org.apache.ignite.internal.util.MutableSingletonList;
 import org.jetbrains.annotations.Nullable;
@@ -480,17 +476,8 @@ public class GridBinaryMarshaller {
     public static BinaryContext threadLocalContext() {
         BinaryContext ctx = BINARY_CTX.get().get();
 
-        if (ctx == null) {
-            IgniteKernal ignite = IgnitionEx.localIgnite();
-
-            IgniteCacheObjectProcessor proc = ignite.context().cacheObjects();
-
-            if (proc instanceof CacheObjectBinaryProcessorImpl)
-                return ((CacheObjectBinaryProcessorImpl)proc).binaryContext();
-            else
-                throw new IgniteIllegalStateException("Ignite instance must be 
started with " +
-                    BinaryMarshaller.class.getName() + " [name=" + 
ignite.name() + ']');
-        }
+        if (ctx == null)
+            return 
IgnitionEx.localIgnite().context().cacheObjects().binaryContext();
 
         return ctx;
     }
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/defragmentation/IndexingDefragmentation.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/defragmentation/IndexingDefragmentation.java
index eb3d9a7cf87..6269b7ab90e 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/defragmentation/IndexingDefragmentation.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/cache/query/index/sorted/defragmentation/IndexingDefragmentation.java
@@ -85,7 +85,7 @@ public class IndexingDefragmentation {
         IgniteThreadPoolExecutor defragmentationThreadPool,
         IgniteLogger log
     ) throws IgniteCheckedException {
-        int pageSize = 
grpCtx.cacheObjectContext().kernalContext().grid().configuration().getDataStorageConfiguration().getPageSize();
+        int pageSize = 
grpCtx.shared().kernalContext().grid().configuration().getDataStorageConfiguration().getPageSize();
 
         PageMemoryEx oldCachePageMem = 
(PageMemoryEx)grpCtx.dataRegion().pageMemory();
 
@@ -204,7 +204,7 @@ public class IndexingDefragmentation {
             return true;
         }
         catch (Throwable t) {
-            newCtx.cacheObjectContext().kernalContext()
+            newCtx.shared().kernalContext()
                 .failure().process(new FailureContext(CRITICAL_ERROR, t));
 
             throw t;
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/UnwrapDataEntry.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/UnwrapDataEntry.java
index e535e22f0b8..a4c31d59a2f 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/UnwrapDataEntry.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/UnwrapDataEntry.java
@@ -79,7 +79,7 @@ public class UnwrapDataEntry extends DataEntry {
             return unwrapKey(key, keepBinary, cacheObjValCtx);
         }
         catch (Exception e) {
-            cacheObjValCtx.kernalContext().log(UnwrapDataEntry.class)
+            cacheObjValCtx.log(UnwrapDataEntry.class)
                 .error("Unable to convert key [" + key + "]", e);
 
             return null;
@@ -97,7 +97,7 @@ public class UnwrapDataEntry extends DataEntry {
             return unwrapValue(val, keepBinary, cacheObjValCtx);
         }
         catch (Exception e) {
-            cacheObjValCtx.kernalContext().log(UnwrapDataEntry.class)
+            cacheObjValCtx.log(UnwrapDataEntry.class)
                 .error("Unable to convert value [" + value() + "]", e);
             return null;
         }
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/AbstractCacheObjectContext.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/AbstractCacheObjectContext.java
new file mode 100644
index 00000000000..4d6b31884b2
--- /dev/null
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/AbstractCacheObjectContext.java
@@ -0,0 +1,85 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.processors.cache;
+
+import org.apache.ignite.IgniteCheckedException;
+import org.apache.ignite.IgniteLogger;
+import org.apache.ignite.internal.GridKernalContext;
+import org.apache.ignite.internal.binary.BinaryContext;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Abstract implementation of {@link CacheObjectValueContext}.
+ */
+public abstract class AbstractCacheObjectContext implements 
CacheObjectValueContext {
+    /** Kernal context. */
+    protected final GridKernalContext ctx;
+
+    /**
+     * @param ctx Kernal context.
+     */
+    protected AbstractCacheObjectContext(GridKernalContext ctx) {
+        this.ctx = ctx;
+    }
+
+    /** {@inheritDoc} */
+    @Override public GridKernalContext kernalContext() {
+        return ctx;
+    }
+
+    /** {@inheritDoc} */
+    @Override public BinaryContext binaryContext() {
+        return ctx.cacheObjects().binaryContext();
+    }
+
+    /** {@inheritDoc} */
+    @Override public void waitMetadataWriteIfNeeded(final int typeId) {
+        ctx.cacheObjects().waitMetadataWriteIfNeeded(typeId);
+    }
+
+    /** {@inheritDoc} */
+    @Override public @Nullable ClassLoader classLoader() {
+        return ctx.config().getClassLoader();
+    }
+
+    /** {@inheritDoc} */
+    @Override public ClassLoader globalLoader() {
+        return ctx.cache().context().deploy().globalLoader();
+    }
+
+    /** {@inheritDoc} */
+    @Override public IgniteLogger log(Class<?> cls) {
+        return ctx.log(cls);
+    }
+
+    /** {@inheritDoc} */
+    @Override public byte[] marshal(Object val) throws IgniteCheckedException {
+        return ctx.cacheObjects().marshal(this, val);
+    }
+
+    /** {@inheritDoc} */
+    @Override public Object unmarshal(byte[] bytes, ClassLoader clsLdr)
+        throws IgniteCheckedException {
+        return ctx.cacheObjects().unmarshal(this, bytes, clsLdr);
+    }
+
+    /** {@inheritDoc} */
+    @Override public boolean isPeerClassLoadingEnabled() {
+        return ctx.config().isPeerClassLoadingEnabled();
+    }
+}
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectAdapter.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectAdapter.java
index f33004373a3..67195646ab6 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectAdapter.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectAdapter.java
@@ -58,7 +58,7 @@ public abstract class CacheObjectAdapter implements 
CacheObject, Externalizable
      * @return Value bytes from value.
      */
     protected byte[] valueBytesFromValue(CacheObjectValueContext ctx) throws 
IgniteCheckedException {
-        byte[] bytes = ctx.kernalContext().cacheObjects().marshal(ctx, val);
+        byte[] bytes = ctx.marshal(val);
 
         return CacheObjectTransformerUtils.transformIfNecessary(bytes, ctx);
     }
@@ -69,7 +69,7 @@ public abstract class CacheObjectAdapter implements 
CacheObject, Externalizable
     protected Object valueFromValueBytes(CacheObjectValueContext ctx, 
ClassLoader ldr) throws IgniteCheckedException {
         byte[] bytes = 
CacheObjectTransformerUtils.restoreIfNecessary(valBytes, ctx);
 
-        return ctx.kernalContext().cacheObjects().unmarshal(ctx, bytes, ldr);
+        return ctx.unmarshal(bytes, ldr);
     }
 
     /** {@inheritDoc} */
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectContext.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectContext.java
index 4e457e1d916..9f78b6f87fd 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectContext.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectContext.java
@@ -24,10 +24,7 @@ import org.jetbrains.annotations.Nullable;
 /**
  *
  */
-public class CacheObjectContext implements CacheObjectValueContext {
-    /** */
-    private final GridKernalContext kernalCtx;
-
+public class CacheObjectContext extends AbstractCacheObjectContext {
     /** */
     private final String cacheName;
 
@@ -67,7 +64,7 @@ public class CacheObjectContext implements 
CacheObjectValueContext {
         boolean storeVal,
         boolean addDepInfo,
         boolean binaryEnabled) {
-        this.kernalCtx = kernalCtx;
+        super(kernalCtx);
         this.cacheName = cacheName;
         this.dfltAffMapper = dfltAffMapper;
         this.customAffMapper = customAffMapper;
@@ -114,11 +111,6 @@ public class CacheObjectContext implements 
CacheObjectValueContext {
         return customAffMapper;
     }
 
-    /** {@inheritDoc} */
-    @Override public GridKernalContext kernalContext() {
-        return kernalCtx;
-    }
-
     /** {@inheritDoc} */
     @Override public boolean binaryEnabled() {
         return binaryEnabled;
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectImpl.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectImpl.java
index 641fc45c589..26ba2256ea2 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectImpl.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectImpl.java
@@ -19,8 +19,6 @@ package org.apache.ignite.internal.processors.cache;
 
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.IgniteException;
-import org.apache.ignite.internal.GridKernalContext;
-import 
org.apache.ignite.internal.processors.cacheobject.IgniteCacheObjectProcessor;
 import org.jetbrains.annotations.Nullable;
 
 /**
@@ -63,10 +61,6 @@ public class CacheObjectImpl extends CacheObjectAdapter {
         cpy = cpy && needCopy(ctx);
 
         try {
-            GridKernalContext kernalCtx = ctx.kernalContext();
-
-            IgniteCacheObjectProcessor proc = 
ctx.kernalContext().cacheObjects();
-
             if (cpy) {
                 if (valBytes == null) {
                     assert val != null;
@@ -77,11 +71,11 @@ public class CacheObjectImpl extends CacheObjectAdapter {
                 if (ldr == null) {
                     if (val != null)
                         ldr = val.getClass().getClassLoader();
-                    else if (kernalCtx.config().isPeerClassLoadingEnabled())
-                        ldr = 
kernalCtx.cache().context().deploy().globalLoader();
+                    else if (ctx.isPeerClassLoadingEnabled())
+                        ldr = ctx.globalLoader();
                 }
 
-                return (T)proc.unmarshal(ctx, valBytes, ldr);
+                return (T)ctx.unmarshal(valBytes, ldr);
             }
 
             if (val != null)
@@ -89,8 +83,8 @@ public class CacheObjectImpl extends CacheObjectAdapter {
 
             assert valBytes != null;
 
-            Object val = valueFromValueBytes(ctx, 
kernalCtx.config().isPeerClassLoadingEnabled() ?
-                kernalCtx.cache().context().deploy().globalLoader() : null);
+            Object val = valueFromValueBytes(ctx, 
ctx.isPeerClassLoadingEnabled() ?
+                ctx.globalLoader() : null);
 
             if (ctx.storeValue())
                 this.val = val;
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectValueContext.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectValueContext.java
index 49b28739a43..42294e96456 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectValueContext.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectValueContext.java
@@ -17,7 +17,11 @@
 
 package org.apache.ignite.internal.processors.cache;
 
+import org.apache.ignite.IgniteCheckedException;
+import org.apache.ignite.IgniteLogger;
 import org.apache.ignite.internal.GridKernalContext;
+import org.apache.ignite.internal.binary.BinaryContext;
+import org.jetbrains.annotations.Nullable;
 
 /**
  * Context to get value of cache object.
@@ -47,4 +51,55 @@ public interface CacheObjectValueContext {
      * @return Binary enabled flag.
      */
     public boolean binaryEnabled();
+
+    /**
+     * @return Binary context.
+     */
+    public BinaryContext binaryContext();
+
+    /**
+     * Forces caller thread to wait for binary metadata write operation for 
given type ID.
+     *
+     * In case of in-memory mode this method becomes a No-op as no binary 
metadata is written to disk in this mode.
+     *
+     * @param typeId ID of binary type to wait for metadata write operation.
+     */
+    public void waitMetadataWriteIfNeeded(final int typeId);
+
+    /**
+     * @return User's class loader.
+     */
+    public @Nullable ClassLoader classLoader();
+
+    /**
+     * Gets distributed class loader.
+     *
+     * @return Cache class loader.
+     */
+    public ClassLoader globalLoader();
+
+    /**
+     * @param cls Class
+     * @return Logger for class.
+     */
+    public IgniteLogger log(Class<?> cls);
+
+    /**
+     * @param val Value.
+     * @return Value bytes.
+     * @throws IgniteCheckedException If failed.
+     */
+    public byte[] marshal(Object val) throws IgniteCheckedException;
+
+    /**
+     * @param bytes Bytes.
+     * @param clsLdr Class loader.
+     * @return Unmarshalled object.
+     * @throws IgniteCheckedException If failed.
+     */
+    public Object unmarshal(byte[] bytes, ClassLoader clsLdr)
+        throws IgniteCheckedException;
+
+    /** @return {@code true} if peer class loading is enabled, {@code false} 
otherwise. */
+    public boolean isPeerClassLoadingEnabled();
 }
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
index fefd243a2e4..d220c6b6207 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
@@ -650,12 +650,13 @@ public class GridCacheProcessor extends 
GridProcessorAdapter {
     }
 
     /**
+     * @param recoveryMode Value of {@link GridKernalContext#recoveryMode()}.
      * @param cfg Initializes cache configuration with proper defaults.
      * @param cacheObjCtx Cache object context.
      * @throws IgniteCheckedException If configuration is not valid.
      */
-    void initialize(CacheConfiguration<?, ?> cfg, CacheObjectContext 
cacheObjCtx) throws IgniteCheckedException {
-        CU.initializeConfigDefaults(log, cfg, cacheObjCtx);
+    void initialize(CacheConfiguration<?, ?> cfg, CacheObjectContext 
cacheObjCtx, boolean recoveryMode) throws IgniteCheckedException {
+        CU.initializeConfigDefaults(log, cfg, cacheObjCtx, recoveryMode);
     }
 
     /**
@@ -2455,7 +2456,7 @@ public class GridCacheProcessor extends 
GridProcessorAdapter {
         boolean needToStart = (dataRegion != null)
             && (cacheType != CacheType.USER
                 || (sharedCtx.isLazyMemoryAllocation(dataRegion)
-                    && !cacheObjCtx.kernalContext().clientNode()));
+                    && !sharedCtx.kernalContext().clientNode()));
 
         if (needToStart)
             dataRegion.pageMemory().start();
@@ -5149,7 +5150,7 @@ public class GridCacheProcessor extends 
GridProcessorAdapter {
                 CacheObjectContext cacheObjCtx = 
ctx.cacheObjects().contextForCache(cfg);
 
                 // Cache configuration must be initialized before splitting.
-                initialize(cfg, cacheObjCtx);
+                initialize(cfg, cacheObjCtx, ctx.recoveryMode());
 
                 req.deploymentId(IgniteUuid.randomUuid());
 
@@ -5163,7 +5164,7 @@ public class GridCacheProcessor extends 
GridProcessorAdapter {
                 if (restartId != null)
                     req.schema(new QuerySchema(qryEntities == null ? 
cfg.getQueryEntities() : qryEntities));
                 else
-                    req.schema(new QuerySchema(qryEntities != null ? 
QueryUtils.normalizeQueryEntities(ctx, qryEntities, cfg)
+                    req.schema(new QuerySchema(qryEntities != null ? 
QueryUtils.normalizeQueryEntities(ctx.recoveryMode(), qryEntities, cfg)
                             : cfg.getQueryEntities()));
             }
         }
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 7280b2a5287..2d406198854 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
@@ -1647,12 +1647,14 @@ public class GridCacheUtils {
     }
 
     /**
+     * @param log Logger.
      * @param cfg Initializes cache configuration with proper defaults.
      * @param cacheObjCtx Cache object context.
+     * @param recoveryMode Value of {@link GridKernalContext#recoveryMode()}.
      * @throws IgniteCheckedException If configuration is not valid.
      */
     public static void initializeConfigDefaults(IgniteLogger log, 
CacheConfiguration cfg,
-        CacheObjectContext cacheObjCtx) throws IgniteCheckedException {
+        CacheObjectContext cacheObjCtx, boolean recoveryMode) throws 
IgniteCheckedException {
         if (cfg.getCacheMode() == null)
             cfg.setCacheMode(DFLT_CACHE_MODE);
 
@@ -1717,7 +1719,7 @@ public class GridCacheUtils {
 
         if (!F.isEmpty(entities)) {
             cfg.clearQueryEntities().setQueryEntities(
-                QueryUtils.normalizeQueryEntities(cacheObjCtx.kernalContext(), 
entities, cfg));
+                QueryUtils.normalizeQueryEntities(recoveryMode, entities, 
cfg));
         }
     }
 
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridLocalConfigManager.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridLocalConfigManager.java
index 83bf41e6f89..24ec163584f 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridLocalConfigManager.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridLocalConfigManager.java
@@ -617,7 +617,7 @@ public class GridLocalConfigManager {
         CacheObjectContext cacheObjCtx = 
ctx.cacheObjects().contextForCache(cfg);
 
         // Initialize defaults.
-        cacheProcessor.initialize(cfg, cacheObjCtx);
+        cacheProcessor.initialize(cfg, cacheObjCtx, ctx.recoveryMode());
 
         StoredCacheData cacheData = new StoredCacheData(cfg);
 
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/KeyCacheObjectImpl.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/KeyCacheObjectImpl.java
index 4d3220dd5da..f781fb3218b 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/KeyCacheObjectImpl.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/KeyCacheObjectImpl.java
@@ -72,7 +72,7 @@ public class KeyCacheObjectImpl extends CacheObjectAdapter 
implements KeyCacheOb
     /** {@inheritDoc} */
     @Override public byte[] valueBytes(CacheObjectValueContext ctx) throws 
IgniteCheckedException {
         if (valBytes == null)
-            valBytes = ctx.kernalContext().cacheObjects().marshal(ctx, val);
+            valBytes = ctx.marshal(val);
 
         return valBytes;
     }
@@ -116,7 +116,7 @@ public class KeyCacheObjectImpl extends CacheObjectAdapter 
implements KeyCacheOb
     /** {@inheritDoc} */
     @Override public void prepareMarshal(CacheObjectValueContext ctx) throws 
IgniteCheckedException {
         if (valBytes == null)
-            valBytes = ctx.kernalContext().cacheObjects().marshal(ctx, val);
+            valBytes = ctx.marshal(val);
     }
 
     /** {@inheritDoc} */
@@ -124,7 +124,7 @@ public class KeyCacheObjectImpl extends CacheObjectAdapter 
implements KeyCacheOb
         if (val == null) {
             assert valBytes != null;
 
-            val = ctx.kernalContext().cacheObjects().unmarshal(ctx, valBytes, 
ldr);
+            val = ctx.unmarshal(valBytes, ldr);
         }
     }
 
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/CacheObjectBinaryProcessorImpl.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/CacheObjectBinaryProcessorImpl.java
index be621b75e73..0c0d3016c51 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/CacheObjectBinaryProcessorImpl.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/CacheObjectBinaryProcessorImpl.java
@@ -648,14 +648,8 @@ public class CacheObjectBinaryProcessorImpl extends 
GridProcessorAdapter impleme
         return meta != null ? meta.wrap(binaryCtx) : null;
     }
 
-    /**
-     * Forces caller thread to wait for binary metadata write operation for 
given type ID.
-     *
-     * In case of in-memory mode this method becomes a No-op as no binary 
metadata is written to disk in this mode.
-     *
-     * @param typeId ID of binary type to wait for metadata write operation.
-     */
-    public void waitMetadataWriteIfNeeded(final int typeId) {
+    /** {@inheritDoc} */
+    @Override public void waitMetadataWriteIfNeeded(final int typeId) {
         if (metadataFileStore == null)
             return;
 
@@ -1090,10 +1084,8 @@ public class CacheObjectBinaryProcessorImpl extends 
GridProcessorAdapter impleme
         return obj != null && ((BinaryObject)obj).hasField(fieldName);
     }
 
-    /**
-     * @return Binary context.
-     */
-    public BinaryContext binaryContext() {
+    /** {@inheritDoc} */
+    @Override public BinaryContext binaryContext() {
         return binaryCtx;
     }
 
@@ -1126,7 +1118,7 @@ public class CacheObjectBinaryProcessorImpl extends 
GridProcessorAdapter impleme
     /** {@inheritDoc} */
     @Override public byte[] marshal(CacheObjectValueContext ctx, Object val) 
throws IgniteCheckedException {
         if (!ctx.binaryEnabled() || binaryMarsh == null)
-            return CU.marshal(ctx.kernalContext().cache().context(), 
ctx.addDeploymentInfo(), val);
+            return CU.marshal(this.ctx.cache().context(), 
ctx.addDeploymentInfo(), val);
 
         byte[] arr = binaryMarsh.marshal(val, false);
 
@@ -1139,7 +1131,7 @@ public class CacheObjectBinaryProcessorImpl extends 
GridProcessorAdapter impleme
     @Override public Object unmarshal(CacheObjectValueContext ctx, byte[] 
bytes, ClassLoader clsLdr)
         throws IgniteCheckedException {
         if (!ctx.binaryEnabled() || binaryMarsh == null)
-            return U.unmarshal(ctx.kernalContext(), bytes, 
U.resolveClassLoader(clsLdr, ctx.kernalContext().config()));
+            return U.unmarshal(this.ctx, bytes, U.resolveClassLoader(clsLdr, 
this.ctx.config()));
 
         return binaryMarsh.unmarshal(bytes, clsLdr);
     }
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionDemander.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionDemander.java
index 26c66b34368..16a68ea4703 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionDemander.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionDemander.java
@@ -1672,7 +1672,7 @@ public class GridDhtPartitionDemander {
 
             // Not compatible if a supplier has left.
             for (UUID nodeId : rebalancingParts.keySet()) {
-                if 
(!grp.cacheObjectContext().kernalContext().discovery().alive(nodeId))
+                if (!grp.shared().kernalContext().discovery().alive(nodeId))
                     return false;
             }
 
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/CacheDataRowAdapter.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/CacheDataRowAdapter.java
index 77579fe144f..810423838a3 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/CacheDataRowAdapter.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/CacheDataRowAdapter.java
@@ -38,6 +38,7 @@ import 
org.apache.ignite.internal.processors.cache.persistence.tree.io.DataPageI
 import 
org.apache.ignite.internal.processors.cache.persistence.tree.io.DataPagePayload;
 import org.apache.ignite.internal.processors.cache.persistence.tree.io.PageIO;
 import org.apache.ignite.internal.processors.cache.version.GridCacheVersion;
+import 
org.apache.ignite.internal.processors.cacheobject.IgniteCacheObjectProcessor;
 import org.apache.ignite.internal.util.GridLongList;
 import org.apache.ignite.internal.util.GridUnsafe;
 import org.apache.ignite.internal.util.lang.IgniteThrowableFunction;
@@ -445,7 +446,7 @@ public class CacheDataRowAdapter implements CacheDataRow {
 
         // Read key.
         if (key == null) {
-            incomplete = readIncompleteKey(coctx, buf, 
(IncompleteCacheObject)incomplete);
+            incomplete = 
readIncompleteKey(sharedCtx.kernalContext().cacheObjects(), coctx, buf, 
(IncompleteCacheObject)incomplete);
 
             if (key == null) {
                 assert incomplete != null;
@@ -471,7 +472,7 @@ public class CacheDataRowAdapter implements CacheDataRow {
 
         // Read value.
         if (val == null) {
-            incomplete = readIncompleteValue(coctx, buf, 
(IncompleteCacheObject)incomplete);
+            incomplete = 
readIncompleteValue(sharedCtx.kernalContext().cacheObjects(), coctx, buf, 
(IncompleteCacheObject)incomplete);
 
             if (val == null) {
                 assert incomplete != null;
@@ -529,7 +530,7 @@ public class CacheDataRowAdapter implements CacheDataRow {
             byte[] bytes = PageUtils.getBytes(addr, off, len);
             off += len;
 
-            key = coctx.kernalContext().cacheObjects().toKeyCacheObject(coctx, 
type, bytes);
+            key = 
sharedCtx.kernalContext().cacheObjects().toKeyCacheObject(coctx, type, bytes);
 
             if (rowData == RowData.KEY_ONLY)
                 return;
@@ -546,7 +547,7 @@ public class CacheDataRowAdapter implements CacheDataRow {
         byte[] bytes = PageUtils.getBytes(addr, off, len);
         off += len;
 
-        val = coctx.kernalContext().cacheObjects().toCacheObject(coctx, type, 
bytes);
+        val = sharedCtx.kernalContext().cacheObjects().toCacheObject(coctx, 
type, bytes);
 
         int verLen;
 
@@ -610,6 +611,7 @@ public class CacheDataRowAdapter implements CacheDataRow {
     }
 
     /**
+     * @param coProc Cache object processor.
      * @param coctx Cache object context.
      * @param buf Buffer.
      * @param incomplete Incomplete object.
@@ -617,11 +619,12 @@ public class CacheDataRowAdapter implements CacheDataRow {
      * @throws IgniteCheckedException If failed.
      */
     protected IncompleteCacheObject readIncompleteKey(
+        IgniteCacheObjectProcessor coProc,
         CacheObjectContext coctx,
         ByteBuffer buf,
         IncompleteCacheObject incomplete
     ) throws IgniteCheckedException {
-        incomplete = 
coctx.kernalContext().cacheObjects().toKeyCacheObject(coctx, buf, incomplete);
+        incomplete = coProc.toKeyCacheObject(coctx, buf, incomplete);
 
         if (incomplete.isReady()) {
             key = (KeyCacheObject)incomplete.object();
@@ -635,6 +638,7 @@ public class CacheDataRowAdapter implements CacheDataRow {
     }
 
     /**
+     * @param coProc Cache object processor.
      * @param coctx Cache object context.
      * @param buf Buffer.
      * @param incomplete Incomplete object.
@@ -642,11 +646,12 @@ public class CacheDataRowAdapter implements CacheDataRow {
      * @throws IgniteCheckedException If failed.
      */
     protected IncompleteCacheObject readIncompleteValue(
+        IgniteCacheObjectProcessor coProc,
         CacheObjectContext coctx,
         ByteBuffer buf,
         IncompleteCacheObject incomplete
     ) throws IgniteCheckedException {
-        incomplete = coctx.kernalContext().cacheObjects().toCacheObject(coctx, 
buf, incomplete);
+        incomplete = coProc.toCacheObject(coctx, buf, incomplete);
 
         if (incomplete.isReady()) {
             val = incomplete.object();
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/reader/StandaloneWalRecordsIterator.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/reader/StandaloneWalRecordsIterator.java
index 7246379dabe..7b4b7e741d3 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/reader/StandaloneWalRecordsIterator.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/reader/StandaloneWalRecordsIterator.java
@@ -398,7 +398,12 @@ class StandaloneWalRecordsIterator extends 
AbstractWalRecordsIterator {
         final List<DataEntry> postProcessedEntries = new ArrayList<>(entryCnt);
 
         for (int i = 0; i < entryCnt; i++) {
-            final DataEntry postProcessedEntry = 
postProcessDataEntry(processor, fakeCacheObjCtx, dataRec.get(i));
+            final DataEntry postProcessedEntry = postProcessDataEntry(
+                keepBinary || !kernalCtx.marshallerContext().initialized(),
+                processor,
+                fakeCacheObjCtx,
+                dataRec.get(i)
+            );
 
             postProcessedEntries.add(postProcessedEntry);
         }
@@ -414,6 +419,7 @@ class StandaloneWalRecordsIterator extends 
AbstractWalRecordsIterator {
     /**
      * Converts entry or lazy data entry into unwrapped entry
      *
+     * @param keepBinary Keep binary. This flag disables converting of non 
primitive types (BinaryObjects will be used instead).
      * @param processor cache object processor for de-serializing objects.
      * @param fakeCacheObjCtx cache object context for de-serializing binary 
and unwrapping objects.
      * @param dataEntry entry to process
@@ -421,6 +427,7 @@ class StandaloneWalRecordsIterator extends 
AbstractWalRecordsIterator {
      * @throws IgniteCheckedException if failed
      */
     private @NotNull DataEntry postProcessDataEntry(
+        final boolean keepBinary,
         final IgniteCacheObjectProcessor processor,
         final CacheObjectContext fakeCacheObjCtx,
         final DataEntry dataEntry) throws IgniteCheckedException {
@@ -429,7 +436,6 @@ class StandaloneWalRecordsIterator extends 
AbstractWalRecordsIterator {
 
         final KeyCacheObject key;
         final CacheObject val;
-        boolean keepBinary = this.keepBinary || 
!fakeCacheObjCtx.kernalContext().marshallerContext().initialized();
 
         if (dataEntry instanceof LazyDataEntry) {
             final LazyDataEntry lazyDataEntry = (LazyDataEntry)dataEntry;
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheRawVersionedEntry.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheRawVersionedEntry.java
index 91086b9d779..73909a27698 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheRawVersionedEntry.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheRawVersionedEntry.java
@@ -189,7 +189,7 @@ public class GridCacheRawVersionedEntry<K, V> extends 
DataStreamerEntry implemen
         unmarshalKey(ctx, marsh);
 
         if (val == null && valBytes != null) {
-            val = U.unmarshal(marsh, valBytes, 
U.resolveClassLoader(ctx.kernalContext().config()));
+            val = U.unmarshal(marsh, valBytes, U.resolveClassLoader(null, 
ctx.classLoader()));
 
             val.finishUnmarshal(ctx, null);
         }
@@ -220,7 +220,7 @@ public class GridCacheRawVersionedEntry<K, V> extends 
DataStreamerEntry implemen
         if (key == null) {
             assert keyBytes != null;
 
-            key = U.unmarshal(marsh, keyBytes, 
U.resolveClassLoader(ctx.kernalContext().config()));
+            key = U.unmarshal(marsh, keyBytes, U.resolveClassLoader(null, 
ctx.classLoader()));
 
             key.finishUnmarshal(ctx, null);
         }
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cacheobject/IgniteCacheObjectProcessor.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cacheobject/IgniteCacheObjectProcessor.java
index a1eae8f0848..c6dd45d375f 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cacheobject/IgniteCacheObjectProcessor.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cacheobject/IgniteCacheObjectProcessor.java
@@ -30,6 +30,7 @@ import org.apache.ignite.binary.BinaryObjectException;
 import org.apache.ignite.binary.BinaryType;
 import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.internal.GridKernalContext;
+import org.apache.ignite.internal.binary.BinaryContext;
 import org.apache.ignite.internal.binary.BinaryFieldMetadata;
 import org.apache.ignite.internal.processors.GridProcessor;
 import org.apache.ignite.internal.processors.cache.CacheObject;
@@ -372,4 +373,18 @@ public interface IgniteCacheObjectProcessor extends 
GridProcessor {
      * @param lsnr Listener.
      */
     public void addBinaryMetadataUpdateListener(BinaryMetadataUpdatedListener 
lsnr);
+
+    /**
+     * @return Binary context.
+     */
+    public BinaryContext binaryContext();
+
+    /**
+     * Forces caller thread to wait for binary metadata write operation for 
given type ID.
+     *
+     * In case of in-memory mode this method becomes a No-op as no binary 
metadata is written to disk in this mode.
+     *
+     * @param typeId ID of binary type to wait for metadata write operation.
+     */
+    public void waitMetadataWriteIfNeeded(final int typeId);
 }
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cacheobject/UserCacheObjectImpl.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cacheobject/UserCacheObjectImpl.java
index 2a117a88f3f..1f1c2e8a46d 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cacheobject/UserCacheObjectImpl.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cacheobject/UserCacheObjectImpl.java
@@ -60,7 +60,7 @@ public class UserCacheObjectImpl extends CacheObjectImpl {
                 valBytes = valueBytesFromValue(ctx);
 
             if (ctx.storeValue()) {
-                boolean p2pEnabled = 
ctx.kernalContext().config().isPeerClassLoadingEnabled();
+                boolean p2pEnabled = ctx.isPeerClassLoadingEnabled();
 
                 ClassLoader ldr = p2pEnabled ?
                     IgniteUtils.detectClass(val).getClassLoader() : 
val.getClass().getClassLoader();
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cacheobject/UserKeyCacheObjectImpl.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cacheobject/UserKeyCacheObjectImpl.java
index 0cdff88523b..d51b2ae8b80 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cacheobject/UserKeyCacheObjectImpl.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cacheobject/UserKeyCacheObjectImpl.java
@@ -69,18 +69,16 @@ public class UserKeyCacheObjectImpl extends 
KeyCacheObjectImpl {
     /** {@inheritDoc} */
     @Override public CacheObject prepareForCache(CacheObjectValueContext ctx) {
         try {
-            IgniteCacheObjectProcessor proc = 
ctx.kernalContext().cacheObjects();
-
             if (!BinaryUtils.immutable(val)) {
                 if (valBytes == null)
-                    valBytes = proc.marshal(ctx, val);
+                    valBytes = ctx.marshal(val);
 
-                boolean p2pEnabled = 
ctx.kernalContext().config().isPeerClassLoadingEnabled();
+                boolean p2pEnabled = ctx.isPeerClassLoadingEnabled();
 
                 ClassLoader ldr = p2pEnabled ?
                     
IgniteUtils.detectClassLoader(IgniteUtils.detectClass(this.val)) : 
U.gridClassLoader();
 
-                Object val = proc.unmarshal(ctx, valBytes, ldr);
+                Object val = ctx.unmarshal(valBytes, ldr);
 
                 KeyCacheObject key = new KeyCacheObjectImpl(val, valBytes, 
partition());
 
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/CacheQueryObjectValueContext.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/CacheQueryObjectValueContext.java
index ad03e308396..c0f35883b04 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/CacheQueryObjectValueContext.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/CacheQueryObjectValueContext.java
@@ -18,27 +18,19 @@
 package org.apache.ignite.internal.processors.query;
 
 import org.apache.ignite.internal.GridKernalContext;
-import org.apache.ignite.internal.processors.cache.CacheObjectValueContext;
+import org.apache.ignite.internal.processors.cache.AbstractCacheObjectContext;
 
 /**
  * Cache object value context for queries.
  */
-public class CacheQueryObjectValueContext implements CacheObjectValueContext {
-    /** Kernal context. */
-    private final GridKernalContext ctx;
-
+public class CacheQueryObjectValueContext extends AbstractCacheObjectContext {
     /**
      * Constructor.
      *
      * @param ctx Kernal context.
      */
     public CacheQueryObjectValueContext(GridKernalContext ctx) {
-        this.ctx = ctx;
-    }
-
-    /** {@inheritDoc} */
-    @Override public GridKernalContext kernalContext() {
-        return ctx;
+        super(ctx);
     }
 
     /** {@inheritDoc} */
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java
index b0cc3cc5964..467016f464c 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java
@@ -3527,7 +3527,7 @@ public class GridQueryProcessor extends 
GridProcessorAdapter {
         if (qryParallelism != null && qryParallelism > 1 && cfg.getCacheMode() 
!= PARTITIONED)
             throw new IgniteSQLException("Segmented indices are supported for 
PARTITIONED mode only.");
 
-        QueryEntity entity0 = QueryUtils.normalizeQueryEntity(ctx, entity, 
sqlEscape);
+        QueryEntity entity0 = 
QueryUtils.normalizeQueryEntity(ctx.recoveryMode(), entity, sqlEscape);
 
         SchemaAddQueryEntityOperation op = new SchemaAddQueryEntityOperation(
                 UUID.randomUUID(),
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryTypeDescriptorImpl.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryTypeDescriptorImpl.java
index bdd8b810e4c..3be6819a1e9 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryTypeDescriptorImpl.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryTypeDescriptorImpl.java
@@ -29,13 +29,14 @@ import java.util.Map;
 import java.util.Objects;
 import java.util.Set;
 import org.apache.ignite.IgniteCheckedException;
-import org.apache.ignite.IgniteLogger;
 import org.apache.ignite.binary.BinaryObject;
 import org.apache.ignite.cache.QueryIndexType;
+import org.apache.ignite.configuration.SqlConfiguration;
 import org.apache.ignite.internal.binary.BinaryUtils;
 import org.apache.ignite.internal.processors.cache.CacheObject;
-import org.apache.ignite.internal.processors.cache.CacheObjectContext;
+import org.apache.ignite.internal.processors.cache.CacheObjectValueContext;
 import org.apache.ignite.internal.processors.cache.KeyCacheObject;
+import 
org.apache.ignite.internal.processors.cacheobject.IgniteCacheObjectProcessor;
 import org.apache.ignite.internal.util.tostring.GridToStringExclude;
 import org.apache.ignite.internal.util.tostring.GridToStringInclude;
 import org.apache.ignite.internal.util.typedef.F;
@@ -134,7 +135,10 @@ public class QueryTypeDescriptorImpl implements 
GridQueryTypeDescriptor {
     private List<GridQueryProperty> propsWithDefaultValue;
 
     /** */
-    private final CacheObjectContext coCtx;
+    private final CacheObjectValueContext coCtx;
+
+    /** */
+    private final IgniteCacheObjectProcessor cacheObjects;
 
     /** Primary key fields. */
     private Set<String> pkFields;
@@ -151,19 +155,27 @@ public class QueryTypeDescriptorImpl implements 
GridQueryTypeDescriptor {
     /** */
     private int affFieldInlineSize;
 
-    /** Logger. */
-    private final IgniteLogger log;
+    /** @see SqlConfiguration#isValidationEnabled() */
+    private final boolean validateTypes;
 
     /**
      * Constructor.
      *
      * @param cacheName Cache name.
      * @param coCtx Cache object context.
+     * @param cacheObjects Cache object processor.
+     * @param validateTypes Value of {@link 
SqlConfiguration#isValidationEnabled()}.
      */
-    public QueryTypeDescriptorImpl(String cacheName, CacheObjectContext coCtx) 
{
+    public QueryTypeDescriptorImpl(
+        String cacheName,
+        CacheObjectValueContext coCtx,
+        IgniteCacheObjectProcessor cacheObjects,
+        boolean validateTypes
+    ) {
         this.cacheName = cacheName;
         this.coCtx = coCtx;
-        this.log = coCtx.kernalContext().log(getClass());
+        this.cacheObjects = cacheObjects;
+        this.validateTypes = validateTypes;
     }
 
     /** {@inheritDoc} */
@@ -443,7 +455,7 @@ public class QueryTypeDescriptorImpl implements 
GridQueryTypeDescriptor {
             throw new IgniteCheckedException("Property with upper cased name 
'" + name + "' already exists.");
 
         if ((prop.notNull() && !prop.name().equals(KEY_FIELD_NAME) && 
!prop.name().equals(VAL_FIELD_NAME))
-            || prop.precision() != -1 || 
coCtx.kernalContext().config().getSqlConfiguration().isValidationEnabled()) {
+            || prop.precision() != -1 || validateTypes) {
             if (validateProps == null)
                 validateProps = new ArrayList<>();
 
@@ -610,8 +622,6 @@ public class QueryTypeDescriptorImpl implements 
GridQueryTypeDescriptor {
         if (F.isEmpty(validateProps))
             return;
 
-        final boolean validateTypes = 
coCtx.kernalContext().config().getSqlConfiguration().isValidationEnabled();
-
         for (int i = 0; i < validateProps.size(); ++i) {
             GridQueryProperty prop = validateProps.get(i);
 
@@ -729,7 +739,7 @@ public class QueryTypeDescriptorImpl implements 
GridQueryTypeDescriptor {
                 && Arrays.stream(BinaryUtils.rawArrayFromBinary(val))
                     .allMatch(x -> x == null || 
U.box(expColType.getComponentType()).isAssignableFrom(U.box(x.getClass())));
         }
-        else if 
(coCtx.kernalContext().cacheObjects().typeId(expColType.getName()) != 
((BinaryObject)val).type().typeId()) {
+        else if (cacheObjects.typeId(expColType.getName()) != 
((BinaryObject)val).type().typeId()) {
             final Class<?> cls = 
U.classForName(((BinaryObject)val).type().typeName(), null, true);
 
             return (cls == null && expColType == Object.class) || (cls != null 
&& expColType.isAssignableFrom(cls));
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 fe3e7848b94..2126e27da38 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
@@ -261,11 +261,12 @@ public class QueryUtils {
     /**
      * Normalize cache query entities.
      *
+     * @param recoveryMode Value of {@link GridKernalContext#recoveryMode()}.
      * @param entities Query entities.
      * @param cfg Cache config.
      * @return Normalized query entities.
      */
-    public static Collection<QueryEntity> 
normalizeQueryEntities(GridKernalContext ctx,
+    public static Collection<QueryEntity> normalizeQueryEntities(boolean 
recoveryMode,
         Collection<QueryEntity> entities, CacheConfiguration<?, ?> cfg) {
         Collection<QueryEntity> normalEntities = new 
ArrayList<>(entities.size());
 
@@ -273,7 +274,7 @@ public class QueryUtils {
             if (!F.isEmpty(entity.getNotNullFields()))
                 checkNotNullAllowed(cfg);
 
-            normalEntities.add(normalizeQueryEntity(ctx, entity, 
cfg.isSqlEscapeAll()));
+            normalEntities.add(normalizeQueryEntity(recoveryMode, entity, 
cfg.isSqlEscapeAll()));
         }
 
         return normalEntities;
@@ -283,11 +284,12 @@ public class QueryUtils {
      * Normalize query entity. If "escape" flag is set, nothing changes. 
Otherwise we convert all object names to
      * upper case and replace inner class separator characters ('$' for Java 
and '.' for .NET) with underscore.
      *
+     * @param recoveryMode Value of {@link GridKernalContext#recoveryMode()}.
      * @param entity Query entity.
      * @param escape Escape flag taken form configuration.
      * @return Normalized query entity.
      */
-    public static QueryEntity normalizeQueryEntity(GridKernalContext ctx, 
QueryEntity entity, boolean escape) {
+    public static QueryEntity normalizeQueryEntity(boolean recoveryMode, 
QueryEntity entity, boolean escape) {
         if (escape) {
             String tblName = tableName(entity);
 
@@ -381,7 +383,7 @@ public class QueryUtils {
 
         validateQueryEntity(normalEntity);
 
-        if (!ctx.recoveryMode())
+        if (!recoveryMode)
             normalEntity.fillAbsentPKsWithDefaults(true);
         else if (entity instanceof QueryEntityEx)
             
normalEntity.fillAbsentPKsWithDefaults(((QueryEntityEx)entity).fillAbsentPKsWithDefaults());
@@ -475,7 +477,12 @@ public class QueryUtils {
 
         CacheObjectContext coCtx = ctx.cacheObjects().contextForCache(ccfg);
 
-        QueryTypeDescriptorImpl desc = new QueryTypeDescriptorImpl(cacheName, 
coCtx);
+        QueryTypeDescriptorImpl desc = new QueryTypeDescriptorImpl(
+            cacheName,
+            coCtx,
+            ctx.cacheObjects(),
+            ctx.config().getSqlConfiguration().isValidationEnabled()
+        );
 
         desc.schemaName(schemaName);
 
diff --git 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridLuceneIndex.java
 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridLuceneIndex.java
index 33aa09bf007..1eeb8694928 100644
--- 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridLuceneIndex.java
+++ 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridLuceneIndex.java
@@ -363,7 +363,7 @@ public class GridLuceneIndex implements AutoCloseable {
             if (coctx == null) // For tests.
                 return (Z)JdbcUtils.deserialize(bytes, null);
 
-            return (Z)coctx.kernalContext().cacheObjects().unmarshal(coctx, 
bytes, ldr);
+            return (Z)coctx.unmarshal(bytes, ldr);
         }
 
         /**

Reply via email to