class RetrieveConflictValuesJob extends ComputeJobAdapter {
        /** */
        private static final long serialVersionUID = 0L;

        /** Ignite instance. */
        @IgniteInstanceResource
        private IgniteEx ignite;

        /** Injected logger. */
        @LoggerResource
        private IgniteLogger log;

        /** Partition hash record. */
        private PartitionHashRecord partHashRecord;

        /** Entry hash records. */
        private List<PartitionEntryHashRecord> entryHashRecords;

        /** Partition key. */
        private PartitionKey partKey;

        /**
         * @param arg Partition key.
         */
        private RetrieveConflictValuesJob(T2<PartitionHashRecord, List<PartitionEntryHashRecord>> arg) {
            partHashRecord = arg.get1();
            entryHashRecords = arg.get2();
            partKey = partHashRecord.partitionKey();
        }

        /** {@inheritDoc} */
        @Override public Map<PartitionHashRecord, List<PartitionEntryHashRecord>> execute() throws IgniteException {<FILL_FUNCTION_BODY>}
    }

            CacheGroupContext grpCtx = ignite.context().cache().cacheGroup(partKey.groupId());

            if (grpCtx == null)
                return Collections.emptyMap();

            GridDhtLocalPartition part = grpCtx.topology().localPartition(partKey.partitionId());

            if (part == null || !part.reserve())
                return Collections.emptyMap();

            HashMap<Integer, GridCacheContext> cacheIdToCtx = new HashMap<>();

            for (GridCacheContext ctx : grpCtx.caches())
                cacheIdToCtx.put(ctx.cacheId(), ctx);

            try {
                if (part.state() != GridDhtPartitionState.OWNING)
                    return Collections.emptyMap();

                if (part.updateCounter() != partHashRecord.updateCounter()) {
                    throw new IgniteException("Cluster is not idle: update counter of partition " + partKey.toString() +
                        " changed during hash calculation [before=" + partHashRecord.updateCounter() +
                        ", after=" + part.updateCounter() + "]");
                }

                for (PartitionEntryHashRecord entryHashRecord : entryHashRecords) {
                    GridCacheContext ctx = cacheIdToCtx.get(entryHashRecord.cacheId());

                    if (ctx == null)
                        continue;

                    KeyCacheObject key = grpCtx.shared().kernalContext().cacheObjects().toKeyCacheObject(
                        grpCtx.cacheObjectContext(), entryHashRecord.key().cacheObjectType(), entryHashRecord.keyBytes());

                    CacheDataRow row = part.dataStore().find(ctx, key);

                    if (row == null)
                        continue;

                    CacheObject val = row.value();

                    Object o = CacheObjectUtils.unwrapBinaryIfNeeded(grpCtx.cacheObjectContext(), val, true, true);

                    if (o != null)
                        entryHashRecord.valueString(o.toString());

                    entryHashRecord.valueBytes(row.value().valueBytes(grpCtx.cacheObjectContext()));
                }
            }
            catch (IgniteCheckedException e) {
                U.error(log, "Can't retrieve value for partition " + partKey.toString(), e);

                return Collections.emptyMap();
            }
            finally {
                part.release();
            }

            return new T2<>(partHashRecord, entryHashRecords);
        
<methods>public non-sealed void <init>() ,public org.apache.ignite.compute.ComputeJobResultPolicy result(org.apache.ignite.compute.ComputeJobResult, List<org.apache.ignite.compute.ComputeJobResult>) throws org.apache.ignite.IgniteException<variables>private static final long serialVersionUID