summaryrefslogtreecommitdiff
path: root/qpid/java
diff options
context:
space:
mode:
authorKeith Wall <kwall@apache.org>2014-11-12 18:44:36 +0000
committerKeith Wall <kwall@apache.org>2014-11-12 18:44:36 +0000
commit349c7d6bf094ae5fb749c0c3920535a5bfec528f (patch)
treef73814090ab15940e64a866731cf1e953ab55bd8 /qpid/java
parent6ac7fab7b510af5520e2bf62c84c7f262a457c8e (diff)
downloadqpid-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')
-rw-r--r--qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/AbstractBDBMessageStore.java19
-rw-r--r--qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/BDBUtils.java49
-rw-r--r--qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/StandardEnvironmentFacade.java2
-rw-r--r--qpid/java/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacade.java3
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