git-svn-id: https://svn.apache.org/repos/asf/activemq/trunk@687287 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Robert Davies 2008-08-20 08:37:28 +00:00
parent 43880af18a
commit 67d64862f8
2 changed files with 84 additions and 3 deletions

View File

@ -130,6 +130,8 @@ public class AMQPersistenceAdapter implements PersistenceAdapter, UsageListener,
private boolean failIfJournalIsLocked;
private boolean lockLogged;
private boolean lockAquired;
private boolean recoverReferenceStore=true;
private boolean forceRecoverReferenceStore=false;
public String getBrokerName() {
return this.brokerName;
@ -247,15 +249,19 @@ public class AMQPersistenceAdapter implements PersistenceAdapter, UsageListener,
// store, but they still
// need to be recovered when the broker starts up.
if (!referenceStoreAdapter.isStoreValid()) {
if (isForceRecoverReferenceStore()
|| (isRecoverReferenceStore() && !referenceStoreAdapter
.isStoreValid())) {
LOG.warn("The ReferenceStore is not valid - recovering ...");
recover();
LOG.info("Finished recovering the ReferenceStore");
} else {
Location location = writeTraceMessage("RECOVERED " + new Date(), true);
Location location = writeTraceMessage("RECOVERED " + new Date(),
true);
asyncDataManager.setMark(location, true);
// recover transactions
getTransactionStore().setPreparedTransactions(referenceStoreAdapter.retrievePreparedState());
getTransactionStore().setPreparedTransactions(
referenceStoreAdapter.retrievePreparedState());
}
// Do a checkpoint periodically.
@ -930,6 +936,34 @@ public class AMQPersistenceAdapter implements PersistenceAdapter, UsageListener,
public void setDisableLocking(boolean disableLocking) {
this.disableLocking = disableLocking;
}
/**
* @return the recoverReferenceStore
*/
public boolean isRecoverReferenceStore() {
return recoverReferenceStore;
}
/**
* @param recoverReferenceStore the recoverReferenceStore to set
*/
public void setRecoverReferenceStore(boolean recoverReferenceStore) {
this.recoverReferenceStore = recoverReferenceStore;
}
/**
* @return the forceRecoverReferenceStore
*/
public boolean isForceRecoverReferenceStore() {
return forceRecoverReferenceStore;
}
/**
* @param forceRecoverReferenceStore the forceRecoverReferenceStore to set
*/
public void setForceRecoverReferenceStore(boolean forceRecoverReferenceStore) {
this.forceRecoverReferenceStore = forceRecoverReferenceStore;
}
protected void addInProgressDataFile(AMQMessageStore store,int dataFileId) {

View File

@ -52,6 +52,9 @@ public class AMQPersistenceAdapterFactory implements PersistenceAdapterFactory {
private int indexMaxBinSize = HashIndex.MAXIMUM_CAPACITY;
private int indexLoadFactor = HashIndex.DEFAULT_LOAD_FACTOR;
private int maxReferenceFileLength=DEFAULT_MAX_REFERNCE_FILE_LENGTH;
private boolean recoverReferenceStore=true;
private boolean forceRecoverReferenceStore=false;
private long checkpointInterval = 1000 * 20;
/**
@ -75,6 +78,8 @@ public class AMQPersistenceAdapterFactory implements PersistenceAdapterFactory {
result.setIndexMaxBinSize(getIndexMaxBinSize());
result.setIndexLoadFactor(getIndexLoadFactor());
result.setMaxReferenceFileLength(getMaxReferenceFileLength());
result.setForceRecoverReferenceStore(isForceRecoverReferenceStore());
result.setRecoverReferenceStore(isRecoverReferenceStore());
return result;
}
@ -286,4 +291,46 @@ public class AMQPersistenceAdapterFactory implements PersistenceAdapterFactory {
public void setMaxReferenceFileLength(int maxReferenceFileLength) {
this.maxReferenceFileLength = maxReferenceFileLength;
}
/**
* @return the recoverReferenceStore
*/
public boolean isRecoverReferenceStore() {
return recoverReferenceStore;
}
/**
* @param recoverReferenceStore the recoverReferenceStore to set
*/
public void setRecoverReferenceStore(boolean recoverReferenceStore) {
this.recoverReferenceStore = recoverReferenceStore;
}
/**
* @return the forceRecoverReferenceStore
*/
public boolean isForceRecoverReferenceStore() {
return forceRecoverReferenceStore;
}
/**
* @param forceRecoverReferenceStore the forceRecoverReferenceStore to set
*/
public void setForceRecoverReferenceStore(boolean forceRecoverReferenceStore) {
this.forceRecoverReferenceStore = forceRecoverReferenceStore;
}
/**
* @return the checkpointInterval
*/
public long getCheckpointInterval() {
return checkpointInterval;
}
/**
* @param checkpointInterval the checkpointInterval to set
*/
public void setCheckpointInterval(long checkpointInterval) {
this.checkpointInterval = checkpointInterval;
}
}