/* * Copyright (c) 2002-2010 "Neo Technology," * Network Engine for Objects in Lund AB [http://neotechnology.com] * * This file is part of Neo4j. * * Neo4j is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.neo4j.kernel; import java.util.Map; import org.neo4j.graphdb.GraphDatabaseService; import org.neo4j.kernel.impl.cache.AdaptiveCacheManager; import org.neo4j.kernel.impl.core.GraphDbModule; import org.neo4j.kernel.impl.core.KernelPanicEventGenerator; import org.neo4j.kernel.impl.core.LockReleaser; import org.neo4j.kernel.impl.management.Description; import org.neo4j.kernel.impl.persistence.IdGeneratorModule; import org.neo4j.kernel.impl.persistence.PersistenceModule; import org.neo4j.kernel.impl.transaction.LockManager; import org.neo4j.kernel.impl.transaction.TxModule; /** * A non-standard configuration object. */ public class Config { static final String NIO_NEO_DB_CLASS = "org.neo4j.kernel.impl.nioneo.xa.NeoStoreXaDataSource"; public static final String DEFAULT_DATA_SOURCE_NAME = "nioneodb"; static final String LUCENE_DS_CLASS = "org.neo4j.index.lucene.LuceneDataSource"; static final String LUCENE_FULLTEXT_DS_CLASS = "org.neo4j.index.lucene.LuceneFulltextDataSource"; @Description( "Tell Neo4j to use memory mapped buffers for accessing the native storage layer" ) public static final String USE_MEMORY_MAPPED_BUFFERS = "use_memory_mapped_buffers"; @Description( "Print out the effective Neo4j configuration after startup" ) public static final String DUMP_CONFIGURATION = "dump_configuration"; @Description( "Make Neo4j keep the logical transaction logs for being able to backup the database" ) public static final String KEEP_LOGICAL_LOGS = "keep_logical_logs"; @Description( "Only allow read operations from this Neo4j instance" ) public static final String READ_ONLY = "read_only"; @Description( "Relative path for where the Neo4j storage directory is located" ) public static final String STORAGE_DIRECTORY = "store_dir"; @Description( "Use a quick approach for rebuilding the ID generators. " + "This give quicker recovery time, but will limit the ability to reuse the space of deleted entities." ) public static final String REBUILD_IDGENERATORS_FAST = "rebuild_idgenerators_fast"; @Description( "The size to allocate for memory mapping the node store" ) public static final String NODE_STORE_MMAP_SIZE = "neostore.nodestore.db.mapped_memory"; @Description( "The size to allocate for memory mapping the array property store" ) public static final String ARRAY_PROPERTY_STORE_MMAP_SIZE = "neostore.propertystore.db.arrays.mapped_memory"; @Description( "The size to allocate for memory mapping the store for property key strings" ) public static final String PROPERTY_INDEX_KEY_STORE_MMAP_SIZE = "neostore.propertystore.db.index.keys.mapped_memory"; @Description( "The size to allocate for memory mapping the store for property key indexes" ) public static final String PROPERTY_INDEX_STORE_MMAP_SIZE = "neostore.propertystore.db.index.mapped_memory"; @Description( "The size to allocate for memory mapping the property value store" ) public static final String PROPERTY_STORE_MMAP_SIZE = "neostore.propertystore.db.mapped_memory"; @Description( "The size to allocate for memory mapping the string property store" ) public static final String STRING_PROPERTY_STORE_MMAP_SIZE = "neostore.propertystore.db.strings.mapped_memory"; @Description( "The size to allocate for memory mapping the relationship store" ) public static final String RELATIONSHIP_STORE_MMAP_SIZE = "neostore.relationshipstore.db.mapped_memory"; @Description( "Relative path for where the Neo4j logical log is located" ) public static final String LOGICAL_LOG = "logical_log"; @Description( "Relative path for where the Neo4j storage information file is located" ) public static final String NEO_STORE = "neo_store"; private AdaptiveCacheManager cacheManager; private TxModule txModule; private LockManager lockManager; private LockReleaser lockReleaser; private PersistenceModule persistenceModule; private boolean create = false; private String persistenceSourceName; private IdGeneratorModule idGeneratorModule; private GraphDbModule graphDbModule; private String storeDir; private final Map<Object, Object> params; private final KernelPanicEventGenerator kpe; private final boolean readOnly; private final boolean backupSlave; Config( GraphDatabaseService graphDb, String storeDir, Map<Object, Object> params, KernelPanicEventGenerator kpe ) { this.kpe = kpe; this.storeDir = storeDir; this.params = params; String readOnlyStr = (String) params.get( READ_ONLY ); if ( readOnlyStr != null && readOnlyStr.toLowerCase().equals( "true" ) ) { readOnly = true; } else { readOnly = false; } String backupSlaveStr = (String) params.get( "backup_slave" ); if ( backupSlaveStr != null && backupSlaveStr.toLowerCase().equals( "true" ) ) { backupSlave = true; } else { backupSlave = false; } params.put( "read_only", readOnly ); cacheManager = new AdaptiveCacheManager(); if ( !readOnly ) { txModule = new TxModule( this.storeDir, kpe ); } else { txModule = new TxModule( true, kpe ); } lockManager = new LockManager( txModule.getTxManager() ); lockReleaser = new LockReleaser( lockManager, txModule.getTxManager() ); persistenceModule = new PersistenceModule(); idGeneratorModule = new IdGeneratorModule(); graphDbModule = new GraphDbModule( graphDb, cacheManager, lockManager, txModule.getTxManager(), idGeneratorModule.getIdGenerator(), readOnly ); } void setPersistenceSource( String name, boolean create ) { persistenceSourceName = name; this.create = create; } String getPersistenceSource() { return persistenceSourceName; } boolean getCreatePersistenceSource() { return create; } public TxModule getTxModule() { return txModule; } public GraphDbModule getGraphDbModule() { return graphDbModule; } public PersistenceModule getPersistenceModule() { return persistenceModule; } IdGeneratorModule getIdGeneratorModule() { return idGeneratorModule; } public LockManager getLockManager() { return lockManager; } public LockReleaser getLockReleaser() { return lockReleaser; } public Map<Object, Object> getParams() { return this.params; } boolean isReadOnly() { return readOnly; } boolean isBackupSlave() { return backupSlave; } }