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/26 19:26:37 UTC

svn commit: r788776 - in /incubator/cassandra/trunk: src/java/org/apache/cassandra/db/ test/unit/org/apache/cassandra/db/

Author: jbellis
Date: Fri Jun 26 17:26:36 2009
New Revision: 788776

URL: http://svn.apache.org/viewvc?rev=788776&view=rev
Log:
avoid optimization of not checking older memtable and SSTables if we find _an_ answer early on; it causes bugs

Modified:
    incubator/cassandra/trunk/src/java/org/apache/cassandra/db/Column.java
    incubator/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamily.java
    incubator/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
    incubator/cassandra/trunk/src/java/org/apache/cassandra/db/IFilter.java
    incubator/cassandra/trunk/src/java/org/apache/cassandra/db/IdentityFilter.java
    incubator/cassandra/trunk/src/java/org/apache/cassandra/db/NamesFilter.java
    incubator/cassandra/trunk/src/java/org/apache/cassandra/db/RangeFilter.java
    incubator/cassandra/trunk/src/java/org/apache/cassandra/db/SuperColumn.java
    incubator/cassandra/trunk/src/java/org/apache/cassandra/db/TimeFilter.java
    incubator/cassandra/trunk/test/unit/org/apache/cassandra/db/RangeFilterTest.java

Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/db/Column.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/db/Column.java?rev=788776&r1=788775&r2=788776&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/db/Column.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/db/Column.java Fri Jun 26 17:26:36 2009
@@ -276,18 +276,6 @@
         if ( name.equals(columnName) )
         {
             column = defreeze(dis, name);
-            if( filter instanceof IdentityFilter )
-            {
-            	/*
-            	 * If this is being called with identity filter
-            	 * since a column name is passed in we know
-            	 * that this is a final call
-            	 * Hence if the column is found set the filter to done
-            	 * so that we do not look for the column in further files
-            	 */
-            	IdentityFilter f = (IdentityFilter)filter;
-            	f.setDone();
-            }
         }
         else
         {

Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamily.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamily.java?rev=788776&r1=788775&r2=788776&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamily.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamily.java Fri Jun 26 17:26:36 2009
@@ -532,10 +532,6 @@
                 if(column != null)
                 {
                     cf.addColumn(column);
-                    if(filter.isDone())
-                    {
-                        break;
-                    }
                 }
             }
             return cf;

Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java?rev=788776&r1=788775&r2=788776&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java Fri Jun 26 17:26:36 2009
@@ -522,17 +522,12 @@
         List<ColumnFamily> columnFamilies = new ArrayList<ColumnFamily>();
         /* Get the ColumnFamily from Memtable */
         getColumnFamilyFromCurrentMemtable(key, columnFamilyColumn, filter, columnFamilies);
-        if (columnFamilies.size() == 0 || !filter.isDone())
-        {
-            /* Check if MemtableManager has any historical information */
-            getUnflushedColumnFamily(key, columnFamily_, columnFamilyColumn, filter, columnFamilies);
-        }
-        if (columnFamilies.size() == 0 || !filter.isDone())
-        {
-            long start = System.currentTimeMillis();
-            getColumnFamilyFromDisk(key, columnFamilyColumn, columnFamilies, filter);
-            diskReadStats_.add(System.currentTimeMillis() - start);
-        }
+        /* Check if MemtableManager has any historical information */
+        getUnflushedColumnFamily(key, columnFamily_, columnFamilyColumn, filter, columnFamilies);
+        long start = System.currentTimeMillis();
+        getColumnFamilyFromDisk(key, columnFamilyColumn, columnFamilies, filter);
+        diskReadStats_.add(System.currentTimeMillis() - start);
+
         return columnFamilies;
     }
 
@@ -574,10 +569,6 @@
                 if (columnFamily != null)
                 {
                     columnFamilies.add(columnFamily);
-                    if (filter.isDone())
-                    {
-                        break;
-                    }
                 }
             }
         }
@@ -1417,8 +1408,6 @@
             if ( columnFamily != null )
             {
                 columnFamilies.add(columnFamily);
-                if( filter.isDone())
-                    break;
             }
         }
     }

Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/db/IFilter.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/db/IFilter.java?rev=788776&r1=788775&r2=788776&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/db/IFilter.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/db/IFilter.java Fri Jun 26 17:26:36 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.DataInputStream;
@@ -27,7 +27,6 @@
 
 public interface IFilter
 {
-	public boolean isDone();
 	public ColumnFamily filter(String cfName, ColumnFamily cf);
     public IColumn filter(IColumn column, DataInputStream dis) throws IOException;
     public DataInputBuffer next(String key, String cf, SSTable ssTable) throws IOException;

Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/db/IdentityFilter.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/db/IdentityFilter.java?rev=788776&r1=788775&r2=788776&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/db/IdentityFilter.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/db/IdentityFilter.java Fri Jun 26 17:26:36 2009
@@ -28,42 +28,13 @@
 
 public class IdentityFilter implements IFilter
 {
-    private boolean isDone_ = false;
-    
-	public boolean isDone()
-	{
-		return isDone_;
-	}
-
 	public ColumnFamily filter(String cfString, ColumnFamily columnFamily)
 	{
-    	String[] values = RowMutation.getColumnAndColumnFamily(cfString);
-    	if( columnFamily == null )
-    		return columnFamily;
-
-		if (values.length == 2 && !columnFamily.isSuper())
-		{
-			Collection<IColumn> columns = columnFamily.getAllColumns();
-			if(columns.size() >= 1)
-				isDone_ = true;
-		}
-		if (values.length == 3 && columnFamily.isSuper())
-		{
-    		Collection<IColumn> columns = columnFamily.getAllColumns();
-    		for(IColumn column : columns)
-    		{
-    			SuperColumn superColumn = (SuperColumn)column;
-        		Collection<IColumn> subColumns = superColumn.getSubColumns();
-        		if( subColumns.size() >= 1 )
-        			isDone_ = true;
-    		}
-		}
 		return columnFamily;
 	}
 
 	public IColumn filter(IColumn column, DataInputStream dis) throws IOException
 	{
-		// TODO Auto-generated method stub
 		return column;
 	}
 
@@ -71,18 +42,4 @@
 	{
 		return ssTable.next(key, cf);
 	}
-
-	public void setDone()
-	{
-		isDone_ = true;
-	}
-	/**
-	 * @param args
-	 */
-	public static void main(String[] args)
-	{
-		// TODO Auto-generated method stub
-
-	}
-
 }

Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/db/NamesFilter.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/db/NamesFilter.java?rev=788776&r1=788775&r2=788776&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/db/NamesFilter.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/db/NamesFilter.java Fri Jun 26 17:26:36 2009
@@ -54,13 +54,8 @@
 			{
 		        if ( names_.contains(column.name()) )
 		        {
-		            names_.remove(column.name());
 					filteredCf.addColumn(column);
 		        }
-				if( isDone() )
-				{
-					return filteredCf;
-				}
 			}
 		}
 		else if (values.length == 2 && columnFamily.isSuper())
@@ -76,13 +71,8 @@
         		{
     		        if ( names_.contains(subColumn.name()) )
     		        {
-    		            names_.remove(subColumn.name());
     		            filteredSuperColumn.addColumn(subColumn);
     		        }
-    				if( isDone() )
-    				{
-    					return filteredCf;
-    				}
     			}
     		}
 		}
@@ -95,24 +85,13 @@
 
     public IColumn filter(IColumn column, DataInputStream dis) throws IOException
     {
-        String columnName = column.name();
-        if ( names_.contains(columnName) )
-        {
-            names_.remove(columnName);
-        }
-        else
+        if (!names_.contains(column.name()))
         {
             column = null;
         }
-
         return column;
     }
 
-    public boolean isDone()
-    {
-        return names_.isEmpty();
-    }
-
     public DataInputBuffer next(String key, String cf, SSTable ssTable) throws IOException
     {
     	return ssTable.next(key, cf, names_, null);

Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/db/RangeFilter.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/db/RangeFilter.java?rev=788776&r1=788775&r2=788776&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/db/RangeFilter.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/db/RangeFilter.java Fri Jun 26 17:26:36 2009
@@ -33,14 +33,12 @@
 {
     private final String colMin_;
     private final String colMax_;
-    private boolean isDone_;
     int count_;
 
     RangeFilter(String colMin, String colMax)
     {
         colMin_ = colMin;
         colMax_ = colMax;
-        isDone_ = false;
         count_ = -1;
     }
     
@@ -48,7 +46,6 @@
     {
         colMin_ = colMin;
         colMax_ = colMax;
-        isDone_ = false;
         count_ = count;
     }
 
@@ -57,28 +54,19 @@
         if (cf == null)
             return null;
 
-        if (count_ == 0)
-        {
-            isDone_ = true;
-            return null;
-        }
-
         ColumnFamily filteredColumnFamily = cf.cloneMeShallow();
 
         Collection<IColumn> columns = cf.getAllColumns();
+        int i = 0;
         for (IColumn c : columns)
         {
+            if ((count_ >= 0) && (i >= count_))
+                break;
             if (c.name().compareTo(colMin_) >= 0
                     && c.name().compareTo(colMax_) <= 0)
             {
                 filteredColumnFamily.addColumn(c);
-                if (count_ > 0)
-                    count_--;
-                if (count_==0)
-                {
-                    isDone_ = true;
-                    break;
-                }
+                i++;
             }
         }
         return filteredColumnFamily;
@@ -87,26 +75,15 @@
     public IColumn filter(IColumn column, DataInputStream dis)
             throws IOException
     {
-        if (column == null || isDone_)
+        if (column == null)
             return null;
 
         if (column.name().compareTo(colMin_) >= 0
                 && column.name().compareTo(colMax_) <= 0)
         {
-            if (count_ > 0)
-                count_--;
-            if (count_ == 0)
-                isDone_ = true;
             return column;
-        } else
-        {
-            return null;
         }
-    }
-
-    public boolean isDone()
-    {
-        return isDone_;
+        return null;
     }
 
     public DataInputBuffer next(String key, String cf, SSTable ssTable)

Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/db/SuperColumn.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/db/SuperColumn.java?rev=788776&r1=788775&r2=788776&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/db/SuperColumn.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/db/SuperColumn.java Fri Jun 26 17:26:36 2009
@@ -422,10 +422,6 @@
                     if(column != null)
                     {
                         superColumn.addColumn(column);
-                        if(filter.isDone())
-                        {
-                            break;
-                        }
                     }
                 }
                 return superColumn;

Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/db/TimeFilter.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/db/TimeFilter.java?rev=788776&r1=788775&r2=788776&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/db/TimeFilter.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/db/TimeFilter.java Fri Jun 26 17:26:36 2009
@@ -36,12 +36,10 @@
 class TimeFilter implements IFilter
 {
     private long timeLimit_;
-    private boolean isDone_;
 
     TimeFilter(long timeLimit)
     {
         timeLimit_ = timeLimit;
-        isDone_ = false;
     }
 
     public ColumnFamily filter(String cf, ColumnFamily columnFamily)
@@ -54,23 +52,17 @@
         if (values.length == 1 && !columnFamily.isSuper())
         {
             Collection<IColumn> columns = columnFamily.getAllColumns();
-            int i = 0;
             for (IColumn column : columns)
             {
                 if (column.timestamp() >= timeLimit_)
                 {
                     filteredCf.addColumn(column);
-                    ++i;
                 }
                 else
                 {
                     break;
                 }
             }
-            if (i < columns.size())
-            {
-                isDone_ = true;
-            }
         }
         else if (values.length == 2 && columnFamily.isSuper())
         {
@@ -87,23 +79,17 @@
                 filteredSuperColumn.markForDeleteAt(column.getLocalDeletionTime(), column.getMarkedForDeleteAt());
                 filteredCf.addColumn(filteredSuperColumn);
                 Collection<IColumn> subColumns = superColumn.getSubColumns();
-                int i = 0;
                 for (IColumn subColumn : subColumns)
                 {
                     if (subColumn.timestamp() >= timeLimit_)
                     {
                         filteredSuperColumn.addColumn(subColumn);
-                        ++i;
                     }
                     else
                     {
                         break;
                     }
                 }
-                if (i < filteredSuperColumn.getColumnCount())
-                {
-                    isDone_ = true;
-                }
             }
         }
         else
@@ -130,19 +116,12 @@
             dis.reset();
             if (timeStamp < timeLimit_)
             {
-                isDone_ = true;
                 return null;
             }
         }
         return column;
     }
 
-
-    public boolean isDone()
-    {
-        return isDone_;
-    }
-
     public DataInputBuffer next(String key, String cfName, SSTable ssTable) throws IOException
     {
         return ssTable.next(key, cfName, null, new IndexHelper.TimeRange(timeLimit_, Long.MAX_VALUE));

Modified: incubator/cassandra/trunk/test/unit/org/apache/cassandra/db/RangeFilterTest.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/test/unit/org/apache/cassandra/db/RangeFilterTest.java?rev=788776&r1=788775&r2=788776&view=diff
==============================================================================
--- incubator/cassandra/trunk/test/unit/org/apache/cassandra/db/RangeFilterTest.java (original)
+++ incubator/cassandra/trunk/test/unit/org/apache/cassandra/db/RangeFilterTest.java Fri Jun 26 17:26:36 2009
@@ -41,7 +41,6 @@
         ColumnFamily filteredCf = f.filter(cf.name(), cf);
         
         assertEquals(filteredCf.getColumnCount(),3);
-        assertFalse(f.isDone());
     }
     
     @Test
@@ -59,7 +58,6 @@
         ColumnFamily filteredCf = f.filter(cf.name(), cf);
         
         assertEquals(filteredCf.getColumnCount(),2);
-        assertTrue(f.isDone());
     }
 
     @Test
@@ -100,7 +98,6 @@
 
         col = filteredCf.getColumn("c");
         assertNotNull(col);
-        assertFalse(f.isDone());
     }
 
 }