blob: 2ae7475b53644ecfab16725d5046641cb9ffc82d [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.livy.client.http;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import org.apache.livy.client.common.ClientConf;
class HttpConf extends ClientConf<HttpConf> {
private static final String HTTP_CONF_PREFIX = "livy.client.http.";
static enum Entry implements ConfEntry {
CONNECTION_TIMEOUT("connection.timeout", "10s"),
CONNECTION_IDLE_TIMEOUT("connection.idle.timeout", "10m"),
SOCKET_TIMEOUT("connection.socket.timeout", "5m"),
JOB_INITIAL_POLL_INTERVAL("job.initial-poll-interval", "100ms"),
JOB_MAX_POLL_INTERVAL("job.max-poll-interval", "5s"),
CONTENT_COMPRESS_ENABLE("content.compress.enable", true),
// Kerberos related configuration
SPNEGO_ENABLED("spnego.enable", false),
AUTH_LOGIN_CONFIG("auth.login.config", null),
KRB5_DEBUG_ENABLED("krb5.debug", false),
KRB5_CONF("krb5.conf", null);
private final String key;
private final Object dflt;
private Entry(String key, Object dflt) {
this.key = HTTP_CONF_PREFIX + key;
this.dflt = dflt;
}
@Override
public String key() { return key; }
@Override
public Object dflt() { return dflt; }
}
HttpConf(Properties config) {
super(config);
if (getBoolean(Entry.SPNEGO_ENABLED)) {
if (get(Entry.AUTH_LOGIN_CONFIG ) == null) {
throw new IllegalArgumentException(Entry.AUTH_LOGIN_CONFIG.key + " should not be null");
}
if (get(Entry.KRB5_CONF) == null) {
throw new IllegalArgumentException(Entry.KRB5_CONF.key + " should not be null");
}
System.setProperty("java.security.auth.login.config", get(Entry.AUTH_LOGIN_CONFIG));
System.setProperty("java.security.krb5.conf", get(Entry.KRB5_CONF));
System.setProperty(
"sun.security.krb5.debug", String.valueOf(getBoolean(Entry.KRB5_DEBUG_ENABLED)));
// This is needed to get Kerberos credentials from the environment, instead of
// requiring the application to manually obtain the credentials.
System.setProperty("javax.security.auth.useSubjectCredsOnly", "false");
}
}
boolean isSpnegoEnabled() {
return getBoolean(Entry.SPNEGO_ENABLED);
}
private static final Map<String, DeprecatedConf> configsWithAlternatives
= Collections.unmodifiableMap(new HashMap<String, DeprecatedConf>() {{
put(HttpConf.Entry.JOB_INITIAL_POLL_INTERVAL.key, DepConf.JOB_INITIAL_POLL_INTERVAL);
put(HttpConf.Entry.JOB_MAX_POLL_INTERVAL.key, DepConf.JOB_MAX_POLL_INTERVAL);
}});
// Maps deprecated key to DeprecatedConf with the same key.
// There are no deprecated configs without alternatives currently.
private static final Map<String, DeprecatedConf> deprecatedConfigs
= Collections.unmodifiableMap(new HashMap<String, DeprecatedConf>());
protected Map<String, DeprecatedConf> getConfigsWithAlternatives() {
return configsWithAlternatives;
}
protected Map<String, DeprecatedConf> getDeprecatedConfigs() {
return deprecatedConfigs;
}
static enum DepConf implements DeprecatedConf {
JOB_INITIAL_POLL_INTERVAL("job.initial_poll_interval", "0.4"),
JOB_MAX_POLL_INTERVAL("job.max_poll_interval", "0.4");
private final String key;
private final String version;
private final String deprecationMessage;
private DepConf(String key, String version) {
this(key, version, "");
}
private DepConf(String key, String version, String deprecationMessage) {
this.key = HTTP_CONF_PREFIX + key;
this.version = version;
this.deprecationMessage = deprecationMessage;
}
@Override
public String key() { return key; }
@Override
public String version() { return version; }
@Override
public String deprecationMessage() { return deprecationMessage; }
}
}