You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by jb...@apache.org on 2009/06/22 23:17:59 UTC

svn commit: r787405 - in /incubator/cassandra/trunk/src/java/org/apache/cassandra: config/ db/ net/http/ service/ tools/

Author: jbellis
Date: Mon Jun 22 21:17:58 2009
New Revision: 787405

URL: http://svn.apache.org/viewvc?rev=787405&view=rev
Log:
cleanup of table.open.

patch by jbellis; reviewed by goffinet for CASSANDRA-79

Modified:
    incubator/cassandra/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
    incubator/cassandra/trunk/src/java/org/apache/cassandra/db/CommitLogHeader.java
    incubator/cassandra/trunk/src/java/org/apache/cassandra/db/DataFileVerbHandler.java
    incubator/cassandra/trunk/src/java/org/apache/cassandra/db/HintedHandOffManager.java
    incubator/cassandra/trunk/src/java/org/apache/cassandra/db/Table.java
    incubator/cassandra/trunk/src/java/org/apache/cassandra/net/http/HttpRequestHandler.java
    incubator/cassandra/trunk/src/java/org/apache/cassandra/service/CassandraServer.java
    incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java
    incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageServiceMBean.java
    incubator/cassandra/trunk/src/java/org/apache/cassandra/tools/NodeProbe.java

Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java?rev=787405&r1=787404&r2=787405&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java Mon Jun 22 21:17:58 2009
@@ -439,15 +439,6 @@
         {
             throw new RuntimeException(e);
         }
-        
-        try
-        {
-            storeMetadata();
-        }
-        catch (IOException e)
-        {
-            throw new RuntimeException(e);
-        }
     }
     
 
@@ -456,9 +447,9 @@
      * the table name and the column families that make up the table.
      * Each column family also has an associated ID which is an int.
     */
-    private static void storeMetadata() throws IOException
+    public static void storeMetadata() throws IOException
     {
-        AtomicInteger idGenerator = new AtomicInteger(0);
+        int cfId = 0;
         Set<String> tables = tableToCFMetaDataMap_.keySet();
 
         for ( String table : tables )
@@ -472,23 +463,32 @@
 
                 for (String columnFamily : columnFamilies.keySet())
                 {
-                    tmetadata.add(columnFamily, idGenerator.getAndIncrement(), DatabaseDescriptor.getColumnType(table, columnFamily));
+                    tmetadata.add(columnFamily, cfId++, DatabaseDescriptor.getColumnType(table, columnFamily));
                 }
 
                 /*
                  * Here we add all the system related column families.
                 */
                 /* Add the TableMetadata column family to this map. */
-                tmetadata.add(Table.TableMetadata.cfName_, idGenerator.getAndIncrement());
+                tmetadata.add(Table.TableMetadata.cfName_, cfId++);
                 /* Add the LocationInfo column family to this map. */
-                tmetadata.add(SystemTable.cfName_, idGenerator.getAndIncrement());
+                tmetadata.add(SystemTable.cfName_, cfId++);
                 /* Add the recycle column family to this map. */
-                tmetadata.add(Table.recycleBin_, idGenerator.getAndIncrement());
+                tmetadata.add(Table.recycleBin_, cfId++);
                 /* Add the Hints column family to this map. */
-                tmetadata.add(Table.hints_, idGenerator.getAndIncrement(), ColumnFamily.getColumnType("Super"));
+                tmetadata.add(Table.hints_, cfId++, ColumnFamily.getColumnType("Super"));
                 tmetadata.apply();
-                idGenerator.set(0);
             }
+
+            /*
+             * Here we add all the system related column families.
+            */
+            /* Add the LocationInfo column family to this map. */
+            tmetadata.add(SystemTable.cfName_, cfId++);
+            /* Add the recycle column family to this map. */
+            tmetadata.add(Table.recycleBin_, cfId++);
+            /* Add the Hints column family to this map. */
+            tmetadata.add(Table.hints_, cfId++, ColumnFamily.getColumnType("Super"));
         }
     }
 

Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/db/CommitLogHeader.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/db/CommitLogHeader.java?rev=787405&r1=787404&r2=787405&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/db/CommitLogHeader.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/db/CommitLogHeader.java Mon Jun 22 21:17:58 2009
@@ -146,8 +146,7 @@
         {
             sb.append((dirty.get(i) ? 0 : 1));
             sb.append(":");
-            Table table = Table.open( DatabaseDescriptor.getTables().get(0));
-            sb.append(table.getColumnFamilyName(i));
+            sb.append(Table.TableMetadata.getColumnFamilyName(i));
             sb.append(" ");
         }        
         sb.append(" | " );        

Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/db/DataFileVerbHandler.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/db/DataFileVerbHandler.java?rev=787405&r1=787404&r2=787405&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/db/DataFileVerbHandler.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/db/DataFileVerbHandler.java Mon Jun 22 21:17:58 2009
@@ -1,21 +1,21 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*    http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied.  See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*    http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
 package org.apache.cassandra.db;
 
 import java.io.ByteArrayOutputStream;
@@ -42,11 +42,11 @@
         String table = new String(bytes);
         logger_.info("**** Received a request from " + message.getFrom());
         
-        List<String> allFiles = Table.open(table).getAllSSTablesOnDisk();        
-        ByteArrayOutputStream bos = new ByteArrayOutputStream();
-        DataOutputStream dos = new DataOutputStream(bos);
         try
         {
+            List<String> allFiles = Table.open(table).getAllSSTablesOnDisk();
+            ByteArrayOutputStream bos = new ByteArrayOutputStream();
+            DataOutputStream dos = new DataOutputStream(bos);
             dos.writeInt(allFiles.size());
             for ( String file : allFiles )
             {
@@ -55,9 +55,9 @@
             Message response = message.getReply( StorageService.getLocalStorageEndPoint(), bos.toByteArray());
             MessagingService.getMessagingInstance().sendOneWay(response, message.getFrom());
         }
-        catch ( IOException ex )
+        catch (IOException ex)
         {
-            logger_.warn(LogUtil.throwableToString(ex));
+            logger_.error("Error listing data files", ex);
         }
     }
 }

Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/db/HintedHandOffManager.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/db/HintedHandOffManager.java?rev=787405&r1=787404&r2=787405&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/db/HintedHandOffManager.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/db/HintedHandOffManager.java Mon Jun 22 21:17:58 2009
@@ -157,9 +157,9 @@
         // 7. I guess we r done
         for ( String tableName:DatabaseDescriptor.getTables() )
         {
-            Table table = Table.open(tableName);
             try
             {
+                Table table = Table.open(tableName);
                 ColumnFamily hintColumnFamily = ColumnFamilyStore.removeDeleted(table.get(key_, Table.hints_), Integer.MAX_VALUE);
                 if (hintColumnFamily == null)
                 {
@@ -194,7 +194,7 @@
             }
             catch (Exception ex)
             {
-                logger_.error(ex.getMessage());
+                logger_.error("error delivering hints", ex);
             }
             finally
             {
@@ -212,9 +212,9 @@
         // 3. Delete that recepient from the key if write was successful
         for ( String tableName:DatabaseDescriptor.getTables() )
         {
-            Table table = Table.open(tableName);
             try
             {
+                Table table = Table.open(tableName);
                 ColumnFamily hintedColumnFamily = table.get(key_, Table.hints_);
                 if (hintedColumnFamily == null)
                 {
@@ -244,7 +244,7 @@
             }
             catch (Exception ex)
             {
-                logger_.error(ex.getMessage());
+                logger_.error("Error delivering hints", ex);
             }
             finally
             {

Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/db/Table.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/db/Table.java?rev=787405&r1=787404&r2=787405&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/db/Table.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/db/Table.java Mon Jun 22 21:17:58 2009
@@ -79,6 +79,18 @@
         private static IFileWriter writer_;
         private static IFileReader reader_;
         private static HashMap<String,TableMetadata> tableMetadataMap_ = new HashMap<String,TableMetadata>();
+        private static Map<Integer, String> idCfMap_ = new HashMap<Integer, String>();
+        static
+        {
+            try
+            {
+                DatabaseDescriptor.storeMetadata();
+            }
+            catch (IOException e)
+            {
+                throw new RuntimeException(e);
+            }
+        }
 
         private static TableMetadata getTableMetadata(String table)
         {
@@ -140,7 +152,6 @@
         /* The mapping between column family and the column type. */
         private Map<String, String> cfTypeMap_ = new HashMap<String, String>();
         private Map<String, Integer> cfIdMap_ = new HashMap<String, Integer>();
-        private Map<Integer, String> idCfMap_ = new HashMap<Integer, String>();        
         
         private static String getFileName(String table)
         {
@@ -154,6 +165,8 @@
         
         public void add(String cf, int id, String type)
         {
+            logger_.debug("adding " + cf + " as " + id);
+            assert !idCfMap_.containsKey(id);
             cfIdMap_.put(cf, id);
             idCfMap_.put(id, cf);
             cfTypeMap_.put(cf, type);
@@ -169,7 +182,7 @@
             return cfIdMap_.get(columnFamily);
         }
 
-        String getColumnFamilyName(int id)
+        public static String getColumnFamilyName(int id)
         {
             return idCfMap_.get(id);
         }
@@ -346,7 +359,7 @@
             }
         }
         
-        private Map<String, String> getNewNames(StreamContextManager.StreamContext[] streamContexts)
+        private Map<String, String> getNewNames(StreamContextManager.StreamContext[] streamContexts) throws IOException
         {
             /* 
              * Mapping for each file with unique CF-i ---> new file name. For eg.
@@ -405,7 +418,7 @@
     // cache application CFs since Range queries ask for them a _lot_
     private SortedSet<String> applicationColumnFamilies_;
 
-    public static Table open(String table)
+    public static Table open(String table) throws IOException
     {
         Table tableInstance = instances_.get(table);
         /*
@@ -574,22 +587,14 @@
         return list;
     }
 
-    private Table(String table)
+    private Table(String table) throws IOException
     {
         table_ = table;
         dbAnalyticsSource_ = new DBAnalyticsSource();
-        try
-        {
-            tableMetadata_ = Table.TableMetadata.instance(table);
-            Set<String> columnFamilies = tableMetadata_.getColumnFamilies();
-            for ( String columnFamily : columnFamilies )
-            {
-                columnFamilyStores_.put(columnFamily, ColumnFamilyStore.getColumnFamilyStore(table, columnFamily));
-            }
-        }
-        catch ( IOException ex )
+        tableMetadata_ = Table.TableMetadata.instance(table);
+        for (String columnFamily : tableMetadata_.getColumnFamilies())
         {
-            logger_.info(LogUtil.throwableToString(ex));
+            columnFamilyStores_.put(columnFamily, ColumnFamilyStore.getColumnFamilyStore(table, columnFamily));
         }
     }
 

Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/net/http/HttpRequestHandler.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/net/http/HttpRequestHandler.java?rev=787405&r1=787404&r2=787405&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/net/http/HttpRequestHandler.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/net/http/HttpRequestHandler.java Mon Jun 22 21:17:58 2009
@@ -88,15 +88,22 @@
     {
         logger_.debug("Handling " + request_.getMethod());
         HttpWriteResponse httpServerResponse = new HttpWriteResponse(request_);
-        if(request_.getMethod().toUpperCase().equals("GET"))
+        try
         {
+            if(request_.getMethod().toUpperCase().equals("GET"))
+            {
             // handle the get request type
-            doGet(request_, httpServerResponse);
+                doGet(request_, httpServerResponse);
+            }
+            else if(request_.getMethod().toUpperCase().equals("POST"))
+            {
+                // handle the POST request type
+                doPost(request_, httpServerResponse);
+            }
         }
-        else if(request_.getMethod().toUpperCase().equals("POST"))
+        catch (IOException e)
         {
-            // handle the POST request type
-            doPost(request_, httpServerResponse);
+            throw new RuntimeException(e);
         }
 
         // write the response we have constructed into the socket
@@ -106,7 +113,7 @@
         request_.getHttpConnection().write(buffer);
     }
 
-    private void doGet(org.apache.cassandra.net.http.HttpRequest httpRequest, HttpWriteResponse httpResponse)
+    private void doGet(org.apache.cassandra.net.http.HttpRequest httpRequest, HttpWriteResponse httpResponse) throws IOException
     {
         boolean fServeSummary = true;
         HTMLFormatter formatter = new HTMLFormatter();
@@ -175,7 +182,7 @@
      * As a result of the POST query, we currently only send back some
      * javascript that updates the data in some place on the browser.
     */
-    private void doPost(org.apache.cassandra.net.http.HttpRequest httpRequest, HttpWriteResponse httpResponse)
+    private void doPost(org.apache.cassandra.net.http.HttpRequest httpRequest, HttpWriteResponse httpResponse) throws IOException
     {
         String query = httpRequest.getQuery();
 
@@ -215,7 +222,7 @@
     	httpResponse.println(formatter.toString());
     }
 
-    private String handleNodeDetails()
+    private String handleNodeDetails() throws IOException
     {
         HTMLFormatter formatter = new HTMLFormatter();
 
@@ -248,7 +255,7 @@
         return formatter.toString();
     }
 
-    private void displayDBStatistics(HTMLFormatter formatter, java.text.DecimalFormat df)
+    private void displayDBStatistics(HTMLFormatter formatter, java.text.DecimalFormat df) throws IOException
     {
 
         List<String> tables = DatabaseDescriptor.getTables();
@@ -269,7 +276,7 @@
         }
     }
 
-    private String handlePageDisplay(String queryFormData, String insertFormData, String scriptFormData)
+    private String handlePageDisplay(String queryFormData, String insertFormData, String scriptFormData) throws IOException
     {
     	StringBuilder sb = new StringBuilder();
 		sb.append("\n<div id=\"header\"> \n");
@@ -404,7 +411,7 @@
     /*
      * Returns the HTML code for a form to query data from the db cluster.
      */
-    private String serveQueryForm(String queryResult)
+    private String serveQueryForm(String queryResult) throws IOException
     {
         HTMLFormatter formatter = new HTMLFormatter();
         formatter.appendLine("<BR><fieldset><legend>Query the cluster</legend>");
@@ -453,7 +460,7 @@
     /*
      * Returns the HTML code for a form to insert data into the db cluster.
      */
-    private String serveInsertForm(String insertResult)
+    private String serveInsertForm(String insertResult) throws IOException
     {
         HTMLFormatter formatter = new HTMLFormatter();
         formatter.appendLine("<BR><fieldset>\n<legend>Insert data into the cluster</legend>\n");
@@ -481,7 +488,7 @@
     /*
      * Handle the query of some data from the client.
      */
-    private String handleQuery(org.apache.cassandra.net.http.HttpRequest httpRequest)
+    private String handleQuery(org.apache.cassandra.net.http.HttpRequest httpRequest) throws IOException
     {
     	boolean fQuerySuccess = false;
     	String sRetVal = "";
@@ -535,7 +542,7 @@
     /*
      * Handle the query of some data from the client.
      */
-    private String handleInsert(org.apache.cassandra.net.http.HttpRequest httpRequest)
+    private String handleInsert(org.apache.cassandra.net.http.HttpRequest httpRequest) throws IOException
     {
     	boolean fInsertSuccess = false;
     	String sRetVal = "";
@@ -577,7 +584,7 @@
     /*
      * Handle the script to be run on the server.
      */
-    private String handleScript(org.apache.cassandra.net.http.HttpRequest httpRequest)
+    private String handleScript(org.apache.cassandra.net.http.HttpRequest httpRequest) throws IOException
     {
     	boolean fQuerySuccess = false;
     	String sRetVal = "";
@@ -678,7 +685,7 @@
         return "Loading...";
     }
 
-    private String handleCompactMe()
+    private String handleCompactMe() throws IOException
     {
         Table table = Table.open(DatabaseDescriptor.getTables().get(0));
         table.forceCompaction();

Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/service/CassandraServer.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/service/CassandraServer.java?rev=787405&r1=787404&r2=787405&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/service/CassandraServer.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/service/CassandraServer.java Mon Jun 22 21:17:58 2009
@@ -84,10 +84,9 @@
         {
             throw new TableNotDefinedException("Table " + tablename + " does not exist in this schema.");
         }
-        Table table = Table.open(tablename);
         for (String cfName : columnFamilyNames)
         {
-            if (!table.getColumnFamilies().contains(cfName))
+            if (DatabaseDescriptor.getColumnType(tablename, cfName) == null)
             {
                 throw new ColumnFamilyNotDefinedException("Column Family " + cfName + " is invalid.");
             }

Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java?rev=787405&r1=787404&r2=787405&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java Mon Jun 22 21:17:58 2009
@@ -681,7 +681,7 @@
         doBootstrap(nodes);
     }
     
-    public void forceTableCleanup()
+    public void forceTableCleanup() throws IOException
     {
         List<String> tables = DatabaseDescriptor.getTables();
         for ( String tName : tables )
@@ -694,7 +694,7 @@
     /**
      * Trigger the immediate compaction of all tables.
      */
-    public void forceTableCompaction()
+    public void forceTableCompaction() throws IOException
     {
         List<String> tables = DatabaseDescriptor.getTables();
         for ( String tName : tables )

Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageServiceMBean.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageServiceMBean.java?rev=787405&r1=787404&r2=787405&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageServiceMBean.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageServiceMBean.java Mon Jun 22 21:17:58 2009
@@ -37,7 +37,7 @@
     public Map<Range, List<EndPoint>> getRangeToEndPointMap();
     public String getLoadInfo();
     public int getCurrentGenerationNumber();
-    public void forceTableCompaction();
+    public void forceTableCompaction() throws IOException;
     
     /**
      * This method will cause the local node initiate
@@ -54,7 +54,7 @@
     /**
      * 
      */
-    public void forceTableCleanup();
+    public void forceTableCleanup() throws IOException;
 
     /**
      * Stream the files in the bootstrap directory over to the

Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/tools/NodeProbe.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/tools/NodeProbe.java?rev=787405&r1=787404&r2=787405&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/tools/NodeProbe.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/tools/NodeProbe.java Mon Jun 22 21:17:58 2009
@@ -228,7 +228,7 @@
     /**
      * Trigger a cleanup of keys on all tables.
      */
-    public void forceTableCleanup()
+    public void forceTableCleanup() throws IOException
     {
         ssProxy.forceTableCleanup();
     }
@@ -236,7 +236,7 @@
     /**
      * Trigger compaction of all tables.
      */
-    public void forceTableCompaction()
+    public void forceTableCompaction() throws IOException
     {
         ssProxy.forceTableCompaction();
     }
@@ -372,7 +372,7 @@
     /**
      * @param args
      */
-    public static void main(String[] args)
+    public static void main(String[] args) throws IOException
     {
         NodeProbe probe = null;
         try