/** * Copyright 2010 TransPac Software, Inc. * * Licensed 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 com.bixolabs.simpledb; import java.io.IOException; import org.apache.hadoop.mapred.JobConf; import cascading.tuple.Fields; import cascading.util.Util; public class SimpleDBConfiguration { public static final long DEFAULT_CLOSE_TIMEOUT = 300 * 1000L; private static final String DOMAIN_NAME_PROPERTY = makePropertyName("domainName"); private static final String NUM_SHARDS_PROPERTY = makePropertyName("numShards"); private static final String SCHEME_FIELDS_PROPERTY = makePropertyName("schemeFields"); private static final String ITEM_FIELD_NAME_PROPERTY = makePropertyName("itemFieldName"); private static final String QUERY_PROPERTY = makePropertyName("query"); private static final String ACCESS_KEY_ID_PROPERTY = makePropertyName("accessKeyId"); private static final String SECRET_ACCESS_KEY_PROPERTY = makePropertyName("secretAccessKey"); private static final String SELECT_LIMIT_PROPERTY = makePropertyName("selectLimit"); private static final String MAX_THREADS_PROPERTY = makePropertyName("maxThreads"); private static final String SDB_HOST_PROPERTY = makePropertyName("sdbHost"); private static final String CLOSE_TIMEOUT_PROPERTY = makePropertyName("closeTimeout"); private JobConf _conf; public SimpleDBConfiguration(JobConf conf) { _conf = conf; } public void setNumShards(int numShards) { _conf.setInt(NUM_SHARDS_PROPERTY, numShards); } public int getNumShards() { return _conf.getInt(NUM_SHARDS_PROPERTY, 1); } public void setDomainName(String domainName) { _conf.set(DOMAIN_NAME_PROPERTY, domainName); } public String getDomainName() { return _conf.get(DOMAIN_NAME_PROPERTY); } public void setSchemeFields(Fields fields) { _conf.set(SCHEME_FIELDS_PROPERTY, safeSerializeBase64(fields)); } public Fields getSchemeFields() { return (Fields)safeDeserializeBase64(_conf.get(SCHEME_FIELDS_PROPERTY)); } public void setItemFieldName(String itemFieldName) { _conf.set(ITEM_FIELD_NAME_PROPERTY, itemFieldName); } public String getItemFieldName() { return _conf.get(ITEM_FIELD_NAME_PROPERTY); } public void setQuery(String query) { _conf.set(QUERY_PROPERTY, query); } public String getQuery() { return _conf.get(QUERY_PROPERTY); } public void setAccessKeyId(String accessKeyId) { _conf.set(ACCESS_KEY_ID_PROPERTY, accessKeyId); } public String getAccessKeyId() { return _conf.get(ACCESS_KEY_ID_PROPERTY); } public void setSecretAccessKey(String secretAccessKey) { _conf.set(SECRET_ACCESS_KEY_PROPERTY, secretAccessKey); } public String getSecretAccessKey() { return _conf.get(SECRET_ACCESS_KEY_PROPERTY); } public void setSelectLimit(int selectLimit) { _conf.setInt(SELECT_LIMIT_PROPERTY, selectLimit); } public int getSelectLimit() { return _conf.getInt(SELECT_LIMIT_PROPERTY, SimpleDBUtils.NO_SELECT_LIMIT); } public void setMaxThreads(int maxThreads) { _conf.setInt(MAX_THREADS_PROPERTY, maxThreads); } public int getMaxThreads() { return _conf.getInt(MAX_THREADS_PROPERTY, getNumShards()); } public void setSdbHost(String sdbHost) { _conf.set(SDB_HOST_PROPERTY, sdbHost); } public String getSdbHost() { return _conf.get(SDB_HOST_PROPERTY); } public void setCloseTimeout(long closeTimeout) { _conf.setLong(CLOSE_TIMEOUT_PROPERTY, closeTimeout); } public long getCloseTimeout() { return _conf.getLong(CLOSE_TIMEOUT_PROPERTY, DEFAULT_CLOSE_TIMEOUT); } private static String safeSerializeBase64(Object o) { try { return Util.serializeBase64(o); } catch (IOException e) { throw new RuntimeException("Impossible exception", e); } } private static Object safeDeserializeBase64(String s) { try { return Util.deserializeBase64(s); } catch (IOException e) { throw new RuntimeException("Impossible exception", e); } } private static String makePropertyName(String baseName) { return String.format("%s-%s", SimpleDBConfiguration.class.getSimpleName(), baseName); } }