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 2006/05/25 06:30:48 UTC

svn commit: r409300 - /incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/kaha/impl/KahaStore.java

Author: chirino
Date: Wed May 24 21:30:46 2006
New Revision: 409300

URL: http://svn.apache.org/viewvc?rev=409300&view=rev
Log:
Changed the KahaStore so that it works with set of data and index managers.

Modified:
    incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/kaha/impl/KahaStore.java

Modified: incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/kaha/impl/KahaStore.java
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/kaha/impl/KahaStore.java?rev=409300&r1=409299&r2=409300&view=diff
==============================================================================
--- incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/kaha/impl/KahaStore.java (original)
+++ incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/kaha/impl/KahaStore.java Wed May 24 21:30:46 2006
@@ -23,10 +23,12 @@
 import java.util.Iterator;
 import java.util.Map;
 import java.util.Set;
+
 import org.apache.activemq.kaha.ListContainer;
 import org.apache.activemq.kaha.MapContainer;
 import org.apache.activemq.kaha.RuntimeStoreException;
 import org.apache.activemq.kaha.Store;
+
 import edu.emory.mathcs.backport.java.util.concurrent.ConcurrentHashMap;
 /**
  * Optimized Store writer
@@ -34,16 +36,20 @@
  * @version $Revision: 1.1.1.1 $
  */
 public class KahaStore implements Store{
-    private static final String DEFAULT_CONTAINER_NAME = "data-container";
+    
+    private static final String DEFAULT_DATA_CONTAINER_NAME = "kaha-data.";
+    private static final String DEFAULT_INDEX_CONTAINER_NAME = "kaha-index.";
+    
     private File directory;
-    private DataManager rootData;
-    private DataManager defaultContainerManager;
-    private IndexManager indexManager;
+
     private IndexRootContainer mapsContainer;
     private IndexRootContainer listsContainer;
     private Map lists=new ConcurrentHashMap();
     private Map maps=new ConcurrentHashMap();
+    
     private Map dataManagers = new ConcurrentHashMap();
+    private Map indexManagers = new ConcurrentHashMap();
+    
     private boolean closed=false;
     private String name;
     private String mode;
@@ -59,18 +65,37 @@
         if(!closed){
             closed=true;
             if(initialized){
-                indexManager.close();
-                rootData.close();
-                defaultContainerManager.close();
+//                indexManager.close();
+                
+                for (Iterator iter = indexManagers.values().iterator(); iter.hasNext();) {
+                    IndexManager im = (IndexManager) iter.next();
+                    im.close();
+                    iter.remove();
+                }
+
+                for (Iterator iter = dataManagers.values().iterator(); iter.hasNext();) {
+                    DataManager dm = (DataManager) iter.next();
+                    dm.close();
+                    iter.remove();
+                }
+                
             }
         }
     }
 
     public synchronized void force() throws IOException{
         if(initialized){
-            indexManager.force();
-            rootData.force();
-            defaultContainerManager.force();
+//            indexManager.force();
+            
+            for (Iterator iter = indexManagers.values().iterator(); iter.hasNext();) {
+                IndexManager im = (IndexManager) iter.next();
+                im.force();
+            }
+
+            for (Iterator iter = dataManagers.values().iterator(); iter.hasNext();) {
+                DataManager dm = (DataManager) iter.next();
+                dm.force();
+            }
         }
     }
 
@@ -91,9 +116,20 @@
     public synchronized boolean delete() throws IOException{
         initialize();
         clear();
-        boolean result=indexManager.delete();
-        result&=rootData.delete();
-        result&=defaultContainerManager.delete();
+        boolean result=true; //indexManager.delete();
+        
+        for (Iterator iter = indexManagers.values().iterator(); iter.hasNext();) {
+            IndexManager im = (IndexManager) iter.next();
+            result &= im.delete();
+            iter.remove();
+        }
+        
+        for (Iterator iter = dataManagers.values().iterator(); iter.hasNext();) {
+            DataManager dm = (DataManager) iter.next();
+            result &= dm.delete();
+            iter.remove();
+        }
+        
         initialized=false;
         return result;
     }
@@ -104,7 +140,7 @@
     }
 
     public MapContainer getMapContainer(Object id) throws IOException{
-        return getMapContainer(id, DEFAULT_CONTAINER_NAME);
+        return getMapContainer(id, DEFAULT_DATA_CONTAINER_NAME);
     }
     
     public synchronized MapContainer getMapContainer(Object id, String dataContainerName) throws IOException{
@@ -113,11 +149,12 @@
         MapContainer result=(MapContainer) maps.get(id);
         if(result==null){
             DataManager dm = getDataManager(dataContainerName);
+            IndexManager im = getIndexManager(DEFAULT_INDEX_CONTAINER_NAME);
             ContainerId containerId = new ContainerId();
             containerId.setKey(id);
             containerId.setDataContainerPrefix(dataContainerName);
             IndexItem root=mapsContainer.addRoot(containerId);
-            result=new MapContainerImpl(containerId,root,indexManager,dm);
+            result=new MapContainerImpl(containerId,root,im,dm);
             maps.put(containerId.getKey(),result);
         }
         return result;
@@ -143,7 +180,7 @@
     }
 
     public ListContainer getListContainer(Object id) throws IOException{
-        return getListContainer(id,DEFAULT_CONTAINER_NAME);
+        return getListContainer(id,DEFAULT_DATA_CONTAINER_NAME);
     }
     
     public synchronized ListContainer getListContainer(Object id, String dataContainerName) throws IOException{
@@ -152,11 +189,12 @@
         ListContainer result=(ListContainer) lists.get(id);
         if(result==null){
             DataManager dm = getDataManager(dataContainerName);
+            IndexManager im = getIndexManager(DEFAULT_INDEX_CONTAINER_NAME);
             ContainerId containerId = new ContainerId();
             containerId.setKey(id);
             containerId.setDataContainerPrefix(dataContainerName);
             IndexItem root=listsContainer.addRoot(containerId);
-            result=new ListContainerImpl(containerId,root,indexManager,dm);
+            result=new ListContainerImpl(containerId,root,im,dm);
             lists.put(containerId.getKey(),result);
         }
         return result;
@@ -189,31 +227,30 @@
             initialized=true;
             directory=new File(name);
             directory.mkdirs();
-            File ifile=new File(directory,"kaha.idx");
-            indexManager=new IndexManager(ifile,mode);
-            rootData=new DataManager(directory,"roots-data");
-            defaultContainerManager=new DataManager(directory,DEFAULT_CONTAINER_NAME);
-            dataManagers.put(DEFAULT_CONTAINER_NAME, defaultContainerManager);
+            
+            DataManager rootData = getDataManager(DEFAULT_DATA_CONTAINER_NAME);
+            IndexManager rootIndex = getIndexManager(DEFAULT_INDEX_CONTAINER_NAME);
+            
             IndexItem mapRoot=new IndexItem();
             IndexItem listRoot=new IndexItem();
-            if(indexManager.isEmpty()){
+            if(rootIndex.isEmpty()){
                 mapRoot.setOffset(0);
-                indexManager.updateIndex(mapRoot);
+                rootIndex.updateIndex(mapRoot);
                 listRoot.setOffset(IndexItem.INDEX_SIZE);
-                indexManager.updateIndex(listRoot);
-                indexManager.setLength(IndexItem.INDEX_SIZE*2);
+                rootIndex.updateIndex(listRoot);
+                rootIndex.setLength(IndexItem.INDEX_SIZE*2);
             }else{
-                mapRoot=indexManager.getIndex(0);
-                listRoot=indexManager.getIndex(IndexItem.INDEX_SIZE);
+                mapRoot=rootIndex.getIndex(0);
+                listRoot=rootIndex.getIndex(IndexItem.INDEX_SIZE);
             }
-            mapsContainer=new IndexRootContainer(mapRoot,indexManager,rootData);
-            listsContainer=new IndexRootContainer(listRoot,indexManager,rootData);
+            mapsContainer=new IndexRootContainer(mapRoot,rootIndex,rootData);
+            listsContainer=new IndexRootContainer(listRoot,rootIndex,rootData);
             rootData.consolidateDataFiles();
             for(Iterator i=mapsContainer.getKeys().iterator();i.hasNext();){
                 ContainerId key=(ContainerId) i.next();
                 DataManager dm = getDataManager(key.getDataContainerPrefix());
                 IndexItem root=mapsContainer.getRoot(key);
-                BaseContainerImpl container=new MapContainerImpl(key,root,indexManager,dm);
+                BaseContainerImpl container=new MapContainerImpl(key,root,rootIndex,dm);
                 container.expressDataInterest();
                 maps.put(key.getKey(),container);
             }
@@ -221,7 +258,7 @@
                 ContainerId key=(ContainerId) i.next();
                 DataManager dm = getDataManager(key.getDataContainerPrefix());
                 IndexItem root=listsContainer.getRoot(key);
-                BaseContainerImpl container=new ListContainerImpl(key,root,indexManager,dm);
+                BaseContainerImpl container=new ListContainerImpl(key,root,rootIndex,dm);
                 container.expressDataInterest();
                 lists.put(key.getKey(),container);
             }
@@ -232,7 +269,7 @@
         }
     }
     
-    protected DataManager getDataManager(String prefix){
+    protected DataManager getDataManager(String prefix) throws IOException {
         DataManager dm = (DataManager) dataManagers.get(prefix);
         if (dm == null){
             dm = new DataManager(directory,prefix);
@@ -240,4 +277,15 @@
         }
         return dm;
     }
+    
+    protected IndexManager getIndexManager(String index_name) throws IOException {
+        IndexManager im = (IndexManager) indexManagers.get(index_name);
+        if( im == null ) {
+            File ifile=new File(directory,index_name+".idx");
+            im = new IndexManager(ifile,mode);
+            indexManagers.put(index_name,im);
+        }
+        return im;
+    }
+
 }