/**
* 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 io.horizondb.db.series;
import java.io.IOException;
import java.nio.file.Path;
import static io.horizondb.io.files.FileUtils.createDirectoriesIfNeeded;
import io.horizondb.db.Configuration;
import io.horizondb.db.HorizonDBFiles;
import io.horizondb.db.btree.BTreeStore;
import io.horizondb.io.files.FileUtils;
import io.horizondb.model.schema.DatabaseDefinition;
import io.horizondb.model.schema.TimeSeriesDefinition;
/**
* A <code>TimeSeriesManager</code> that store its data on disk.
*/
public final class OnDiskTimeSeriesManager extends AbstractTimeSeriesManager {
public OnDiskTimeSeriesManager(TimeSeriesPartitionManager partitionManager, Configuration configuration) {
super(partitionManager, configuration);
}
/**
* {@inheritDoc}
*/
@Override
protected BTreeStore<TimeSeriesId, TimeSeriesDefinition> createBTreeStore(Configuration configuration,
int branchingFactor)
throws IOException {
createDirectoriesIfNeeded(HorizonDBFiles.getSystemDirectory(configuration));
Path timeSeriesFile = HorizonDBFiles.getTimeSeriesFile(configuration);
return BTreeStore.newDiskStore(getName(),
timeSeriesFile,
branchingFactor,
TimeSeriesId.getParser(),
TimeSeriesDefinition.getParser());
}
/**
* {@inheritDoc}
*/
@Override
protected void afterCreate(DatabaseDefinition databaseDefinition,
TimeSeriesDefinition timeSeriesDefinition) throws IOException {
Path timeSeriesDirectory = HorizonDBFiles.getTimeSeriesDirectory(this.configuration,
databaseDefinition,
timeSeriesDefinition);
FileUtils.createDirectoriesIfNeeded(timeSeriesDirectory);
}
}