blob: 289081b1ed216de27f349385550832b146aa14cb [file] [log] [blame]
/*
* 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 org.apache.bookkeeper.stream.storage.conf;
import java.io.File;
import java.util.concurrent.TimeUnit;
import org.apache.bookkeeper.common.conf.ComponentConfiguration;
import org.apache.commons.configuration.CompositeConfiguration;
/**
* Storage related configuration settings.
*/
public class StorageConfiguration extends ComponentConfiguration {
private static final String COMPONENT_PREFIX = "storage" + DELIMITER;
private static final String RANGE_STORE_DIRS = "range.store.dirs";
private static final String SERVE_READONLY_TABLES = "serve.readonly.tables";
private static final String CONTROLLER_SCHEDULE_INTERVAL_MS = "cluster.controller.schedule.interval.ms";
private static final String CHECKPOINT_CHECKSUM_ENABLE = "checkpoint.checksum.enable";
private static final String CHECKPOINT_CHECKSUM_COMPATIBLE = "checkpoint.checksum.compatible";
private static final String LOCAL_STORAGE_CLEANUP_ENABLE = "local.storage.cleanup.enable";
public StorageConfiguration(CompositeConfiguration conf) {
super(conf, COMPONENT_PREFIX);
}
public StorageConfiguration setRangeStoreDirNames(String[] dirNames) {
this.setProperty(RANGE_STORE_DIRS, dirNames);
return this;
}
private String[] getRangeStoreDirNames() {
String[] rangeStoreDirs = getStringArray(RANGE_STORE_DIRS);
if (null == rangeStoreDirs || 0 == rangeStoreDirs.length) {
return new String[]{"data/bookkeeper/ranges"};
} else {
return rangeStoreDirs;
}
}
public File[] getRangeStoreDirs() {
String[] rangeStoreDirNames = getRangeStoreDirNames();
File[] rangeStoreDirs = new File[rangeStoreDirNames.length];
for (int i = 0; i < rangeStoreDirNames.length; i++) {
rangeStoreDirs[i] = new File(rangeStoreDirNames[i]);
}
return rangeStoreDirs;
}
public StorageConfiguration setServeReadOnlyTables(boolean serveReadOnlyTables) {
this.setProperty(SERVE_READONLY_TABLES, serveReadOnlyTables);
return this;
}
public boolean getServeReadOnlyTables() {
return getBoolean(SERVE_READONLY_TABLES, false);
}
/**
* Get the cluster controller schedule interval in milliseconds. The default value is 30 seconds.
*
* @return cluster controller schedule interval, in milliseconds.
*/
public long getClusterControllerScheduleIntervalMs() {
return getLong(CONTROLLER_SCHEDULE_INTERVAL_MS, TimeUnit.SECONDS.toMillis(30));
}
/**
* Set the cluster controller schedule interval.
*
* @param time time value
* @param timeUnit time unit
* @return storage configuration
*/
public StorageConfiguration setClusterControllerScheduleInterval(long time, TimeUnit timeUnit) {
setProperty(CONTROLLER_SCHEDULE_INTERVAL_MS, timeUnit.toMillis(time));
return this;
}
public boolean getCheckpointChecksumEnable() {
return getBoolean(CHECKPOINT_CHECKSUM_ENABLE, true);
}
public boolean getCheckpointChecksumCompatible() {
return getBoolean(CHECKPOINT_CHECKSUM_COMPATIBLE, true);
}
public boolean getLocalStorageCleanupEnable() {
return getBoolean(LOCAL_STORAGE_CLEANUP_ENABLE, true);
}
}