Search in sources :

Example 1 with VerifyingFileFactory

use of org.apache.zookeeper.server.util.VerifyingFileFactory in project zookeeper by apache.

the class QuorumPeerConfig method parseProperties.

/**
 * Parse config from a Properties.
 * @param zkProp Properties to parse from.
 * @throws IOException
 * @throws ConfigException
 */
public void parseProperties(Properties zkProp) throws IOException, ConfigException {
    int clientPort = 0;
    int secureClientPort = 0;
    String clientPortAddress = null;
    String secureClientPortAddress = null;
    VerifyingFileFactory vff = new VerifyingFileFactory.Builder(LOG).warnForRelativePath().build();
    for (Entry<Object, Object> entry : zkProp.entrySet()) {
        String key = entry.getKey().toString().trim();
        String value = entry.getValue().toString().trim();
        if (key.equals("dataDir")) {
            dataDir = vff.create(value);
        } else if (key.equals("dataLogDir")) {
            dataLogDir = vff.create(value);
        } else if (key.equals("clientPort")) {
            clientPort = Integer.parseInt(value);
        } else if (key.equals("localSessionsEnabled")) {
            localSessionsEnabled = Boolean.parseBoolean(value);
        } else if (key.equals("localSessionsUpgradingEnabled")) {
            localSessionsUpgradingEnabled = Boolean.parseBoolean(value);
        } else if (key.equals("clientPortAddress")) {
            clientPortAddress = value.trim();
        } else if (key.equals("secureClientPort")) {
            secureClientPort = Integer.parseInt(value);
        } else if (key.equals("secureClientPortAddress")) {
            secureClientPortAddress = value.trim();
        } else if (key.equals("tickTime")) {
            tickTime = Integer.parseInt(value);
        } else if (key.equals("maxClientCnxns")) {
            maxClientCnxns = Integer.parseInt(value);
        } else if (key.equals("minSessionTimeout")) {
            minSessionTimeout = Integer.parseInt(value);
        } else if (key.equals("maxSessionTimeout")) {
            maxSessionTimeout = Integer.parseInt(value);
        } else if (key.equals("initLimit")) {
            initLimit = Integer.parseInt(value);
        } else if (key.equals("syncLimit")) {
            syncLimit = Integer.parseInt(value);
        } else if (key.equals("electionAlg")) {
            electionAlg = Integer.parseInt(value);
            if (electionAlg != 1 && electionAlg != 2 && electionAlg != 3) {
                throw new ConfigException("Invalid electionAlg value. Only 1, 2, 3 are supported.");
            }
        } else if (key.equals("quorumListenOnAllIPs")) {
            quorumListenOnAllIPs = Boolean.parseBoolean(value);
        } else if (key.equals("peerType")) {
            if (value.toLowerCase().equals("observer")) {
                peerType = LearnerType.OBSERVER;
            } else if (value.toLowerCase().equals("participant")) {
                peerType = LearnerType.PARTICIPANT;
            } else {
                throw new ConfigException("Unrecognised peertype: " + value);
            }
        } else if (key.equals("syncEnabled")) {
            syncEnabled = Boolean.parseBoolean(value);
        } else if (key.equals("dynamicConfigFile")) {
            dynamicConfigFileStr = value;
        } else if (key.equals("autopurge.snapRetainCount")) {
            snapRetainCount = Integer.parseInt(value);
        } else if (key.equals("autopurge.purgeInterval")) {
            purgeInterval = Integer.parseInt(value);
        } else if (key.equals("standaloneEnabled")) {
            if (value.toLowerCase().equals("true")) {
                setStandaloneEnabled(true);
            } else if (value.toLowerCase().equals("false")) {
                setStandaloneEnabled(false);
            } else {
                throw new ConfigException("Invalid option " + value + " for standalone mode. Choose 'true' or 'false.'");
            }
        } else if (key.equals("reconfigEnabled")) {
            if (value.toLowerCase().equals("true")) {
                setReconfigEnabled(true);
            } else if (value.toLowerCase().equals("false")) {
                setReconfigEnabled(false);
            } else {
                throw new ConfigException("Invalid option " + value + " for reconfigEnabled flag. Choose 'true' or 'false.'");
            }
        } else if ((key.startsWith("server.") || key.startsWith("group") || key.startsWith("weight")) && zkProp.containsKey("dynamicConfigFile")) {
            throw new ConfigException("parameter: " + key + " must be in a separate dynamic config file");
        } else if (key.equals(QuorumAuth.QUORUM_SASL_AUTH_ENABLED)) {
            quorumEnableSasl = Boolean.parseBoolean(value);
        } else if (key.equals(QuorumAuth.QUORUM_SERVER_SASL_AUTH_REQUIRED)) {
            quorumServerRequireSasl = Boolean.parseBoolean(value);
        } else if (key.equals(QuorumAuth.QUORUM_LEARNER_SASL_AUTH_REQUIRED)) {
            quorumLearnerRequireSasl = Boolean.parseBoolean(value);
        } else if (key.equals(QuorumAuth.QUORUM_LEARNER_SASL_LOGIN_CONTEXT)) {
            quorumLearnerLoginContext = value;
        } else if (key.equals(QuorumAuth.QUORUM_SERVER_SASL_LOGIN_CONTEXT)) {
            quorumServerLoginContext = value;
        } else if (key.equals(QuorumAuth.QUORUM_KERBEROS_SERVICE_PRINCIPAL)) {
            quorumServicePrincipal = value;
        } else if (key.equals("quorum.cnxn.threads.size")) {
            quorumCnxnThreadsSize = Integer.parseInt(value);
        } else {
            System.setProperty("zookeeper." + key, value);
        }
    }
    if (!quorumEnableSasl && quorumServerRequireSasl) {
        throw new IllegalArgumentException(QuorumAuth.QUORUM_SASL_AUTH_ENABLED + " is disabled, so cannot enable " + QuorumAuth.QUORUM_SERVER_SASL_AUTH_REQUIRED);
    }
    if (!quorumEnableSasl && quorumLearnerRequireSasl) {
        throw new IllegalArgumentException(QuorumAuth.QUORUM_SASL_AUTH_ENABLED + " is disabled, so cannot enable " + QuorumAuth.QUORUM_LEARNER_SASL_AUTH_REQUIRED);
    }
    // is also auth enabled while enabling quorum server require sasl.
    if (!quorumLearnerRequireSasl && quorumServerRequireSasl) {
        throw new IllegalArgumentException(QuorumAuth.QUORUM_LEARNER_SASL_AUTH_REQUIRED + " is disabled, so cannot enable " + QuorumAuth.QUORUM_SERVER_SASL_AUTH_REQUIRED);
    }
    // than 3.
    if (snapRetainCount < MIN_SNAP_RETAIN_COUNT) {
        LOG.warn("Invalid autopurge.snapRetainCount: " + snapRetainCount + ". Defaulting to " + MIN_SNAP_RETAIN_COUNT);
        snapRetainCount = MIN_SNAP_RETAIN_COUNT;
    }
    if (dataDir == null) {
        throw new IllegalArgumentException("dataDir is not set");
    }
    if (dataLogDir == null) {
        dataLogDir = dataDir;
    }
    if (clientPort == 0) {
        LOG.info("clientPort is not set");
        if (clientPortAddress != null) {
            throw new IllegalArgumentException("clientPortAddress is set but clientPort is not set");
        }
    } else if (clientPortAddress != null) {
        this.clientPortAddress = new InetSocketAddress(InetAddress.getByName(clientPortAddress), clientPort);
        LOG.info("clientPortAddress is {}", this.clientPortAddress.toString());
    } else {
        this.clientPortAddress = new InetSocketAddress(clientPort);
        LOG.info("clientPortAddress is {}", this.clientPortAddress.toString());
    }
    if (secureClientPort == 0) {
        LOG.info("secureClientPort is not set");
        if (secureClientPortAddress != null) {
            throw new IllegalArgumentException("secureClientPortAddress is set but secureClientPort is not set");
        }
    } else if (secureClientPortAddress != null) {
        this.secureClientPortAddress = new InetSocketAddress(InetAddress.getByName(secureClientPortAddress), secureClientPort);
        LOG.info("secureClientPortAddress is {}", this.secureClientPortAddress.toString());
    } else {
        this.secureClientPortAddress = new InetSocketAddress(secureClientPort);
        LOG.info("secureClientPortAddress is {}", this.secureClientPortAddress.toString());
    }
    if (this.secureClientPortAddress != null) {
        configureSSLAuth();
    }
    if (tickTime == 0) {
        throw new IllegalArgumentException("tickTime is not set");
    }
    minSessionTimeout = minSessionTimeout == -1 ? tickTime * 2 : minSessionTimeout;
    maxSessionTimeout = maxSessionTimeout == -1 ? tickTime * 20 : maxSessionTimeout;
    if (minSessionTimeout > maxSessionTimeout) {
        throw new IllegalArgumentException("minSessionTimeout must not be larger than maxSessionTimeout");
    }
    // static configuration params see writeDynamicConfig()
    if (dynamicConfigFileStr == null) {
        setupQuorumPeerConfig(zkProp, true);
        if (isDistributed() && isReconfigEnabled()) {
            // we don't backup static config for standalone mode.
            // we also don't backup if reconfig feature is disabled.
            backupOldConfig();
        }
    }
}
Also used : InetSocketAddress(java.net.InetSocketAddress) VerifyingFileFactory(org.apache.zookeeper.server.util.VerifyingFileFactory)

Aggregations

InetSocketAddress (java.net.InetSocketAddress)1 VerifyingFileFactory (org.apache.zookeeper.server.util.VerifyingFileFactory)1