Search in sources :

Example 1 with ACK_VER_STR

use of org.apache.ignite.internal.IgniteVersionUtils.ACK_VER_STR in project ignite by apache.

the class CommandHandler method execute.

/**
 * Parse and execute command.
 *
 * @param rawArgs Arguments to parse and execute.
 * @return Exit code.
 */
public int execute(List<String> rawArgs) {
    LocalDateTime startTime = LocalDateTime.now();
    Thread.currentThread().setName("session=" + ses);
    logger.info("Control utility [ver. " + ACK_VER_STR + "]");
    logger.info(COPYRIGHT);
    logger.info("User: " + System.getProperty("user.name"));
    logger.info("Time: " + startTime.format(formatter));
    String commandName = "";
    Throwable err = null;
    boolean verbose = false;
    try {
        if (isHelp(rawArgs)) {
            printHelp(rawArgs);
            return EXIT_CODE_OK;
        }
        verbose = F.exist(rawArgs, CMD_VERBOSE::equalsIgnoreCase);
        ConnectionAndSslParameters args = new CommonArgParser(logger).parseAndValidate(rawArgs.iterator());
        Command command = args.command();
        commandName = command.name();
        GridClientConfiguration clientCfg = getClientConfiguration(args);
        int tryConnectMaxCount = 3;
        boolean suppliedAuth = !F.isEmpty(args.userName()) && !F.isEmpty(args.password());
        boolean credentialsRequested = false;
        while (true) {
            try {
                if (!args.autoConfirmation()) {
                    command.prepareConfirmation(clientCfg);
                    if (!confirm(command.confirmationPrompt())) {
                        logger.info("Operation cancelled.");
                        return EXIT_CODE_OK;
                    }
                }
                logger.info("Command [" + commandName + "] started");
                logger.info("Arguments: " + argumentsToString(rawArgs));
                logger.info(DELIM);
                lastOperationRes = command.execute(clientCfg, logger, args.verbose());
                break;
            } catch (Throwable e) {
                if (!isAuthError(e))
                    throw e;
                if (suppliedAuth)
                    throw new GridClientAuthenticationException("Wrong credentials.");
                if (tryConnectMaxCount == 0) {
                    throw new GridClientAuthenticationException("Maximum number of " + "retries exceeded");
                }
                logger.info(credentialsRequested ? "Authentication error, please try again." : "This cluster requires authentication.");
                if (credentialsRequested)
                    tryConnectMaxCount--;
                String user = retrieveUserName(args, clientCfg);
                String pwd = new String(requestPasswordFromConsole("password: "));
                clientCfg = getClientConfiguration(user, pwd, args);
                credentialsRequested = true;
            }
        }
        logger.info("Command [" + commandName + "] finished with code: " + EXIT_CODE_OK);
        return EXIT_CODE_OK;
    } catch (IllegalArgumentException e) {
        logger.severe("Check arguments. " + errorMessage(e));
        logger.info("Command [" + commandName + "] finished with code: " + EXIT_CODE_INVALID_ARGUMENTS);
        if (verbose)
            err = e;
        return EXIT_CODE_INVALID_ARGUMENTS;
    } catch (Throwable e) {
        if (isAuthError(e)) {
            logger.severe("Authentication error. " + errorMessage(e));
            logger.info("Command [" + commandName + "] finished with code: " + ERR_AUTHENTICATION_FAILED);
            if (verbose)
                err = e;
            return ERR_AUTHENTICATION_FAILED;
        }
        if (isConnectionError(e)) {
            IgniteCheckedException cause = X.cause(e, IgniteCheckedException.class);
            if (isConnectionClosedSilentlyException(e))
                logger.severe("Connection to cluster failed. Please check firewall settings and " + "client and server are using the same SSL configuration.");
            else {
                if (isSSLMisconfigurationError(cause))
                    e = cause;
                logger.severe("Connection to cluster failed. " + errorMessage(e));
            }
            logger.info("Command [" + commandName + "] finished with code: " + EXIT_CODE_CONNECTION_FAILED);
            if (verbose)
                err = e;
            return EXIT_CODE_CONNECTION_FAILED;
        }
        if (X.hasCause(e, IllegalArgumentException.class)) {
            IllegalArgumentException iae = X.cause(e, IllegalArgumentException.class);
            logger.severe("Check arguments. " + errorMessage(iae));
            logger.info("Command [" + commandName + "] finished with code: " + EXIT_CODE_INVALID_ARGUMENTS);
            if (verbose)
                err = e;
            return EXIT_CODE_INVALID_ARGUMENTS;
        }
        logger.severe(errorMessage(e));
        logger.info("Command [" + commandName + "] finished with code: " + EXIT_CODE_UNEXPECTED_ERROR);
        err = e;
        return EXIT_CODE_UNEXPECTED_ERROR;
    } finally {
        LocalDateTime endTime = LocalDateTime.now();
        Duration diff = Duration.between(startTime, endTime);
        if (nonNull(err))
            logger.info("Error stack trace:" + System.lineSeparator() + X.getFullStackTrace(err));
        logger.info("Control utility has completed execution at: " + endTime.format(formatter));
        logger.info("Execution time: " + diff.toMillis() + " ms");
        Arrays.stream(logger.getHandlers()).filter(handler -> handler instanceof FileHandler).forEach(Handler::close);
    }
}
Also used : LocalDateTime(java.time.LocalDateTime) Arrays(java.util.Arrays) COPYRIGHT(org.apache.ignite.internal.IgniteVersionUtils.COPYRIGHT) INDENT(org.apache.ignite.internal.commandline.CommandLogger.INDENT) Scanner(java.util.Scanner) CMD_VERBOSE(org.apache.ignite.internal.commandline.CommonArgParser.CMD_VERBOSE) Formatter(java.util.logging.Formatter) IgniteSystemProperties(org.apache.ignite.IgniteSystemProperties) GridClientHandshakeException(org.apache.ignite.internal.client.GridClientHandshakeException) FileHandler(java.util.logging.FileHandler) SecurityCredentialsProvider(org.apache.ignite.plugin.security.SecurityCredentialsProvider) SB(org.apache.ignite.internal.util.typedef.internal.SB) SecurityCredentials(org.apache.ignite.plugin.security.SecurityCredentials) Duration(java.time.Duration) X(org.apache.ignite.internal.util.typedef.X) SslContextFactory(org.apache.ignite.ssl.SslContextFactory) DFLT_HOST(org.apache.ignite.internal.commandline.TaskExecutor.DFLT_HOST) DFLT_PORT(org.apache.ignite.internal.commandline.TaskExecutor.DFLT_PORT) CommandLogger.optional(org.apache.ignite.internal.commandline.CommandLogger.optional) CMD_AUTO_CONFIRMATION(org.apache.ignite.internal.commandline.CommonArgParser.CMD_AUTO_CONFIRMATION) ACK_VER_STR(org.apache.ignite.internal.IgniteVersionUtils.ACK_VER_STR) IgniteCheckedException(org.apache.ignite.IgniteCheckedException) JavaLoggerFormatter(org.apache.ignite.logger.java.JavaLoggerFormatter) GridClientConnectionResetException(org.apache.ignite.internal.client.impl.connection.GridClientConnectionResetException) UUID(java.util.UUID) LogRecord(java.util.logging.LogRecord) Logger(java.util.logging.Logger) GridSslBasicContextFactory(org.apache.ignite.internal.client.ssl.GridSslBasicContextFactory) Collectors(java.util.stream.Collectors) CommonArgParser.getCommonOptions(org.apache.ignite.internal.commandline.CommonArgParser.getCommonOptions) GridClientDisconnectedException(org.apache.ignite.internal.client.GridClientDisconnectedException) Nullable(org.jetbrains.annotations.Nullable) List(java.util.List) Handler(java.util.logging.Handler) NotNull(org.jetbrains.annotations.NotNull) Objects.nonNull(java.util.Objects.nonNull) SecurityCredentialsBasicProvider(org.apache.ignite.plugin.security.SecurityCredentialsBasicProvider) System.lineSeparator(java.lang.System.lineSeparator) LocalDateTime(java.time.LocalDateTime) U(org.apache.ignite.internal.util.typedef.internal.U) DOUBLE_INDENT(org.apache.ignite.internal.commandline.CommandLogger.DOUBLE_INDENT) GridServerUnreachableException(org.apache.ignite.internal.client.GridServerUnreachableException) Level(java.util.logging.Level) DFLT_SSL_PROTOCOL(org.apache.ignite.ssl.SslContextFactory.DFLT_SSL_PROTOCOL) GridClientAuthenticationException(org.apache.ignite.internal.client.GridClientAuthenticationException) StreamHandler(java.util.logging.StreamHandler) GridClientClosedException(org.apache.ignite.internal.client.GridClientClosedException) F(org.apache.ignite.internal.util.typedef.F) JavaLoggerFileHandler(org.apache.ignite.logger.java.JavaLoggerFileHandler) GridClientConfiguration(org.apache.ignite.internal.client.GridClientConfiguration) File(java.io.File) CommandLogger.errorMessage(org.apache.ignite.internal.commandline.CommandLogger.errorMessage) DateTimeFormatter(java.time.format.DateTimeFormatter) IGNITE_ENABLE_EXPERIMENTAL_COMMAND(org.apache.ignite.IgniteSystemProperties.IGNITE_ENABLE_EXPERIMENTAL_COMMAND) CMD_ENABLE_EXPERIMENTAL(org.apache.ignite.internal.commandline.CommonArgParser.CMD_ENABLE_EXPERIMENTAL) Collections(java.util.Collections) FileHandler(java.util.logging.FileHandler) Handler(java.util.logging.Handler) StreamHandler(java.util.logging.StreamHandler) JavaLoggerFileHandler(org.apache.ignite.logger.java.JavaLoggerFileHandler) Duration(java.time.Duration) FileHandler(java.util.logging.FileHandler) JavaLoggerFileHandler(org.apache.ignite.logger.java.JavaLoggerFileHandler) IgniteCheckedException(org.apache.ignite.IgniteCheckedException) GridClientAuthenticationException(org.apache.ignite.internal.client.GridClientAuthenticationException) GridClientConfiguration(org.apache.ignite.internal.client.GridClientConfiguration)

Aggregations

File (java.io.File)1 System.lineSeparator (java.lang.System.lineSeparator)1 Duration (java.time.Duration)1 LocalDateTime (java.time.LocalDateTime)1 DateTimeFormatter (java.time.format.DateTimeFormatter)1 Arrays (java.util.Arrays)1 Collections (java.util.Collections)1 List (java.util.List)1 Objects.nonNull (java.util.Objects.nonNull)1 Scanner (java.util.Scanner)1 UUID (java.util.UUID)1 FileHandler (java.util.logging.FileHandler)1 Formatter (java.util.logging.Formatter)1 Handler (java.util.logging.Handler)1 Level (java.util.logging.Level)1 LogRecord (java.util.logging.LogRecord)1 Logger (java.util.logging.Logger)1 StreamHandler (java.util.logging.StreamHandler)1 Collectors (java.util.stream.Collectors)1 IgniteCheckedException (org.apache.ignite.IgniteCheckedException)1