diff --git a/commons/src/main/java/org/archive/bdb/BdbModule.java b/commons/src/main/java/org/archive/bdb/BdbModule.java index 71602a55..e7cdeaf2 100644 --- a/commons/src/main/java/org/archive/bdb/BdbModule.java +++ b/commons/src/main/java/org/archive/bdb/BdbModule.java @@ -329,6 +329,12 @@ Serializable, Closeable { "BdbModule not started; as a Lifecycle bean it must not be an inner bean."); } if (databases.containsKey(name)) { + DatabasePlusConfig dpc = databases.get(name); + if(dpc.config == config) { + // object-identical configs: OK to share DB + return dpc.database; + } + // unshared config object: might be name collision; error throw new IllegalStateException("Database already exists: " +name); } diff --git a/engine/src/main/java/org/archive/crawler/frontier/precedence/PrecedenceLoader.java b/engine/src/main/java/org/archive/crawler/frontier/precedence/PrecedenceLoader.java index 48c2815e..9f28c331 100644 --- a/engine/src/main/java/org/archive/crawler/frontier/precedence/PrecedenceLoader.java +++ b/engine/src/main/java/org/archive/crawler/frontier/precedence/PrecedenceLoader.java @@ -110,7 +110,7 @@ public class PrecedenceLoader { Database historyDB = targetEnv.openDatabase( null, PersistProcessor.URI_HISTORY_DBNAME, - PersistProcessor.historyDatabaseConfig().toDatabaseConfig()); + PersistProcessor.HISTORY_DB_CONFIG.toDatabaseConfig()); StoredSortedMap historyMap = new StoredSortedMap(historyDB, new StringBinding(), new SerialBinding(classCatalog, Map.class), true); diff --git a/engine/src/main/java/org/archive/crawler/frontier/precedence/PreloadedUriPrecedencePolicy.java b/engine/src/main/java/org/archive/crawler/frontier/precedence/PreloadedUriPrecedencePolicy.java index ac47e06a..f8147fdc 100644 --- a/engine/src/main/java/org/archive/crawler/frontier/precedence/PreloadedUriPrecedencePolicy.java +++ b/engine/src/main/java/org/archive/crawler/frontier/precedence/PreloadedUriPrecedencePolicy.java @@ -79,7 +79,7 @@ implements Lifecycle { StoredSortedMap historyMap; try { StoredClassCatalog classCatalog = bdb.getClassCatalog(); - BdbModule.BdbConfig dbConfig = PersistProcessor.historyDatabaseConfig(); + BdbModule.BdbConfig dbConfig = PersistProcessor.HISTORY_DB_CONFIG; historyDb = bdb.openManagedDatabase(dbName, dbConfig, true); historyMap = new StoredSortedMap(historyDb, diff --git a/modules/src/main/java/org/archive/modules/recrawl/PersistOnlineProcessor.java b/modules/src/main/java/org/archive/modules/recrawl/PersistOnlineProcessor.java index 84dfcc2b..ece88d04 100644 --- a/modules/src/main/java/org/archive/modules/recrawl/PersistOnlineProcessor.java +++ b/modules/src/main/java/org/archive/modules/recrawl/PersistOnlineProcessor.java @@ -74,7 +74,7 @@ implements Lifecycle { StoredSortedMap historyMap; try { StoredClassCatalog classCatalog = bdb.getClassCatalog(); - BdbModule.BdbConfig dbConfig = historyDatabaseConfig(); + BdbModule.BdbConfig dbConfig = HISTORY_DB_CONFIG; historyDb = bdb.openManagedDatabase(getHistoryDbName(), dbConfig, true); historyMap = @@ -94,11 +94,10 @@ implements Lifecycle { } public void stop() { - // TODO leave this cleanup to BdbModule? if (!isRunning()) { return; } - bdb.closeDatabase(historyDb); + // leave other cleanup to BdbModule historyDb = null; } diff --git a/modules/src/main/java/org/archive/modules/recrawl/PersistProcessor.java b/modules/src/main/java/org/archive/modules/recrawl/PersistProcessor.java index edd5ece4..6596805f 100644 --- a/modules/src/main/java/org/archive/modules/recrawl/PersistProcessor.java +++ b/modules/src/main/java/org/archive/modules/recrawl/PersistProcessor.java @@ -73,15 +73,13 @@ public abstract class PersistProcessor extends Processor { /** name of history Database */ public static final String URI_HISTORY_DBNAME = "uri_history"; - /** - * @return DatabaseConfig for history Database - */ - public static BdbModule.BdbConfig historyDatabaseConfig() { + public static final BdbModule.BdbConfig HISTORY_DB_CONFIG; + static { BdbModule.BdbConfig dbConfig = new BdbModule.BdbConfig(); dbConfig.setTransactional(false); dbConfig.setAllowCreate(true); dbConfig.setDeferredWrite(true); - return dbConfig; + HISTORY_DB_CONFIG = dbConfig; } public PersistProcessor() { @@ -145,7 +143,7 @@ public abstract class PersistProcessor extends Processor { EnhancedEnvironment sourceEnv = setupEnvironment(sourceDir, true); StoredClassCatalog sourceClassCatalog = sourceEnv.getClassCatalog(); Database sourceHistoryDB = sourceEnv.openDatabase( - null, URI_HISTORY_DBNAME, historyDatabaseConfig().toDatabaseConfig()); + null, URI_HISTORY_DBNAME, HISTORY_DB_CONFIG.toDatabaseConfig()); StoredSortedMap sourceHistoryMap = new StoredSortedMap(sourceHistoryDB, new StringBinding(), new SerialBinding(sourceClassCatalog, Map.class), true); @@ -244,7 +242,7 @@ public abstract class PersistProcessor extends Processor { targetEnv = setupEnvironment(envFile); classCatalog = targetEnv.getClassCatalog(); historyDB = targetEnv.openDatabase(null, URI_HISTORY_DBNAME, - historyDatabaseConfig().toDatabaseConfig()); + HISTORY_DB_CONFIG.toDatabaseConfig()); historyMap = new StoredSortedMap(historyDB, new StringBinding(), new SerialBinding(classCatalog, Map.class), true);