Search in sources :

Example 1 with IndexRebuildCancelToken

use of org.apache.ignite.internal.processors.query.schema.IndexRebuildCancelToken in project ignite by apache.

the class GridQueryProcessor method processSchemaOperationLocal.

/**
 * Process schema operation.
 *
 * @param op Operation.
 * @param type Type descriptor.
 * @param depId Cache deployment ID.
 * @param cancelTok Cancel token.
 * @throws SchemaOperationException If failed.
 */
public void processSchemaOperationLocal(SchemaAbstractOperation op, QueryTypeDescriptorImpl type, IgniteUuid depId, IndexRebuildCancelToken cancelTok) throws SchemaOperationException {
    if (log.isDebugEnabled())
        log.debug("Started local index operation [opId=" + op.id() + ']');
    String cacheName = op.cacheName();
    GridCacheContextInfo<?, ?> cacheInfo = null;
    if (op instanceof SchemaAddQueryEntityOperation) {
        GridCacheContext<?, ?> cctx = ctx.cache().context().cacheContext(CU.cacheId(cacheName));
        if (cctx != null)
            cacheInfo = new GridCacheContextInfo<>(cctx, false);
        else
            return;
    } else
        cacheInfo = idx.registeredCacheInfo(cacheName);
    if (cacheInfo == null || !F.eq(depId, cacheInfo.dynamicDeploymentId()))
        throw new SchemaOperationException(SchemaOperationException.CODE_CACHE_NOT_FOUND, cacheName);
    try {
        if (op instanceof SchemaIndexCreateOperation) {
            SchemaIndexCreateOperation op0 = (SchemaIndexCreateOperation) op;
            QueryIndexDescriptorImpl idxDesc = QueryUtils.createIndexDescriptor(type, op0.index());
            SchemaIndexCacheVisitor visitor;
            if (cacheInfo.isCacheContextInited()) {
                int buildIdxPoolSize = ctx.config().getBuildIndexThreadPoolSize();
                int parallel = op0.parallel();
                if (parallel > buildIdxPoolSize) {
                    String idxName = op0.indexName();
                    log.warning("Provided parallelism " + parallel + " for creation of index " + idxName + " is greater than the number of index building threads. Will use " + buildIdxPoolSize + " threads to build index. Increase by IgniteConfiguration.setBuildIndexThreadPoolSize" + " and restart the node if you want to use more threads. [tableName=" + op0.tableName() + ", indexName=" + idxName + ", requestedParallelism=" + parallel + ", buildIndexPoolSize=" + buildIdxPoolSize + "]");
                }
                GridFutureAdapter<Void> createIdxFut = new GridFutureAdapter<>();
                GridCacheContext<?, ?> cacheCtx = cacheInfo.cacheContext();
                visitor = new SchemaIndexCacheVisitorImpl(cacheCtx, cancelTok, createIdxFut) {

                    /**
                     * {@inheritDoc}
                     */
                    @Override
                    public void visit(SchemaIndexCacheVisitorClosure clo) {
                        idxBuildStatusStorage.onStartBuildNewIndex(cacheCtx);
                        try {
                            super.visit(clo);
                            buildIdxFut.get();
                        } catch (Exception e) {
                            throw new IgniteException(e);
                        } finally {
                            idxBuildStatusStorage.onFinishBuildNewIndex(cacheName);
                        }
                    }
                };
            } else
                // For not started caches we shouldn't add any data to index.
                visitor = clo -> {
                };
            idx.dynamicIndexCreate(op0.schemaName(), op0.tableName(), idxDesc, op0.ifNotExists(), visitor);
        } else if (op instanceof SchemaIndexDropOperation) {
            SchemaIndexDropOperation op0 = (SchemaIndexDropOperation) op;
            idx.dynamicIndexDrop(op0.schemaName(), op0.indexName(), op0.ifExists());
        } else if (op instanceof SchemaAlterTableAddColumnOperation) {
            SchemaAlterTableAddColumnOperation op0 = (SchemaAlterTableAddColumnOperation) op;
            processDynamicAddColumn(type, op0.columns());
            idx.dynamicAddColumn(op0.schemaName(), op0.tableName(), op0.columns(), op0.ifTableExists(), op0.ifNotExists());
        } else if (op instanceof SchemaAlterTableDropColumnOperation) {
            SchemaAlterTableDropColumnOperation op0 = (SchemaAlterTableDropColumnOperation) op;
            processDynamicDropColumn(type, op0.columns());
            idx.dynamicDropColumn(op0.schemaName(), op0.tableName(), op0.columns(), op0.ifTableExists(), op0.ifExists());
        } else if (op instanceof SchemaAddQueryEntityOperation) {
            SchemaAddQueryEntityOperation op0 = (SchemaAddQueryEntityOperation) op;
            if (!cacheNames.contains(op0.cacheName())) {
                cacheInfo.onSchemaAddQueryEntity(op0);
                T3<Collection<QueryTypeCandidate>, Map<String, QueryTypeDescriptorImpl>, Map<String, QueryTypeDescriptorImpl>> candRes = createQueryCandidates(op0.cacheName(), op0.schemaName(), cacheInfo, op0.entities(), op0.isSqlEscape());
                registerCache0(op0.cacheName(), op.schemaName(), cacheInfo, candRes.get1(), false);
            }
            if (idxRebuildFutStorage.prepareRebuildIndexes(singleton(cacheInfo.cacheId()), null).isEmpty())
                rebuildIndexesFromHash0(cacheInfo.cacheContext(), false, cancelTok);
            else {
                if (log.isInfoEnabled())
                    log.info("Rebuilding indexes for the cache is already in progress: " + cacheInfo.name());
            }
        } else
            throw new SchemaOperationException("Unsupported operation: " + op);
    } catch (Throwable e) {
        if (e instanceof SchemaOperationException)
            throw (SchemaOperationException) e;
        else
            throw new SchemaOperationException("Schema change operation failed: " + e.getMessage(), e);
    }
}
Also used : IndexRebuildCancelToken(org.apache.ignite.internal.processors.query.schema.IndexRebuildCancelToken) SchemaOperationClientFuture(org.apache.ignite.internal.processors.query.schema.SchemaOperationClientFuture) SchemaAbstractDiscoveryMessage(org.apache.ignite.internal.processors.query.schema.message.SchemaAbstractDiscoveryMessage) GridFutureAdapter(org.apache.ignite.internal.util.future.GridFutureAdapter) GridFinishedFuture(org.apache.ignite.internal.util.future.GridFinishedFuture) IgniteCacheObjectProcessor(org.apache.ignite.internal.processors.cacheobject.IgniteCacheObjectProcessor) CacheQueryExecutedEvent(org.apache.ignite.events.CacheQueryExecutedEvent) Map(java.util.Map) SqlQuery(org.apache.ignite.cache.query.SqlQuery) Cache(javax.cache.Cache) CacheQueryFuture(org.apache.ignite.internal.processors.cache.query.CacheQueryFuture) Objects.isNull(java.util.Objects.isNull) QueryBinaryProperty(org.apache.ignite.internal.processors.query.property.QueryBinaryProperty) TOPIC_SCHEMA(org.apache.ignite.internal.GridTopic.TOPIC_SCHEMA) BinaryMetadata(org.apache.ignite.internal.binary.BinaryMetadata) IndexBuildStatusStorage(org.apache.ignite.internal.processors.query.aware.IndexBuildStatusStorage) IndexProcessor(org.apache.ignite.internal.cache.query.index.IndexProcessor) IgniteInClosure(org.apache.ignite.lang.IgniteInClosure) IgniteCheckedException(org.apache.ignite.IgniteCheckedException) SchemaAlterTableDropColumnOperation(org.apache.ignite.internal.processors.query.schema.operation.SchemaAlterTableDropColumnOperation) Set(java.util.Set) CacheDataRow(org.apache.ignite.internal.processors.cache.persistence.CacheDataRow) Serializable(java.io.Serializable) QueryCursor(org.apache.ignite.cache.query.QueryCursor) SchemaIndexCreateOperation(org.apache.ignite.internal.processors.query.schema.operation.SchemaIndexCreateOperation) GridCacheContext(org.apache.ignite.internal.processors.cache.GridCacheContext) SchemaOperationWorker(org.apache.ignite.internal.processors.query.schema.SchemaOperationWorker) SchemaIndexCacheVisitor(org.apache.ignite.internal.processors.query.schema.SchemaIndexCacheVisitor) SchemaOperationManager(org.apache.ignite.internal.processors.query.schema.SchemaOperationManager) SchemaAbstractOperation(org.apache.ignite.internal.processors.query.schema.operation.SchemaAbstractOperation) IgniteBiPredicate(org.apache.ignite.lang.IgniteBiPredicate) IgniteThread(org.apache.ignite.thread.IgniteThread) U(org.apache.ignite.internal.util.typedef.internal.U) SchemaOperationStatusMessage(org.apache.ignite.internal.processors.query.schema.message.SchemaOperationStatusMessage) IgniteOutClosureX(org.apache.ignite.internal.util.lang.IgniteOutClosureX) INDEXING(org.apache.ignite.internal.IgniteComponentType.INDEXING) ArrayList(java.util.ArrayList) GridKernalContext(org.apache.ignite.internal.GridKernalContext) LinkedHashMap(java.util.LinkedHashMap) ClusterNode(org.apache.ignite.cluster.ClusterNode) PlatformContext(org.apache.ignite.internal.processors.platform.PlatformContext) IndexQueryProcessor(org.apache.ignite.internal.cache.query.index.IndexQueryProcessor) GridDhtPartitionsExchangeFuture(org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsExchangeFuture) CacheWriteSynchronizationMode(org.apache.ignite.cache.CacheWriteSynchronizationMode) CODE_COLUMN_EXISTS(org.apache.ignite.internal.processors.query.schema.SchemaOperationException.CODE_COLUMN_EXISTS) SchemaAddQueryEntityOperation(org.apache.ignite.internal.processors.query.schema.operation.SchemaAddQueryEntityOperation) T3(org.apache.ignite.internal.util.typedef.T3) T2(org.apache.ignite.internal.util.typedef.T2) BinaryType(org.apache.ignite.binary.BinaryType) MvccSnapshot(org.apache.ignite.internal.processors.cache.mvcc.MvccSnapshot) CacheConfiguration(org.apache.ignite.configuration.CacheConfiguration) SchemaOperationException(org.apache.ignite.internal.processors.query.schema.SchemaOperationException) Binarylizable(org.apache.ignite.binary.Binarylizable) IgniteDataStreamer(org.apache.ignite.IgniteDataStreamer) GridProcessorAdapter(org.apache.ignite.internal.processors.GridProcessorAdapter) CacheObjectContext(org.apache.ignite.internal.processors.cache.CacheObjectContext) SchemaAlterTableAddColumnOperation(org.apache.ignite.internal.processors.query.schema.operation.SchemaAlterTableAddColumnOperation) IgniteUuid(org.apache.ignite.lang.IgniteUuid) CacheMode(org.apache.ignite.cache.CacheMode) DynamicCacheChangeBatch(org.apache.ignite.internal.processors.cache.DynamicCacheChangeBatch) DynamicCacheChangeRequest(org.apache.ignite.internal.processors.cache.DynamicCacheChangeRequest) CacheAtomicityMode(org.apache.ignite.cache.CacheAtomicityMode) IgniteInternalFuture(org.apache.ignite.internal.IgniteInternalFuture) BinaryObject(org.apache.ignite.binary.BinaryObject) DiscoveryDataBag(org.apache.ignite.spi.discovery.DiscoveryDataBag) CacheKeyConfiguration(org.apache.ignite.cache.CacheKeyConfiguration) SqlFieldsQuery(org.apache.ignite.cache.query.SqlFieldsQuery) IndexingQueryFilter(org.apache.ignite.spi.indexing.IndexingQueryFilter) IgniteSystemProperties(org.apache.ignite.IgniteSystemProperties) SB(org.apache.ignite.internal.util.typedef.internal.SB) Collections.singleton(java.util.Collections.singleton) QueryEntity(org.apache.ignite.cache.QueryEntity) PARTITIONED(org.apache.ignite.cache.CacheMode.PARTITIONED) BinaryUtils.typeByClass(org.apache.ignite.internal.binary.BinaryUtils.typeByClass) Collectors.toSet(java.util.stream.Collectors.toSet) IgniteFuture(org.apache.ignite.lang.IgniteFuture) IdentityHashMap(java.util.IdentityHashMap) Collection(java.util.Collection) IgniteException(org.apache.ignite.IgniteException) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) UUID(java.util.UUID) CacheObject(org.apache.ignite.internal.processors.cache.CacheObject) IndexQueryResult(org.apache.ignite.internal.cache.query.index.IndexQueryResult) IgniteCacheOffheapManager(org.apache.ignite.internal.processors.cache.IgniteCacheOffheapManager) GridSpinBusyLock(org.apache.ignite.internal.util.GridSpinBusyLock) IgniteBiTuple(org.apache.ignite.lang.IgniteBiTuple) ExchangeActions(org.apache.ignite.internal.processors.cache.ExchangeActions) Nullable(org.jetbrains.annotations.Nullable) List(java.util.List) IndexRebuildFutureStorage(org.apache.ignite.internal.processors.query.aware.IndexRebuildFutureStorage) CU(org.apache.ignite.internal.util.typedef.internal.CU) KeyCacheObject(org.apache.ignite.internal.processors.cache.KeyCacheObject) Objects.nonNull(java.util.Objects.nonNull) FieldsQueryCursor(org.apache.ignite.cache.query.FieldsQueryCursor) NodeStoppingException(org.apache.ignite.internal.NodeStoppingException) GridCacheAdapter(org.apache.ignite.internal.processors.cache.GridCacheAdapter) QueryCursorImpl(org.apache.ignite.internal.processors.cache.QueryCursorImpl) PlatformProcessor(org.apache.ignite.internal.processors.platform.PlatformProcessor) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) HashMap(java.util.HashMap) GridTimeoutProcessor(org.apache.ignite.internal.processors.timeout.GridTimeoutProcessor) LT(org.apache.ignite.internal.util.typedef.internal.LT) SchemaIndexCacheVisitorImpl(org.apache.ignite.internal.processors.query.schema.SchemaIndexCacheVisitorImpl) ConcurrentMap(java.util.concurrent.ConcurrentMap) HashSet(java.util.HashSet) IndexQueryDesc(org.apache.ignite.internal.processors.cache.query.IndexQueryDesc) Collections.newSetFromMap(java.util.Collections.newSetFromMap) SchemaIndexCacheVisitorClosure(org.apache.ignite.internal.processors.query.schema.SchemaIndexCacheVisitorClosure) SchemaFinishDiscoveryMessage(org.apache.ignite.internal.processors.query.schema.message.SchemaFinishDiscoveryMessage) CacheException(javax.cache.CacheException) LinkedList(java.util.LinkedList) GridPlainOutClosure(org.apache.ignite.internal.util.lang.GridPlainOutClosure) GridMessageListener(org.apache.ignite.internal.managers.communication.GridMessageListener) F(org.apache.ignite.internal.util.typedef.F) SchemaProposeDiscoveryMessage(org.apache.ignite.internal.processors.query.schema.message.SchemaProposeDiscoveryMessage) SchemaIndexDropOperation(org.apache.ignite.internal.processors.query.schema.operation.SchemaIndexDropOperation) JdkMarshaller(org.apache.ignite.marshaller.jdk.JdkMarshaller) Iterator(java.util.Iterator) Collections.emptySet(java.util.Collections.emptySet) AffinityTopologyVersion(org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion) DynamicCacheDescriptor(org.apache.ignite.internal.processors.cache.DynamicCacheDescriptor) GridCacheContextInfo(org.apache.ignite.internal.processors.cache.GridCacheContextInfo) IgniteQueryErrorCode(org.apache.ignite.internal.processors.cache.query.IgniteQueryErrorCode) GridCloseableIterator(org.apache.ignite.internal.util.lang.GridCloseableIterator) CacheObjectBinaryProcessorImpl(org.apache.ignite.internal.processors.cache.binary.CacheObjectBinaryProcessorImpl) GridBoundedConcurrentLinkedHashSet(org.apache.ignite.internal.util.GridBoundedConcurrentLinkedHashSet) SCHEMA_POOL(org.apache.ignite.internal.managers.communication.GridIoPolicy.SCHEMA_POOL) GridCacheQueryType(org.apache.ignite.internal.processors.cache.query.GridCacheQueryType) BinaryObjectException(org.apache.ignite.binary.BinaryObjectException) BinaryUtils.fieldTypeName(org.apache.ignite.internal.binary.BinaryUtils.fieldTypeName) Collections(java.util.Collections) QueryIndex(org.apache.ignite.cache.QueryIndex) GridClosureException(org.apache.ignite.internal.util.lang.GridClosureException) EVT_CACHE_QUERY_EXECUTED(org.apache.ignite.events.EventType.EVT_CACHE_QUERY_EXECUTED) SchemaIndexDropOperation(org.apache.ignite.internal.processors.query.schema.operation.SchemaIndexDropOperation) IgniteException(org.apache.ignite.IgniteException) GridFutureAdapter(org.apache.ignite.internal.util.future.GridFutureAdapter) SchemaIndexCacheVisitorClosure(org.apache.ignite.internal.processors.query.schema.SchemaIndexCacheVisitorClosure) SchemaAlterTableDropColumnOperation(org.apache.ignite.internal.processors.query.schema.operation.SchemaAlterTableDropColumnOperation) SchemaOperationException(org.apache.ignite.internal.processors.query.schema.SchemaOperationException) SchemaIndexCacheVisitor(org.apache.ignite.internal.processors.query.schema.SchemaIndexCacheVisitor) SchemaIndexCreateOperation(org.apache.ignite.internal.processors.query.schema.operation.SchemaIndexCreateOperation) SchemaIndexCacheVisitorImpl(org.apache.ignite.internal.processors.query.schema.SchemaIndexCacheVisitorImpl) IgniteCheckedException(org.apache.ignite.IgniteCheckedException) SchemaOperationException(org.apache.ignite.internal.processors.query.schema.SchemaOperationException) IgniteException(org.apache.ignite.IgniteException) NodeStoppingException(org.apache.ignite.internal.NodeStoppingException) CacheException(javax.cache.CacheException) BinaryObjectException(org.apache.ignite.binary.BinaryObjectException) GridClosureException(org.apache.ignite.internal.util.lang.GridClosureException) SchemaAddQueryEntityOperation(org.apache.ignite.internal.processors.query.schema.operation.SchemaAddQueryEntityOperation) SchemaAlterTableAddColumnOperation(org.apache.ignite.internal.processors.query.schema.operation.SchemaAlterTableAddColumnOperation) Collection(java.util.Collection) GridCacheContextInfo(org.apache.ignite.internal.processors.cache.GridCacheContextInfo) Map(java.util.Map) LinkedHashMap(java.util.LinkedHashMap) IdentityHashMap(java.util.IdentityHashMap) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) HashMap(java.util.HashMap) ConcurrentMap(java.util.concurrent.ConcurrentMap) Collections.newSetFromMap(java.util.Collections.newSetFromMap)

Aggregations

Serializable (java.io.Serializable)1 ArrayList (java.util.ArrayList)1 Collection (java.util.Collection)1 Collections (java.util.Collections)1 Collections.emptySet (java.util.Collections.emptySet)1 Collections.newSetFromMap (java.util.Collections.newSetFromMap)1 Collections.singleton (java.util.Collections.singleton)1 HashMap (java.util.HashMap)1 HashSet (java.util.HashSet)1 IdentityHashMap (java.util.IdentityHashMap)1 Iterator (java.util.Iterator)1 LinkedHashMap (java.util.LinkedHashMap)1 LinkedList (java.util.LinkedList)1 List (java.util.List)1 Map (java.util.Map)1 Objects.isNull (java.util.Objects.isNull)1 Objects.nonNull (java.util.Objects.nonNull)1 Set (java.util.Set)1 UUID (java.util.UUID)1 ConcurrentHashMap (java.util.concurrent.ConcurrentHashMap)1