Search in sources :

Example 1 with GridTracingManager

use of org.apache.ignite.internal.managers.tracing.GridTracingManager in project ignite by apache.

the class IgniteKernal method start.

/**
 * @param cfg Ignite configuration to use.
 * @param errHnd Error handler to use for notification about startup problems.
 * @param workerRegistry Worker registry.
 * @param hnd Default uncaught exception handler used by thread pools.
 * @throws IgniteCheckedException Thrown in case of any errors.
 */
public void start(final IgniteConfiguration cfg, GridAbsClosure errHnd, WorkersRegistry workerRegistry, Thread.UncaughtExceptionHandler hnd, TimeBag startTimer) throws IgniteCheckedException {
    gw.compareAndSet(null, new GridKernalGatewayImpl(cfg.getIgniteInstanceName()));
    GridKernalGateway gw = this.gw.get();
    gw.writeLock();
    try {
        switch(gw.getState()) {
            case STARTED:
                {
                    U.warn(log, "Grid has already been started (ignored).");
                    return;
                }
            case STARTING:
                {
                    U.warn(log, "Grid is already in process of being started (ignored).");
                    return;
                }
            case STOPPING:
                {
                    throw new IgniteCheckedException("Grid is in process of being stopped");
                }
            case STOPPED:
                {
                    break;
                }
        }
        gw.setState(STARTING);
    } finally {
        gw.writeUnlock();
    }
    assert cfg != null;
    // Make sure we got proper configuration.
    validateCommon(cfg);
    igniteInstanceName = cfg.getIgniteInstanceName();
    this.cfg = cfg;
    log = (GridLoggerProxy) cfg.getGridLogger().getLogger(getClass().getName() + (igniteInstanceName != null ? '%' + igniteInstanceName : ""));
    longJVMPauseDetector = new LongJVMPauseDetector(log);
    longJVMPauseDetector.start();
    RuntimeMXBean rtBean = ManagementFactory.getRuntimeMXBean();
    // Ack various information.
    ackAsciiLogo();
    ackConfigUrl();
    ackConfiguration(cfg);
    ackDaemon();
    ackOsInfo();
    ackLanguageRuntime();
    ackRemoteManagement();
    ackLogger();
    ackVmArguments(rtBean);
    ackClassPaths(rtBean);
    ackSystemProperties();
    ackEnvironmentVariables();
    ackMemoryConfiguration();
    ackCacheConfiguration();
    ackP2pConfiguration();
    ackRebalanceConfiguration();
    ackIPv4StackFlagIsSet();
    ackWaitForBackupsOnShutdownPropertyIsUsed();
    // Ack 3-rd party licenses location.
    if (log.isInfoEnabled() && cfg.getIgniteHome() != null)
        log.info("3-rd party licenses can be found at: " + cfg.getIgniteHome() + File.separatorChar + "libs" + File.separatorChar + "licenses");
    // with internally reserved names.
    for (String name : cfg.getUserAttributes().keySet()) if (name.startsWith(ATTR_PREFIX))
        throw new IgniteCheckedException("User attribute has illegal name: '" + name + "'. Note that all names " + "starting with '" + ATTR_PREFIX + "' are reserved for internal use.");
    // Ack local node user attributes.
    logNodeUserAttributes();
    // Ack configuration.
    ackSpis();
    List<PluginProvider> plugins = cfg.getPluginProviders() != null && cfg.getPluginProviders().length > 0 ? Arrays.asList(cfg.getPluginProviders()) : U.allPluginProviders();
    // Spin out SPIs & managers.
    try {
        ctx = new GridKernalContextImpl(log, this, cfg, gw, plugins, MarshallerUtils.classNameFilter(this.getClass().getClassLoader()), workerRegistry, hnd, longJVMPauseDetector);
        startProcessor(new DiagnosticProcessor(ctx));
        mBeansMgr = new IgniteMBeansManager(this);
        cfg.getMarshaller().setContext(ctx.marshallerContext());
        startProcessor(new GridInternalSubscriptionProcessor(ctx));
        ClusterProcessor clusterProc = new ClusterProcessor(ctx);
        startProcessor(clusterProc);
        U.onGridStart();
        // Start and configure resource processor first as it contains resources used
        // by all other managers and processors.
        GridResourceProcessor rsrcProc = new GridResourceProcessor(ctx);
        rsrcProc.setSpringContext(rsrcCtx);
        scheduler = new IgniteSchedulerImpl(ctx);
        startProcessor(rsrcProc);
        // Inject resources into lifecycle beans.
        if (!cfg.isDaemon() && cfg.getLifecycleBeans() != null) {
            for (LifecycleBean bean : cfg.getLifecycleBeans()) {
                if (bean != null)
                    rsrcProc.inject(bean);
            }
        }
        // Lifecycle notification.
        notifyLifecycleBeans(BEFORE_NODE_START);
        // Starts lifecycle aware components.
        U.startLifecycleAware(lifecycleAwares(cfg));
        startProcessor(new IgnitePluginProcessor(ctx, cfg, plugins));
        startProcessor(new FailureProcessor(ctx));
        // Start security processors.
        startProcessor(securityProcessor());
        startProcessor(new PoolProcessor(ctx));
        // Run background network diagnostics.
        GridDiagnostic.runBackgroundCheck(igniteInstanceName, ctx.pools().getExecutorService(), log);
        // Closure processor should be started before all others
        // (except for resource processor), as many components can depend on it.
        startProcessor(new GridClosureProcessor(ctx));
        // Start some other processors (order & place is important).
        startProcessor(new GridPortProcessor(ctx));
        startProcessor(new GridJobMetricsProcessor(ctx));
        // Timeout processor needs to be started before managers,
        // as managers may depend on it.
        startProcessor(new GridTimeoutProcessor(ctx));
        // NOTE: that order matters as there are dependencies between managers.
        try {
            startManager(new GridTracingManager(ctx, false));
        } catch (IgniteCheckedException e) {
            startManager(new GridTracingManager(ctx, true));
        }
        startManager(new GridMetricManager(ctx));
        startManager(new GridSystemViewManager(ctx));
        startManager(new GridIoManager(ctx));
        startManager(new GridCheckpointManager(ctx));
        startManager(new GridEventStorageManager(ctx));
        startManager(new GridDeploymentManager(ctx));
        startManager(new GridLoadBalancerManager(ctx));
        startManager(new GridFailoverManager(ctx));
        startManager(new GridCollisionManager(ctx));
        startManager(new GridIndexingManager(ctx));
        ackSecurity();
        // Assign discovery manager to context before other processors start so they
        // are able to register custom event listener.
        GridDiscoveryManager discoMgr = new GridDiscoveryManager(ctx);
        ctx.add(discoMgr, false);
        // Start the encryption manager after assigning the discovery manager to context, so it will be
        // able to register custom event listener.
        startManager(new GridEncryptionManager(ctx));
        startProcessor(new PdsConsistentIdProcessor(ctx));
        MaintenanceProcessor mntcProcessor = new MaintenanceProcessor(ctx);
        startProcessor(mntcProcessor);
        if (mntcProcessor.isMaintenanceMode()) {
            if (log.isInfoEnabled()) {
                log.info("Node is being started in maintenance mode. " + "Starting IsolatedDiscoverySpi instead of configured discovery SPI.");
            }
            cfg.setClusterStateOnStart(ClusterState.INACTIVE);
            if (log.isInfoEnabled())
                log.info("Overriding 'clusterStateOnStart' configuration to 'INACTIVE'.");
            ctx.config().setDiscoverySpi(new IsolatedDiscoverySpi());
            discoMgr = new GridDiscoveryManager(ctx);
            // Reinitialized discovery manager won't have a valid consistentId on creation.
            discoMgr.consistentId(ctx.pdsFolderResolver().resolveFolders().consistentId());
            ctx.add(discoMgr, false);
        }
        // be able to start receiving messages once discovery completes.
        try {
            startProcessor(COMPRESSION.createOptional(ctx));
            startProcessor(new GridMarshallerMappingProcessor(ctx));
            startProcessor(new MvccProcessorImpl(ctx));
            startProcessor(createComponent(DiscoveryNodeValidationProcessor.class, ctx));
            startProcessor(new GridAffinityProcessor(ctx));
            startProcessor(createComponent(GridSegmentationProcessor.class, ctx));
            startTimer.finishGlobalStage("Start managers");
            startProcessor(createComponent(IgniteCacheObjectProcessor.class, ctx));
            startTimer.finishGlobalStage("Configure binary metadata");
            startProcessor(createComponent(IGridClusterStateProcessor.class, ctx));
            startProcessor(new PerformanceStatisticsProcessor(ctx));
            startProcessor(new GridCacheProcessor(ctx));
            if (cfg.isAuthenticationEnabled()) {
                IgniteSecurityProcessor sec = (IgniteSecurityProcessor) ctx.security();
                ((IgniteAuthenticationProcessor) sec.securityProcessor()).startProcessor();
            }
            startProcessor(new IndexProcessor(ctx));
            startProcessor(new GridQueryProcessor(ctx));
            startProcessor(new ClientListenerProcessor(ctx));
            startProcessor(new IgniteServiceProcessor(ctx));
            startProcessor(new GridTaskSessionProcessor(ctx));
            startProcessor(new GridJobProcessor(ctx));
            startProcessor(new GridTaskProcessor(ctx));
            startProcessor((GridProcessor) SCHEDULE.createOptional(ctx));
            startProcessor(createComponent(IgniteRestProcessor.class, ctx));
            startProcessor(new DataStreamProcessor(ctx));
            startProcessor(new GridContinuousProcessor(ctx));
            startProcessor(new DataStructuresProcessor(ctx));
            startProcessor(createComponent(PlatformProcessor.class, ctx));
            startProcessor(new DistributedMetaStorageImpl(ctx));
            startProcessor(new DistributedConfigurationProcessor(ctx));
            startProcessor(new DurableBackgroundTasksProcessor(ctx));
            startTimer.finishGlobalStage("Start processors");
            // Start plugins.
            for (PluginProvider provider : ctx.plugins().allProviders()) {
                ctx.add(new GridPluginComponent(provider));
                provider.start(ctx.plugins().pluginContextForProvider(provider));
                startTimer.finishGlobalStage("Start '" + provider.name() + "' plugin");
            }
            // Start platform plugins.
            if (ctx.config().getPlatformConfiguration() != null)
                startProcessor(new PlatformPluginProcessor(ctx));
            mBeansMgr.registerMBeansDuringInitPhase();
            ctx.cluster().initDiagnosticListeners();
            fillNodeAttributes(clusterProc.updateNotifierEnabled());
            ctx.cache().context().database().notifyMetaStorageSubscribersOnReadyForRead();
            ((DistributedMetaStorageImpl) ctx.distributedMetastorage()).inMemoryReadyForRead();
            startTimer.finishGlobalStage("Init metastore");
            ctx.cache().context().database().startMemoryRestore(ctx, startTimer);
            ctx.recoveryMode(false);
            startTimer.finishGlobalStage("Finish recovery");
        } catch (Throwable e) {
            U.error(log, "Exception during start processors, node will be stopped and close connections", e);
            // Stop discovery spi to close tcp socket.
            ctx.discovery().stop(true);
            throw e;
        }
        // All components exept Discovery are started, time to check if maintenance is still needed.
        mntcProcessor.prepareAndExecuteMaintenance();
        gw.writeLock();
        try {
            gw.setState(STARTED);
            // Start discovery manager last to make sure that grid is fully initialized.
            startManager(discoMgr);
        } finally {
            gw.writeUnlock();
        }
        startTimer.finishGlobalStage("Join topology");
        // Check whether UTF-8 is the default character encoding.
        checkFileEncoding();
        // Check whether physical RAM is not exceeded.
        checkPhysicalRam();
        // Suggest configuration optimizations.
        suggestOptimizations(cfg);
        // Suggest JVM optimizations.
        ctx.performance().addAll(JvmConfigurationSuggestions.getSuggestions());
        // Suggest Operation System optimizations.
        ctx.performance().addAll(OsConfigurationSuggestions.getSuggestions());
        DiscoveryLocalJoinData joinData = ctx.discovery().localJoin();
        IgniteInternalFuture<Boolean> transitionWaitFut = joinData.transitionWaitFuture();
        // Notify discovery manager the first to make sure that topology is discovered.
        // Active flag is not used in managers, so it is safe to pass true.
        ctx.discovery().onKernalStart(true);
        // Notify IO manager the second so further components can send and receive messages.
        // Must notify the IO manager before transition state await to make sure IO connection can be established.
        ctx.io().onKernalStart(true);
        boolean active;
        if (transitionWaitFut != null) {
            if (log.isInfoEnabled()) {
                log.info("Join cluster while cluster state transition is in progress, " + "waiting when transition finish.");
            }
            active = transitionWaitFut.get();
        } else
            active = joinData.active();
        startTimer.finishGlobalStage("Await transition");
        ctx.pools().registerMetrics();
        registerMetrics();
        ctx.cluster().registerMetrics();
        // Register MBeans.
        mBeansMgr.registerMBeansAfterNodeStarted();
        boolean recon = false;
        // Callbacks.
        for (GridComponent comp : ctx) {
            // Skip discovery manager.
            if (comp instanceof GridDiscoveryManager)
                continue;
            // Skip IO manager.
            if (comp instanceof GridIoManager)
                continue;
            if (comp instanceof GridPluginComponent)
                continue;
            if (!skipDaemon(comp)) {
                try {
                    comp.onKernalStart(active);
                } catch (IgniteNeedReconnectException e) {
                    ClusterNode locNode = ctx.discovery().localNode();
                    assert locNode.isClient();
                    if (!ctx.discovery().reconnectSupported())
                        throw new IgniteCheckedException("Client node in forceServerMode " + "is not allowed to reconnect to the cluster and will be stopped.");
                    if (log.isDebugEnabled())
                        log.debug("Failed to start node components on node start, will wait for reconnect: " + e);
                    recon = true;
                }
            }
        }
        // Start plugins.
        for (PluginProvider provider : ctx.plugins().allProviders()) provider.onIgniteStart();
        if (recon)
            reconnectState.waitFirstReconnect();
        // Lifecycle bean notifications.
        notifyLifecycleBeans(AFTER_NODE_START);
    } catch (Throwable e) {
        IgniteSpiVersionCheckException verCheckErr = X.cause(e, IgniteSpiVersionCheckException.class);
        if (verCheckErr != null)
            U.error(log, verCheckErr.getMessage());
        else if (X.hasCause(e, InterruptedException.class, IgniteInterruptedCheckedException.class))
            U.warn(log, "Grid startup routine has been interrupted (will rollback).");
        else
            U.error(log, "Got exception while starting (will rollback startup routine).", e);
        errHnd.apply();
        stop(true);
        if (e instanceof Error)
            throw e;
        else if (e instanceof IgniteCheckedException)
            throw (IgniteCheckedException) e;
        else
            throw new IgniteCheckedException(e);
    }
    // Mark start timestamp.
    startTime = U.currentTimeMillis();
    String intervalStr = IgniteSystemProperties.getString(IGNITE_STARVATION_CHECK_INTERVAL);
    // Start starvation checker if enabled.
    boolean starveCheck = !isDaemon() && !"0".equals(intervalStr);
    if (starveCheck) {
        final long interval = F.isEmpty(intervalStr) ? DFLT_PERIODIC_STARVATION_CHECK_FREQ : Long.parseLong(intervalStr);
        starveTask = ctx.timeout().schedule(new Runnable() {

            /**
             * Last completed task count.
             */
            private long lastCompletedCntPub;

            /**
             * Last completed task count.
             */
            private long lastCompletedCntSys;

            /**
             * Last completed task count.
             */
            private long lastCompletedCntQry;

            @Override
            public void run() {
                if (ctx.pools().getExecutorService() instanceof ThreadPoolExecutor) {
                    ThreadPoolExecutor exec = (ThreadPoolExecutor) ctx.pools().getExecutorService();
                    lastCompletedCntPub = checkPoolStarvation(exec, lastCompletedCntPub, "public");
                }
                if (ctx.pools().getSystemExecutorService() instanceof ThreadPoolExecutor) {
                    ThreadPoolExecutor exec = (ThreadPoolExecutor) ctx.pools().getSystemExecutorService();
                    lastCompletedCntSys = checkPoolStarvation(exec, lastCompletedCntSys, "system");
                }
                if (ctx.pools().getQueryExecutorService() instanceof ThreadPoolExecutor) {
                    ThreadPoolExecutor exec = (ThreadPoolExecutor) ctx.pools().getQueryExecutorService();
                    lastCompletedCntQry = checkPoolStarvation(exec, lastCompletedCntQry, "query");
                }
                if (ctx.pools().getStripedExecutorService() != null)
                    ctx.pools().getStripedExecutorService().detectStarvation();
            }

            /**
             * @param exec Thread pool executor to check.
             * @param lastCompletedCnt Last completed tasks count.
             * @param pool Pool name for message.
             * @return Current completed tasks count.
             */
            private long checkPoolStarvation(ThreadPoolExecutor exec, long lastCompletedCnt, String pool) {
                long completedCnt = exec.getCompletedTaskCount();
                // at least one waiting request, then it is possible starvation.
                if (exec.getPoolSize() == exec.getActiveCount() && completedCnt == lastCompletedCnt && !exec.getQueue().isEmpty())
                    LT.warn(log, "Possible thread pool starvation detected (no task completed in last " + interval + "ms, is " + pool + " thread pool size large enough?)");
                return completedCnt;
            }
        }, interval, interval);
    }
    long metricsLogFreq = cfg.getMetricsLogFrequency();
    if (metricsLogFreq > 0) {
        metricsLogTask = ctx.timeout().schedule(new Runnable() {

            private final DecimalFormat dblFmt = doubleFormat();

            @Override
            public void run() {
                ackNodeMetrics(dblFmt, ctx.pools().getExecutorService(), ctx.pools().getSystemExecutorService(), ctx.pools().getStripedExecutorService(), ctx.pools().customExecutors());
            }
        }, metricsLogFreq, metricsLogFreq);
    }
    ctx.performance().add("Disable assertions (remove '-ea' from JVM options)", !U.assertionsEnabled());
    ctx.performance().logSuggestions(log, igniteInstanceName);
    U.quietAndInfo(log, "To start Console Management & Monitoring run ignitevisorcmd.{sh|bat}");
    if (!IgniteSystemProperties.getBoolean(IgniteSystemProperties.IGNITE_QUIET, true))
        ackClassPathContent();
    ackStart(rtBean);
    if (!isDaemon())
        ctx.discovery().ackTopology(ctx.discovery().localJoin().joinTopologyVersion().topologyVersion(), EventType.EVT_NODE_JOINED, localNode());
    startTimer.finishGlobalStage("Await exchange");
}
Also used : DataStructuresProcessor(org.apache.ignite.internal.processors.datastructures.DataStructuresProcessor) IgniteServiceProcessor(org.apache.ignite.internal.processors.service.IgniteServiceProcessor) IgniteCheckedException(org.apache.ignite.IgniteCheckedException) DiscoveryLocalJoinData(org.apache.ignite.internal.managers.discovery.DiscoveryLocalJoinData) IgniteSystemProperties.getBoolean(org.apache.ignite.IgniteSystemProperties.getBoolean) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) MvccProcessorImpl(org.apache.ignite.internal.processors.cache.mvcc.MvccProcessorImpl) GridCheckpointManager(org.apache.ignite.internal.managers.checkpoint.GridCheckpointManager) ClusterNode(org.apache.ignite.cluster.ClusterNode) GridIndexingManager(org.apache.ignite.internal.managers.indexing.GridIndexingManager) GridEncryptionManager(org.apache.ignite.internal.managers.encryption.GridEncryptionManager) GridInternalSubscriptionProcessor(org.apache.ignite.internal.processors.subscription.GridInternalSubscriptionProcessor) GridMarshallerMappingProcessor(org.apache.ignite.internal.processors.marshaller.GridMarshallerMappingProcessor) GridTaskSessionProcessor(org.apache.ignite.internal.processors.session.GridTaskSessionProcessor) PlatformPluginProcessor(org.apache.ignite.internal.processors.platform.plugin.PlatformPluginProcessor) PluginProvider(org.apache.ignite.plugin.PluginProvider) DurableBackgroundTasksProcessor(org.apache.ignite.internal.processors.localtask.DurableBackgroundTasksProcessor) IgniteAuthenticationProcessor(org.apache.ignite.internal.processors.authentication.IgniteAuthenticationProcessor) GridCacheProcessor(org.apache.ignite.internal.processors.cache.GridCacheProcessor) GridPortProcessor(org.apache.ignite.internal.processors.port.GridPortProcessor) PerformanceStatisticsProcessor(org.apache.ignite.internal.processors.performancestatistics.PerformanceStatisticsProcessor) GridDiscoveryManager(org.apache.ignite.internal.managers.discovery.GridDiscoveryManager) IsolatedDiscoverySpi(org.apache.ignite.spi.discovery.isolated.IsolatedDiscoverySpi) GridTracingManager(org.apache.ignite.internal.managers.tracing.GridTracingManager) GridSystemViewManager(org.apache.ignite.internal.managers.systemview.GridSystemViewManager) GridAffinityProcessor(org.apache.ignite.internal.processors.affinity.GridAffinityProcessor) IgniteMBeansManager(org.apache.ignite.internal.managers.IgniteMBeansManager) GridJobMetricsProcessor(org.apache.ignite.internal.processors.jobmetrics.GridJobMetricsProcessor) GridQueryProcessor(org.apache.ignite.internal.processors.query.GridQueryProcessor) GridMetricManager(org.apache.ignite.internal.processors.metric.GridMetricManager) IgniteSpiVersionCheckException(org.apache.ignite.spi.IgniteSpiVersionCheckException) GridLoadBalancerManager(org.apache.ignite.internal.managers.loadbalancer.GridLoadBalancerManager) DataStreamProcessor(org.apache.ignite.internal.processors.datastreamer.DataStreamProcessor) FailureProcessor(org.apache.ignite.internal.processors.failure.FailureProcessor) GridEventStorageManager(org.apache.ignite.internal.managers.eventstorage.GridEventStorageManager) IgnitePluginProcessor(org.apache.ignite.internal.processors.plugin.IgnitePluginProcessor) PdsConsistentIdProcessor(org.apache.ignite.internal.processors.cache.persistence.filename.PdsConsistentIdProcessor) MaintenanceProcessor(org.apache.ignite.internal.maintenance.MaintenanceProcessor) GridTimeoutProcessor(org.apache.ignite.internal.processors.timeout.GridTimeoutProcessor) DecimalFormat(java.text.DecimalFormat) IndexProcessor(org.apache.ignite.internal.cache.query.index.IndexProcessor) GridDeploymentManager(org.apache.ignite.internal.managers.deployment.GridDeploymentManager) NoOpIgniteSecurityProcessor(org.apache.ignite.internal.processors.security.NoOpIgniteSecurityProcessor) IgniteSecurityProcessor(org.apache.ignite.internal.processors.security.IgniteSecurityProcessor) ClusterProcessor(org.apache.ignite.internal.processors.cluster.ClusterProcessor) OsDiscoveryNodeValidationProcessor(org.apache.ignite.internal.processors.nodevalidation.OsDiscoveryNodeValidationProcessor) DiscoveryNodeValidationProcessor(org.apache.ignite.internal.processors.nodevalidation.DiscoveryNodeValidationProcessor) ClientListenerProcessor(org.apache.ignite.internal.processors.odbc.ClientListenerProcessor) DistributedMetaStorageImpl(org.apache.ignite.internal.processors.metastorage.persistence.DistributedMetaStorageImpl) LifecycleBean(org.apache.ignite.lifecycle.LifecycleBean) IGridClusterStateProcessor(org.apache.ignite.internal.processors.cluster.IGridClusterStateProcessor) DiagnosticProcessor(org.apache.ignite.internal.processors.diagnostic.DiagnosticProcessor) IgniteRestProcessor(org.apache.ignite.internal.processors.rest.IgniteRestProcessor) GridSegmentationProcessor(org.apache.ignite.internal.processors.segmentation.GridSegmentationProcessor) GridCollisionManager(org.apache.ignite.internal.managers.collision.GridCollisionManager) IgniteCacheObjectProcessor(org.apache.ignite.internal.processors.cacheobject.IgniteCacheObjectProcessor) GridTaskProcessor(org.apache.ignite.internal.processors.task.GridTaskProcessor) GridContinuousProcessor(org.apache.ignite.internal.processors.continuous.GridContinuousProcessor) RuntimeMXBean(java.lang.management.RuntimeMXBean) DistributedConfigurationProcessor(org.apache.ignite.internal.processors.configuration.distributed.DistributedConfigurationProcessor) GridClosureProcessor(org.apache.ignite.internal.processors.closure.GridClosureProcessor) GridFailoverManager(org.apache.ignite.internal.managers.failover.GridFailoverManager) PlatformProcessor(org.apache.ignite.internal.processors.platform.PlatformProcessor) GridIoManager(org.apache.ignite.internal.managers.communication.GridIoManager) GridResourceProcessor(org.apache.ignite.internal.processors.resource.GridResourceProcessor) PoolProcessor(org.apache.ignite.internal.processors.pool.PoolProcessor) GridJobProcessor(org.apache.ignite.internal.processors.job.GridJobProcessor) ThreadPoolExecutor(java.util.concurrent.ThreadPoolExecutor)

Example 2 with GridTracingManager

use of org.apache.ignite.internal.managers.tracing.GridTracingManager in project ignite by apache.

the class GridNioServerWrapper method resetNioServer.

/**
 * Recreates tpcSrvr socket instance.
 *
 * @return Server instance.
 * @throws IgniteCheckedException Thrown if it's not possible to create server.
 */
public GridNioServer<Message> resetNioServer() throws IgniteCheckedException {
    if (cfg.boundTcpPort() >= 0)
        throw new IgniteCheckedException("Tcp NIO server was already created on port " + cfg.boundTcpPort());
    IgniteCheckedException lastEx = null;
    // If configured TCP port is busy, find first available in range.
    int lastPort = cfg.localPort() == -1 ? -1 : cfg.localPortRange() == 0 ? cfg.localPort() : cfg.localPort() + cfg.localPortRange() - 1;
    for (int port = cfg.localPort(); port <= lastPort; port++) {
        try {
            MessageFactory msgFactory = new MessageFactory() {

                private MessageFactory impl;

                @Nullable
                @Override
                public Message create(short type) {
                    if (impl == null)
                        impl = stateProvider.getSpiContext().messageFactory();
                    assert impl != null;
                    return impl.create(type);
                }
            };
            GridNioMessageReaderFactory readerFactory = new GridNioMessageReaderFactory() {

                private IgniteSpiContext context;

                private MessageFormatter formatter;

                @Override
                public MessageReader reader(GridNioSession ses, MessageFactory msgFactory) throws IgniteCheckedException {
                    final IgniteSpiContext ctx = stateProvider.getSpiContextWithoutInitialLatch();
                    if (formatter == null || context != ctx) {
                        context = ctx;
                        formatter = context.messageFormatter();
                    }
                    assert formatter != null;
                    ConnectionKey key = ses.meta(CONN_IDX_META);
                    return key != null ? formatter.reader(key.nodeId(), msgFactory) : null;
                }
            };
            GridNioMessageWriterFactory writerFactory = new GridNioMessageWriterFactory() {

                private IgniteSpiContext context;

                private MessageFormatter formatter;

                @Override
                public MessageWriter writer(GridNioSession ses) throws IgniteCheckedException {
                    final IgniteSpiContext ctx = stateProvider.getSpiContextWithoutInitialLatch();
                    if (formatter == null || context != ctx) {
                        context = ctx;
                        formatter = context.messageFormatter();
                    }
                    assert formatter != null;
                    ConnectionKey key = ses.meta(CONN_IDX_META);
                    return key != null ? formatter.writer(key.nodeId()) : null;
                }
            };
            GridDirectParser parser = new GridDirectParser(log.getLogger(GridDirectParser.class), msgFactory, readerFactory);
            IgnitePredicate<Message> skipRecoveryPred = msg -> msg instanceof RecoveryLastReceivedMessage;
            boolean clientMode = Boolean.TRUE.equals(igniteCfg.isClientMode());
            IgniteBiInClosure<GridNioSession, Integer> queueSizeMonitor = !clientMode && cfg.slowClientQueueLimit() > 0 ? this::checkClientQueueSize : null;
            List<GridNioFilter> filters = new ArrayList<>();
            if (tracing instanceof GridTracingManager && ((GridManager) tracing).enabled())
                filters.add(new GridNioTracerFilter(log, tracing));
            filters.add(new GridNioCodecFilter(parser, log, true));
            filters.add(new GridConnectionBytesVerifyFilter(log));
            if (stateProvider.isSslEnabled()) {
                GridNioSslFilter sslFilter = new GridNioSslFilter(igniteCfg.getSslContextFactory().create(), true, ByteOrder.LITTLE_ENDIAN, log, metricMgr == null ? null : metricMgr.registry(COMMUNICATION_METRICS_GROUP_NAME));
                sslFilter.directMode(true);
                sslFilter.wantClientAuth(true);
                sslFilter.needClientAuth(true);
                filters.add(sslFilter);
            }
            GridNioServer.Builder<Message> builder = GridNioServer.<Message>builder().address(cfg.localHost()).port(port).listener(srvLsnr).logger(log).selectorCount(cfg.selectorsCount()).igniteInstanceName(igniteInstanceName).serverName("tcp-comm").tcpNoDelay(cfg.tcpNoDelay()).directBuffer(cfg.directBuffer()).byteOrder(ByteOrder.LITTLE_ENDIAN).socketSendBufferSize(cfg.socketSendBuffer()).socketReceiveBufferSize(cfg.socketReceiveBuffer()).sendQueueLimit(cfg.messageQueueLimit()).directMode(true).writeTimeout(cfg.socketWriteTimeout()).selectorSpins(cfg.selectorSpins()).filters(filters.toArray(new GridNioFilter[filters.size()])).writerFactory(writerFactory).skipRecoveryPredicate(skipRecoveryPred).messageQueueSizeListener(queueSizeMonitor).tracing(tracing).readWriteSelectorsAssign(cfg.usePairedConnections());
            if (metricMgr != null) {
                builder.workerListener(workersRegistry).metricRegistry(metricMgr.registry(COMMUNICATION_METRICS_GROUP_NAME));
            }
            GridNioServer<Message> srvr = builder.build();
            cfg.boundTcpPort(port);
            // Ack Port the TCP server was bound to.
            if (log.isInfoEnabled()) {
                log.info("Successfully bound communication NIO server to TCP port " + "[port=" + cfg.boundTcpPort() + ", locHost=" + cfg.localHost() + ", selectorsCnt=" + cfg.selectorsCount() + ", selectorSpins=" + srvr.selectorSpins() + ", pairedConn=" + cfg.usePairedConnections() + ']');
            }
            srvr.idleTimeout(cfg.idleConnectionTimeout());
            return srvr;
        } catch (IgniteCheckedException e) {
            if (X.hasCause(e, SSLException.class))
                throw new IgniteSpiException("Failed to create SSL context. SSL factory: " + igniteCfg.getSslContextFactory() + '.', e);
            lastEx = e;
            if (log.isDebugEnabled())
                log.debug("Failed to bind to local port (will try next port within range) [port=" + port + ", locHost=" + cfg.localHost() + ']');
            eRegistrySupplier.get().onException("Failed to bind to local port (will try next port within range) [port=" + port + ", locHost=" + cfg.localHost() + ']', e);
        }
    }
    // If free port wasn't found.
    throw new IgniteCheckedException("Failed to bind to any port within range [startPort=" + cfg.localPort() + ", portRange=" + cfg.localPortRange() + ", locHost=" + cfg.localHost() + ']', lastEx);
}
Also used : CommunicationTcpUtils.usePairedConnections(org.apache.ignite.spi.communication.tcp.internal.CommunicationTcpUtils.usePairedConnections) GridNioSession(org.apache.ignite.internal.util.nio.GridNioSession) GridFutureAdapter(org.apache.ignite.internal.util.future.GridFutureAdapter) GridConnectionBytesVerifyFilter(org.apache.ignite.internal.util.nio.GridConnectionBytesVerifyFilter) NEED_WAIT(org.apache.ignite.spi.communication.tcp.messages.RecoveryLastReceivedMessage.NEED_WAIT) ThrowableSupplier(org.apache.ignite.internal.util.function.ThrowableSupplier) GridNioSessionMetaKey(org.apache.ignite.internal.util.nio.GridNioSessionMetaKey) Executors.newSingleThreadScheduledExecutor(java.util.concurrent.Executors.newSingleThreadScheduledExecutor) Map(java.util.Map) GridTcpNioCommunicationClient(org.apache.ignite.internal.util.nio.GridTcpNioCommunicationClient) Channel(java.nio.channels.Channel) CommunicationTcpUtils.handshakeTimeoutException(org.apache.ignite.spi.communication.tcp.internal.CommunicationTcpUtils.handshakeTimeoutException) GridNioServer(org.apache.ignite.internal.util.nio.GridNioServer) IgniteCheckedException(org.apache.ignite.IgniteCheckedException) Set(java.util.Set) RecoveryLastReceivedMessage(org.apache.ignite.spi.communication.tcp.messages.RecoveryLastReceivedMessage) COMMUNICATION_METRICS_GROUP_NAME(org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi.COMMUNICATION_METRICS_GROUP_NAME) ByteOrder(java.nio.ByteOrder) ExponentialBackoffTimeoutStrategy(org.apache.ignite.spi.ExponentialBackoffTimeoutStrategy) SSLException(javax.net.ssl.SSLException) IgniteConfiguration(org.apache.ignite.configuration.IgniteConfiguration) IgniteSpiOperationTimeoutException(org.apache.ignite.spi.IgniteSpiOperationTimeoutException) GridNioSslFilter(org.apache.ignite.internal.util.nio.ssl.GridNioSslFilter) Message(org.apache.ignite.plugin.extensions.communication.Message) ALREADY_CONNECTED(org.apache.ignite.spi.communication.tcp.messages.RecoveryLastReceivedMessage.ALREADY_CONNECTED) IgniteSpiException(org.apache.ignite.spi.IgniteSpiException) GridSelectorNioSessionImpl(org.apache.ignite.internal.util.nio.GridSelectorNioSessionImpl) U(org.apache.ignite.internal.util.typedef.internal.U) IgniteLogger(org.apache.ignite.IgniteLogger) GridDirectParser(org.apache.ignite.internal.util.nio.GridDirectParser) Supplier(java.util.function.Supplier) GridNioMessageWriterFactory(org.apache.ignite.internal.util.nio.GridNioMessageWriterFactory) ArrayList(java.util.ArrayList) IgniteBiInClosure(org.apache.ignite.lang.IgniteBiInClosure) SocketException(java.net.SocketException) ClusterNode(org.apache.ignite.cluster.ClusterNode) SocketTimeoutException(java.net.SocketTimeoutException) ScheduledExecutorService(java.util.concurrent.ScheduledExecutorService) CONN_IDX_META(org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi.CONN_IDX_META) IgniteExceptionRegistry(org.apache.ignite.internal.util.IgniteExceptionRegistry) IOException(java.io.IOException) CommunicationTcpUtils.isRecoverableException(org.apache.ignite.spi.communication.tcp.internal.CommunicationTcpUtils.isRecoverableException) HandshakeMessage(org.apache.ignite.spi.communication.tcp.messages.HandshakeMessage) GridTracingManager(org.apache.ignite.internal.managers.tracing.GridTracingManager) CHANNEL_COMMUNICATION(org.apache.ignite.internal.IgniteFeatures.CHANNEL_COMMUNICATION) GridNioRecoveryDescriptor(org.apache.ignite.internal.util.nio.GridNioRecoveryDescriptor) IgniteInternalFuture(org.apache.ignite.internal.IgniteInternalFuture) CommunicationTcpUtils.nodeAddresses(org.apache.ignite.spi.communication.tcp.internal.CommunicationTcpUtils.nodeAddresses) SocketAddress(java.net.SocketAddress) GridNioCodecFilter(org.apache.ignite.internal.util.nio.GridNioCodecFilter) IgniteFeatures.nodeSupports(org.apache.ignite.internal.IgniteFeatures.nodeSupports) IgniteSystemProperties(org.apache.ignite.IgniteSystemProperties) SocketChannel(java.nio.channels.SocketChannel) GridNioTracerFilter(org.apache.ignite.internal.util.nio.GridNioTracerFilter) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) X(org.apache.ignite.internal.util.typedef.X) CONSISTENT_ID_META(org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi.CONSISTENT_ID_META) GridConcurrentFactory(org.apache.ignite.internal.util.GridConcurrentFactory) GridSslMeta(org.apache.ignite.internal.util.nio.ssl.GridSslMeta) WorkersRegistry(org.apache.ignite.internal.worker.WorkersRegistry) MessageFormatter(org.apache.ignite.plugin.extensions.communication.MessageFormatter) IgniteThreadFactory(org.apache.ignite.thread.IgniteThreadFactory) NodeIdMessage(org.apache.ignite.spi.communication.tcp.messages.NodeIdMessage) IgniteDiscoveryThread(org.apache.ignite.spi.discovery.IgniteDiscoveryThread) SSL_META(org.apache.ignite.internal.util.nio.GridNioSessionMetaKey.SSL_META) Collection(java.util.Collection) UUID(java.util.UUID) InetSocketAddress(java.net.InetSocketAddress) AttributeNames(org.apache.ignite.spi.communication.tcp.AttributeNames) Nullable(org.jetbrains.annotations.Nullable) List(java.util.List) GridCommunicationClient(org.apache.ignite.internal.util.nio.GridCommunicationClient) TimeoutStrategy(org.apache.ignite.spi.TimeoutStrategy) NODE_STOPPING(org.apache.ignite.spi.communication.tcp.messages.RecoveryLastReceivedMessage.NODE_STOPPING) CommunicationListener(org.apache.ignite.spi.communication.CommunicationListener) Tracing(org.apache.ignite.internal.processors.tracing.Tracing) IgniteSpiContext(org.apache.ignite.spi.IgniteSpiContext) HashMap(java.util.HashMap) Function(java.util.function.Function) ConcurrentMap(java.util.concurrent.ConcurrentMap) SSLEngine(javax.net.ssl.SSLEngine) GridNioMessageReaderFactory(org.apache.ignite.internal.util.nio.GridNioMessageReaderFactory) HashSet(java.util.HashSet) IgnitePredicate(org.apache.ignite.lang.IgnitePredicate) MessageWriter(org.apache.ignite.plugin.extensions.communication.MessageWriter) ThrowableBiFunction(org.apache.ignite.internal.util.function.ThrowableBiFunction) MessageFactory(org.apache.ignite.plugin.extensions.communication.MessageFactory) IgniteTooManyOpenFilesException(org.apache.ignite.internal.IgniteTooManyOpenFilesException) GridManager(org.apache.ignite.internal.managers.GridManager) ClusterTopologyCheckedException(org.apache.ignite.internal.cluster.ClusterTopologyCheckedException) GridNioFilter(org.apache.ignite.internal.util.nio.GridNioFilter) MessageReader(org.apache.ignite.plugin.extensions.communication.MessageReader) TimeUnit(java.util.concurrent.TimeUnit) GridNioServerListener(org.apache.ignite.internal.util.nio.GridNioServerListener) GridMetricManager(org.apache.ignite.internal.processors.metric.GridMetricManager) UNKNOWN_NODE(org.apache.ignite.spi.communication.tcp.messages.RecoveryLastReceivedMessage.UNKNOWN_NODE) HandshakeMessage2(org.apache.ignite.spi.communication.tcp.messages.HandshakeMessage2) GridNioFilter(org.apache.ignite.internal.util.nio.GridNioFilter) IgniteSpiContext(org.apache.ignite.spi.IgniteSpiContext) GridNioSession(org.apache.ignite.internal.util.nio.GridNioSession) RecoveryLastReceivedMessage(org.apache.ignite.spi.communication.tcp.messages.RecoveryLastReceivedMessage) Message(org.apache.ignite.plugin.extensions.communication.Message) HandshakeMessage(org.apache.ignite.spi.communication.tcp.messages.HandshakeMessage) NodeIdMessage(org.apache.ignite.spi.communication.tcp.messages.NodeIdMessage) ArrayList(java.util.ArrayList) MessageFormatter(org.apache.ignite.plugin.extensions.communication.MessageFormatter) GridNioSslFilter(org.apache.ignite.internal.util.nio.ssl.GridNioSslFilter) SSLException(javax.net.ssl.SSLException) IgniteCheckedException(org.apache.ignite.IgniteCheckedException) GridDirectParser(org.apache.ignite.internal.util.nio.GridDirectParser) IgniteSpiException(org.apache.ignite.spi.IgniteSpiException) GridNioMessageWriterFactory(org.apache.ignite.internal.util.nio.GridNioMessageWriterFactory) RecoveryLastReceivedMessage(org.apache.ignite.spi.communication.tcp.messages.RecoveryLastReceivedMessage) MessageFactory(org.apache.ignite.plugin.extensions.communication.MessageFactory) GridNioTracerFilter(org.apache.ignite.internal.util.nio.GridNioTracerFilter) GridConnectionBytesVerifyFilter(org.apache.ignite.internal.util.nio.GridConnectionBytesVerifyFilter) GridNioServer(org.apache.ignite.internal.util.nio.GridNioServer) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) GridTracingManager(org.apache.ignite.internal.managers.tracing.GridTracingManager) GridNioCodecFilter(org.apache.ignite.internal.util.nio.GridNioCodecFilter) GridNioMessageReaderFactory(org.apache.ignite.internal.util.nio.GridNioMessageReaderFactory)

Aggregations

IgniteCheckedException (org.apache.ignite.IgniteCheckedException)2 ClusterNode (org.apache.ignite.cluster.ClusterNode)2 GridTracingManager (org.apache.ignite.internal.managers.tracing.GridTracingManager)2 GridMetricManager (org.apache.ignite.internal.processors.metric.GridMetricManager)2 IOException (java.io.IOException)1 RuntimeMXBean (java.lang.management.RuntimeMXBean)1 InetSocketAddress (java.net.InetSocketAddress)1 SocketAddress (java.net.SocketAddress)1 SocketException (java.net.SocketException)1 SocketTimeoutException (java.net.SocketTimeoutException)1 ByteOrder (java.nio.ByteOrder)1 Channel (java.nio.channels.Channel)1 SocketChannel (java.nio.channels.SocketChannel)1 DecimalFormat (java.text.DecimalFormat)1 ArrayList (java.util.ArrayList)1 Collection (java.util.Collection)1 HashMap (java.util.HashMap)1 HashSet (java.util.HashSet)1 List (java.util.List)1 Map (java.util.Map)1