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