diff options
| author | Keith Wall <kwall@apache.org> | 2014-11-12 18:44:36 +0000 |
|---|---|---|
| committer | Keith Wall <kwall@apache.org> | 2014-11-12 18:44:36 +0000 |
| commit | 349c7d6bf094ae5fb749c0c3920535a5bfec528f (patch) | |
| tree | f73814090ab15940e64a866731cf1e953ab55bd8 /qpid/java | |
| parent | 6ac7fab7b510af5520e2bf62c84c7f262a457c8e (diff) | |
| download | qpid-python-349c7d6bf094ae5fb749c0c3920535a5bfec528f.tar.gz | |
QPID-6224: [Java Broker] BDB / BDB-HA VH now cleans all log files and performs a BDB checkpoint.
* Cleaner thread is disabled whilst manually clean is in operation.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1638936 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java')
4 files changed, 52 insertions, 21 deletions
diff --git a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/AbstractBDBMessageStore.java b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/AbstractBDBMessageStore.java index 87de4eae4e..e8c337a578 100644 --- a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/AbstractBDBMessageStore.java +++ b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/AbstractBDBMessageStore.java @@ -32,12 +32,9 @@ import java.util.UUID; import com.sleepycat.bind.tuple.ByteBinding; import com.sleepycat.bind.tuple.LongBinding; -import com.sleepycat.je.CheckpointConfig; import com.sleepycat.je.Cursor; import com.sleepycat.je.Database; import com.sleepycat.je.DatabaseEntry; -import com.sleepycat.je.DatabaseException; -import com.sleepycat.je.EnvironmentConfig; import com.sleepycat.je.LockConflictException; import com.sleepycat.je.LockMode; import com.sleepycat.je.OperationStatus; @@ -1030,21 +1027,7 @@ public abstract class AbstractBDBMessageStore implements MessageStore private void reduceSizeOnDisk() { - getEnvironmentFacade().getEnvironment().getConfig().setConfigParam(EnvironmentConfig.ENV_RUN_CLEANER, "false"); - boolean cleaned = false; - while (getEnvironmentFacade().getEnvironment().cleanLog() > 0) - { - cleaned = true; - } - if (cleaned) - { - CheckpointConfig force = new CheckpointConfig(); - force.setForce(true); - getEnvironmentFacade().getEnvironment().checkpoint(force); - } - - - getEnvironmentFacade().getEnvironment().getConfig().setConfigParam(EnvironmentConfig.ENV_RUN_CLEANER, "true"); + BDBUtils.runCleaner(getEnvironmentFacade().getEnvironment()); } private long getSizeOnDisk() diff --git a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBUtils.java b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBUtils.java index 2d8b113310..23aefb8118 100644 --- a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBUtils.java +++ b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBUtils.java @@ -19,15 +19,20 @@ package org.apache.qpid.server.store.berkeleydb; +import com.sleepycat.je.CheckpointConfig; import com.sleepycat.je.Cursor; import com.sleepycat.je.DatabaseConfig; -import com.sleepycat.je.DatabaseException; +import com.sleepycat.je.Environment; +import com.sleepycat.je.EnvironmentConfig; import com.sleepycat.je.Transaction; +import org.apache.log4j.Logger; import org.apache.qpid.server.store.StoreException; public class BDBUtils { + private static final Logger LOGGER = Logger.getLogger(BDBUtils.class); + public static final DatabaseConfig DEFAULT_DATABASE_CONFIG = new DatabaseConfig().setTransactional(true).setAllowCreate(true); public static void closeCursorSafely(Cursor cursor, final EnvironmentFacade environmentFacade) throws StoreException @@ -61,4 +66,46 @@ public class BDBUtils environmentFacade.handleDatabaseException("Cannot abort transaction", e); } } + + public synchronized static void runCleaner(final Environment environment) + { + boolean cleanerWasRunning = Boolean.parseBoolean(environment.getConfig().getConfigParam(EnvironmentConfig.ENV_RUN_CLEANER)); + + try + { + if (cleanerWasRunning) + { + environment.getConfig().setConfigParam(EnvironmentConfig.ENV_RUN_CLEANER, Boolean.FALSE.toString()); + } + + if (LOGGER.isDebugEnabled()) + { + LOGGER.debug("Cleaning logs"); + } + + boolean cleaned = false; + while (environment.cleanLog() > 0) + { + cleaned = true; + } + if (cleaned) + { + LOGGER.debug("Cleaned log"); + + CheckpointConfig force = new CheckpointConfig(); + force.setForce(true); + environment.checkpoint(force); + + LOGGER.debug("Checkpoint force complete"); + } + } + finally + { + if (cleanerWasRunning) + { + environment.getConfig().setConfigParam(EnvironmentConfig.ENV_RUN_CLEANER, Boolean.TRUE.toString()); + } + } + + } } diff --git a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/StandardEnvironmentFacade.java b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/StandardEnvironmentFacade.java index 685731b5f0..b95891d575 100644 --- a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/StandardEnvironmentFacade.java +++ b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/StandardEnvironmentFacade.java @@ -256,7 +256,7 @@ public class StandardEnvironmentFacade implements EnvironmentFacade // not get a chance to finish. try { - _environment.cleanLog(); + BDBUtils.runCleaner(_environment); } finally { diff --git a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacade.java b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacade.java index b0b3f61249..387742fbff 100644 --- a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacade.java +++ b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacade.java @@ -70,6 +70,7 @@ import com.sleepycat.je.utilint.PropUtil; import com.sleepycat.je.utilint.VLSN; import org.apache.log4j.Logger; import org.apache.qpid.server.store.StoreException; +import org.apache.qpid.server.store.berkeleydb.BDBUtils; import org.apache.qpid.server.util.ServerScopedRuntimeException; import org.codehaus.jackson.map.ObjectMapper; @@ -919,7 +920,7 @@ public class ReplicatedEnvironmentFacade implements EnvironmentFacade, StateChan { if (_environment.isValid()) { - _environment.cleanLog(); + BDBUtils.runCleaner(_environment); } } finally |
