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/11/19 20:03:48 UTC

svn commit: r882248 [2/2] - in /incubator/cassandra/trunk: interface/ interface/gen-java/org/apache/cassandra/service/ src/java/org/apache/cassandra/cli/ src/java/org/apache/cassandra/service/

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=882248&r1=882247&r2=882248&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 Thu Nov 19 19:03:47 2009
@@ -71,7 +71,7 @@
 	}
 
     protected Map<String, ColumnFamily> readColumnFamily(List<ReadCommand> commands, int consistency_level)
-    throws InvalidRequestException, UnavailableException
+    throws InvalidRequestException, UnavailableException, TimedOutException
     {
         // TODO - Support multiple column families per row, right now row only contains 1 column family
         String cfName = commands.get(0).getColumnFamilyName();
@@ -96,10 +96,6 @@
         {
             throw new RuntimeException(e);
         }
-        catch (TimeoutException e)
-        {
-            throw new RuntimeException(e);
-        }
 
         for (Row row: rows)
         {
@@ -170,7 +166,7 @@
     }
 
     private Map<String, List<ColumnOrSuperColumn>> getSlice(List<ReadCommand> commands, int consistency_level)
-    throws InvalidRequestException, UnavailableException
+    throws InvalidRequestException, UnavailableException, TimedOutException
     {
         Map<String, ColumnFamily> cfamilies = readColumnFamily(commands, consistency_level);
         Map<String, List<ColumnOrSuperColumn>> columnFamiliesMap = new HashMap<String, List<ColumnOrSuperColumn>>();
@@ -206,7 +202,7 @@
     }
 
     public List<ColumnOrSuperColumn> get_slice(String keyspace, String key, ColumnParent column_parent, SlicePredicate predicate, int consistency_level)
-    throws InvalidRequestException, UnavailableException
+    throws InvalidRequestException, UnavailableException, TimedOutException
     {
         if (logger.isDebugEnabled())
             logger.debug("get_slice");
@@ -214,7 +210,7 @@
     }
     
     public Map<String, List<ColumnOrSuperColumn>> multiget_slice(String keyspace, List<String> keys, ColumnParent column_parent, SlicePredicate predicate, int consistency_level)
-    throws InvalidRequestException, UnavailableException
+    throws InvalidRequestException, UnavailableException, TimedOutException
     {
         if (logger.isDebugEnabled())
             logger.debug("multiget_slice");
@@ -222,7 +218,7 @@
     }
 
     private Map<String, List<ColumnOrSuperColumn>> multigetSliceInternal(String keyspace, List<String> keys, ColumnParent column_parent, SlicePredicate predicate, int consistency_level)
-    throws InvalidRequestException, UnavailableException
+    throws InvalidRequestException, UnavailableException, TimedOutException
     {
         ThriftValidation.validateColumnParent(keyspace, column_parent);
         List<ReadCommand> commands = new ArrayList<ReadCommand>();
@@ -251,7 +247,7 @@
     }
 
     public ColumnOrSuperColumn get(String table, String key, ColumnPath column_path, int consistency_level)
-    throws InvalidRequestException, NotFoundException, UnavailableException
+    throws InvalidRequestException, NotFoundException, UnavailableException, TimedOutException
     {
         if (logger.isDebugEnabled())
             logger.debug("get");
@@ -265,7 +261,7 @@
 
     /** no values will be mapped to keys with no data */
     private Map<String, Collection<IColumn>> multigetColumns(List<ReadCommand> commands, int consistency_level)
-    throws InvalidRequestException, UnavailableException
+    throws InvalidRequestException, UnavailableException, TimedOutException
     {
         Map<String, ColumnFamily> cfamilies = readColumnFamily(commands, consistency_level);
         Map<String, Collection<IColumn>> columnFamiliesMap = new HashMap<String, Collection<IColumn>>();
@@ -300,7 +296,7 @@
 
     /** always returns a ColumnOrSuperColumn for each key, even if there is no data for it */
     public Map<String, ColumnOrSuperColumn> multiget(String table, List<String> keys, ColumnPath column_path, int consistency_level)
-    throws InvalidRequestException, UnavailableException
+    throws InvalidRequestException, UnavailableException, TimedOutException
     {
         if (logger.isDebugEnabled())
             logger.debug("multiget");
@@ -308,7 +304,7 @@
     }
 
     private Map<String, ColumnOrSuperColumn> multigetInternal(String table, List<String> keys, ColumnPath column_path, int consistency_level)
-    throws InvalidRequestException, UnavailableException
+    throws InvalidRequestException, UnavailableException, TimedOutException
     {
         ThriftValidation.validateColumnPath(table, column_path);
 
@@ -358,7 +354,7 @@
     }
 
     public int get_count(String table, String key, ColumnParent column_parent, int consistency_level)
-    throws InvalidRequestException, UnavailableException
+    throws InvalidRequestException, UnavailableException, TimedOutException
     {
         if (logger.isDebugEnabled())
             logger.debug("get_count");
@@ -366,7 +362,7 @@
     }
 
     private Map<String, Integer> multigetCountInternal(String table, List<String> keys, ColumnParent column_parent, int consistency_level)
-    throws InvalidRequestException, UnavailableException
+    throws InvalidRequestException, UnavailableException, TimedOutException
     {
         // validateColumnParent assumes we require simple columns; g_c_c is the only
         // one of the columnParent-taking apis that can also work at the SC level.
@@ -403,7 +399,7 @@
     }
 
     public void insert(String table, String key, ColumnPath column_path, byte[] value, long timestamp, int consistency_level)
-    throws InvalidRequestException, UnavailableException
+    throws InvalidRequestException, UnavailableException, TimedOutException
     {
         if (logger.isDebugEnabled())
             logger.debug("insert");
@@ -423,7 +419,7 @@
     }
 
     public void batch_insert(String keyspace, String key, Map<String, List<ColumnOrSuperColumn>> cfmap, int consistency_level)
-    throws InvalidRequestException, UnavailableException
+    throws InvalidRequestException, UnavailableException, TimedOutException
     {
         if (logger.isDebugEnabled())
             logger.debug("batch_insert");
@@ -451,7 +447,7 @@
     }
 
     public void remove(String table, String key, ColumnPath column_path, long timestamp, int consistency_level)
-    throws InvalidRequestException, UnavailableException
+    throws InvalidRequestException, UnavailableException, TimedOutException
     {
         if (logger.isDebugEnabled())
             logger.debug("remove");
@@ -464,7 +460,7 @@
         doInsert(consistency_level, rm);
 	}
 
-    private void doInsert(int consistency_level, RowMutation rm) throws UnavailableException
+    private void doInsert(int consistency_level, RowMutation rm) throws UnavailableException, TimedOutException
     {
         if (consistency_level != ConsistencyLevel.ZERO)
         {
@@ -556,7 +552,7 @@
     }
 
     public List<KeySlice> get_range_slice(String keyspace, ColumnParent column_parent, SlicePredicate predicate, String start_key, String finish_key, int maxRows, int consistency_level)
-    throws InvalidRequestException, UnavailableException, TException
+            throws InvalidRequestException, UnavailableException, TException, TimedOutException
     {
         if (logger.isDebugEnabled())
             logger.debug("range_slice");
@@ -610,7 +606,7 @@
     }
 
     public List<String> get_key_range(String tablename, String columnFamily, String startWith, String stopAt, int maxResults, int consistency_level)
-    throws InvalidRequestException, TException, UnavailableException
+            throws InvalidRequestException, TException, UnavailableException, TimedOutException
     {
         if (logger.isDebugEnabled())
             logger.debug("get_key_range");

Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageProxy.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageProxy.java?rev=882248&r1=882247&r2=882248&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageProxy.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageProxy.java Thu Nov 19 19:03:47 2009
@@ -166,7 +166,7 @@
         }
     }
     
-    public static void insertBlocking(final RowMutation rm, int consistency_level) throws UnavailableException
+    public static void insertBlocking(final RowMutation rm, int consistency_level) throws UnavailableException, TimedOutException
     {
         long startTime = System.currentTimeMillis();
         try
@@ -248,7 +248,7 @@
         }
         catch (TimeoutException e)
         {
-            throw new UnavailableException();
+            throw new TimedOutException();
         }
         catch (IOException e)
         {
@@ -289,13 +289,7 @@
             throw new UnsupportedOperationException("invalid consistency level " + consistency_level);
         }
         return blockFor;
-    }
-
-    public static void insertBlocking(RowMutation rm) throws UnavailableException
-    {
-        insertBlocking(rm, ConsistencyLevel.QUORUM);
-    }
-    
+    }    
 
     /**
      * Read the data from one replica.  If there is no reply, read the data from another.  In the event we get
@@ -304,7 +298,7 @@
      * @return the row associated with command.key
      * @throws Exception
      */
-    private static List<Row> weakReadRemote(List<ReadCommand> commands) throws IOException, UnavailableException
+    private static List<Row> weakReadRemote(List<ReadCommand> commands) throws IOException, UnavailableException, TimedOutException
     {
         if (logger.isDebugEnabled())
             logger.debug("weakreadremote reading " + StringUtils.join(commands, ", "));
@@ -333,8 +327,7 @@
             }
             catch (TimeoutException e)
             {
-                throw new RuntimeException("error reading key " + commands.get(commandIndex).key, e);
-                // TODO retry to a different endpoint?
+                throw new TimedOutException();
             }
             DataInputBuffer bufIn = new DataInputBuffer();
             bufIn.reset(body, body.length);
@@ -351,7 +344,7 @@
      * a specific set of column names from a given column family.
      */
     public static List<Row> readProtocol(List<ReadCommand> commands, int consistency_level)
-    throws IOException, TimeoutException, UnavailableException
+            throws IOException, UnavailableException, TimedOutException
     {
         long startTime = System.currentTimeMillis();
 
@@ -405,7 +398,7 @@
          * 7. else carry out read repair by getting data from all the nodes.
         // 5. return success
      */
-    private static List<Row> strongRead(List<ReadCommand> commands, int consistency_level) throws IOException, TimeoutException, UnavailableException
+    private static List<Row> strongRead(List<ReadCommand> commands, int consistency_level) throws IOException, UnavailableException, TimedOutException
     {
         List<QuorumResponseHandler<Row>> quorumResponseHandlers = new ArrayList<QuorumResponseHandler<Row>>();
         List<InetAddress[]> commandEndPoints = new ArrayList<InetAddress[]>();
@@ -464,6 +457,10 @@
                 if (logger.isDebugEnabled())
                     logger.debug("quorumResponseHandler: " + (System.currentTimeMillis() - startTime2) + " ms.");
             }
+            catch (TimeoutException e)
+            {
+                throw new TimedOutException();
+            }
             catch (DigestMismatchException ex)
             {
                 if (DatabaseDescriptor.getConsistencyCheck())
@@ -481,6 +478,10 @@
                         if (row != null)
                             rows.add(row);
                     }
+                    catch (TimeoutException e)
+                    {
+                        throw new TimedOutException();
+                    }
                     catch (DigestMismatchException e)
                     {
                         // TODO should this be a thrift exception?
@@ -526,7 +527,7 @@
         return rows;
     }
 
-    static Map<String, Collection<IColumn>> getRangeSlice(RangeSliceCommand rawCommand) throws IOException, UnavailableException
+    static Map<String, Collection<IColumn>> getRangeSlice(RangeSliceCommand rawCommand) throws IOException, UnavailableException, TimedOutException
     {
         long startTime = System.currentTimeMillis();
         TokenMetadata tokenMetadata = StorageService.instance().getTokenMetadata();
@@ -551,7 +552,7 @@
             }
             catch (TimeoutException ex)
             {
-                throw new RuntimeException(ex);
+                throw new TimedOutException();
             }
             RangeSliceReply reply = RangeSliceReply.read(responseBody);
             List<Row> rangeRows = new ArrayList<Row>(reply.rows);
@@ -615,7 +616,7 @@
         return results;
     }
 
-    static List<String> getKeyRange(RangeCommand rawCommand) throws IOException, UnavailableException
+    static List<String> getKeyRange(RangeCommand rawCommand) throws IOException, UnavailableException, TimedOutException
     {
         long startTime = System.currentTimeMillis();
         TokenMetadata tokenMetadata = StorageService.instance().getTokenMetadata();
@@ -641,7 +642,7 @@
             }
             catch (TimeoutException e)
             {
-                throw new RuntimeException(e);
+                throw new TimedOutException();
             }
             RangeReply rangeReply = RangeReply.read(responseBody);
             List<String> rangeKeys = rangeReply.keys;