https://issues.apache.org/jira/browse/AMQ-6005 - have plist whack it existing state on start. Start the temp store after the primary persistence adapter which does the locking

This commit is contained in:
gtully 2015-12-10 14:24:03 +00:00
parent d7febddb67
commit 768fa17085
4 changed files with 17 additions and 29 deletions

View File

@ -665,6 +665,19 @@ public class BrokerService implements Service {
}
getPersistenceAdapter().start();
getTempDataStore();
if (tempDataStore != null) {
try {
// start after we have the store lock
tempDataStore.start();
} catch (Exception e) {
RuntimeException exception = new RuntimeException(
"Failed to start temp data store: " + tempDataStore, e);
LOG.error(exception.getLocalizedMessage(), e);
throw exception;
}
}
getJobSchedulerStore();
if (jobSchedulerStore != null) {
try {
@ -1717,32 +1730,11 @@ public class BrokerService implements Service {
throw new RuntimeException(e);
}
boolean result = true;
boolean empty = true;
try {
File directory = getTmpDataDirectory();
if (directory.exists() && directory.isDirectory()) {
File[] files = directory.listFiles();
if (files != null && files.length > 0) {
empty = false;
for (int i = 0; i < files.length; i++) {
File file = files[i];
if (!file.isDirectory()) {
result &= file.delete();
}
}
}
}
if (!empty) {
String str = result ? "Successfully deleted" : "Failed to delete";
LOG.info("{} temporary storage", str);
}
String clazz = "org.apache.activemq.store.kahadb.plist.PListStoreImpl";
this.tempDataStore = (PListStore) getClass().getClassLoader().loadClass(clazz).newInstance();
this.tempDataStore.setDirectory(getTmpDataDirectory());
configureService(tempDataStore);
this.tempDataStore.start();
} catch (Exception e) {
throw new RuntimeException(e);
}
@ -1757,13 +1749,6 @@ public class BrokerService implements Service {
public void setTempDataStore(PListStore tempDataStore) {
this.tempDataStore = tempDataStore;
configureService(tempDataStore);
try {
tempDataStore.start();
} catch (Exception e) {
RuntimeException exception = new RuntimeException("Failed to start provided temp data store: " + tempDataStore, e);
LOG.error(exception.getLocalizedMessage(), e);
throw exception;
}
}
public int getPersistenceThreadPriority() {

View File

@ -276,6 +276,7 @@ public class PListStoreImpl extends ServiceSupport implements BrokerServiceAware
this.directory = new File(IOHelper.getDefaultDataDirectory() + File.pathSeparator + "delayedDB");
}
IOHelper.mkdirs(this.directory);
IOHelper.deleteChildren(this.directory);
lock();
this.journal = new Journal();
this.journal.setDirectory(directory);

View File

@ -39,7 +39,7 @@ public class FilePendingMessageCursorTestSupport {
@After
public void stopBroker() throws Exception {
if (brokerService != null) {
brokerService.getTempDataStore().stop();
brokerService.stop();
}
}
@ -48,6 +48,7 @@ public class FilePendingMessageCursorTestSupport {
brokerService.setUseJmx(false);
SystemUsage usage = brokerService.getSystemUsage();
usage.getTempUsage().setLimit(1025*1024*15);
brokerService.start();
// put something in the temp store to on demand initialise it
PList dud = brokerService.getTempDataStore().getPList("dud");

View File

@ -44,6 +44,7 @@ public class KahaDBFilePendingMessageCursorTest extends FilePendingMessageCursor
String body = new String(new byte[1024]);
Destination destination = new Queue(brokerService, new ActiveMQQueue("Q"), null, new DestinationStatistics(), null);
brokerService.start();
underTest = new FilePendingMessageCursor(brokerService.getBroker(), "test", false);
underTest.setSystemUsage(usage);