You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ch...@apache.org on 2007/08/30 22:49:42 UTC

svn commit: r571306 - in /activemq/trunk/activemq-core/src/main/java/org/apache/activemq: broker/ kaha/ kaha/impl/ kaha/impl/index/ kaha/impl/index/hash/ kaha/impl/index/tree/ store/amq/ store/kahadaptor/ util/

Author: chirino
Date: Thu Aug 30 13:49:41 2007
New Revision: 571306

URL: http://svn.apache.org/viewvc?rev=571306&view=rev
Log:
Satitized the filenames that the KahaStore uses. 

Modified:
    activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/BrokerService.java
    activemq/trunk/activemq-core/src/main/java/org/apache/activemq/kaha/StoreFactory.java
    activemq/trunk/activemq-core/src/main/java/org/apache/activemq/kaha/impl/KahaStore.java
    activemq/trunk/activemq-core/src/main/java/org/apache/activemq/kaha/impl/index/IndexManager.java
    activemq/trunk/activemq-core/src/main/java/org/apache/activemq/kaha/impl/index/hash/HashIndex.java
    activemq/trunk/activemq-core/src/main/java/org/apache/activemq/kaha/impl/index/tree/TreeIndex.java
    activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/amq/AMQPersistenceAdapter.java
    activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/amq/AMQPersistenceAdapterFactory.java
    activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/kahadaptor/KahaPersistenceAdapter.java
    activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/kahadaptor/KahaReferenceStoreAdapter.java
    activemq/trunk/activemq-core/src/main/java/org/apache/activemq/util/HexSupport.java
    activemq/trunk/activemq-core/src/main/java/org/apache/activemq/util/IOHelper.java

Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/BrokerService.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/BrokerService.java?rev=571306&r1=571305&r2=571306&view=diff
==============================================================================
--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/BrokerService.java (original)
+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/BrokerService.java Thu Aug 30 13:49:41 2007
@@ -1087,7 +1087,7 @@
                     String str = result ? "Successfully deleted" : "Failed to delete";
                     LOG.info(str + " temporary storage");
                 }
-                tempDataStore = StoreFactory.open(getTmpDataDirectory().getPath(), "rw");
+                tempDataStore = StoreFactory.open(getTmpDataDirectory(), "rw");
             } catch (IOException e) {
                 throw new RuntimeException(e);
             }

Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/kaha/StoreFactory.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/kaha/StoreFactory.java?rev=571306&r1=571305&r2=571306&view=diff
==============================================================================
--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/kaha/StoreFactory.java (original)
+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/kaha/StoreFactory.java Thu Aug 30 13:49:41 2007
@@ -16,6 +16,7 @@
  */
 package org.apache.activemq.kaha;
 
+import java.io.File;
 import java.io.IOException;
 import java.util.concurrent.atomic.AtomicLong;
 
@@ -44,6 +45,18 @@
     }
     
     /**
+     * Open or create a Store
+     * 
+     * @param directory
+     * @param mode
+     * @return
+     * @throws IOException
+     */
+    public static Store open(File directory, String mode) throws IOException {
+        return new KahaStore(directory, mode, new AtomicLong());
+    }
+    
+    /**
      * open or create a Store
      * @param name
      * @param mode
@@ -54,6 +67,21 @@
     public static Store open(String name, String mode, AtomicLong size) throws IOException {
         return new KahaStore(name, mode,size);
     }
+    
+
+    /**
+     * Open or create a Store
+     * 
+     * @param directory
+     * @param mode
+     * @param size
+     * @return
+     * @throws IOException
+     */
+    public static Store open(File directory, String mode, AtomicLong size) throws IOException {
+        return new KahaStore(directory, mode, size);
+    }
+    
 
     /**
      * Delete a database
@@ -64,6 +92,18 @@
      */
     public static boolean delete(String name) throws IOException {
         KahaStore store = new KahaStore(name, "rw");
+        return store.delete();
+    }
+    
+    /**
+     * Delete a database
+     * 
+     * @param directory
+     * @return true if successful
+     * @throws IOException
+     */
+    public static boolean delete(File directory) throws IOException {
+        KahaStore store = new KahaStore(directory, "rw");
         return store.delete();
     }
 }

Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/kaha/impl/KahaStore.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/kaha/impl/KahaStore.java?rev=571306&r1=571305&r2=571306&view=diff
==============================================================================
--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/kaha/impl/KahaStore.java (original)
+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/kaha/impl/KahaStore.java Thu Aug 30 13:49:41 2007
@@ -43,6 +43,7 @@
 import org.apache.activemq.kaha.impl.index.IndexItem;
 import org.apache.activemq.kaha.impl.index.IndexManager;
 import org.apache.activemq.kaha.impl.index.RedoStoreIndexItem;
+import org.apache.activemq.util.IOHelper;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
@@ -84,14 +85,22 @@
 
     
     public KahaStore(String name, String mode) throws IOException {
-        this(name,mode,new AtomicLong());
+    	this(new File(IOHelper.toFileSystemSafeName(name)), mode, new AtomicLong());
     }
-    
+
+    public KahaStore(File directory, String mode) throws IOException {
+    	this(directory, mode, new AtomicLong());
+    }
+
     public KahaStore(String name, String mode,AtomicLong storeSize) throws IOException {
+    	this(new File(IOHelper.toFileSystemSafeName(name)), mode, storeSize);
+    }
+    
+    public KahaStore(File directory, String mode, AtomicLong storeSize) throws IOException {
         this.mode = mode;
         this.storeSize = storeSize;
-        directory = new File(name);
-        directory.mkdirs();
+        this.directory = directory;
+        this.directory.mkdirs();
     }
 
     public synchronized void close() throws IOException {

Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/kaha/impl/index/IndexManager.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/kaha/impl/index/IndexManager.java?rev=571306&r1=571305&r2=571306&view=diff
==============================================================================
--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/kaha/impl/index/IndexManager.java (original)
+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/kaha/impl/index/IndexManager.java Thu Aug 30 13:49:41 2007
@@ -22,6 +22,7 @@
 import java.util.concurrent.atomic.AtomicLong;
 
 import org.apache.activemq.kaha.impl.DataManager;
+import org.apache.activemq.util.IOHelper;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
@@ -175,7 +176,7 @@
     }
 
     protected void initialize() throws IOException {
-        file = new File(directory, NAME_PREFIX + name);
+        file = new File(directory, NAME_PREFIX + IOHelper.toFileSystemSafeName(name) );
         indexFile = new RandomAccessFile(file, mode);
         reader = new StoreIndexReader(indexFile);
         writer = new StoreIndexWriter(indexFile, name, redoLog);

Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/kaha/impl/index/hash/HashIndex.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/kaha/impl/index/hash/HashIndex.java?rev=571306&r1=571305&r2=571306&view=diff
==============================================================================
--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/kaha/impl/index/hash/HashIndex.java (original)
+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/kaha/impl/index/hash/HashIndex.java Thu Aug 30 13:49:41 2007
@@ -26,6 +26,7 @@
 import org.apache.activemq.kaha.impl.index.IndexManager;
 import org.apache.activemq.util.DataByteArrayInputStream;
 import org.apache.activemq.util.DataByteArrayOutputStream;
+import org.apache.activemq.util.IOHelper;
 import org.apache.activemq.util.LRUCache;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -390,7 +391,7 @@
 
     private void openIndexFile() throws IOException {
         if (indexFile == null) {
-            file = new File(directory, NAME_PREFIX + name);
+            file = new File(directory, NAME_PREFIX + IOHelper.toFileSystemSafeName(name));
             indexFile = new RandomAccessFile(file, "rw");
         }
     }

Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/kaha/impl/index/tree/TreeIndex.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/kaha/impl/index/tree/TreeIndex.java?rev=571306&r1=571305&r2=571306&view=diff
==============================================================================
--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/kaha/impl/index/tree/TreeIndex.java (original)
+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/kaha/impl/index/tree/TreeIndex.java Thu Aug 30 13:49:41 2007
@@ -26,6 +26,7 @@
 import org.apache.activemq.kaha.impl.index.IndexManager;
 import org.apache.activemq.util.DataByteArrayInputStream;
 import org.apache.activemq.util.DataByteArrayOutputStream;
+import org.apache.activemq.util.IOHelper;
 import org.apache.activemq.util.LRUCache;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -405,7 +406,7 @@
 
     protected void openIndexFile() throws IOException {
         if (indexFile == null) {
-            file = new File(directory, NAME_PREFIX + name);
+            file = new File(directory, NAME_PREFIX + IOHelper.toFileSystemSafeName(name));
             indexFile = new RandomAccessFile(file, "rw");
         }
     }

Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/amq/AMQPersistenceAdapter.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/amq/AMQPersistenceAdapter.java?rev=571306&r1=571305&r2=571306&view=diff
==============================================================================
--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/amq/AMQPersistenceAdapter.java (original)
+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/amq/AMQPersistenceAdapter.java Thu Aug 30 13:49:41 2007
@@ -127,7 +127,7 @@
             if (brokerService != null) {
                 this.directory = brokerService.getBrokerDataDirectory();
             } else {
-                this.directory = new File(IOHelper.getDefaultDataDirectory(), brokerName);
+                this.directory = new File(IOHelper.getDefaultDataDirectory(), IOHelper.toFileSystemSafeName(brokerName));
                 this.directory = new File(directory, "amqstore");
             }
         }

Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/amq/AMQPersistenceAdapterFactory.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/amq/AMQPersistenceAdapterFactory.java?rev=571306&r1=571305&r2=571306&view=diff
==============================================================================
--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/amq/AMQPersistenceAdapterFactory.java (original)
+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/amq/AMQPersistenceAdapterFactory.java Thu Aug 30 13:49:41 2007
@@ -56,7 +56,7 @@
      */
     public File getDataDirectory() {
         if (this.dataDirectory == null) {
-            this.dataDirectory = new File(IOHelper.getDefaultDataDirectory(), brokerName);
+            this.dataDirectory = new File(IOHelper.getDefaultDataDirectory(), IOHelper.toFileSystemSafeName(brokerName));
         }
         return this.dataDirectory;
     }

Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/kahadaptor/KahaPersistenceAdapter.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/kahadaptor/KahaPersistenceAdapter.java?rev=571306&r1=571305&r2=571306&view=diff
==============================================================================
--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/kahadaptor/KahaPersistenceAdapter.java (original)
+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/kahadaptor/KahaPersistenceAdapter.java Thu Aug 30 13:49:41 2007
@@ -195,7 +195,7 @@
                 theStore.delete();
             }
         } else {
-            StoreFactory.delete(getStoreName());
+            StoreFactory.delete(getStoreDirectory());
         }
     }
 
@@ -255,7 +255,7 @@
 
     protected synchronized Store getStore() throws IOException {
         if (theStore == null) {
-            theStore = StoreFactory.open(getStoreName(), "rw",storeSize);
+            theStore = StoreFactory.open(getStoreDirectory(), "rw",storeSize);
             theStore.setMaxDataFileLength(maxDataFileLength);
         }
         return theStore;
@@ -266,6 +266,11 @@
         return directory.getAbsolutePath();
     }
 
+    private File getStoreDirectory() {
+        initialize();
+        return directory;
+    }
+
     public String toString() {
         return "KahaPersistenceAdapter(" + getStoreName() + ")";
     }
@@ -301,7 +306,7 @@
             initialized = true;
             if (this.directory == null) {
                 File file = new File(IOHelper.getDefaultDataDirectory());
-                file = new File(file, brokerName + "-kahastore");
+                file = new File(file, IOHelper.toFileSystemSafeName(brokerName) + "-kahastore");
                 setDirectory(file);
             }
             this.directory.mkdirs();

Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/kahadaptor/KahaReferenceStoreAdapter.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/kahadaptor/KahaReferenceStoreAdapter.java?rev=571306&r1=571305&r2=571306&view=diff
==============================================================================
--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/kahadaptor/KahaReferenceStoreAdapter.java (original)
+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/kahadaptor/KahaReferenceStoreAdapter.java Thu Aug 30 13:49:41 2007
@@ -270,7 +270,7 @@
             }
         } else {
             File stateDirectory = new File(getDirectory(), "kr-state");
-            StoreFactory.delete(stateDirectory.getAbsolutePath());
+            StoreFactory.delete(stateDirectory);
         }
     }
 
@@ -278,7 +278,7 @@
         File stateDirectory = new File(directory, "state");
         stateDirectory.mkdirs();
         try {
-            return StoreFactory.open(stateDirectory.getAbsolutePath(), "rw");
+            return StoreFactory.open(stateDirectory, "rw");
         } catch (IOException e) {
             LOG.error("Failed to create the state store", e);
         }

Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/util/HexSupport.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/util/HexSupport.java?rev=571306&r1=571305&r2=571306&view=diff
==============================================================================
--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/util/HexSupport.java (original)
+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/util/HexSupport.java Thu Aug 30 13:49:41 2007
@@ -41,6 +41,9 @@
         "e0", "e1", "e2", "e3", "e4", "e5", "e6", "e7", "e8", "e9", "ea", "eb", "ec", "ed", "ee", "ef",
         "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", "f8", "f9", "fa", "fb", "fc", "fd", "fe", "ff",
     };
+    private static final int[] INT_OFFSETS = new int[]{
+    	24,16,8,0
+    };
     
     private HexSupport() {
     }
@@ -67,6 +70,24 @@
         StringBuffer rc = new StringBuffer(bytes.length * 2);
         for (int i = 0; i < bytes.length; i++) {
             rc.append(HEX_TABLE[0xFF & bytes[i]]);
+        }
+        return rc.toString();
+    }
+
+    /**
+     * 
+     * @param value 
+     * @param trim if the leading 0's should be trimmed off.
+     * @return
+     */
+    public static String toHexFromInt(int value, boolean trim) {
+        StringBuffer rc = new StringBuffer(INT_OFFSETS.length*2);
+        for (int i = 0; i < INT_OFFSETS.length; i++) {
+        	int b = 0xFF & (value>>INT_OFFSETS[i]);
+        	if( !(trim && b == 0) ) { 
+        		rc.append(HEX_TABLE[b]);
+        		trim=false;
+        	}
         }
         return rc.toString();
     }

Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/util/IOHelper.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/util/IOHelper.java?rev=571306&r1=571305&r2=571306&view=diff
==============================================================================
--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/util/IOHelper.java (original)
+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/util/IOHelper.java Thu Aug 30 13:49:41 2007
@@ -44,4 +44,32 @@
             return "";
         }
     }
+
+    /**
+     * Converts any string into a string that is safe to use as a file name.
+     * The result will only include ascii characters and numbers, and the "-","_", and "." characters.
+     *
+     * @param name
+     * @return
+     */
+    public static String toFileSystemSafeName( String name ) {
+    	int size = name.length();
+    	StringBuffer rc = new StringBuffer(size*2);
+    	for (int i = 0; i < size; i++) {
+			char c = name.charAt(i);
+			boolean valid = c >= 'a' && c <= 'z';
+			valid = valid || (c >= 'A' && c <= 'Z');
+			valid = valid || (c >= '0' && c <= '9');
+			valid = valid || (c == '_') || (c == '-') || (c == '.') || (c == '/') || (c == '\\');
+			
+			if(  valid ) {
+				rc.append(c);
+			} else {
+				// Encode the character using hex notation
+				rc.append('#');
+				rc.append(HexSupport.toHexFromInt(c, true));
+			}
+		}
+    	return rc.toString();
+    }
 }