blob: b5fbfe83b6725001626dc311a88bcb545179ea01 [file] [log] [blame]
/*=========================================================================
* Copyright (c) 2002-2014 Pivotal Software, Inc. All Rights Reserved.
* This product is protected by U.S. and international copyright
* and intellectual property laws. Pivotal products are covered by
* one or more patents listed at http://www.pivotal.io/patents.
*========================================================================
*/
package com.gemstone.gemfire.cache.hdfs.internal;
import com.gemstone.gemfire.GemFireConfigException;
import com.gemstone.gemfire.cache.hdfs.HDFSEventQueueAttributes;
import com.gemstone.gemfire.cache.hdfs.HDFSStore;
import com.gemstone.gemfire.cache.hdfs.HDFSStore.HDFSCompactionConfig;
import com.gemstone.gemfire.cache.hdfs.HDFSStoreFactory;
import com.gemstone.gemfire.cache.hdfs.StoreExistsException;
import com.gemstone.gemfire.cache.hdfs.internal.HDFSStoreConfigHolder.AbstractHDFSCompactionConfigHolder;
import com.gemstone.gemfire.internal.i18n.LocalizedStrings;
/**
* HDFS store configuration.
*
* <pre>
* {@code
* <hdfs-store name="" home-dir="" namenode-url="">
* <hdfs-compaction strategy="" auto-compact="" max-input-file-size-mb=""
* min-input-file-count="" max-input-file-count=""
* max-concurrency="" auto-major-compaction=""
* major-compaction-interval-mins="" major-compaction-concurrency=""/>
* </hdfs-store>
* }
* </pre>
*
* @author ashvina
*/
public class HDFSStoreCreation implements HDFSStoreFactory {
protected HDFSStoreConfigHolder configHolder;
public HDFSStoreCreation() {
this(null);
}
/**
* Copy constructor for HDFSStoreCreation
* @param config configuration source for creating this instance
*/
public HDFSStoreCreation(HDFSStoreCreation config) {
this.configHolder = new HDFSStoreConfigHolder(config == null ? null
: config.configHolder);
}
@Override
public HDFSStoreFactory setName(String name) {
configHolder.setName(name);
return this;
}
@Override
public HDFSStoreFactory setNameNodeURL(String namenodeURL) {
configHolder.setNameNodeURL(namenodeURL);
return this;
}
@Override
public HDFSStoreFactory setHomeDir(String homeDir) {
configHolder.setHomeDir(homeDir);
return this;
}
@Override
public HDFSStoreFactory setHDFSClientConfigFile(String clientConfigFile) {
configHolder.setHDFSClientConfigFile(clientConfigFile);
return this;
}
@Override
public HDFSStoreFactory setBlockCacheSize(float percentage) {
configHolder.setBlockCacheSize(percentage);
return this;
}
/**
* Sets the HDFS event queue attributes
* This causes the store to use the {@link HDFSEventQueueAttributes}.
* @param hdfsEventQueueAttrs the attributes of the HDFS Event queue
* @return a reference to this RegionFactory object
*
*/
public HDFSStoreFactory setHDFSEventQueueAttributes(HDFSEventQueueAttributes hdfsEventQueueAttrs) {
configHolder.setHDFSEventQueueAttributes(hdfsEventQueueAttrs);
return this;
}
@Override
public HDFSEventQueueAttributes getHDFSEventQueueAttributes() {
return configHolder.getHDFSEventQueueAttributes();
}
@Override
public HDFSStoreFactory setHDFSCompactionConfig(HDFSCompactionConfig config) {
configHolder.setHDFSCompactionConfig(config);
return this;
}
@Override
public HDFSCompactionConfigFactory createCompactionConfigFactory(String name) {
return configHolder.createCompactionConfigFactory(name);
}
@Override
public HDFSStoreFactory setMaxFileSize(int maxFileSize) {
configHolder.setMaxFileSize(maxFileSize);
return this;
}
@Override
public HDFSStoreFactory setFileRolloverInterval(int count) {
configHolder.setFileRolloverInterval(count);
return this;
}
@Override
public HDFSStoreFactory setMinorCompaction(boolean auto) {
configHolder.setMinorCompaction(auto);
return this;
}
/**
* Config class for compaction configuration. A concrete class must
* extend setters for all configurations it consumes. This class will throw an
* exception for any unexpected configuration. Concrete class must also
* validate the configuration
*
* @author ashvina
*/
public static class HDFSCompactionConfigFactoryImpl implements
HDFSCompactionConfigFactory {
private AbstractHDFSCompactionConfigHolder configHolder;
@Override
public HDFSCompactionConfigFactory setMaxInputFileSizeMB(int size) {
configHolder.setMaxInputFileSizeMB(size);
return this;
}
@Override
public HDFSCompactionConfigFactory setMinInputFileCount(int count) {
configHolder.setMinInputFileCount(count);
return this;
}
@Override
public HDFSCompactionConfigFactory setMaxInputFileCount(int count) {
configHolder.setMaxInputFileCount(count);
return this;
}
@Override
public HDFSCompactionConfigFactory setMaxThreads(int count) {
configHolder.setMaxThreads(count);
return this;
}
@Override
public HDFSCompactionConfigFactory setAutoMajorCompaction(boolean auto) {
configHolder.setAutoMajorCompaction(auto);
return this;
}
@Override
public HDFSCompactionConfigFactory setMajorCompactionIntervalMins(int count) {
configHolder.setMajorCompactionIntervalMins(count);
return this;
}
@Override
public HDFSCompactionConfigFactory setMajorCompactionMaxThreads(int count) {
configHolder.setMajorCompactionMaxThreads(count);
return this;
}
@Override
public HDFSCompactionConfigFactory setOldFilesCleanupIntervalMins(int interval) {
configHolder.setOldFilesCleanupIntervalMins(interval);
return this;
}
@Override
public HDFSCompactionConfig getConfigView() {
return configHolder.getConfigView();
}
@Override
public HDFSCompactionConfig create() throws GemFireConfigException {
HDFSCompactionConfigFactoryImpl config = createInstance(configHolder.getCompactionStrategy());
config.configHolder.copyFrom(this.configHolder);
config.configHolder.validate();
return (HDFSCompactionConfig) config.configHolder;
}
private static HDFSCompactionConfigFactoryImpl createInstance(String name) {
HDFSCompactionConfigFactoryImpl impl = new HDFSCompactionConfigFactoryImpl();
impl.configHolder = AbstractHDFSCompactionConfigHolder.createInstance(name);
return impl;
}
}
/**
* This method should not be called on this class.
* @see HDFSStoreFactory#create(String)
*/
@Override
public HDFSStore create(String name) throws GemFireConfigException,
StoreExistsException {
throw new UnsupportedOperationException();
}
public static void assertIsPositive(String name, int count) {
if (count < 1) {
throw new IllegalArgumentException(
LocalizedStrings.DiskWriteAttributesImpl_0_HAS_TO_BE_POSITIVE_NUMBER_AND_THE_VALUE_GIVEN_1_IS_NOT_ACCEPTABLE
.toLocalizedString(new Object[] { name, count }));
}
}
}