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/09/26 14:54:13 UTC

svn commit: r819125 - in /incubator/cassandra/trunk/src/java/org/apache/cassandra/db: BinaryMemtable.java ColumnFamilyStore.java IFlushable.java Memtable.java

Author: jbellis
Date: Sat Sep 26 12:54:12 2009
New Revision: 819125

URL: http://svn.apache.org/viewvc?rev=819125&view=rev
Log:
r/m unnecessary SortedFlushable class.  Keeping a 2nd reference to the Flushable in question,
when it is only used to pass back to that Flushable for the write phase, was unnecessary & confusing.
patch by jbellis; tested for CASSANDRA-458 by Teodor Sigaev

Modified:
    incubator/cassandra/trunk/src/java/org/apache/cassandra/db/BinaryMemtable.java
    incubator/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
    incubator/cassandra/trunk/src/java/org/apache/cassandra/db/IFlushable.java
    incubator/cassandra/trunk/src/java/org/apache/cassandra/db/Memtable.java

Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/db/BinaryMemtable.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/db/BinaryMemtable.java?rev=819125&r1=819124&r2=819125&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/db/BinaryMemtable.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/db/BinaryMemtable.java Sat Sep 26 12:54:12 2009
@@ -37,7 +37,7 @@
 import org.cliffc.high_scale_lib.NonBlockingHashMap;
 import org.apache.cassandra.dht.IPartitioner;
 
-public class BinaryMemtable implements IFlushable
+public class BinaryMemtable implements IFlushable<DecoratedKey>
 {
     private static Logger logger_ = Logger.getLogger(BinaryMemtable.class);
     private int threshold_ = DatabaseDescriptor.getBMTThreshold() * 1024 * 1024;
@@ -122,23 +122,23 @@
         currentSize_.addAndGet(buffer.length + key.length());
     }
 
-    public ColumnFamilyStore.SortedFlushable getSortedContents()
+    public List<DecoratedKey> getSortedKeys()
     {
         assert !columnFamilies_.isEmpty();
         logger_.info("Sorting " + this);
         List<DecoratedKey> keys = new ArrayList<DecoratedKey>(columnFamilies_.keySet());
         Collections.sort(keys, partitioner_.getDecoratedKeyObjComparator());
-        return new ColumnFamilyStore.SortedFlushable(keys, this);
+        return keys;
     }
 
-    public SSTableReader writeSortedContents(ColumnFamilyStore.SortedFlushable sortedFlushable) throws IOException
+    public SSTableReader writeSortedContents(List<DecoratedKey> sortedKeys) throws IOException
     {
         logger_.info("Writing " + this);
         ColumnFamilyStore cfStore = Table.open(table_).getColumnFamilyStore(cfName_);
         String path = cfStore.getTempSSTablePath();
-        SSTableWriter writer = new SSTableWriter(path, sortedFlushable.keys.size(), StorageService.getPartitioner());
+        SSTableWriter writer = new SSTableWriter(path, sortedKeys.size(), StorageService.getPartitioner());
 
-        for (DecoratedKey key : (List<DecoratedKey>) sortedFlushable.keys)
+        for (DecoratedKey key : sortedKeys)
         {
             byte[] bytes = columnFamilies_.get(key);
             assert bytes.length > 0;

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=819125&r1=819124&r2=819125&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 Sat Sep 26 12:54:12 2009
@@ -924,14 +924,14 @@
         {
             public void run()
             {
-                final SortedFlushable sortedFlushable = flushable.getSortedContents();
+                final List sortedKeys = flushable.getSortedKeys();
                 flushWriter_.submit(new Runnable()
                 {
                     public void run()
                     {
                         try
                         {
-                            addSSTable(flushable.writeSortedContents(sortedFlushable));
+                            addSSTable(flushable.writeSortedContents(sortedKeys));
                         }
                         catch (IOException e)
                         {
@@ -1310,16 +1310,4 @@
     {
         memtable_.clearUnsafe();
     }
-
-    public static class SortedFlushable
-    {
-        public final List<?> keys;
-        public final IFlushable flushable;
-
-        public SortedFlushable(List<?> keys, IFlushable flushable)
-        {
-            this.keys = keys;
-            this.flushable = flushable;
-        }
-    }
 }

Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/db/IFlushable.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/db/IFlushable.java?rev=819125&r1=819124&r2=819125&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/db/IFlushable.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/db/IFlushable.java Sat Sep 26 12:54:12 2009
@@ -1,11 +1,12 @@
 package org.apache.cassandra.db;
 
 import java.io.IOException;
+import java.util.List;
 
 import org.apache.cassandra.io.SSTableReader;
 
-public interface IFlushable
+public interface IFlushable<T>
 {
-    public ColumnFamilyStore.SortedFlushable getSortedContents();
-    public SSTableReader writeSortedContents(ColumnFamilyStore.SortedFlushable sortedFlushable) throws IOException;
+    public List<T> getSortedKeys();
+    public SSTableReader writeSortedContents(List<T> sortedKeys) throws IOException;
 }

Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/db/Memtable.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/db/Memtable.java?rev=819125&r1=819124&r2=819125&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/db/Memtable.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/db/Memtable.java Sat Sep 26 12:54:12 2009
@@ -37,7 +37,7 @@
 
 import org.apache.log4j.Logger;
 
-public class Memtable implements Comparable<Memtable>, IFlushable
+public class Memtable implements Comparable<Memtable>, IFlushable<String>
 {
 	private static Logger logger_ = Logger.getLogger( Memtable.class );
 
@@ -170,7 +170,7 @@
     void flushOnRecovery() throws IOException {
         if (!isClean())
         {
-            writeSortedContents(getSortedContents());
+            writeSortedContents(getSortedKeys());
         }
     }
 
@@ -187,7 +187,7 @@
         return builder.toString();
     }
 
-    public ColumnFamilyStore.SortedFlushable getSortedContents()
+    public List<String> getSortedKeys()
     {
         logger_.info("Sorting " + this);
         // sort keys in the order they would be in when decorated
@@ -201,10 +201,10 @@
                 return dc.compare(partitioner.decorateKey(o1), partitioner.decorateKey(o2));
             }
         });
-        return new ColumnFamilyStore.SortedFlushable(orderedKeys, this);
+        return orderedKeys;
     }
 
-    public SSTableReader writeSortedContents(ColumnFamilyStore.SortedFlushable sortedFlushable) throws IOException
+    public SSTableReader writeSortedContents(List<String> sortedKeys) throws IOException
     {
         logger_.info("Writing " + this);
         IPartitioner<?> partitioner = StorageService.getPartitioner();
@@ -212,17 +212,14 @@
         SSTableWriter writer = new SSTableWriter(cfStore.getTempSSTablePath(), columnFamilies_.size(), StorageService.getPartitioner());
 
         DataOutputBuffer buffer = new DataOutputBuffer();
-        for (String key : (List<String>) sortedFlushable.keys)
+        for (String key : sortedKeys)
         {
             buffer.reset();
             ColumnFamily columnFamily = columnFamilies_.get(key);
-            if (columnFamily != null)
-            {
-                /* serialize the cf with column indexes */
-                ColumnFamily.serializer().serializeWithIndexes(columnFamily, buffer);
-                /* Now write the key and value to disk */
-                writer.append(partitioner.decorateKey(key), buffer);
-            }
+            /* serialize the cf with column indexes */
+            ColumnFamily.serializer().serializeWithIndexes(columnFamily, buffer);
+            /* Now write the key and value to disk */
+            writer.append(partitioner.decorateKey(key), buffer);
         }
         buffer.close();
         SSTableReader ssTable = writer.closeAndOpenReader();