blob: d1422f666407ee2e8a534897e0818f9159d07405 [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.rya.accumulo;
import org.apache.hadoop.conf.Configuration;
import org.apache.rya.api.RdfCloudTripleStoreConfigurationBuilder;
/**
* This builder class will set all of the core Accumulo-backed Rya configuration
* parameters. Any builder extending this class will have setter methods for all
* of the necessary parameters to connect to an Accumulo backed Rya instance.
*
* @param <B>
* - builder returned by setter methods extending this class
* @param <C>
* - configuration object constructed by the builder extending this
* class
*/
public abstract class AbstractAccumuloRdfConfigurationBuilder<B extends AbstractAccumuloRdfConfigurationBuilder<B, C>, C extends AccumuloRdfConfiguration>
extends RdfCloudTripleStoreConfigurationBuilder<B, C> {
private String user;
private String pass;
private String zoo;
private String instance;
private boolean useMock = false;
private boolean usePrefixHashing = false;
private boolean useComposite = false;
private boolean useSelectivity = false;
public static final String ACCUMULO_USER = "accumulo.user";
public static final String ACCUMULO_PASSWORD = "accumulo.password";
public static final String ACCUMULO_INSTANCE = "accumulo.instance";
public static final String ACCUMULO_AUTHS = "accumulo.auths";
public static final String ACCUMULO_VISIBILITIES = "accumulo.visibilities";
public static final String ACCUMULO_ZOOKEEPERS = "accumulo.zookeepers";
public static final String ACCUMULO_RYA_PREFIX = "accumulo.rya.prefix";
public static final String USE_INFERENCE = "use.inference";
public static final String USE_DISPLAY_QUERY_PLAN = "use.display.plan";
public static final String USE_MOCK_ACCUMULO = "use.mock";
public static final String USE_PREFIX_HASHING = "use.prefix.hashing";
public static final String USE_COUNT_STATS = "use.count.stats";
public static final String USE_JOIN_SELECTIVITY = "use.join.selectivity";
/**
* Sets Accumulo user. This is a required parameter to connect to an
* Accumulo Rya Instance
*
* @param user
* - Accumulo user
*/
public B setAccumuloUser(String user) {
this.user = user;
return confBuilder();
}
/**
* Sets Accumulo user's password. This is a required parameter to connect to
* an Accumulo Rya Instance
*
* @param password
* - password for Accumulo user specified by
* {@link AbstractAccumuloRdfConfigurationBuilder#setAccumuloUser(String)}
* @return specified builder for chaining method invocations
*/
public B setAccumuloPassword(String password) {
this.pass = password;
return confBuilder();
}
/**
* Sets name of Accumulo instance containing Rya tables. This is a required
* parameter to connect to an Accumulo Rya instance.
*
* @param instance
* - Accumulo instance name
* @return specified builder for chaining method invocations
*/
public B setAccumuloInstance(String instance) {
this.instance = instance;
return confBuilder();
}
/**
* Sets Accumulo Zookeepers for instance specified by
* {@link AbstractAccumuloRdfConfigurationBuilder#setAccumuloInstance(String)}
* . This is a required parameter if
* {@link AbstractAccumuloRdfConfigurationBuilder#useMock} is false.
*
* @param zoo
* - Accumuo Zookeepers
* @return specified builder for chaining method invocations
*/
public B setAccumuloZooKeepers(String zoo) {
this.zoo = zoo;
return confBuilder();
}
/**
* Specifies whether or not to use a mock version of Accumulo for the Rya
* Instance. The default value is false. If
* {@link AbstractAccumuloRdfConfigurationBuilder#useMock} is false, then
* Accumulo Zookeepers must be specified.
*
* @param useMock
* @return specified builder for chaining method invocations
*/
public B setUseMockAccumulo(boolean useMock) {
this.useMock = useMock;
return confBuilder();
}
/**
* Specifies whether to use prefix hashing as a table design optimization to
* prevent hot spotting. The default value is false.
*
* @param useHash
* - use prefix hashing to prevent hot spotting
* @return specified builder for chaining method invocations
*/
public B setUseAccumuloPrefixHashing(boolean useHash) {
this.usePrefixHashing = useHash;
return confBuilder();
}
/**
* Specifies whether or not to use triple cardinalities for query
* optimization. This feature can only be used if the prospects table has
* been created by the prospector and the default value is false.
*
* @param useCompositeCardinality
* - use prospects statistics table for query optimization
* @return specified builder for chaining method invocations
*/
public B setUseCompositeCardinality(boolean useCompositeCardinality) {
this.useComposite = useCompositeCardinality;
return confBuilder();
}
/**
* Specifies whether or not to use the join selectivity for query
* optimization. This feature can only be used if the selectivity table has
* been created and the default value is false.
*
* @param useJoinSelectivity
* - use join selectivity statistics table for query optimization
* @return specified builder for chaining method invocations
*/
public B setUseJoinSelectivity(boolean useJoinSelectivity) {
this.useSelectivity = useJoinSelectivity;
return confBuilder();
}
/**
* @return extension of {@link AccumuloRdfConfiguration} with specified parameters set
*/
public C build() {
return getConf(super.build());
}
/**
* Assigns builder values to appropriate parameters within the {@link Configuration} object.
*
* @param conf - Configuration object
* @return - Configuration object with parameters set
*/
private C getConf(C conf) {
conf.setAccumuloInstance(instance);
conf.setAccumuloPassword(pass);
conf.setAccumuloUser(user);
if (!useMock) {
conf.setAccumuloZookeepers(zoo);
}
conf.setUseMockAccumulo(useMock);
conf.setPrefixRowsWithHash(usePrefixHashing);
if (useSelectivity) {
conf.setUseStats(true);
conf.setCompositeCardinality(true);
conf.setUseSelectivity(useSelectivity);
} else if (useComposite) {
conf.setUseStats(true);
conf.setCompositeCardinality(useComposite);
}
return conf;
}
}