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());
     }
 
 }


Reply via email to