/*
* 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.ambari.view.hive20.utils;
import org.apache.ambari.view.ViewContext;
/**
* This fetches the configuration for the actor system from ambari.properties
*/
public class HiveActorConfiguration {
private static String DEFAULT_CONFIG = "default";
private static String CONNECTION_PREFIX = "views.ambari.hive.";
private static String CONNECTION_INACTIVITY_TIMEOUT_PATTERN = CONNECTION_PREFIX + "%s.connection.inactivity.timeout";
private static String CONNECTION_TERMINATION_TIMEOUT_PATTERN = CONNECTION_PREFIX + "%s.connection.termination.timeout";
private static String SYNC_QUERY_TIMEOUT_PATTERN = CONNECTION_PREFIX + "%s.sync.query.timeout";
private static String RESULT_FETCH_TIMEOUT_PATTERN = CONNECTION_PREFIX + "%s.result.fetch.timeout";
private final ViewContext context;
public HiveActorConfiguration(ViewContext context) {
this.context = context;
}
public long getInactivityTimeout(long defaultValue) {
return Long.parseLong(getPropertiesFromContext(CONNECTION_INACTIVITY_TIMEOUT_PATTERN, String.valueOf(defaultValue)));
}
public long getTerminationTimeout(long defaultValue) {
return Long.parseLong(getPropertiesFromContext(CONNECTION_TERMINATION_TIMEOUT_PATTERN, String.valueOf(defaultValue)));
}
public long getSyncQueryTimeout(long defaultValue) {
return Long.parseLong(getPropertiesFromContext(SYNC_QUERY_TIMEOUT_PATTERN, String.valueOf(defaultValue)));
}
public long getResultFetchTimeout(long defaultValue) {
return Long.parseLong(getPropertiesFromContext(RESULT_FETCH_TIMEOUT_PATTERN, String.valueOf(defaultValue)));
}
/**
* Tries to get the specific configuration with the instance name. If not found then tries to
* find the default set in ambari.properties. If not found then returns the default value passed
* @param keyPattern Pattern used to generate ambari.properties key
* @param defaultValue Returned when the value is not found in ambari.properties
* @return value of the property
*/
private String getPropertiesFromContext(String keyPattern, String defaultValue) {
String value;
value = context.getAmbariProperty(String.format(keyPattern, context.getInstanceName()));
if(value == null) {
value = context.getAmbariProperty(String.format(keyPattern, DEFAULT_CONFIG));
}
return value == null ? defaultValue: value;
}
}