Search in sources :

Example 81 with GridFutureAdapter

use of org.apache.ignite.internal.util.future.GridFutureAdapter in project ignite by apache.

the class GridCacheQueryManager method fieldsQueryResult.

/**
 * @param qryInfo Info.
 * @return Iterator.
 * @throws IgniteCheckedException In case of error.
 */
private FieldsResult fieldsQueryResult(GridCacheQueryInfo qryInfo, String taskName) throws IgniteCheckedException {
    final UUID sndId = qryInfo.senderId();
    assert sndId != null;
    Map<Long, GridFutureAdapter<FieldsResult>> iters = fieldsQryRes.get(sndId);
    if (iters == null) {
        iters = new LinkedHashMap<Long, GridFutureAdapter<FieldsResult>>(16, 0.75f, true) {

            @Override
            protected boolean removeEldestEntry(Map.Entry<Long, GridFutureAdapter<FieldsResult>> e) {
                boolean rmv = size() > maxIterCnt;
                if (rmv) {
                    try {
                        e.getValue().get().closeIfNotShared(recipient(sndId, e.getKey()));
                    } catch (IgniteCheckedException ex) {
                        U.error(log, "Failed to close fields query iterator.", ex);
                    }
                }
                return rmv;
            }

            @Override
            public boolean equals(Object o) {
                return o == this;
            }
        };
        Map<Long, GridFutureAdapter<FieldsResult>> old = fieldsQryRes.putIfAbsent(sndId, iters);
        if (old != null)
            iters = old;
    }
    return fieldsQueryResult(iters, qryInfo, taskName);
}
Also used : IgniteCheckedException(org.apache.ignite.IgniteCheckedException) GridFutureAdapter(org.apache.ignite.internal.util.future.GridFutureAdapter) CacheObject(org.apache.ignite.internal.processors.cache.CacheObject) KeyCacheObject(org.apache.ignite.internal.processors.cache.KeyCacheObject) UUID(java.util.UUID) Map(java.util.Map) LinkedHashMap(java.util.LinkedHashMap) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) HashMap(java.util.HashMap) ConcurrentMap(java.util.concurrent.ConcurrentMap) GridLeanMap(org.apache.ignite.internal.util.GridLeanMap)

Example 82 with GridFutureAdapter

use of org.apache.ignite.internal.util.future.GridFutureAdapter in project ignite by apache.

the class DurableBackgroundCleanupIndexTreeTask method executeAsync.

/**
 * {@inheritDoc}
 */
@Override
public IgniteInternalFuture<DurableBackgroundTaskResult> executeAsync(GridKernalContext ctx) {
    log = ctx.log(this.getClass());
    assert worker == null;
    GridFutureAdapter<DurableBackgroundTaskResult> fut = new GridFutureAdapter<>();
    worker = new GridWorker(ctx.igniteInstanceName(), "async-durable-background-task-executor-" + name(), log) {

        /**
         * {@inheritDoc}
         */
        @Override
        protected void body() {
            try {
                execute(ctx);
                worker = null;
                fut.onDone(DurableBackgroundTaskResult.complete(null));
            } catch (Throwable t) {
                worker = null;
                fut.onDone(DurableBackgroundTaskResult.restart(t));
            }
        }
    };
    new IgniteThread(worker).start();
    return fut;
}
Also used : GridFutureAdapter(org.apache.ignite.internal.util.future.GridFutureAdapter) DurableBackgroundTaskResult(org.apache.ignite.internal.processors.cache.persistence.metastorage.pendingtask.DurableBackgroundTaskResult) IgniteThread(org.apache.ignite.thread.IgniteThread) GridWorker(org.apache.ignite.internal.util.worker.GridWorker)

Example 83 with GridFutureAdapter

use of org.apache.ignite.internal.util.future.GridFutureAdapter in project ignite by apache.

the class CacheObjectBinaryProcessorImpl method metadata.

/**
 * {@inheritDoc}
 */
@Nullable
@Override
public BinaryType metadata(final int typeId, final int schemaId) {
    BinaryMetadataHolder holder = metadataLocCache.get(typeId);
    if (ctx.clientNode()) {
        if (holder == null || !holder.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()) + ']');
            try {
                transport.requestUpToDateMetadata(typeId).get();
            } catch (IgniteCheckedException ignored) {
            // No-op.
            }
            holder = metadataLocCache.get(typeId);
            IgniteFuture<?> reconnectFut0 = reconnectFut;
            if (holder == 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()) + ']');
        }
    } else {
        if (holder != null && IgniteThread.current() instanceof IgniteDiscoveryThread)
            return holder.metadata().wrap(binaryCtx);
        else if (holder != null && (holder.pendingVersion() - holder.acceptedVersion() > 0)) {
            if (log.isDebugEnabled())
                log.debug("Waiting for metadata update" + " [typeId=" + typeId + ", schemaId=" + schemaId + ", pendingVer=" + holder.pendingVersion() + ", acceptedVer=" + holder.acceptedVersion() + ']');
            long t0 = System.nanoTime();
            GridFutureAdapter<MetadataUpdateResult> fut = transport.awaitMetadataUpdate(typeId, holder.pendingVersion());
            try {
                fut.get();
            } catch (IgniteCheckedException e) {
                log.error("Failed to wait for metadata update [typeId=" + typeId + ", schemaId=" + schemaId + ']', e);
            }
            if (log.isDebugEnabled())
                log.debug("Finished waiting for metadata update" + " [typeId=" + typeId + ", waitTime=" + NANOSECONDS.convert(System.nanoTime() - t0, MILLISECONDS) + "ms" + ", schemaId=" + schemaId + ", pendingVer=" + holder.pendingVersion() + ", acceptedVer=" + holder.acceptedVersion() + ']');
            holder = metadataLocCache.get(typeId);
        } else if (holder == null || !holder.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()) + ", binMetaUpdateTimeout=" + waitSchemaTimeout + ']');
            long t0 = System.nanoTime();
            GridFutureAdapter<?> fut = transport.awaitSchemaUpdate(typeId, schemaId);
            try {
                fut.get(waitSchemaTimeout);
            } catch (IgniteFutureTimeoutCheckedException e) {
                log.error("Timed out while waiting for schema update [typeId=" + typeId + ", schemaId=" + schemaId + ']');
            } catch (IgniteCheckedException ignored) {
            // No-op.
            }
            holder = metadataLocCache.get(typeId);
            if (log.isDebugEnabled() && holder != null && holder.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() + ']');
        }
    }
    if (holder != null && metadataFileStore != null) {
        try {
            metadataFileStore.waitForWriteCompletion(typeId, holder.pendingVersion());
        } catch (IgniteCheckedException e) {
            log.warning("Failed to wait for metadata write operation for [typeId=" + typeId + ", typeVer=" + holder.acceptedVersion() + ']', e);
            return null;
        }
    }
    return holder != null ? holder.metadata().wrap(binaryCtx) : null;
}
Also used : IgniteCheckedException(org.apache.ignite.IgniteCheckedException) IgniteClientDisconnectedException(org.apache.ignite.IgniteClientDisconnectedException) GridFutureAdapter(org.apache.ignite.internal.util.future.GridFutureAdapter) IgniteFutureTimeoutCheckedException(org.apache.ignite.internal.IgniteFutureTimeoutCheckedException) IgniteDiscoveryThread(org.apache.ignite.spi.discovery.IgniteDiscoveryThread) Nullable(org.jetbrains.annotations.Nullable)

Example 84 with GridFutureAdapter

use of org.apache.ignite.internal.util.future.GridFutureAdapter in project ignite by apache.

the class GridDistributedCacheAdapter method removeAllAsync.

/**
 * {@inheritDoc}
 */
@Override
public IgniteInternalFuture<?> removeAllAsync() {
    GridFutureAdapter<Void> opFut = new GridFutureAdapter<>();
    AffinityTopologyVersion topVer = ctx.affinity().affinityTopologyVersion();
    CacheOperationContext opCtx = ctx.operationContextPerCall();
    removeAllAsync(opFut, topVer, opCtx != null && opCtx.skipStore(), opCtx != null && opCtx.isKeepBinary());
    return opFut;
}
Also used : AffinityTopologyVersion(org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion) CacheOperationContext(org.apache.ignite.internal.processors.cache.CacheOperationContext) GridFutureAdapter(org.apache.ignite.internal.util.future.GridFutureAdapter)

Example 85 with GridFutureAdapter

use of org.apache.ignite.internal.util.future.GridFutureAdapter in project ignite by apache.

the class IgniteTxManager method txsPreparedOrCommitted.

/**
 * @param nearVer Near version ID.
 * @param txNum Number of transactions.
 * @param fut Result future.
 * @param processedVers Processed versions.
 * @return Future for flag indicating if transactions were prepared or committed or {@code null} for success future.
 */
@Nullable
private IgniteInternalFuture<Boolean> txsPreparedOrCommitted(final GridCacheVersion nearVer, int txNum, @Nullable GridFutureAdapter<Boolean> fut, @Nullable Collection<GridCacheVersion> processedVers) {
    for (final IgniteInternalTx tx : activeTransactions()) {
        if (nearVer.equals(tx.nearXidVersion())) {
            IgniteInternalFuture<?> prepFut = tx.currentPrepareFuture();
            if (prepFut != null && !prepFut.isDone()) {
                if (log.isDebugEnabled())
                    log.debug("Transaction is preparing (will wait): " + tx);
                final GridFutureAdapter<Boolean> fut0 = fut != null ? fut : new GridFutureAdapter<Boolean>();
                final int txNum0 = txNum;
                final Collection<GridCacheVersion> processedVers0 = processedVers;
                prepFut.listen(new CI1<IgniteInternalFuture<?>>() {

                    @Override
                    public void apply(IgniteInternalFuture<?> prepFut) {
                        if (log.isDebugEnabled())
                            log.debug("Transaction prepare future finished: " + tx);
                        IgniteInternalFuture<Boolean> fut = txsPreparedOrCommitted(nearVer, txNum0, fut0, processedVers0);
                        assert fut == fut0;
                    }
                });
                return fut0;
            }
            TransactionState state = tx.state();
            if (state == PREPARED || state == COMMITTING || state == COMMITTED) {
                if (state == PREPARED)
                    // Prevents concurrent rollback.
                    tx.markFinalizing(RECOVERY_FINISH);
                if (--txNum == 0) {
                    if (fut != null)
                        fut.onDone(true);
                    return fut;
                }
            } else {
                if (tx.setRollbackOnly() || tx.state() == UNKNOWN) {
                    tx.rollbackAsync();
                    if (log.isDebugEnabled())
                        log.debug("Transaction was not prepared (rolled back): " + tx);
                    if (fut == null)
                        fut = new GridFutureAdapter<>();
                    fut.onDone(false);
                    return fut;
                } else {
                    if (tx.state() == COMMITTED) {
                        if (--txNum == 0) {
                            if (fut != null)
                                fut.onDone(true);
                            return fut;
                        }
                    } else {
                        if (log.isDebugEnabled())
                            log.debug("Transaction is not prepared: " + tx);
                        if (fut == null)
                            fut = new GridFutureAdapter<>();
                        fut.onDone(false);
                        return fut;
                    }
                }
            }
            if (processedVers == null)
                processedVers = U.newHashSet(txNum);
            processedVers.add(tx.xidVersion());
        }
    }
    // if transaction was already committed.
    for (Map.Entry<GridCacheVersion, Object> e : completedVersHashMap.entrySet()) {
        if (e.getValue().equals(Boolean.FALSE))
            continue;
        GridCacheVersion ver = e.getKey();
        if (processedVers != null && processedVers.contains(ver))
            continue;
        if (ver instanceof CommittedVersion) {
            CommittedVersion commitVer = (CommittedVersion) ver;
            if (commitVer.nearVer.equals(nearVer)) {
                if (--txNum == 0) {
                    if (fut != null)
                        fut.onDone(true);
                    return fut;
                }
            }
        }
    }
    if (fut == null)
        fut = new GridFutureAdapter<>();
    fut.onDone(false);
    return fut;
}
Also used : TransactionState(org.apache.ignite.transactions.TransactionState) IgniteInternalFuture(org.apache.ignite.internal.IgniteInternalFuture) GridCacheVersion(org.apache.ignite.internal.processors.cache.version.GridCacheVersion) GridFutureAdapter(org.apache.ignite.internal.util.future.GridFutureAdapter) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) Map(java.util.Map) LinkedHashMap(java.util.LinkedHashMap) GridBoundedConcurrentOrderedMap(org.apache.ignite.internal.util.GridBoundedConcurrentOrderedMap) ConcurrentLinkedHashMap(org.jsr166.ConcurrentLinkedHashMap) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) GridConcurrentFactory.newMap(org.apache.ignite.internal.util.GridConcurrentFactory.newMap) HashMap(java.util.HashMap) ConcurrentMap(java.util.concurrent.ConcurrentMap) Nullable(org.jetbrains.annotations.Nullable)

Aggregations

GridFutureAdapter (org.apache.ignite.internal.util.future.GridFutureAdapter)110 IgniteCheckedException (org.apache.ignite.IgniteCheckedException)59 IgniteInternalFuture (org.apache.ignite.internal.IgniteInternalFuture)34 IgniteException (org.apache.ignite.IgniteException)23 ArrayList (java.util.ArrayList)21 AffinityTopologyVersion (org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion)21 List (java.util.List)20 UUID (java.util.UUID)20 ClusterNode (org.apache.ignite.cluster.ClusterNode)20 IgniteEx (org.apache.ignite.internal.IgniteEx)20 HashMap (java.util.HashMap)19 Map (java.util.Map)19 IgniteInterruptedCheckedException (org.apache.ignite.internal.IgniteInterruptedCheckedException)18 Test (org.junit.Test)18 Nullable (org.jetbrains.annotations.Nullable)17 Ignite (org.apache.ignite.Ignite)15 ClusterTopologyCheckedException (org.apache.ignite.internal.cluster.ClusterTopologyCheckedException)15 HashSet (java.util.HashSet)14 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)14 T2 (org.apache.ignite.internal.util.typedef.T2)13