This is an automated email from the ASF dual-hosted git repository.

sergeychugunov 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 85561b93f2f IGNITE-26628 Refactor BinaryMetadataHolder (#12401)
85561b93f2f is described below

commit 85561b93f2f90165f504f15fac2af0ad18e55fa6
Author: Dmitry Werner <[email protected]>
AuthorDate: Wed Oct 15 12:01:54 2025 +0500

    IGNITE-26628 Refactor BinaryMetadataHolder (#12401)
---
 .../cache/binary/BinaryMetadataFileStore.java      |  22 +--
 .../cache/binary/BinaryMetadataTransport.java      | 118 ++++++------
 ...aHolder.java => BinaryMetadataVersionInfo.java} |  35 +++-
 .../binary/CacheObjectBinaryProcessorImpl.java     | 207 +++++++++++----------
 .../main/resources/META-INF/classnames.properties  |   2 +-
 5 files changed, 199 insertions(+), 185 deletions(-)

diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/BinaryMetadataFileStore.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/BinaryMetadataFileStore.java
index 5819bdc104c..961f4c539cd 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/BinaryMetadataFileStore.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/BinaryMetadataFileStore.java
@@ -25,6 +25,7 @@ import java.util.concurrent.BlockingQueue;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 import java.util.concurrent.LinkedBlockingQueue;
+import java.util.function.Consumer;
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.IgniteException;
 import org.apache.ignite.IgniteLogger;
@@ -61,9 +62,6 @@ class BinaryMetadataFileStore {
     /** Link to resolved binary metadata directory. Null for non persistent 
mode */
     private File metadataDir;
 
-    /** */
-    private final ConcurrentMap<Integer, BinaryMetadataHolder> 
metadataLocCache;
-
     /** */
     private final GridKernalContext ctx;
 
@@ -80,7 +78,6 @@ class BinaryMetadataFileStore {
     private BinaryMetadataAsyncWriter writer;
 
     /**
-     * @param metadataLocCache Metadata locale cache.
      * @param ctx Context.
      * @param log Logger.
      * @param metadataDir Path to binary metadata store configured by user, 
should include binary_meta
@@ -88,13 +85,11 @@ class BinaryMetadataFileStore {
      * @param forceEnabled If {@code true} then will write files even if 
persistence and CDC disabled.
      */
     BinaryMetadataFileStore(
-        final ConcurrentMap<Integer, BinaryMetadataHolder> metadataLocCache,
         final GridKernalContext ctx,
         final IgniteLogger log,
         final File metadataDir,
         final boolean forceEnabled
     ) throws IgniteCheckedException {
-        this.metadataLocCache = metadataLocCache;
         this.ctx = ctx;
 
         enabled = forceEnabled || enabled(ctx.config());
@@ -205,30 +200,33 @@ class BinaryMetadataFileStore {
 
     /**
      * Restores metadata on startup of {@link CacheObjectBinaryProcessorImpl} 
but before starting discovery.
+     *
+     * @param consumer Callback invoked on restored binary metadata.
      */
-    void restoreMetadata() {
+    void restoreMetadata(Consumer<BinaryMetadata> consumer) {
         if (!enabled)
             return;
 
         for (File file : metadataDir.listFiles(NodeFileTree::notTmpFile))
-            restoreMetadata(file);
+            restoreMetadata(file, consumer);
     }
 
     /**
      * Restores single type metadata.
      *
      * @param typeId Type identifier.
+     * @param consumer Callback invoked on restored binary metadata.
      */
-    void restoreMetadata(int typeId) {
-        restoreMetadata(new File(metadataDir, 
NodeFileTree.binaryMetaFileName(typeId)));
+    void restoreMetadata(int typeId, Consumer<BinaryMetadata> consumer) {
+        restoreMetadata(new File(metadataDir, 
NodeFileTree.binaryMetaFileName(typeId)), consumer);
     }
 
     /** */
-    private void restoreMetadata(File file) {
+    private void restoreMetadata(File file, Consumer<BinaryMetadata> consumer) 
{
         try (FileInputStream in = new FileInputStream(file)) {
             BinaryMetadata meta = U.unmarshal(ctx.marshaller(), in, 
U.resolveClassLoader(ctx.config()));
 
-            metadataLocCache.put(meta.typeId(), new BinaryMetadataHolder(meta, 
0, 0));
+            consumer.accept(meta);
         }
         catch (Exception e) {
             U.warn(log, "Failed to restore metadata from file: " + 
file.getName() +
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/BinaryMetadataTransport.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/BinaryMetadataTransport.java
index ed2579292a5..6b1582c1374 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/BinaryMetadataTransport.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/BinaryMetadataTransport.java
@@ -84,7 +84,7 @@ final class BinaryMetadataTransport {
     private final boolean clientNode;
 
     /** */
-    private final ConcurrentMap<Integer, BinaryMetadataHolder> metaLocCache;
+    private final ConcurrentMap<Integer, BinaryMetadataVersionInfo> 
metaLocCache;
 
     /** */
     private final BinaryMetadataFileStore metadataFileStore;
@@ -123,7 +123,7 @@ final class BinaryMetadataTransport {
      * @param log Logger.
      */
     BinaryMetadataTransport(
-        ConcurrentMap<Integer, BinaryMetadataHolder> metaLocCache,
+        ConcurrentMap<Integer, BinaryMetadataVersionInfo> metaLocCache,
         BinaryMetadataFileStore metadataFileStore,
         BinaryContext binCtx,
         final GridKernalContext ctx,
@@ -199,32 +199,32 @@ final class BinaryMetadataTransport {
         MetadataUpdateResultFuture resFut;
 
         do {
-            BinaryMetadataHolder metaHolder = metaLocCache.get(typeId);
+            BinaryMetadataVersionInfo metaVerInfo = metaLocCache.get(typeId);
 
-            if (metaHolder != null && metaHolder.removing())
+            if (metaVerInfo != null && metaVerInfo.removing())
                 throw new IgniteException("The metadata is removing for type 
[typeId=" + typeId + ']');
 
-            BinaryMetadata oldMeta = Optional.ofNullable(metaHolder)
-                .map(BinaryMetadataHolder::metadata)
+            BinaryMetadata oldMeta = Optional.ofNullable(metaVerInfo)
+                .map(BinaryMetadataVersionInfo::metadata)
                 .orElse(null);
 
             BinaryMetadata mergedMeta = mergeMetadata(oldMeta, newMeta, null);
 
             if (mergedMeta == oldMeta) {
-                if (metaHolder.pendingVersion() == 
metaHolder.acceptedVersion())
+                if (metaVerInfo.pendingVersion() == 
metaVerInfo.acceptedVersion())
                     return null;
 
-                return awaitMetadataUpdate(typeId, 
metaHolder.pendingVersion());
+                return awaitMetadataUpdate(typeId, 
metaVerInfo.pendingVersion());
             }
 
             resFut = new MetadataUpdateResultFuture(typeId);
         }
         while (!putAndWaitPendingUpdate(typeId, resFut));
 
-        BinaryMetadataHolder metadataHolder = metaLocCache.get(typeId);
+        BinaryMetadataVersionInfo metaVerInfo = metaLocCache.get(typeId);
 
-        BinaryMetadata oldMeta = Optional.ofNullable(metadataHolder)
-            .map(BinaryMetadataHolder::metadata)
+        BinaryMetadata oldMeta = Optional.ofNullable(metaVerInfo)
+            .map(BinaryMetadataVersionInfo::metadata)
             .orElse(null);
 
         Set<Integer> changedSchemas = new LinkedHashSet<>();
@@ -242,7 +242,7 @@ final class BinaryMetadataTransport {
             log.debug("Requesting metadata update [typeId=" + typeId +
                 ", typeName=" + mergedMeta.typeName() +
                 ", changedSchemas=" + changedSchemas +
-                ", holder=" + metadataHolder +
+                ", versionInfo=" + metaVerInfo +
                 ", fut=" + resFut +
                 ']');
         }
@@ -308,9 +308,9 @@ final class BinaryMetadataTransport {
         if (oldFut != null)
             resFut = oldFut;
 
-        BinaryMetadataHolder holder = metaLocCache.get(typeId);
+        BinaryMetadataVersionInfo metaVerInfo = metaLocCache.get(typeId);
 
-        if (holder.acceptedVersion() >= ver)
+        if (metaVerInfo.acceptedVersion() >= ver)
             resFut.onDone(MetadataUpdateResult.createSuccessfulResult(-1));
 
         return resFut;
@@ -542,23 +542,23 @@ final class BinaryMetadataTransport {
 
             int typeId = msg.typeId();
 
-            BinaryMetadataHolder holder = metaLocCache.get(typeId);
+            BinaryMetadataVersionInfo metaVerInfo = metaLocCache.get(typeId);
 
             int pendingVer;
             int acceptedVer;
 
             if (msg.pendingVersion() == 0) {
                 //coordinator receives update request
-                if (holder != null) {
-                    if (holder.removing()) {
+                if (metaVerInfo != null) {
+                    if (metaVerInfo.removing()) {
                         msg.markRejected(new BinaryObjectException("The type 
is removing now [typeId=" + typeId + ']'));
 
                         pendingVer = REMOVED_VERSION;
                         acceptedVer = REMOVED_VERSION;
                     }
                     else {
-                        pendingVer = holder.pendingVersion() + 1;
-                        acceptedVer = holder.acceptedVersion();
+                        pendingVer = metaVerInfo.pendingVersion() + 1;
+                        acceptedVer = metaVerInfo.acceptedVersion();
                     }
                 }
                 else {
@@ -570,7 +570,7 @@ final class BinaryMetadataTransport {
                     msg.pendingVersion(pendingVer);
                     msg.acceptedVersion(acceptedVer);
 
-                    BinaryMetadata locMeta = holder != null ? 
holder.metadata() : null;
+                    BinaryMetadata locMeta = metaVerInfo != null ? 
metaVerInfo.metadata() : null;
 
                     try {
                         Set<Integer> changedSchemas = new LinkedHashSet<>();
@@ -606,7 +606,7 @@ final class BinaryMetadataTransport {
                     
fut.onDone(MetadataUpdateResult.createFailureResult(msg.rejectionError()));
                 else {
                     if (clientNode) {
-                        boolean success = casBinaryMetadata(typeId, new 
BinaryMetadataHolder(msg.metadata(), pendingVer, acceptedVer));
+                        boolean success = casBinaryMetadata(typeId, new 
BinaryMetadataVersionInfo(msg.metadata(), pendingVer, acceptedVer));
 
                         if (success)
                             initSyncFor(typeId, pendingVer, fut);
@@ -616,12 +616,12 @@ final class BinaryMetadataTransport {
                     else {
                         initSyncFor(typeId, pendingVer, fut);
 
-                        BinaryMetadataHolder newHolder = new 
BinaryMetadataHolder(msg.metadata(), pendingVer, acceptedVer);
+                        BinaryMetadataVersionInfo newMetaVerInfo = new 
BinaryMetadataVersionInfo(msg.metadata(), pendingVer, acceptedVer);
 
                         if (log.isDebugEnabled())
-                            log.debug("Updated metadata on originating node: " 
+ newHolder);
+                            log.debug("Updated metadata on originating node: " 
+ newMetaVerInfo);
 
-                        metaLocCache.put(typeId, newHolder);
+                        metaLocCache.put(typeId, newMetaVerInfo);
 
                         
metadataFileStore.prepareMetadataWriting(msg.metadata(), pendingVer);
                     }
@@ -629,23 +629,23 @@ final class BinaryMetadataTransport {
             }
             else {
                 if (!msg.rejected()) {
-                    BinaryMetadata locMeta = holder != null && 
!holder.removing() ? holder.metadata() : null;
+                    BinaryMetadata locMeta = metaVerInfo != null && 
!metaVerInfo.removing() ? metaVerInfo.metadata() : null;
 
                     Set<Integer> changedSchemas = new LinkedHashSet<>();
 
                     try {
                         BinaryMetadata mergedMeta = mergeMetadata(locMeta, 
msg.metadata(), changedSchemas);
 
-                        BinaryMetadataHolder newHolder = new 
BinaryMetadataHolder(mergedMeta, pendingVer, acceptedVer);
+                        BinaryMetadataVersionInfo newMetaVerInfo = new 
BinaryMetadataVersionInfo(mergedMeta, pendingVer, acceptedVer);
 
                         if (clientNode)
-                            casBinaryMetadata(typeId, newHolder);
+                            casBinaryMetadata(typeId, newMetaVerInfo);
                         else {
                             if (log.isDebugEnabled())
-                                log.debug("Updated metadata on server node 
[holder=" + newHolder +
+                                log.debug("Updated metadata on server node 
[versionInfo=" + newMetaVerInfo +
                                     ", changedSchemas=" + changedSchemas + 
']');
 
-                            metaLocCache.put(typeId, newHolder);
+                            metaLocCache.put(typeId, newMetaVerInfo);
 
                             
metadataFileStore.prepareMetadataWriting(mergedMeta, pendingVer);
                         }
@@ -673,15 +673,15 @@ final class BinaryMetadataTransport {
 
             int typeId = msg.typeId();
 
-            BinaryMetadataHolder holder = metaLocCache.get(typeId);
+            BinaryMetadataVersionInfo metaVerInfo = metaLocCache.get(typeId);
 
-            assert holder != null : "No metadata found for typeId " + typeId;
+            assert metaVerInfo != null : "No metadata found for typeId " + 
typeId;
 
             int newAcceptedVer = msg.acceptedVersion();
 
             if (clientNode) {
                 boolean success = casBinaryMetadata(typeId,
-                    new BinaryMetadataHolder(holder.metadata(), 
holder.pendingVersion(), newAcceptedVer));
+                    new BinaryMetadataVersionInfo(metaVerInfo.metadata(), 
metaVerInfo.pendingVersion(), newAcceptedVer));
 
                 ClientMetadataRequestFuture fut = clientReqSyncMap.get(typeId);
 
@@ -689,11 +689,11 @@ final class BinaryMetadataTransport {
                     
fut.onDone(MetadataUpdateResult.createSuccessfulResult(-1));
             }
             else {
-                int oldAcceptedVer = holder.acceptedVersion();
+                int oldAcceptedVer = metaVerInfo.acceptedVersion();
 
                 if (oldAcceptedVer >= newAcceptedVer) {
                     if (log.isDebugEnabled())
-                        log.debug("Marking ack as duplicate [holder=" + holder 
+
+                        log.debug("Marking ack as duplicate [versionInfo=" + 
metaVerInfo +
                             ", newAcceptedVer=" + newAcceptedVer + ']');
 
                     //this is duplicate ack
@@ -707,18 +707,18 @@ final class BinaryMetadataTransport {
                 metadataFileStore.writeMetadataAsync(typeId, newAcceptedVer);
 
                 metaLocCache.put(typeId,
-                    new BinaryMetadataHolder(holder.metadata(), 
holder.pendingVersion(), newAcceptedVer));
+                    new BinaryMetadataVersionInfo(metaVerInfo.metadata(), 
metaVerInfo.pendingVersion(), newAcceptedVer));
             }
 
             for (BinaryMetadataUpdatedListener lsnr : binaryUpdatedLsnrs)
-                lsnr.binaryMetadataUpdated(holder.metadata());
+                lsnr.binaryMetadataUpdated(metaVerInfo.metadata());
 
             GridFutureAdapter<MetadataUpdateResult> fut = syncMap.get(new 
SyncKey(typeId, newAcceptedVer));
 
-            holder = metaLocCache.get(typeId);
+            metaVerInfo = metaLocCache.get(typeId);
 
             if (log.isDebugEnabled())
-                log.debug("Completing future " + fut + " for " + holder);
+                log.debug("Completing future " + fut + " for " + metaVerInfo);
 
             if (!schemaWaitFuts.isEmpty()) {
                 Iterator<Map.Entry<SyncKey, GridFutureAdapter<?>>> iter = 
schemaWaitFuts.entrySet().iterator();
@@ -728,7 +728,7 @@ final class BinaryMetadataTransport {
 
                     SyncKey key = entry.getKey();
 
-                    if (key.typeId() == typeId && 
holder.metadata().hasSchema(key.version())) {
+                    if (key.typeId() == typeId && 
metaVerInfo.metadata().hasSchema(key.version())) {
                         entry.getValue().onDone();
 
                         iter.remove();
@@ -743,23 +743,23 @@ final class BinaryMetadataTransport {
 
     /**
      * @param typeId Type id.
-     * @param newHolder New binary metadata holder.
-     * @return {@code true} if new holder was added successfully.
+     * @param newMetaVerInfo New binary metadata version info.
+     * @return {@code true} if new version info was added successfully.
      */
-    private boolean casBinaryMetadata(int typeId, BinaryMetadataHolder 
newHolder) {
-        BinaryMetadataHolder oldHolder;
+    private boolean casBinaryMetadata(int typeId, BinaryMetadataVersionInfo 
newMetaVerInfo) {
+        BinaryMetadataVersionInfo oldMetaVerInfo;
 
         do {
-            oldHolder = metaLocCache.putIfAbsent(typeId, newHolder);
+            oldMetaVerInfo = metaLocCache.putIfAbsent(typeId, newMetaVerInfo);
 
-            if (oldHolder == null)
+            if (oldMetaVerInfo == null)
                 return true;
 
-            if (obsoleteUpdate(oldHolder.pendingVersion(), 
oldHolder.acceptedVersion(),
-                newHolder.pendingVersion(), newHolder.acceptedVersion()))
+            if (obsoleteUpdate(oldMetaVerInfo.pendingVersion(), 
oldMetaVerInfo.acceptedVersion(),
+                newMetaVerInfo.pendingVersion(), 
newMetaVerInfo.acceptedVersion()))
                 return false;
         }
-        while (!metaLocCache.replace(typeId, oldHolder, newHolder));
+        while (!metaLocCache.replace(typeId, oldMetaVerInfo, newMetaVerInfo));
 
         return true;
     }
@@ -838,15 +838,15 @@ final class BinaryMetadataTransport {
 
             int typeId = msg0.typeId();
 
-            BinaryMetadataHolder metaHolder = metaLocCache.get(typeId);
+            BinaryMetadataVersionInfo metaVerInfo = metaLocCache.get(typeId);
 
             MetadataResponseMessage resp = new MetadataResponseMessage(typeId);
 
             byte[] binMetaBytes = null;
 
-            if (metaHolder != null) {
+            if (metaVerInfo != null) {
                 try {
-                    binMetaBytes = U.marshal(ctx, metaHolder);
+                    binMetaBytes = U.marshal(ctx, metaVerInfo);
                 }
                 catch (IgniteCheckedException e) {
                     U.error(log, "Failed to marshal binary metadata for 
[typeId=" + typeId + ']', e);
@@ -918,24 +918,24 @@ final class BinaryMetadataTransport {
 
             int typeId = msg.typeId();
 
-            BinaryMetadataHolder metaHld = metaLocCache.get(typeId);
+            BinaryMetadataVersionInfo metaVerInfo = metaLocCache.get(typeId);
 
-            assert metaHld != null : "No metadata found for typeId: " + typeId;
+            assert metaVerInfo != null : "No metadata found for typeId: " + 
typeId;
 
             if (msg.isOnCoordinator()) {
-                if (metaHld == null)
+                if (metaVerInfo == null)
                     msg.markRejected(new BinaryObjectException("Type not found 
[typeId=" + typeId + ']'));
 
-                if (metaHld.pendingVersion() != metaHld.acceptedVersion()) {
+                if (metaVerInfo.pendingVersion() != 
metaVerInfo.acceptedVersion()) {
                     msg.markRejected(new BinaryObjectException(
                         "Remove type failed. " +
                             "Type is being updated now [typeId=" + typeId
-                            + ", pendingVersion=" + metaHld.pendingVersion()
-                            + ", acceptedVersion=" + metaHld.acceptedVersion()
+                            + ", pendingVersion=" + 
metaVerInfo.pendingVersion()
+                            + ", acceptedVersion=" + 
metaVerInfo.acceptedVersion()
                             + ']'));
                 }
 
-                if (metaHld.removing()) {
+                if (metaVerInfo.removing()) {
                     msg.markRejected(new BinaryObjectException(
                         "Remove type failed. " +
                             "Type is being removed now [typeId=" + typeId
@@ -958,7 +958,7 @@ final class BinaryMetadataTransport {
                 if (fut != null)
                     initSyncFor(typeId, REMOVED_VERSION, fut);
 
-                metaLocCache.put(typeId, metaHld.createRemoving());
+                metaLocCache.put(typeId, metaVerInfo.createRemoving());
 
                 if (isPersistenceEnabled)
                     metadataFileStore.prepareMetadataRemove(typeId);
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/BinaryMetadataHolder.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/BinaryMetadataVersionInfo.java
similarity index 66%
rename from 
modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/BinaryMetadataHolder.java
rename to 
modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/BinaryMetadataVersionInfo.java
index 923434dacd1..36c8f98418e 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/BinaryMetadataHolder.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/BinaryMetadataVersionInfo.java
@@ -22,29 +22,44 @@ import org.apache.ignite.internal.binary.BinaryMetadata;
 /**
  * Wrapper for {@link BinaryMetadata} which is stored in metadata local cache 
on each node.
  * Used internally to track version counters (see javadoc for {@link 
MetadataUpdateProposedMessage} for more details).
+ * The version refers solely to the internal protocol for updating 
BinaryMetadata and is unknown externally.
+ * It can be updated dynamically from different nodes and threads on the same 
node.
  */
-final class BinaryMetadataHolder implements Serializable {
+final class BinaryMetadataVersionInfo implements Serializable {
     /** */
     private static final long serialVersionUID = 0L;
 
-    /** */
+    /** The actual binary metadata. */
     private final BinaryMetadata metadata;
 
-    /** */
+    /**
+     * The version of metadata that has been proposed for update. This 
represents how many unique updates have been issued
+     * for this type. When a metadata update is proposed, this version is 
incremented.
+     */
     private final int pendingVer;
 
-    /** */
+    /**
+     * The version of metadata that has been accepted by the entire cluster.
+     * This represents the number of updates that have been confirmed across 
all nodes.
+     */
     private final int acceptedVer;
 
-    /** */
+    /** A flag indicating whether the metadata is currently being removed. */
     private final transient boolean removing;
 
+    /**
+     * @param metadata Metadata.
+     */
+    BinaryMetadataVersionInfo(BinaryMetadata metadata) {
+        this(metadata, 0, 0, false);
+    }
+
     /**
      * @param metadata Metadata.
      * @param pendingVer Version of this metadata - how many updates were 
issued for this type.
      * @param acceptedVer Pending updates count.
      */
-    BinaryMetadataHolder(BinaryMetadata metadata, int pendingVer, int 
acceptedVer) {
+    BinaryMetadataVersionInfo(BinaryMetadata metadata, int pendingVer, int 
acceptedVer) {
         this(metadata, pendingVer, acceptedVer, false);
     }
 
@@ -54,7 +69,7 @@ final class BinaryMetadataHolder implements Serializable {
      * @param acceptedVer Version of this metadata - how many updates were 
issued for this type.
      * @param removing Flag means the metadata is removing now.
      */
-    private BinaryMetadataHolder(BinaryMetadata metadata, int pendingVer, int 
acceptedVer, boolean removing) {
+    private BinaryMetadataVersionInfo(BinaryMetadata metadata, int pendingVer, 
int acceptedVer, boolean removing) {
         assert metadata != null;
 
         this.metadata = metadata;
@@ -64,10 +79,10 @@ final class BinaryMetadataHolder implements Serializable {
     }
 
     /**
-     * @return Holder metadata with remove state where remove pending message 
has been handled.
+     * @return Metadata version info with remove state where remove pending 
message has been handled.
      */
-    BinaryMetadataHolder createRemoving() {
-        return new BinaryMetadataHolder(metadata, pendingVer, acceptedVer, 
true);
+    BinaryMetadataVersionInfo createRemoving() {
+        return new BinaryMetadataVersionInfo(metadata, pendingVer, 
acceptedVer, true);
     }
 
     /**
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 0c0d3016c51..cc7a145ef88 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
@@ -166,7 +166,7 @@ public class CacheObjectBinaryProcessorImpl extends 
GridProcessorAdapter impleme
     private IgniteBinary binaries;
 
     /** Locally cached metadata. This local cache is managed by exchanging 
discovery custom events. */
-    private final ConcurrentMap<Integer, BinaryMetadataHolder> 
metadataLocCache = new ConcurrentHashMap<>();
+    private final ConcurrentMap<Integer, BinaryMetadataVersionInfo> 
metadataLocCache = new ConcurrentHashMap<>();
 
     /** */
     private BinaryMetadataTransport transport;
@@ -196,7 +196,7 @@ public class CacheObjectBinaryProcessorImpl extends 
GridProcessorAdapter impleme
             if (BinaryMetadataFileStore.enabled(ctx.config()) && 
binaryMetadataFileStoreDir == null)
                 binaryMetadataFileStoreDir = 
ctx.pdsFolderResolver().fileTree().mkdirBinaryMeta();
 
-            metadataFileStore = new BinaryMetadataFileStore(metadataLocCache, 
ctx, log, binaryMetadataFileStoreDir, false);
+            metadataFileStore = new BinaryMetadataFileStore(ctx, log, 
binaryMetadataFileStoreDir, false);
 
             metadataFileStore.start();
         }
@@ -210,14 +210,14 @@ public class CacheObjectBinaryProcessorImpl extends 
GridProcessorAdapter impleme
                 assert newMeta instanceof BinaryTypeImpl;
 
                 if (!discoveryStarted) {
-                    BinaryMetadataHolder holder = metadataLocCache.get(typeId);
+                    BinaryMetadataVersionInfo metaVerInfo = 
metadataLocCache.get(typeId);
 
-                    BinaryMetadata oldMeta = holder != null ? 
holder.metadata() : null;
+                    BinaryMetadata oldMeta = metaVerInfo != null ? 
metaVerInfo.metadata() : null;
 
                     BinaryMetadata mergedMeta = mergeMetadata(oldMeta, 
((BinaryTypeImpl)newMeta).metadata());
 
                     if (oldMeta != mergedMeta)
-                        metadataLocCache.put(typeId, new 
BinaryMetadataHolder(mergedMeta, 0, 0));
+                        metadataLocCache.put(typeId, new 
BinaryMetadataVersionInfo(mergedMeta));
 
                     return;
                 }
@@ -304,7 +304,7 @@ public class CacheObjectBinaryProcessorImpl extends 
GridProcessorAdapter impleme
         }
 
         if (!ctx.clientNode())
-            metadataFileStore.restoreMetadata();
+            metadataFileStore.restoreMetadata(meta -> 
metadataLocCache.put(meta.typeId(), new BinaryMetadataVersionInfo(meta)));
 
         fakeCacheObjCtx = new CacheObjectContext(ctx, null, null, false, 
false, false, false, false);
     }
@@ -591,20 +591,20 @@ public class CacheObjectBinaryProcessorImpl extends 
GridProcessorAdapter impleme
      * @param newMeta0 Expected binary metadata.
      */
     private void failIfUnregistered(int typeId, BinaryMetadata newMeta0) {
-        BinaryMetadataHolder metaHolder = metadataLocCache.get(typeId);
+        BinaryMetadataVersionInfo metaVerInfo = metadataLocCache.get(typeId);
 
-        BinaryMetadata oldMeta = metaHolder != null ? metaHolder.metadata() : 
null;
+        BinaryMetadata oldMeta = metaVerInfo != null ? metaVerInfo.metadata() 
: null;
 
         BinaryMetadata mergedMeta = mergeMetadata(oldMeta, newMeta0);
 
         if (mergedMeta != oldMeta)
             throw new UnregisteredBinaryTypeException(typeId, mergedMeta);
 
-        if (metaHolder.pendingVersion() == metaHolder.acceptedVersion())
+        if (metaVerInfo.pendingVersion() == metaVerInfo.acceptedVersion())
             return;
 
         // Metadata locally is up-to-date. Waiting for updating metadata in an 
entire cluster, if necessary.
-        GridFutureAdapter<MetadataUpdateResult> fut = 
transport.awaitMetadataUpdate(typeId, metaHolder.pendingVersion());
+        GridFutureAdapter<MetadataUpdateResult> fut = 
transport.awaitMetadataUpdate(typeId, metaVerInfo.pendingVersion());
 
         if (!fut.isDone())
             throw new UnregisteredBinaryTypeException(typeId, fut);
@@ -622,9 +622,9 @@ public class CacheObjectBinaryProcessorImpl extends 
GridProcessorAdapter impleme
 
         BinaryMetadata newMeta0 = ((BinaryTypeImpl)newMeta).metadata();
 
-        BinaryMetadataHolder metaHolder = metadataLocCache.get(typeId);
+        BinaryMetadataVersionInfo metaVerInfo = metadataLocCache.get(typeId);
 
-        BinaryMetadata oldMeta = metaHolder != null ? metaHolder.metadata() : 
null;
+        BinaryMetadata oldMeta = metaVerInfo != null ? metaVerInfo.metadata() 
: null;
 
         try {
             BinaryMetadata mergedMeta = mergeMetadata(oldMeta, newMeta0);
@@ -632,7 +632,7 @@ public class CacheObjectBinaryProcessorImpl extends 
GridProcessorAdapter impleme
             if (!ctx.clientNode() && writeToFile)
                 metadataFileStore.mergeAndWriteMetadata(mergedMeta);
 
-            metadataLocCache.put(typeId, new BinaryMetadataHolder(mergedMeta, 
0, 0));
+            metadataLocCache.put(typeId, new 
BinaryMetadataVersionInfo(mergedMeta));
         }
         catch (BinaryObjectException e) {
             throw new BinaryObjectException("New binary metadata is 
incompatible with binary metadata" +
@@ -653,15 +653,15 @@ public class CacheObjectBinaryProcessorImpl extends 
GridProcessorAdapter impleme
         if (metadataFileStore == null)
             return;
 
-        BinaryMetadataHolder hldr = metadataLocCache.get(typeId);
+        BinaryMetadataVersionInfo metaVerInfo = metadataLocCache.get(typeId);
 
-        if (hldr != null) {
+        if (metaVerInfo != null) {
             try {
-                metadataFileStore.waitForWriteCompletion(typeId, 
hldr.pendingVersion());
+                metadataFileStore.waitForWriteCompletion(typeId, 
metaVerInfo.pendingVersion());
             }
             catch (IgniteCheckedException e) {
                 log.warning("Failed to wait for metadata write operation for 
[typeId=" + typeId +
-                    ", typeVer=" + hldr.acceptedVersion() + ']', e);
+                    ", typeVer=" + metaVerInfo.acceptedVersion() + ']', e);
             }
         }
     }
@@ -672,16 +672,16 @@ public class CacheObjectBinaryProcessorImpl extends 
GridProcessorAdapter impleme
      * @throws IgniteException In case of error.
      */
     @Nullable public BinaryMetadata metadata0(final int typeId) {
-        BinaryMetadataHolder holder = metadataLocCache.get(typeId);
+        BinaryMetadataVersionInfo metaVerInfo = metadataLocCache.get(typeId);
 
         IgniteThread curThread = IgniteThread.current();
 
-        if (holder == null && (curThread == null || 
!curThread.isForbiddenToRequestBinaryMetadata())) {
+        if (metaVerInfo == null && (curThread == null || 
!curThread.isForbiddenToRequestBinaryMetadata())) {
             if (ctx.clientNode()) {
                 try {
                     transport.requestUpToDateMetadata(typeId).get();
 
-                    holder = metadataLocCache.get(typeId);
+                    metaVerInfo = metadataLocCache.get(typeId);
                 }
                 catch (IgniteCheckedException ignored) {
                     // No-op.
@@ -689,8 +689,8 @@ public class CacheObjectBinaryProcessorImpl extends 
GridProcessorAdapter impleme
             }
         }
 
-        if (holder != null) {
-            if (holder.removing()) {
+        if (metaVerInfo != null) {
+            if (metaVerInfo.removing()) {
                 GridFutureAdapter<MetadataUpdateResult> fut = 
transport.awaitMetadataRemove(typeId);
 
                 try {
@@ -704,16 +704,16 @@ public class CacheObjectBinaryProcessorImpl extends 
GridProcessorAdapter impleme
             }
 
             if (curThread instanceof IgniteDiscoveryThread || (curThread != 
null && curThread.isForbiddenToRequestBinaryMetadata()))
-                return holder.metadata();
+                return metaVerInfo.metadata();
 
-            if (holder.pendingVersion() - holder.acceptedVersion() > 0) {
-                GridFutureAdapter<MetadataUpdateResult> fut = 
transport.awaitMetadataUpdate(typeId, holder.pendingVersion());
+            if (metaVerInfo.pendingVersion() - metaVerInfo.acceptedVersion() > 
0) {
+                GridFutureAdapter<MetadataUpdateResult> fut = 
transport.awaitMetadataUpdate(typeId, metaVerInfo.pendingVersion());
 
                 if (log.isDebugEnabled() && !fut.isDone())
                     log.debug("Waiting for update for" +
                         " [typeId=" + typeId +
-                        ", pendingVer=" + holder.pendingVersion() +
-                        ", acceptedVer=" + holder.acceptedVersion() + "]");
+                        ", pendingVer=" + metaVerInfo.pendingVersion() +
+                        ", acceptedVer=" + metaVerInfo.acceptedVersion() + 
"]");
 
                 try {
                     fut.get();
@@ -724,17 +724,17 @@ public class CacheObjectBinaryProcessorImpl extends 
GridProcessorAdapter impleme
             }
             else if (metadataFileStore != null) {
                 try {
-                    metadataFileStore.waitForWriteCompletion(typeId, 
holder.pendingVersion());
+                    metadataFileStore.waitForWriteCompletion(typeId, 
metaVerInfo.pendingVersion());
                 }
                 catch (IgniteCheckedException e) {
                     log.warning("Failed to wait for metadata write operation 
for [typeId=" + typeId +
-                        ", typeVer=" + holder.acceptedVersion() + ']', e);
+                        ", typeVer=" + metaVerInfo.acceptedVersion() + ']', e);
 
                     return null;
                 }
             }
 
-            return holder.metadata();
+            return metaVerInfo.metadata();
         }
         else
             return null;
@@ -742,16 +742,16 @@ public class CacheObjectBinaryProcessorImpl extends 
GridProcessorAdapter impleme
 
     /** {@inheritDoc} */
     @Nullable @Override public BinaryType metadata(final int typeId, final int 
schemaId) {
-        BinaryMetadataHolder holder = metadataLocCache.get(typeId);
+        BinaryMetadataVersionInfo metaVerInfo = metadataLocCache.get(typeId);
 
         if (ctx.clientNode()) {
-            if (holder == null || !holder.metadata().hasSchema(schemaId)) {
+            if (metaVerInfo == null || 
!metaVerInfo.metadata().hasSchema(schemaId)) {
                 if (log.isDebugEnabled())
                     log.debug("Waiting for client metadata update" +
                         " [typeId=" + typeId
                         + ", schemaId=" + schemaId
-                        + ", pendingVer=" + (holder == null ? "NA" : 
holder.pendingVersion())
-                        + ", acceptedVer=" + (holder == null ? "NA" : 
holder.acceptedVersion()) + ']');
+                        + ", pendingVer=" + (metaVerInfo == null ? "NA" : 
metaVerInfo.pendingVersion())
+                        + ", acceptedVer=" + (metaVerInfo == null ? "NA" : 
metaVerInfo.acceptedVersion()) + ']');
 
                 try {
                     transport.requestUpToDateMetadata(typeId).get();
@@ -760,37 +760,37 @@ public class CacheObjectBinaryProcessorImpl extends 
GridProcessorAdapter impleme
                     // No-op.
                 }
 
-                holder = metadataLocCache.get(typeId);
+                metaVerInfo = metadataLocCache.get(typeId);
 
                 IgniteFuture<?> reconnectFut0 = reconnectFut;
 
-                if (holder == null && reconnectFut0 != null)
+                if (metaVerInfo == null && reconnectFut0 != null)
                     throw new IgniteClientDisconnectedException(reconnectFut0, 
"Client node disconnected.");
 
                 if (log.isDebugEnabled())
                     log.debug("Finished waiting for client metadata update" +
                         " [typeId=" + typeId
                         + ", schemaId=" + schemaId
-                        + ", pendingVer=" + (holder == null ? "NA" : 
holder.pendingVersion())
-                        + ", acceptedVer=" + (holder == null ? "NA" : 
holder.acceptedVersion()) + ']');
+                        + ", pendingVer=" + (metaVerInfo == null ? "NA" : 
metaVerInfo.pendingVersion())
+                        + ", acceptedVer=" + (metaVerInfo == null ? "NA" : 
metaVerInfo.acceptedVersion()) + ']');
             }
         }
         else {
-            if (holder != null && IgniteThread.current() instanceof 
IgniteDiscoveryThread)
-                return holder.metadata().wrap(binaryCtx);
-            else if (holder != null && (holder.pendingVersion() - 
holder.acceptedVersion() > 0)) {
+            if (metaVerInfo != null && IgniteThread.current() instanceof 
IgniteDiscoveryThread)
+                return metaVerInfo.metadata().wrap(binaryCtx);
+            else if (metaVerInfo != null && (metaVerInfo.pendingVersion() - 
metaVerInfo.acceptedVersion() > 0)) {
                 if (log.isDebugEnabled())
                     log.debug("Waiting for metadata update" +
                         " [typeId=" + typeId
                         + ", schemaId=" + schemaId
-                        + ", pendingVer=" + holder.pendingVersion()
-                        + ", acceptedVer=" + holder.acceptedVersion() + ']');
+                        + ", pendingVer=" + metaVerInfo.pendingVersion()
+                        + ", acceptedVer=" + metaVerInfo.acceptedVersion() + 
']');
 
                 long t0 = System.nanoTime();
 
                 GridFutureAdapter<MetadataUpdateResult> fut = 
transport.awaitMetadataUpdate(
                     typeId,
-                    holder.pendingVersion());
+                    metaVerInfo.pendingVersion());
 
                 try {
                     fut.get();
@@ -804,20 +804,20 @@ public class CacheObjectBinaryProcessorImpl extends 
GridProcessorAdapter impleme
                         " [typeId=" + typeId
                         + ", waitTime=" + 
NANOSECONDS.convert(System.nanoTime() - t0, MILLISECONDS) + "ms"
                         + ", schemaId=" + schemaId
-                        + ", pendingVer=" + holder.pendingVersion()
-                        + ", acceptedVer=" + holder.acceptedVersion() + ']');
+                        + ", pendingVer=" + metaVerInfo.pendingVersion()
+                        + ", acceptedVer=" + metaVerInfo.acceptedVersion() + 
']');
 
-                holder = metadataLocCache.get(typeId);
+                metaVerInfo = metadataLocCache.get(typeId);
             }
-            else if (holder == null || !holder.metadata().hasSchema(schemaId)) 
{
+            else if (metaVerInfo == null || 
!metaVerInfo.metadata().hasSchema(schemaId)) {
                 // Last resort waiting.
                 U.warn(log,
                     "Schema is missing while no metadata updates are in 
progress " +
                         "(will wait for schema update within timeout defined 
by " + IGNITE_WAIT_SCHEMA_UPDATE + " system property)" +
                         " [typeId=" + typeId
                         + ", missingSchemaId=" + schemaId
-                        + ", pendingVer=" + (holder == null ? "NA" : 
holder.pendingVersion())
-                        + ", acceptedVer=" + (holder == null ? "NA" : 
holder.acceptedVersion())
+                        + ", pendingVer=" + (metaVerInfo == null ? "NA" : 
metaVerInfo.pendingVersion())
+                        + ", acceptedVer=" + (metaVerInfo == null ? "NA" : 
metaVerInfo.acceptedVersion())
                         + ", binMetaUpdateTimeout=" + waitSchemaTimeout + ']');
 
                 long t0 = System.nanoTime();
@@ -835,31 +835,31 @@ public class CacheObjectBinaryProcessorImpl extends 
GridProcessorAdapter impleme
                     // No-op.
                 }
 
-                holder = metadataLocCache.get(typeId);
+                metaVerInfo = metadataLocCache.get(typeId);
 
-                if (log.isDebugEnabled() && holder != null && 
holder.metadata().hasSchema(schemaId))
+                if (log.isDebugEnabled() && metaVerInfo != null && 
metaVerInfo.metadata().hasSchema(schemaId))
                     log.debug("Found the schema after wait" +
                         " [typeId=" + typeId
                         + ", waitTime=" + 
NANOSECONDS.convert(System.nanoTime() - t0, MILLISECONDS) + "ms"
                         + ", schemaId=" + schemaId
-                        + ", pendingVer=" + holder.pendingVersion()
-                        + ", acceptedVer=" + holder.acceptedVersion() + ']');
+                        + ", pendingVer=" + metaVerInfo.pendingVersion()
+                        + ", acceptedVer=" + metaVerInfo.acceptedVersion() + 
']');
             }
         }
 
-        if (holder != null && metadataFileStore != null) {
+        if (metaVerInfo != null && metadataFileStore != null) {
             try {
-                metadataFileStore.waitForWriteCompletion(typeId, 
holder.pendingVersion());
+                metadataFileStore.waitForWriteCompletion(typeId, 
metaVerInfo.pendingVersion());
             }
             catch (IgniteCheckedException e) {
                 log.warning("Failed to wait for metadata write operation for 
[typeId=" + typeId +
-                    ", typeVer=" + holder.acceptedVersion() + ']', e);
+                    ", typeVer=" + metaVerInfo.acceptedVersion() + ']', e);
 
                 return null;
             }
         }
 
-        return holder != null ? holder.metadata().wrap(binaryCtx) : null;
+        return metaVerInfo != null ? metaVerInfo.metadata().wrap(binaryCtx) : 
null;
     }
 
     /** {@inheritDoc} */
@@ -868,7 +868,7 @@ public class CacheObjectBinaryProcessorImpl extends 
GridProcessorAdapter impleme
         try {
             Map<Integer, BinaryType> res = 
U.newHashMap(metadataLocCache.size());
 
-            for (Map.Entry<Integer, BinaryMetadataHolder> e : 
metadataLocCache.entrySet())
+            for (Map.Entry<Integer, BinaryMetadataVersionInfo> e : 
metadataLocCache.entrySet())
                 res.put(e.getKey(), e.getValue().metadata().wrap(binaryCtx));
 
             return res;
@@ -880,9 +880,9 @@ public class CacheObjectBinaryProcessorImpl extends 
GridProcessorAdapter impleme
 
     /** {@inheritDoc} */
     @Override public Collection<BinaryType> metadata() throws 
BinaryObjectException {
-        return F.viewReadOnly(metadataLocCache.values(), new 
IgniteClosure<BinaryMetadataHolder, BinaryType>() {
-            @Override public BinaryType apply(BinaryMetadataHolder metaHolder) 
{
-                return metaHolder.metadata().wrap(binaryCtx);
+        return F.viewReadOnly(metadataLocCache.values(), new 
IgniteClosure<BinaryMetadataVersionInfo, BinaryType>() {
+            @Override public BinaryType apply(BinaryMetadataVersionInfo 
metaVerInfo) {
+                return metaVerInfo.metadata().wrap(binaryCtx);
             }
         });
     }
@@ -892,9 +892,9 @@ public class CacheObjectBinaryProcessorImpl extends 
GridProcessorAdapter impleme
      * @throws BinaryObjectException on error.
      */
     public Collection<BinaryMetadata> binaryMetadata() throws 
BinaryObjectException {
-        return F.viewReadOnly(metadataLocCache.values(), new 
IgniteClosure<BinaryMetadataHolder, BinaryMetadata>() {
-            @Override public BinaryMetadata apply(BinaryMetadataHolder 
metaHolder) {
-                return metaHolder.metadata();
+        return F.viewReadOnly(metadataLocCache.values(), new 
IgniteClosure<BinaryMetadataVersionInfo, BinaryMetadata>() {
+            @Override public BinaryMetadata apply(BinaryMetadataVersionInfo 
metaVerInfo) {
+                return metaVerInfo.metadata();
             }
         });
     }
@@ -904,15 +904,15 @@ public class CacheObjectBinaryProcessorImpl extends 
GridProcessorAdapter impleme
      * @throws BinaryObjectException on error.
      */
     public BinaryMetadata binaryMetadata(int typeId) throws 
BinaryObjectException {
-        BinaryMetadataHolder hld = metadataLocCache.get(typeId);
+        BinaryMetadataVersionInfo metaVerInfo = metadataLocCache.get(typeId);
 
-        return hld != null ? hld.metadata() : null;
+        return metaVerInfo != null ? metaVerInfo.metadata() : null;
     }
 
     /** {@inheritDoc} */
     @Override public void saveMetadata(Collection<BinaryType> types, 
NodeFileTree ft) {
         try {
-            BinaryMetadataFileStore writer = new BinaryMetadataFileStore(new 
ConcurrentHashMap<>(), ctx, log, ft.mkdirBinaryMeta(), true);
+            BinaryMetadataFileStore writer = new BinaryMetadataFileStore(ctx, 
log, ft.mkdirBinaryMeta(), true);
 
             for (BinaryType type : types)
                 
writer.mergeAndWriteMetadata(((BinaryTypeImpl)type).metadata());
@@ -928,12 +928,12 @@ public class CacheObjectBinaryProcessorImpl extends 
GridProcessorAdapter impleme
             return;
 
         try {
-            ConcurrentMap<Integer, BinaryMetadataHolder> metaCache = new 
ConcurrentHashMap<>();
+            ConcurrentMap<Integer, BinaryMetadataVersionInfo> metaCache = new 
ConcurrentHashMap<>();
 
-            new BinaryMetadataFileStore(metaCache, ctx, log, ft.binaryMeta(), 
false)
-                .restoreMetadata();
+            new BinaryMetadataFileStore(ctx, log, ft.binaryMeta(), false)
+                .restoreMetadata(meta -> metaCache.put(meta.typeId(), new 
BinaryMetadataVersionInfo(meta)));
 
-            Collection<BinaryMetadata> metadata = 
F.viewReadOnly(metaCache.values(), BinaryMetadataHolder::metadata);
+            Collection<BinaryMetadata> metadata = 
F.viewReadOnly(metaCache.values(), BinaryMetadataVersionInfo::metadata);
 
             // Check the compatibility of the binary metadata.
             for (BinaryMetadata newMeta : metadata) {
@@ -964,9 +964,10 @@ public class CacheObjectBinaryProcessorImpl extends 
GridProcessorAdapter impleme
         if (!ft.binaryMeta().exists())
             return;
 
-        ConcurrentMap<Integer, BinaryMetadataHolder> metaCache = new 
ConcurrentHashMap<>();
+        ConcurrentMap<Integer, BinaryMetadataVersionInfo> metaCache = new 
ConcurrentHashMap<>();
 
-        new BinaryMetadataFileStore(metaCache, ctx, log, ft.binaryMeta(), 
false).restoreMetadata(typeId);
+        new BinaryMetadataFileStore(ctx, log, ft.binaryMeta(), false)
+            .restoreMetadata(typeId, meta -> metaCache.put(meta.typeId(), new 
BinaryMetadataVersionInfo(meta)));
 
         addMetaLocally(typeId, 
metaCache.get(typeId).metadata().wrap(binaryContext()), false);
     }
@@ -1394,7 +1395,7 @@ public class CacheObjectBinaryProcessorImpl extends 
GridProcessorAdapter impleme
         if ((res = validateBinaryConfiguration(rmtNode)) != null)
             return res;
 
-        return validateBinaryMetadata(rmtNode.id(), (Map<Integer, 
BinaryMetadataHolder>)discoData.joiningNodeData());
+        return validateBinaryMetadata(rmtNode.id(), (Map<Integer, 
BinaryMetadataVersionInfo>)discoData.joiningNodeData());
     }
 
     /** */
@@ -1418,11 +1419,11 @@ public class CacheObjectBinaryProcessorImpl extends 
GridProcessorAdapter impleme
     }
 
     /** */
-    private IgniteNodeValidationResult validateBinaryMetadata(UUID rmtNodeId, 
Map<Integer, BinaryMetadataHolder> newNodeMeta) {
+    private IgniteNodeValidationResult validateBinaryMetadata(UUID rmtNodeId, 
Map<Integer, BinaryMetadataVersionInfo> newNodeMeta) {
         if (newNodeMeta == null)
             return null;
 
-        for (Map.Entry<Integer, BinaryMetadataHolder> metaEntry : 
newNodeMeta.entrySet()) {
+        for (Map.Entry<Integer, BinaryMetadataVersionInfo> metaEntry : 
newNodeMeta.entrySet()) {
             if (!metadataLocCache.containsKey(metaEntry.getKey()))
                 continue;
 
@@ -1457,9 +1458,9 @@ public class CacheObjectBinaryProcessorImpl extends 
GridProcessorAdapter impleme
     /** {@inheritDoc} */
     @Override public void collectGridNodeData(DiscoveryDataBag dataBag) {
         if (!dataBag.commonDataCollectedFor(BINARY_PROC.ordinal())) {
-            Map<Integer, BinaryMetadataHolder> res = 
U.newHashMap(metadataLocCache.size());
+            Map<Integer, BinaryMetadataVersionInfo> res = 
U.newHashMap(metadataLocCache.size());
 
-            for (Map.Entry<Integer, BinaryMetadataHolder> e : 
metadataLocCache.entrySet()) {
+            for (Map.Entry<Integer, BinaryMetadataVersionInfo> e : 
metadataLocCache.entrySet()) {
                 if (!e.getValue().removing())
                     res.put(e.getKey(), e.getValue());
             }
@@ -1470,9 +1471,9 @@ public class CacheObjectBinaryProcessorImpl extends 
GridProcessorAdapter impleme
 
     /** {@inheritDoc} */
     @Override public void collectJoiningNodeData(DiscoveryDataBag dataBag) {
-        Map<Integer, BinaryMetadataHolder> res = 
U.newHashMap(metadataLocCache.size());
+        Map<Integer, BinaryMetadataVersionInfo> res = 
U.newHashMap(metadataLocCache.size());
 
-        for (Map.Entry<Integer, BinaryMetadataHolder> e : 
metadataLocCache.entrySet())
+        for (Map.Entry<Integer, BinaryMetadataVersionInfo> e : 
metadataLocCache.entrySet())
             res.put(e.getKey(), e.getValue());
 
         dataBag.addJoiningNodeData(BINARY_PROC.ordinal(), (Serializable)res);
@@ -1480,19 +1481,19 @@ public class CacheObjectBinaryProcessorImpl extends 
GridProcessorAdapter impleme
 
     /** {@inheritDoc} */
     @Override public void 
onJoiningNodeDataReceived(DiscoveryDataBag.JoiningNodeDiscoveryData data) {
-        Map<Integer, BinaryMetadataHolder> newNodeMeta = (Map<Integer, 
BinaryMetadataHolder>)data.joiningNodeData();
+        Map<Integer, BinaryMetadataVersionInfo> newNodeMeta = (Map<Integer, 
BinaryMetadataVersionInfo>)data.joiningNodeData();
 
         if (newNodeMeta == null)
             return;
 
         UUID joiningNode = data.joiningNodeId();
 
-        for (Map.Entry<Integer, BinaryMetadataHolder> metaEntry : 
newNodeMeta.entrySet()) {
+        for (Map.Entry<Integer, BinaryMetadataVersionInfo> metaEntry : 
newNodeMeta.entrySet()) {
             if (metadataLocCache.containsKey(metaEntry.getKey())) {
-                BinaryMetadataHolder locMetaHolder = 
metadataLocCache.get(metaEntry.getKey());
+                BinaryMetadataVersionInfo locMetaVerInfo = 
metadataLocCache.get(metaEntry.getKey());
 
                 BinaryMetadata newMeta = metaEntry.getValue().metadata();
-                BinaryMetadata locMeta = locMetaHolder.metadata();
+                BinaryMetadata locMeta = locMetaVerInfo.metadata();
 
                 BinaryMetadata mergedMeta = mergeMetadata(locMeta, newMeta);
 
@@ -1506,17 +1507,17 @@ public class CacheObjectBinaryProcessorImpl extends 
GridProcessorAdapter impleme
                             joiningNode));
 
                     metadataLocCache.put(metaEntry.getKey(),
-                        new BinaryMetadataHolder(mergedMeta,
-                            locMetaHolder.pendingVersion(),
-                            locMetaHolder.acceptedVersion()));
+                        new BinaryMetadataVersionInfo(mergedMeta,
+                            locMetaVerInfo.pendingVersion(),
+                            locMetaVerInfo.acceptedVersion()));
 
                     if (!ctx.clientNode())
                         metadataFileStore.writeMetadata(mergedMeta);
                 }
             }
             else {
-                BinaryMetadataHolder newMetaHolder = metaEntry.getValue();
-                BinaryMetadata newMeta = newMetaHolder.metadata();
+                BinaryMetadataVersionInfo newMetaVerInfo = 
metaEntry.getValue();
+                BinaryMetadata newMeta = newMetaVerInfo.metadata();
 
                 U.log(log,
                     String.format("New BinaryMetadata[typeId=%d, typeName=%s] 
" +
@@ -1525,7 +1526,7 @@ public class CacheObjectBinaryProcessorImpl extends 
GridProcessorAdapter impleme
                         newMeta.typeName(),
                         joiningNode));
 
-                metadataLocCache.put(metaEntry.getKey(), newMetaHolder);
+                metadataLocCache.put(metaEntry.getKey(), newMetaVerInfo);
 
                 if (!ctx.clientNode())
                     metadataFileStore.writeMetadata(newMeta);
@@ -1535,23 +1536,23 @@ public class CacheObjectBinaryProcessorImpl extends 
GridProcessorAdapter impleme
 
     /** {@inheritDoc} */
     @Override public void onGridDataReceived(GridDiscoveryData data) {
-        Map<Integer, BinaryMetadataHolder> receivedData = (Map<Integer, 
BinaryMetadataHolder>)data.commonData();
+        Map<Integer, BinaryMetadataVersionInfo> receivedData = (Map<Integer, 
BinaryMetadataVersionInfo>)data.commonData();
 
         if (receivedData != null) {
-            for (Map.Entry<Integer, BinaryMetadataHolder> e : 
receivedData.entrySet()) {
-                BinaryMetadataHolder holder = e.getValue();
+            for (Map.Entry<Integer, BinaryMetadataVersionInfo> e : 
receivedData.entrySet()) {
+                BinaryMetadataVersionInfo metaVerInfo = e.getValue();
 
-                BinaryMetadataHolder locHolder = new 
BinaryMetadataHolder(holder.metadata(),
-                        holder.pendingVersion(),
-                        holder.pendingVersion());
+                BinaryMetadataVersionInfo locMetaVerInfo = new 
BinaryMetadataVersionInfo(metaVerInfo.metadata(),
+                        metaVerInfo.pendingVersion(),
+                        metaVerInfo.pendingVersion());
 
                 if (log.isDebugEnabled())
-                    log.debug("Received metadata on join: " + locHolder);
+                    log.debug("Received metadata on join: " + locMetaVerInfo);
 
-                metadataLocCache.put(e.getKey(), locHolder);
+                metadataLocCache.put(e.getKey(), locMetaVerInfo);
 
                 if (!ctx.clientNode())
-                    metadataFileStore.writeMetadata(holder.metadata());
+                    metadataFileStore.writeMetadata(metaVerInfo.metadata());
             }
         }
     }
@@ -1566,12 +1567,12 @@ public class CacheObjectBinaryProcessorImpl extends 
GridProcessorAdapter impleme
 
     /** {@inheritDoc} */
     @Override public void removeType(int typeId) {
-        BinaryMetadataHolder oldHld = metadataLocCache.get(typeId);
+        BinaryMetadataVersionInfo oldMetaVerInfo = 
metadataLocCache.get(typeId);
 
-        if (oldHld == null)
+        if (oldMetaVerInfo == null)
             throw new IgniteException("Failed to remove metadata, type not 
found: " + typeId);
 
-        if (oldHld.removing())
+        if (oldMetaVerInfo.removing())
             throw new IgniteException("Failed to remove metadata, type is 
being removed: " + typeId);
 
         try {
diff --git a/modules/core/src/main/resources/META-INF/classnames.properties 
b/modules/core/src/main/resources/META-INF/classnames.properties
index 6e72233f68e..014ebcbb49b 100644
--- a/modules/core/src/main/resources/META-INF/classnames.properties
+++ b/modules/core/src/main/resources/META-INF/classnames.properties
@@ -1033,9 +1033,9 @@ 
org.apache.ignite.internal.processors.cache.WalStateFinishMessage
 org.apache.ignite.internal.processors.cache.WalStateManager$2
 org.apache.ignite.internal.processors.cache.WalStateProposeMessage
 org.apache.ignite.internal.processors.cache.affinity.GridCacheAffinityProxy
-org.apache.ignite.internal.processors.cache.binary.BinaryMetadataHolder
 org.apache.ignite.internal.processors.cache.binary.BinaryMetadataKey
 org.apache.ignite.internal.processors.cache.binary.BinaryMetadataTransport$2
+org.apache.ignite.internal.processors.cache.binary.BinaryMetadataVersionInfo
 
org.apache.ignite.internal.processors.cache.binary.CacheObjectBinaryProcessorImpl$2
 
org.apache.ignite.internal.processors.cache.binary.CacheObjectBinaryProcessorImpl$3
 
org.apache.ignite.internal.processors.cache.binary.MetadataRemoveAcceptedMessage

Reply via email to