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:
Hiram R. Chirino 2008-05-29 19:11:20 +00:00
parent b6dc8eeba7
commit fd184fb79a
11 changed files with 39 additions and 24 deletions

View File

@ -448,9 +448,9 @@ public class BrokerService implements Service {
BrokerRegistry.getInstance().bind(getBrokerName(), this);
LOG.info("Using Persistence Adapter: " + getPersistenceAdapter());
getPersistenceAdapter().setUsageManager(getProducerSystemUsage());
getPersistenceAdapter().setBrokerName(getBrokerName());
LOG.info("Using Persistence Adapter: " + getPersistenceAdapter());
if (deleteAllMessagesOnStartup) {
deleteAllMessages();
}

View File

@ -103,7 +103,7 @@ public class KahaStore implements Store {
this.mode = mode;
this.storeSize = storeSize;
this.directory = directory;
this.directory.mkdirs();
IOHelper.mkdirs(this.directory);
}
public synchronized void close() throws IOException {

View File

@ -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.thread.Scheduler;
import org.apache.activemq.util.ByteSequence;
import org.apache.activemq.util.IOHelper;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@ -190,15 +191,15 @@ public class AsyncDataManager {
Scheduler.executePeriodically(cleanupTask, 1000 * 30);
}
public void lock() throws IOException {
synchronized (this) {
if( controlFile == null ) {
directory.mkdirs();
controlFile = new ControlFile(new File(directory, filePrefix + "control"), CONTROL_RECORD_MAX_LENGTH);
}
public void lock() throws IOException {
synchronized (this) {
if (controlFile == null) {
IOHelper.mkdirs(directory);
controlFile = new ControlFile(new File(directory, filePrefix + "control"), CONTROL_RECORD_MAX_LENGTH);
}
controlFile.lock();
}
}
}
protected Location recoveryCheck(DataFile dataFile, Location location) throws IOException {
if (location == null) {

View File

@ -183,7 +183,7 @@ public final class IndexManager {
protected void initialize() throws IOException {
file = new File(directory, NAME_PREFIX + IOHelper.toFileSystemSafeName(name) );
file.getParentFile().mkdirs();
IOHelper.mkdirs(file.getParentFile());
indexFile = new RandomAccessFile(file, mode);
reader = new StoreIndexReader(indexFile);
writer = new StoreIndexWriter(indexFile, name, redoLog);

View File

@ -436,7 +436,7 @@ public class HashIndex implements Index, HashIndexMBean {
private void openIndexFile() throws IOException {
if (indexFile == null) {
file = new File(directory, NAME_PREFIX + IOHelper.toFileSystemSafeName(name));
file.getParentFile().mkdirs();
IOHelper.mkdirs(file.getParentFile());
indexFile = new RandomAccessFile(file, "rw");
}
}

View File

@ -404,7 +404,7 @@ public class TreeIndex implements Index {
protected void openIndexFile() throws IOException {
if (indexFile == null) {
file = new File(directory, NAME_PREFIX + IOHelper.toFileSystemSafeName(name));
file.getParentFile().mkdirs();
IOHelper.mkdirs(file.getParentFile());
indexFile = new RandomAccessFile(file, "rw");
}
}

View File

@ -30,6 +30,7 @@ import java.util.concurrent.CopyOnWriteArraySet;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicLong;
import org.apache.activeio.journal.Journal;
import org.apache.activemq.broker.BrokerService;
import org.apache.activemq.broker.BrokerServiceAware;
@ -164,12 +165,12 @@ public class AMQPersistenceAdapter implements PersistenceAdapter, UsageListener,
if (this.directoryArchive == null) {
this.directoryArchive = new File(this.directory,"archive");
}
this.directory.mkdirs();
IOHelper.mkdirs(this.directory);
lockFile = new RandomAccessFile(new File(directory, "lock"), "rw");
lock();
LOG.info("AMQStore starting using directory: " + directory);
if (archiveDataLogs) {
this.directoryArchive.mkdirs();
IOHelper.mkdirs(this.directoryArchive);
}
if (this.usageManager != null) {

View File

@ -23,6 +23,7 @@ import java.util.Iterator;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicLong;
import org.apache.activemq.broker.ConnectionContext;
import org.apache.activemq.command.ActiveMQDestination;
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.LogFactory;
import sun.misc.Perf.GetPerfAction;
/**
* @org.apache.xbean.XBean
* @version $Revision: 1.4 $
@ -328,7 +327,11 @@ public class KahaPersistenceAdapter implements PersistenceAdapter {
file = new File(file, IOHelper.toFileSystemSafeName(brokerName) + "-kahastore");
setDirectory(file);
}
this.directory.mkdirs();
try {
IOHelper.mkdirs(this.directory);
} catch (IOException e) {
throw new RuntimeException(e);
}
wireFormat.setCacheEnabled(false);
wireFormat.setTightEncodingEnabled(true);
}

View File

@ -26,10 +26,8 @@ import java.util.Set;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong;
import java.util.concurrent.locks.Lock;
import org.apache.activemq.broker.ConnectionContext;
import org.apache.activemq.command.ActiveMQDestination;
import org.apache.activemq.command.ActiveMQQueue;
import org.apache.activemq.command.ActiveMQTopic;
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.Store;
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.store.MessageStore;
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.TopicReferenceStore;
import org.apache.activemq.store.amq.AMQTx;
import org.apache.activemq.util.IOHelper;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@ -295,7 +293,7 @@ public class KahaReferenceStoreAdapter extends KahaPersistenceAdapter implements
protected synchronized Store getStateStore() throws IOException {
if (this.stateStore == null) {
File stateDirectory = new File(getDirectory(), "kr-state");
stateDirectory.mkdirs();
IOHelper.mkdirs(stateDirectory);
this.stateStore = createStateStore(getDirectory());
}
return this.stateStore;
@ -325,8 +323,8 @@ public class KahaReferenceStoreAdapter extends KahaPersistenceAdapter implements
private Store createStateStore(File directory) {
File stateDirectory = new File(directory, "state");
stateDirectory.mkdirs();
try {
IOHelper.mkdirs(stateDirectory);
return StoreFactory.open(stateDirectory, "rw");
} catch (IOException e) {
LOG.error("Failed to create the state store", e);

View File

@ -171,5 +171,17 @@ public final class IOHelper {
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+"'");
}
}
}
}

View File

@ -45,7 +45,7 @@ public class HashTest extends TestCase {
protected void setUp() throws Exception {
super.setUp();
directory = new File(IOHelper.getDefaultDataDirectory());
directory.mkdirs();
IOHelper.mkdirs(directory);
IOHelper.deleteChildren(directory);
indexManager = new IndexManager(directory, "im-hash-test", "rw", null,
new AtomicLong());