mirror of https://github.com/apache/activemq.git
Provide better error messages when directories cannot be created.
git-svn-id: https://svn.apache.org/repos/asf/activemq/trunk@661435 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
b6dc8eeba7
commit
fd184fb79a
|
@ -448,9 +448,9 @@ public class BrokerService implements Service {
|
||||||
BrokerRegistry.getInstance().bind(getBrokerName(), this);
|
BrokerRegistry.getInstance().bind(getBrokerName(), this);
|
||||||
|
|
||||||
|
|
||||||
LOG.info("Using Persistence Adapter: " + getPersistenceAdapter());
|
|
||||||
getPersistenceAdapter().setUsageManager(getProducerSystemUsage());
|
getPersistenceAdapter().setUsageManager(getProducerSystemUsage());
|
||||||
getPersistenceAdapter().setBrokerName(getBrokerName());
|
getPersistenceAdapter().setBrokerName(getBrokerName());
|
||||||
|
LOG.info("Using Persistence Adapter: " + getPersistenceAdapter());
|
||||||
if (deleteAllMessagesOnStartup) {
|
if (deleteAllMessagesOnStartup) {
|
||||||
deleteAllMessages();
|
deleteAllMessages();
|
||||||
}
|
}
|
||||||
|
|
|
@ -103,7 +103,7 @@ public class KahaStore implements Store {
|
||||||
this.mode = mode;
|
this.mode = mode;
|
||||||
this.storeSize = storeSize;
|
this.storeSize = storeSize;
|
||||||
this.directory = directory;
|
this.directory = directory;
|
||||||
this.directory.mkdirs();
|
IOHelper.mkdirs(this.directory);
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void close() throws IOException {
|
public synchronized void close() throws IOException {
|
||||||
|
|
|
@ -40,6 +40,7 @@ import org.apache.activemq.kaha.impl.async.DataFileAppender.WriteCommand;
|
||||||
import org.apache.activemq.kaha.impl.async.DataFileAppender.WriteKey;
|
import org.apache.activemq.kaha.impl.async.DataFileAppender.WriteKey;
|
||||||
import org.apache.activemq.thread.Scheduler;
|
import org.apache.activemq.thread.Scheduler;
|
||||||
import org.apache.activemq.util.ByteSequence;
|
import org.apache.activemq.util.ByteSequence;
|
||||||
|
import org.apache.activemq.util.IOHelper;
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
|
||||||
|
@ -190,15 +191,15 @@ public class AsyncDataManager {
|
||||||
Scheduler.executePeriodically(cleanupTask, 1000 * 30);
|
Scheduler.executePeriodically(cleanupTask, 1000 * 30);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void lock() throws IOException {
|
public void lock() throws IOException {
|
||||||
synchronized (this) {
|
synchronized (this) {
|
||||||
if( controlFile == null ) {
|
if (controlFile == null) {
|
||||||
directory.mkdirs();
|
IOHelper.mkdirs(directory);
|
||||||
controlFile = new ControlFile(new File(directory, filePrefix + "control"), CONTROL_RECORD_MAX_LENGTH);
|
controlFile = new ControlFile(new File(directory, filePrefix + "control"), CONTROL_RECORD_MAX_LENGTH);
|
||||||
}
|
}
|
||||||
controlFile.lock();
|
controlFile.lock();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Location recoveryCheck(DataFile dataFile, Location location) throws IOException {
|
protected Location recoveryCheck(DataFile dataFile, Location location) throws IOException {
|
||||||
if (location == null) {
|
if (location == null) {
|
||||||
|
|
|
@ -183,7 +183,7 @@ public final class IndexManager {
|
||||||
|
|
||||||
protected void initialize() throws IOException {
|
protected void initialize() throws IOException {
|
||||||
file = new File(directory, NAME_PREFIX + IOHelper.toFileSystemSafeName(name) );
|
file = new File(directory, NAME_PREFIX + IOHelper.toFileSystemSafeName(name) );
|
||||||
file.getParentFile().mkdirs();
|
IOHelper.mkdirs(file.getParentFile());
|
||||||
indexFile = new RandomAccessFile(file, mode);
|
indexFile = new RandomAccessFile(file, mode);
|
||||||
reader = new StoreIndexReader(indexFile);
|
reader = new StoreIndexReader(indexFile);
|
||||||
writer = new StoreIndexWriter(indexFile, name, redoLog);
|
writer = new StoreIndexWriter(indexFile, name, redoLog);
|
||||||
|
|
|
@ -436,7 +436,7 @@ public class HashIndex implements Index, HashIndexMBean {
|
||||||
private void openIndexFile() throws IOException {
|
private void openIndexFile() throws IOException {
|
||||||
if (indexFile == null) {
|
if (indexFile == null) {
|
||||||
file = new File(directory, NAME_PREFIX + IOHelper.toFileSystemSafeName(name));
|
file = new File(directory, NAME_PREFIX + IOHelper.toFileSystemSafeName(name));
|
||||||
file.getParentFile().mkdirs();
|
IOHelper.mkdirs(file.getParentFile());
|
||||||
indexFile = new RandomAccessFile(file, "rw");
|
indexFile = new RandomAccessFile(file, "rw");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -404,7 +404,7 @@ public class TreeIndex implements Index {
|
||||||
protected void openIndexFile() throws IOException {
|
protected void openIndexFile() throws IOException {
|
||||||
if (indexFile == null) {
|
if (indexFile == null) {
|
||||||
file = new File(directory, NAME_PREFIX + IOHelper.toFileSystemSafeName(name));
|
file = new File(directory, NAME_PREFIX + IOHelper.toFileSystemSafeName(name));
|
||||||
file.getParentFile().mkdirs();
|
IOHelper.mkdirs(file.getParentFile());
|
||||||
indexFile = new RandomAccessFile(file, "rw");
|
indexFile = new RandomAccessFile(file, "rw");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,6 +30,7 @@ import java.util.concurrent.CopyOnWriteArraySet;
|
||||||
import java.util.concurrent.CountDownLatch;
|
import java.util.concurrent.CountDownLatch;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
import java.util.concurrent.atomic.AtomicLong;
|
import java.util.concurrent.atomic.AtomicLong;
|
||||||
|
|
||||||
import org.apache.activeio.journal.Journal;
|
import org.apache.activeio.journal.Journal;
|
||||||
import org.apache.activemq.broker.BrokerService;
|
import org.apache.activemq.broker.BrokerService;
|
||||||
import org.apache.activemq.broker.BrokerServiceAware;
|
import org.apache.activemq.broker.BrokerServiceAware;
|
||||||
|
@ -164,12 +165,12 @@ public class AMQPersistenceAdapter implements PersistenceAdapter, UsageListener,
|
||||||
if (this.directoryArchive == null) {
|
if (this.directoryArchive == null) {
|
||||||
this.directoryArchive = new File(this.directory,"archive");
|
this.directoryArchive = new File(this.directory,"archive");
|
||||||
}
|
}
|
||||||
this.directory.mkdirs();
|
IOHelper.mkdirs(this.directory);
|
||||||
lockFile = new RandomAccessFile(new File(directory, "lock"), "rw");
|
lockFile = new RandomAccessFile(new File(directory, "lock"), "rw");
|
||||||
lock();
|
lock();
|
||||||
LOG.info("AMQStore starting using directory: " + directory);
|
LOG.info("AMQStore starting using directory: " + directory);
|
||||||
if (archiveDataLogs) {
|
if (archiveDataLogs) {
|
||||||
this.directoryArchive.mkdirs();
|
IOHelper.mkdirs(this.directoryArchive);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.usageManager != null) {
|
if (this.usageManager != null) {
|
||||||
|
|
|
@ -23,6 +23,7 @@ import java.util.Iterator;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.concurrent.atomic.AtomicLong;
|
import java.util.concurrent.atomic.AtomicLong;
|
||||||
|
|
||||||
import org.apache.activemq.broker.ConnectionContext;
|
import org.apache.activemq.broker.ConnectionContext;
|
||||||
import org.apache.activemq.command.ActiveMQDestination;
|
import org.apache.activemq.command.ActiveMQDestination;
|
||||||
import org.apache.activemq.command.ActiveMQQueue;
|
import org.apache.activemq.command.ActiveMQQueue;
|
||||||
|
@ -49,8 +50,6 @@ import org.apache.activemq.util.IOHelper;
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
|
||||||
import sun.misc.Perf.GetPerfAction;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @org.apache.xbean.XBean
|
* @org.apache.xbean.XBean
|
||||||
* @version $Revision: 1.4 $
|
* @version $Revision: 1.4 $
|
||||||
|
@ -328,7 +327,11 @@ public class KahaPersistenceAdapter implements PersistenceAdapter {
|
||||||
file = new File(file, IOHelper.toFileSystemSafeName(brokerName) + "-kahastore");
|
file = new File(file, IOHelper.toFileSystemSafeName(brokerName) + "-kahastore");
|
||||||
setDirectory(file);
|
setDirectory(file);
|
||||||
}
|
}
|
||||||
this.directory.mkdirs();
|
try {
|
||||||
|
IOHelper.mkdirs(this.directory);
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
wireFormat.setCacheEnabled(false);
|
wireFormat.setCacheEnabled(false);
|
||||||
wireFormat.setTightEncodingEnabled(true);
|
wireFormat.setTightEncodingEnabled(true);
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,10 +26,8 @@ import java.util.Set;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
import java.util.concurrent.atomic.AtomicLong;
|
import java.util.concurrent.atomic.AtomicLong;
|
||||||
import java.util.concurrent.locks.Lock;
|
|
||||||
|
|
||||||
import org.apache.activemq.broker.ConnectionContext;
|
import org.apache.activemq.broker.ConnectionContext;
|
||||||
import org.apache.activemq.command.ActiveMQDestination;
|
|
||||||
import org.apache.activemq.command.ActiveMQQueue;
|
import org.apache.activemq.command.ActiveMQQueue;
|
||||||
import org.apache.activemq.command.ActiveMQTopic;
|
import org.apache.activemq.command.ActiveMQTopic;
|
||||||
import org.apache.activemq.command.MessageId;
|
import org.apache.activemq.command.MessageId;
|
||||||
|
@ -41,7 +39,6 @@ import org.apache.activemq.kaha.MapContainer;
|
||||||
import org.apache.activemq.kaha.MessageIdMarshaller;
|
import org.apache.activemq.kaha.MessageIdMarshaller;
|
||||||
import org.apache.activemq.kaha.Store;
|
import org.apache.activemq.kaha.Store;
|
||||||
import org.apache.activemq.kaha.StoreFactory;
|
import org.apache.activemq.kaha.StoreFactory;
|
||||||
import org.apache.activemq.kaha.impl.StoreLockedExcpetion;
|
|
||||||
import org.apache.activemq.kaha.impl.index.hash.HashIndex;
|
import org.apache.activemq.kaha.impl.index.hash.HashIndex;
|
||||||
import org.apache.activemq.store.MessageStore;
|
import org.apache.activemq.store.MessageStore;
|
||||||
import org.apache.activemq.store.ReferenceStore;
|
import org.apache.activemq.store.ReferenceStore;
|
||||||
|
@ -49,6 +46,7 @@ import org.apache.activemq.store.ReferenceStoreAdapter;
|
||||||
import org.apache.activemq.store.TopicMessageStore;
|
import org.apache.activemq.store.TopicMessageStore;
|
||||||
import org.apache.activemq.store.TopicReferenceStore;
|
import org.apache.activemq.store.TopicReferenceStore;
|
||||||
import org.apache.activemq.store.amq.AMQTx;
|
import org.apache.activemq.store.amq.AMQTx;
|
||||||
|
import org.apache.activemq.util.IOHelper;
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
|
||||||
|
@ -295,7 +293,7 @@ public class KahaReferenceStoreAdapter extends KahaPersistenceAdapter implements
|
||||||
protected synchronized Store getStateStore() throws IOException {
|
protected synchronized Store getStateStore() throws IOException {
|
||||||
if (this.stateStore == null) {
|
if (this.stateStore == null) {
|
||||||
File stateDirectory = new File(getDirectory(), "kr-state");
|
File stateDirectory = new File(getDirectory(), "kr-state");
|
||||||
stateDirectory.mkdirs();
|
IOHelper.mkdirs(stateDirectory);
|
||||||
this.stateStore = createStateStore(getDirectory());
|
this.stateStore = createStateStore(getDirectory());
|
||||||
}
|
}
|
||||||
return this.stateStore;
|
return this.stateStore;
|
||||||
|
@ -325,8 +323,8 @@ public class KahaReferenceStoreAdapter extends KahaPersistenceAdapter implements
|
||||||
|
|
||||||
private Store createStateStore(File directory) {
|
private Store createStateStore(File directory) {
|
||||||
File stateDirectory = new File(directory, "state");
|
File stateDirectory = new File(directory, "state");
|
||||||
stateDirectory.mkdirs();
|
|
||||||
try {
|
try {
|
||||||
|
IOHelper.mkdirs(stateDirectory);
|
||||||
return StoreFactory.open(stateDirectory, "rw");
|
return StoreFactory.open(stateDirectory, "rw");
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
LOG.error("Failed to create the state store", e);
|
LOG.error("Failed to create the state store", e);
|
||||||
|
|
|
@ -171,5 +171,17 @@ public final class IOHelper {
|
||||||
MAX_FILE_NAME_LENGTH = Integer.valueOf(System.getProperty("MaximumFileNameLength","64")).intValue();
|
MAX_FILE_NAME_LENGTH = Integer.valueOf(System.getProperty("MaximumFileNameLength","64")).intValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static void mkdirs(File dir) throws IOException {
|
||||||
|
if (dir.exists()) {
|
||||||
|
if (!dir.isDirectory()) {
|
||||||
|
throw new IOException("Failed to create directory '" + dir +"', regular file already existed with that name");
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
if (!dir.mkdirs()) {
|
||||||
|
throw new IOException("Failed to create directory '" + dir+"'");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,7 +45,7 @@ public class HashTest extends TestCase {
|
||||||
protected void setUp() throws Exception {
|
protected void setUp() throws Exception {
|
||||||
super.setUp();
|
super.setUp();
|
||||||
directory = new File(IOHelper.getDefaultDataDirectory());
|
directory = new File(IOHelper.getDefaultDataDirectory());
|
||||||
directory.mkdirs();
|
IOHelper.mkdirs(directory);
|
||||||
IOHelper.deleteChildren(directory);
|
IOHelper.deleteChildren(directory);
|
||||||
indexManager = new IndexManager(directory, "im-hash-test", "rw", null,
|
indexManager = new IndexManager(directory, "im-hash-test", "rw", null,
|
||||||
new AtomicLong());
|
new AtomicLong());
|
||||||
|
|
Loading…
Reference in New Issue