org.apache.jena.tdb.setup.Build Maven / Gradle / Ivy
Show all versions of jena-tdb Show documentation
/*
* 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.jena.tdb.setup;
import org.apache.jena.tdb.TDBFactory ;
import org.apache.jena.tdb.base.file.Location ;
import org.apache.jena.tdb.store.DatasetPrefixesTDB ;
import org.apache.jena.tdb.store.nodetable.NodeTable ;
import org.apache.jena.tdb.store.tupletable.TupleIndex ;
import org.apache.jena.tdb.sys.DatasetControl ;
import org.slf4j.Logger ;
import org.slf4j.LoggerFactory ;
/** Building datastructures on top of the base file
* abstractions of indexes, block managers and object files.
*/
public class Build
{
private static boolean VERBOSE = true ;
private static Logger log = LoggerFactory.getLogger(Build.class) ;
private static StoreParams params = StoreParams.getDftStoreParams() ;
public static TupleIndex openTupleIndex(Location loc, String indexName, String primary, String indexOrder) {
return openTupleIndex(loc, indexName, primary, indexOrder, params) ;
}
public static TupleIndex openTupleIndex(Location location, String indexName, String primary, String indexOrder, StoreParams params) {
return DatasetBuilderStd.stdBuilder().makeTupleIndex(location, indexName, primary, indexOrder, params) ;
}
public static TupleIndex openTupleIndex(Location location, String indexName, String primary, String indexOrder, int readCacheSize, int writeCacheSize, int dftKeyLength, int dftValueLength)
{
// XXX replace with:
// return DatasetBuilderStd.stdBuilder().makeTupleIndex(location, indexName, primary, indexOrder) ;
// All this to BuilderDB.
StoreParamsBuilder spb = StoreParams.builder() ;
spb.blockReadCacheSize(readCacheSize) ;
spb.blockWriteCacheSize(writeCacheSize) ;
return openTupleIndex(location, indexName, primary, indexOrder, spb.build()) ;
}
public static DatasetPrefixesTDB makePrefixes(Location location, DatasetControl policy) {
return DatasetBuilderStd.stdBuilder().makePrefixTable(location, policy, params) ;
}
public static NodeTable makeNodeTable(Location location) {
return makeNodeTable(location, params) ;
}
public static NodeTable makeNodeTable(Location location, StoreParams params) {
DatasetBuilderStd dbBuild = DatasetBuilderStd.stdBuilder() ;
return dbBuild.makeNodeTable(location, params) ;
}
//XXX Reorg all calls to NodeTableBuilder to this argument order.
public static NodeTable makeNodeTable(Location location,
String indexNode2Id, int node2NodeIdCacheSize,
String indexId2Node, int nodeId2NodeCacheSize,
int sizeNodeMissCacheSize) {
StoreParamsBuilder spb = StoreParams.builder() ;
spb.indexNode2Id(indexNode2Id).node2NodeIdCacheSize(node2NodeIdCacheSize) ;
spb.indexId2Node(indexId2Node).nodeId2NodeCacheSize(nodeId2NodeCacheSize) ;
DatasetBuilderStd dbBuild = DatasetBuilderStd.stdBuilder() ;
return makeNodeTable(location, spb.build()) ;
}
/** Choose the StoreParams. This is the policy applied when creating or reattaching to a database.
* (extracted and put here to keep the size of DatasetBuildStd
*
* If the location has parameters in a tdb.cfg file, use them, as modified by any
* application-supplied internal parameters.
*
* Otherwise, if this is a new database, use the application provided
* parameters or if there are no application provided
* parameters, use the system default parameters.
* Write the parameters used to the location in tdb.cfg
*
If this is an existing database and there are no location recorded parameters,
* use system default parameters, modified by application parameters.
*
* Notes:
*
* - Modification involves setting any of the parameters than can vary from run to run.
* These are the cache sizes and the file mode.
*
- Block size: it is critical that this set correctly. Silent corruption
* of a database may occur if this is changed. At the moment, it is not possible to provide
* a complete check of block size.
*
*
* Do not edit store parameters recorded at a location after the database has been created.
* Only the dynamic parameters cna be safely changed. That is better done though the application
* providing some parameters in the {@link TDBFactory} call.
*
* This includes changing filenames, indexing choices and block size.
* Otherwise, the database may be permanetly and irrecovably corrupted.
* You have been warned.
*
* @param location The place where the database is or will be.
* @param isNew Whether the database is being created or whether there is an existing database.
* @param pApp Application-provide store parameters.
* @param pLoc Store parameters foud at the location.
* @param pDft System default store parameters.
* @return StoreParams
*
* @see StoreParams
* @see StoreParamsDynamic
*/
static StoreParams decideStoreParams(Location location, boolean isNew, StoreParams pApp, StoreParams pLoc, StoreParams pDft) {
StoreParams p = null ;
if ( pLoc != null ) {
// pLoc so use it, modify by pApp.
// Covers new and reconnect cases.
p = pLoc ;
if ( pApp != null )
p = StoreParamsBuilder.modify(pLoc, pApp) ;
return p ;
}
// No pLoc.
// Use pApp if available. Write to location if new.
if ( pApp != null ) {
if ( isNew ) {
if ( ! location.isMem() ) {
String filename = location.getPath(StoreParamsConst.TDB_CONFIG_FILE) ;
StoreParamsCodec.write(filename, pApp) ;
}
return pApp ;
}
// Not new : pLoc is implicitly pDft.
return StoreParamsBuilder.modify(pDft, pApp) ;
}
// no pLoc, no pApp
return pDft ;
}
}