Search in sources :

Example 16 with GridCacheOperation

use of org.apache.ignite.internal.processors.cache.GridCacheOperation in project ignite by apache.

the class GridDhtAtomicCache method createSingleUpdateFuture.

/**
 * Craete future for single key-val pair update.
 *
 * @param key Key.
 * @param val Value.
 * @param proc Processor.
 * @param invokeArgs Invoke arguments.
 * @param retval Return value flag.
 * @param filter Filter.
 * @return Future.
 */
private GridNearAtomicAbstractUpdateFuture createSingleUpdateFuture(K key, @Nullable V val, @Nullable EntryProcessor proc, @Nullable Object[] invokeArgs, boolean retval, @Nullable CacheEntryPredicate filter) {
    CacheOperationContext opCtx = ctx.operationContextPerCall();
    GridCacheOperation op;
    Object val0;
    if (val != null) {
        op = UPDATE;
        val0 = val;
    } else if (proc != null) {
        op = TRANSFORM;
        val0 = proc;
    } else {
        op = DELETE;
        val0 = null;
    }
    GridCacheDrInfo conflictPutVal = null;
    GridCacheVersion conflictRmvVer = null;
    if (opCtx != null && opCtx.hasDataCenterId()) {
        Byte dcId = opCtx.dataCenterId();
        assert dcId != null;
        if (op == UPDATE) {
            conflictPutVal = new GridCacheDrInfo(ctx.toCacheObject(val), ctx.versions().next(dcId));
            val0 = null;
        } else if (op == GridCacheOperation.TRANSFORM) {
            conflictPutVal = new GridCacheDrInfo(proc, ctx.versions().next(dcId));
            val0 = null;
        } else
            conflictRmvVer = ctx.versions().next(dcId);
    }
    CacheEntryPredicate[] filters = CU.filterArray(filter);
    if (conflictPutVal == null && conflictRmvVer == null) {
        return new GridNearAtomicSingleUpdateFuture(ctx, this, ctx.config().getWriteSynchronizationMode(), op, key, val0, invokeArgs, retval, false, opCtx != null ? opCtx.expiry() : null, filters, ctx.subjectIdPerCall(null, opCtx), ctx.kernalContext().job().currentTaskNameHash(), opCtx != null && opCtx.skipStore(), opCtx != null && opCtx.isKeepBinary(), opCtx != null && opCtx.recovery(), opCtx != null && opCtx.noRetries() ? 1 : MAX_RETRIES);
    } else {
        return new GridNearAtomicUpdateFuture(ctx, this, ctx.config().getWriteSynchronizationMode(), op, Collections.singletonList(key), val0 != null ? Collections.singletonList(val0) : null, invokeArgs, conflictPutVal != null ? Collections.singleton(conflictPutVal) : null, conflictRmvVer != null ? Collections.singleton(conflictRmvVer) : null, retval, false, opCtx != null ? opCtx.expiry() : null, filters, ctx.subjectIdPerCall(null, opCtx), ctx.kernalContext().job().currentTaskNameHash(), opCtx != null && opCtx.skipStore(), opCtx != null && opCtx.isKeepBinary(), opCtx != null && opCtx.recovery(), opCtx != null && opCtx.noRetries() ? 1 : MAX_RETRIES);
    }
}
Also used : GridCacheDrInfo(org.apache.ignite.internal.processors.cache.dr.GridCacheDrInfo) GridCacheVersion(org.apache.ignite.internal.processors.cache.version.GridCacheVersion) CacheOperationContext(org.apache.ignite.internal.processors.cache.CacheOperationContext) CacheObject(org.apache.ignite.internal.processors.cache.CacheObject) KeyCacheObject(org.apache.ignite.internal.processors.cache.KeyCacheObject) GridTimeoutObject(org.apache.ignite.internal.processors.timeout.GridTimeoutObject) CacheEntryPredicate(org.apache.ignite.internal.processors.cache.CacheEntryPredicate) GridCacheOperation(org.apache.ignite.internal.processors.cache.GridCacheOperation)

Example 17 with GridCacheOperation

use of org.apache.ignite.internal.processors.cache.GridCacheOperation in project ignite by apache.

the class IgnitePdsCheckpointSimulationWithRealCpDisabledTest method testDataWalEntries.

/**
 * @throws Exception if failed.
 */
public void testDataWalEntries() throws Exception {
    IgniteEx ig = startGrid(0);
    ig.active(true);
    GridCacheSharedContext<Object, Object> sharedCtx = ig.context().cache().context();
    GridCacheContext<Object, Object> cctx = sharedCtx.cache().cache(cacheName).context();
    GridCacheDatabaseSharedManager db = (GridCacheDatabaseSharedManager) sharedCtx.database();
    IgniteWriteAheadLogManager wal = sharedCtx.wal();
    assertTrue(wal.isAlwaysWriteFullPages());
    db.enableCheckpoints(false).get();
    final int cnt = 10;
    List<DataEntry> entries = new ArrayList<>(cnt);
    for (int i = 0; i < cnt; i++) {
        GridCacheOperation op = i % 2 == 0 ? GridCacheOperation.UPDATE : GridCacheOperation.DELETE;
        KeyCacheObject key = cctx.toCacheKeyObject(i);
        CacheObject val = null;
        if (op != GridCacheOperation.DELETE)
            val = cctx.toCacheObject("value-" + i);
        entries.add(new DataEntry(cctx.cacheId(), key, val, op, null, cctx.versions().next(), 0L, cctx.affinity().partition(i), i));
    }
    UUID cpId = UUID.randomUUID();
    WALPointer start = wal.log(new CheckpointRecord(cpId, null));
    wal.fsync(start);
    for (DataEntry entry : entries) wal.log(new DataRecord(entry));
    // Data will not be written to the page store.
    stopAllGrids();
    ig = startGrid(0);
    ig.active(true);
    sharedCtx = ig.context().cache().context();
    cctx = sharedCtx.cache().cache(cacheName).context();
    db = (GridCacheDatabaseSharedManager) sharedCtx.database();
    wal = sharedCtx.wal();
    db.enableCheckpoints(false).get();
    try (PartitionMetaStateRecordExcludeIterator it = new PartitionMetaStateRecordExcludeIterator(wal.replay(start))) {
        IgniteBiTuple<WALPointer, WALRecord> cpRecordTup = it.next();
        assert cpRecordTup.get2() instanceof CheckpointRecord;
        assertEquals(start, cpRecordTup.get1());
        CheckpointRecord cpRec = (CheckpointRecord) cpRecordTup.get2();
        assertEquals(cpId, cpRec.checkpointId());
        assertNull(cpRec.checkpointMark());
        assertFalse(cpRec.end());
        int idx = 0;
        CacheObjectContext coctx = cctx.cacheObjectContext();
        while (idx < entries.size()) {
            IgniteBiTuple<WALPointer, WALRecord> dataRecTup = it.next();
            assert dataRecTup.get2() instanceof DataRecord;
            DataRecord dataRec = (DataRecord) dataRecTup.get2();
            DataEntry entry = entries.get(idx);
            assertEquals(1, dataRec.writeEntries().size());
            DataEntry readEntry = dataRec.writeEntries().get(0);
            assertEquals(entry.cacheId(), readEntry.cacheId());
            assertEquals(entry.key().<Integer>value(coctx, true), readEntry.key().<Integer>value(coctx, true));
            assertEquals(entry.op(), readEntry.op());
            if (entry.op() == GridCacheOperation.UPDATE)
                assertEquals(entry.value().value(coctx, true), readEntry.value().value(coctx, true));
            else
                assertNull(entry.value());
            assertEquals(entry.writeVersion(), readEntry.writeVersion());
            assertEquals(entry.nearXidVersion(), readEntry.nearXidVersion());
            assertEquals(entry.partitionCounter(), readEntry.partitionCounter());
            idx++;
        }
    }
}
Also used : WALRecord(org.apache.ignite.internal.pagemem.wal.record.WALRecord) IgniteWriteAheadLogManager(org.apache.ignite.internal.pagemem.wal.IgniteWriteAheadLogManager) GridCacheDatabaseSharedManager(org.apache.ignite.internal.processors.cache.persistence.GridCacheDatabaseSharedManager) ArrayList(java.util.ArrayList) CheckpointRecord(org.apache.ignite.internal.pagemem.wal.record.CheckpointRecord) CacheObjectContext(org.apache.ignite.internal.processors.cache.CacheObjectContext) DataEntry(org.apache.ignite.internal.pagemem.wal.record.DataEntry) IgniteEx(org.apache.ignite.internal.IgniteEx) CacheObject(org.apache.ignite.internal.processors.cache.CacheObject) KeyCacheObject(org.apache.ignite.internal.processors.cache.KeyCacheObject) CacheObject(org.apache.ignite.internal.processors.cache.CacheObject) KeyCacheObject(org.apache.ignite.internal.processors.cache.KeyCacheObject) DataRecord(org.apache.ignite.internal.pagemem.wal.record.DataRecord) GridCacheOperation(org.apache.ignite.internal.processors.cache.GridCacheOperation) UUID(java.util.UUID) WALPointer(org.apache.ignite.internal.pagemem.wal.WALPointer) KeyCacheObject(org.apache.ignite.internal.processors.cache.KeyCacheObject)

Example 18 with GridCacheOperation

use of org.apache.ignite.internal.processors.cache.GridCacheOperation in project ignite by apache.

the class IgniteWalReaderTest method testPutAllTxIntoTwoNodes.

/**
 * Tests transaction generation and WAL for putAll cache operation.
 * @throws Exception if failed.
 */
public void testPutAllTxIntoTwoNodes() throws Exception {
    final Ignite ignite = startGrid("node0");
    final Ignite ignite1 = startGrid(1);
    ignite.active(true);
    final Map<Object, IndexedObject> map = new TreeMap<>();
    final int cntEntries = 1000;
    for (int i = 0; i < cntEntries; i++) map.put(i, new IndexedObject(i));
    ignite.cache(CACHE_NAME).putAll(map);
    ignite.active(false);
    final String subfolderName = genDbSubfolderName(ignite, 0);
    final String subfolderName1 = genDbSubfolderName(ignite1, 1);
    stopAllGrids();
    final String workDir = U.defaultWorkDirectory();
    final IgniteWalIteratorFactory factory = createWalIteratorFactory(workDir, subfolderName);
    final StringBuilder builder = new StringBuilder();
    final Map<GridCacheOperation, Integer> operationsFound = new EnumMap<>(GridCacheOperation.class);
    final IgniteInClosure<DataRecord> drHnd = new IgniteInClosure<DataRecord>() {

        @Override
        public void apply(DataRecord dataRecord) {
            final List<DataEntry> entries = dataRecord.writeEntries();
            builder.append("{");
            for (DataEntry entry : entries) {
                final GridCacheOperation op = entry.op();
                final Integer cnt = operationsFound.get(op);
                operationsFound.put(op, cnt == null ? 1 : (cnt + 1));
                if (entry instanceof UnwrapDataEntry) {
                    final UnwrapDataEntry entry1 = (UnwrapDataEntry) entry;
                    builder.append(entry1.op()).append(" for ").append(entry1.unwrappedKey());
                    final GridCacheVersion ver = entry.nearXidVersion();
                    builder.append(", ");
                    if (ver != null)
                        builder.append("tx=").append(ver).append(", ");
                }
            }
            builder.append("}\n");
        }
    };
    scanIterateAndCount(factory, workDir, subfolderName, 1, 1, null, drHnd);
    scanIterateAndCount(factory, workDir, subfolderName1, 1, 1, null, drHnd);
    final Integer createsFound = operationsFound.get(CREATE);
    if (log.isInfoEnabled())
        log.info(builder.toString());
    assertTrue("Create operations should be found in log: " + operationsFound, createsFound != null && createsFound > 0);
    assertTrue("Create operations count should be at least " + cntEntries + " in log: " + operationsFound, createsFound != null && createsFound >= cntEntries);
}
Also used : IgniteWalIteratorFactory(org.apache.ignite.internal.processors.cache.persistence.wal.reader.IgniteWalIteratorFactory) UnwrapDataEntry(org.apache.ignite.internal.pagemem.wal.record.UnwrapDataEntry) TreeMap(java.util.TreeMap) DataEntry(org.apache.ignite.internal.pagemem.wal.record.DataEntry) LazyDataEntry(org.apache.ignite.internal.pagemem.wal.record.LazyDataEntry) UnwrapDataEntry(org.apache.ignite.internal.pagemem.wal.record.UnwrapDataEntry) GridCacheVersion(org.apache.ignite.internal.processors.cache.version.GridCacheVersion) IgniteInClosure(org.apache.ignite.lang.IgniteInClosure) Ignite(org.apache.ignite.Ignite) BinaryObject(org.apache.ignite.binary.BinaryObject) CacheObject(org.apache.ignite.internal.processors.cache.CacheObject) KeyCacheObject(org.apache.ignite.internal.processors.cache.KeyCacheObject) DataRecord(org.apache.ignite.internal.pagemem.wal.record.DataRecord) GridCacheOperation(org.apache.ignite.internal.processors.cache.GridCacheOperation) EnumMap(java.util.EnumMap)

Example 19 with GridCacheOperation

use of org.apache.ignite.internal.processors.cache.GridCacheOperation in project ignite by apache.

the class GridNearAtomicCache method processDhtAtomicUpdateRequest.

/**
 * @param nodeId Sender node ID.
 * @param req Dht atomic update request.
 * @param res Dht atomic update response.
 * @return Evicted near keys (if any).
 */
@Nullable
public List<KeyCacheObject> processDhtAtomicUpdateRequest(UUID nodeId, GridDhtAtomicAbstractUpdateRequest req, GridDhtAtomicNearResponse res) {
    GridCacheVersion ver = req.writeVersion();
    assert ver != null;
    boolean intercept = req.forceTransformBackups() && ctx.config().getInterceptor() != null;
    String taskName = ctx.kernalContext().task().resolveTaskName(req.taskNameHash());
    List<KeyCacheObject> nearEvicted = null;
    for (int i = 0; i < req.nearSize(); i++) {
        KeyCacheObject key = req.nearKey(i);
        try {
            while (true) {
                try {
                    GridCacheEntryEx entry = peekEx(key);
                    if (entry == null) {
                        if (nearEvicted == null)
                            nearEvicted = new ArrayList<>();
                        nearEvicted.add(key);
                        break;
                    }
                    CacheObject val = req.nearValue(i);
                    EntryProcessor<Object, Object, Object> entryProcessor = req.nearEntryProcessor(i);
                    GridCacheOperation op = entryProcessor != null ? TRANSFORM : (val != null) ? UPDATE : DELETE;
                    long ttl = req.nearTtl(i);
                    long expireTime = req.nearExpireTime(i);
                    GridCacheUpdateAtomicResult updRes = entry.innerUpdate(ver, nodeId, nodeId, op, op == TRANSFORM ? entryProcessor : val, op == TRANSFORM ? req.invokeArguments() : null, /*write-through*/
                    false, /*read-through*/
                    false, /*retval*/
                    false, req.keepBinary(), null, /*event*/
                    true, /*metrics*/
                    true, /*primary*/
                    false, /*check version*/
                    !req.forceTransformBackups(), req.topologyVersion(), CU.empty0(), DR_NONE, ttl, expireTime, null, false, intercept, req.subjectId(), taskName, null, null, null);
                    if (updRes.removeVersion() != null)
                        ctx.onDeferredDelete(entry, updRes.removeVersion());
                    break;
                } catch (GridCacheEntryRemovedException ignored) {
                    if (log.isDebugEnabled())
                        log.debug("Got removed entry while updating near value (will retry): " + key);
                }
            }
        } catch (IgniteCheckedException e) {
            res.addFailedKey(key, new IgniteCheckedException("Failed to update near cache key: " + key, e));
        }
    }
    for (int i = 0; i < req.obsoleteNearKeysSize(); i++) {
        KeyCacheObject key = req.obsoleteNearKey(i);
        GridCacheEntryEx entry = peekEx(key);
        if (entry != null && entry.markObsolete(ver))
            removeEntry(entry);
    }
    return nearEvicted;
}
Also used : ArrayList(java.util.ArrayList) GridCacheVersion(org.apache.ignite.internal.processors.cache.version.GridCacheVersion) GridCacheEntryEx(org.apache.ignite.internal.processors.cache.GridCacheEntryEx) IgniteCheckedException(org.apache.ignite.IgniteCheckedException) CacheObject(org.apache.ignite.internal.processors.cache.CacheObject) KeyCacheObject(org.apache.ignite.internal.processors.cache.KeyCacheObject) GridCacheEntryRemovedException(org.apache.ignite.internal.processors.cache.GridCacheEntryRemovedException) CacheObject(org.apache.ignite.internal.processors.cache.CacheObject) KeyCacheObject(org.apache.ignite.internal.processors.cache.KeyCacheObject) GridCacheOperation(org.apache.ignite.internal.processors.cache.GridCacheOperation) GridCacheUpdateAtomicResult(org.apache.ignite.internal.processors.cache.GridCacheUpdateAtomicResult) KeyCacheObject(org.apache.ignite.internal.processors.cache.KeyCacheObject) Nullable(org.jetbrains.annotations.Nullable)

Example 20 with GridCacheOperation

use of org.apache.ignite.internal.processors.cache.GridCacheOperation in project ignite by apache.

the class GridNearTxLocal method enlistWriteEntry.

/**
 * @param cacheCtx Cache context.
 * @param cacheKey Key.
 * @param val Value.
 * @param entryProcessor Entry processor.
 * @param invokeArgs Optional arguments for EntryProcessor.
 * @param expiryPlc Explicitly specified expiry policy for entry.
 * @param retval Return value flag.
 * @param lockOnly Lock only flag.
 * @param filter Filter.
 * @param drVer DR version.
 * @param drTtl DR ttl.
 * @param drExpireTime DR expire time.
 * @param ret Return value.
 * @param enlisted Enlisted keys collection.
 * @param skipStore Skip store flag.
 * @param singleRmv {@code True} for single remove operation.
 * @param hasFilters {@code True} if filters not empty.
 * @param needVal {@code True} if value is needed.
 * @param needReadVer {@code True} if need read entry version.
 * @return {@code True} if entry value should be loaded.
 * @throws IgniteCheckedException If failed.
 */
private boolean enlistWriteEntry(GridCacheContext cacheCtx, @Nullable AffinityTopologyVersion entryTopVer, final KeyCacheObject cacheKey, @Nullable final Object val, @Nullable final EntryProcessor<?, ?, ?> entryProcessor, @Nullable final Object[] invokeArgs, @Nullable final ExpiryPolicy expiryPlc, final boolean retval, final boolean lockOnly, final CacheEntryPredicate[] filter, final GridCacheVersion drVer, final long drTtl, long drExpireTime, final GridCacheReturn ret, @Nullable final Collection<KeyCacheObject> enlisted, boolean skipStore, boolean singleRmv, boolean hasFilters, final boolean needVal, boolean needReadVer, boolean keepBinary, boolean recovery) throws IgniteCheckedException {
    boolean loadMissed = false;
    final boolean rmv = val == null && entryProcessor == null;
    IgniteTxKey txKey = cacheCtx.txKey(cacheKey);
    IgniteTxEntry txEntry = entry(txKey);
    // First time access.
    if (txEntry == null) {
        while (true) {
            GridCacheEntryEx entry = entryEx(cacheCtx, txKey, entryTopVer != null ? entryTopVer : topologyVersion());
            try {
                entry.unswap(false);
                // Check if lock is being explicitly acquired by the same thread.
                if (!implicit && cctx.kernalContext().config().isCacheSanityCheckEnabled() && entry.lockedByThread(threadId, xidVer)) {
                    throw new IgniteCheckedException("Cannot access key within transaction if lock is " + "externally held [key=" + CU.value(cacheKey, cacheCtx, false) + ", entry=" + entry + ", xidVer=" + xidVer + ", threadId=" + threadId + ", locNodeId=" + cctx.localNodeId() + ']');
                }
                CacheObject old = null;
                GridCacheVersion readVer = null;
                if (optimistic() && !implicit()) {
                    try {
                        if (needReadVer) {
                            EntryGetResult res = primaryLocal(entry) ? entry.innerGetVersioned(null, this, /*metrics*/
                            retval, /*events*/
                            retval, CU.subjectId(this, cctx), entryProcessor, resolveTaskName(), null, keepBinary, null) : null;
                            if (res != null) {
                                old = res.value();
                                readVer = res.version();
                            }
                        } else {
                            old = entry.innerGet(null, this, /*read through*/
                            false, /*metrics*/
                            retval, /*events*/
                            retval, CU.subjectId(this, cctx), entryProcessor, resolveTaskName(), null, keepBinary);
                        }
                    } catch (ClusterTopologyCheckedException e) {
                        entry.context().evicts().touch(entry, topologyVersion());
                        throw e;
                    }
                } else
                    old = entry.rawGet();
                final GridCacheOperation op = lockOnly ? NOOP : rmv ? DELETE : entryProcessor != null ? TRANSFORM : old != null ? UPDATE : CREATE;
                if (old != null && hasFilters && !filter(entry.context(), cacheKey, old, filter)) {
                    ret.set(cacheCtx, old, false, keepBinary);
                    if (!readCommitted()) {
                        if (optimistic() && serializable()) {
                            txEntry = addEntry(op, old, entryProcessor, invokeArgs, entry, expiryPlc, filter, true, drTtl, drExpireTime, drVer, skipStore, keepBinary, CU.isNearEnabled(cacheCtx));
                        } else {
                            txEntry = addEntry(READ, old, null, null, entry, null, CU.empty0(), false, -1L, -1L, null, skipStore, keepBinary, CU.isNearEnabled(cacheCtx));
                        }
                        txEntry.markValid();
                        if (needReadVer) {
                            assert readVer != null;
                            txEntry.entryReadVersion(singleRmv ? SER_READ_NOT_EMPTY_VER : readVer);
                        }
                    }
                    if (readCommitted())
                        cacheCtx.evicts().touch(entry, topologyVersion());
                    // While.
                    break;
                }
                CacheObject cVal = cacheCtx.toCacheObject(val);
                if (op == CREATE || op == UPDATE)
                    cacheCtx.validateKeyAndValue(cacheKey, cVal);
                txEntry = addEntry(op, cVal, entryProcessor, invokeArgs, entry, expiryPlc, filter, true, drTtl, drExpireTime, drVer, skipStore, keepBinary, CU.isNearEnabled(cacheCtx));
                if (enlisted != null)
                    enlisted.add(cacheKey);
                if (!pessimistic() && !implicit()) {
                    txEntry.markValid();
                    if (old == null) {
                        if (needVal)
                            loadMissed = true;
                        else {
                            assert !implicit() || !transform : this;
                            assert txEntry.op() != TRANSFORM : txEntry;
                            if (retval)
                                ret.set(cacheCtx, null, true, keepBinary);
                            else
                                ret.success(true);
                        }
                    } else {
                        if (needReadVer) {
                            assert readVer != null;
                            txEntry.entryReadVersion(singleRmv ? SER_READ_NOT_EMPTY_VER : readVer);
                        }
                        if (retval && !transform)
                            ret.set(cacheCtx, old, true, keepBinary);
                        else {
                            if (txEntry.op() == TRANSFORM) {
                                GridCacheVersion ver;
                                try {
                                    ver = entry.version();
                                } catch (GridCacheEntryRemovedException ex) {
                                    assert optimistic() : txEntry;
                                    if (log.isDebugEnabled())
                                        log.debug("Failed to get entry version " + "[err=" + ex.getMessage() + ']');
                                    ver = null;
                                }
                                addInvokeResult(txEntry, old, ret, ver);
                            } else
                                ret.success(true);
                        }
                    }
                } else // Pessimistic.
                {
                    if (retval && !transform)
                        ret.set(cacheCtx, old, true, keepBinary);
                    else
                        ret.success(true);
                }
                // While.
                break;
            } catch (GridCacheEntryRemovedException ignore) {
                if (log.isDebugEnabled())
                    log.debug("Got removed entry in transaction putAll0 method: " + entry);
            }
        }
    } else {
        if (entryProcessor == null && txEntry.op() == TRANSFORM)
            throw new IgniteCheckedException("Failed to enlist write value for key (cannot have update value in " + "transaction after EntryProcessor is applied): " + CU.value(cacheKey, cacheCtx, false));
        GridCacheEntryEx entry = txEntry.cached();
        CacheObject v = txEntry.value();
        boolean del = txEntry.op() == DELETE && rmv;
        if (!del) {
            if (hasFilters && !filter(entry.context(), cacheKey, v, filter)) {
                ret.set(cacheCtx, v, false, keepBinary);
                return loadMissed;
            }
            GridCacheOperation op = rmv ? DELETE : entryProcessor != null ? TRANSFORM : v != null ? UPDATE : CREATE;
            CacheObject cVal = cacheCtx.toCacheObject(val);
            if (op == CREATE || op == UPDATE)
                cacheCtx.validateKeyAndValue(cacheKey, cVal);
            txEntry = addEntry(op, cVal, entryProcessor, invokeArgs, entry, expiryPlc, filter, true, drTtl, drExpireTime, drVer, skipStore, keepBinary, CU.isNearEnabled(cacheCtx));
            if (enlisted != null)
                enlisted.add(cacheKey);
            if (txEntry.op() == TRANSFORM) {
                GridCacheVersion ver;
                try {
                    ver = entry.version();
                } catch (GridCacheEntryRemovedException e) {
                    assert optimistic() : txEntry;
                    if (log.isDebugEnabled())
                        log.debug("Failed to get entry version: [msg=" + e.getMessage() + ']');
                    ver = null;
                }
                addInvokeResult(txEntry, txEntry.value(), ret, ver);
            }
        }
        if (!pessimistic()) {
            txEntry.markValid();
            if (retval && !transform)
                ret.set(cacheCtx, v, true, keepBinary);
            else
                ret.success(true);
        }
    }
    return loadMissed;
}
Also used : IgniteTxEntry(org.apache.ignite.internal.processors.cache.transactions.IgniteTxEntry) GridCacheEntryEx(org.apache.ignite.internal.processors.cache.GridCacheEntryEx) GridCacheVersion(org.apache.ignite.internal.processors.cache.version.GridCacheVersion) IgniteCheckedException(org.apache.ignite.IgniteCheckedException) EntryGetResult(org.apache.ignite.internal.processors.cache.EntryGetResult) GridCacheEntryRemovedException(org.apache.ignite.internal.processors.cache.GridCacheEntryRemovedException) IgniteTxKey(org.apache.ignite.internal.processors.cache.transactions.IgniteTxKey) CacheObject(org.apache.ignite.internal.processors.cache.CacheObject) KeyCacheObject(org.apache.ignite.internal.processors.cache.KeyCacheObject) GridCacheOperation(org.apache.ignite.internal.processors.cache.GridCacheOperation) ClusterTopologyCheckedException(org.apache.ignite.internal.cluster.ClusterTopologyCheckedException)

Aggregations

GridCacheOperation (org.apache.ignite.internal.processors.cache.GridCacheOperation)20 CacheObject (org.apache.ignite.internal.processors.cache.CacheObject)18 KeyCacheObject (org.apache.ignite.internal.processors.cache.KeyCacheObject)18 IgniteCheckedException (org.apache.ignite.IgniteCheckedException)14 GridCacheEntryRemovedException (org.apache.ignite.internal.processors.cache.GridCacheEntryRemovedException)14 GridCacheVersion (org.apache.ignite.internal.processors.cache.version.GridCacheVersion)12 ArrayList (java.util.ArrayList)8 GridCacheEntryEx (org.apache.ignite.internal.processors.cache.GridCacheEntryEx)7 DataEntry (org.apache.ignite.internal.pagemem.wal.record.DataEntry)6 AffinityTopologyVersion (org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion)6 CacheStorePartialUpdateException (org.apache.ignite.internal.processors.cache.CacheStorePartialUpdateException)6 GridCacheContext (org.apache.ignite.internal.processors.cache.GridCacheContext)6 GridCacheUpdateAtomicResult (org.apache.ignite.internal.processors.cache.GridCacheUpdateAtomicResult)6 GridTimeoutObject (org.apache.ignite.internal.processors.timeout.GridTimeoutObject)6 IgniteBiTuple (org.apache.ignite.lang.IgniteBiTuple)6 NodeStoppingException (org.apache.ignite.internal.NodeStoppingException)5 StorageException (org.apache.ignite.internal.pagemem.wal.StorageException)5 DataRecord (org.apache.ignite.internal.pagemem.wal.record.DataRecord)5 CacheLazyEntry (org.apache.ignite.internal.processors.cache.CacheLazyEntry)5 GridDhtCacheEntry (org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtCacheEntry)5