| /* |
| * 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); |
| } |
| } |