Fix SSTableLoader fail when the loaded table contains dropped columns 
(CASSANDRA-13276)


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/42904c65
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/42904c65
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/42904c65

Branch: refs/heads/cassandra-3.11
Commit: 42904c65381d69351b130f64f9b2ba2425513a04
Parents: 638df6f
Author: adelapena <a.penya.gar...@gmail.com>
Authored: Thu Apr 20 13:19:25 2017 +0100
Committer: adelapena <a.penya.gar...@gmail.com>
Committed: Thu Apr 20 13:19:25 2017 +0100

----------------------------------------------------------------------
 CHANGES.txt                                     |  1 +
 .../utils/NativeSSTableLoaderClient.java        | 43 +++++++++++++++-----
 2 files changed, 34 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/42904c65/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 690c959..b6ca04b 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -26,6 +26,7 @@
  * Delete illegal character from StandardTokenizerImpl.jflex (CASSANDRA-13417)
  * Fix cqlsh automatic protocol downgrade regression (CASSANDRA-13307)
 Merged from 3.0:
+ * Fix SSTableLoader fail when the loaded table contains dropped columns 
(CASSANDRA-13276)
  * Avoid name clashes in CassandraIndexTest (CASSANDRA-13427)
  * Handling partially written hint files (CASSANDRA-12728)
  * Interrupt replaying hints on decommission (CASSANDRA-13308)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/42904c65/src/java/org/apache/cassandra/utils/NativeSSTableLoaderClient.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/utils/NativeSSTableLoaderClient.java 
b/src/java/org/apache/cassandra/utils/NativeSSTableLoaderClient.java
index 0b40fcb..f7fe968 100644
--- a/src/java/org/apache/cassandra/utils/NativeSSTableLoaderClient.java
+++ b/src/java/org/apache/cassandra/utils/NativeSSTableLoaderClient.java
@@ -18,7 +18,9 @@
 package org.apache.cassandra.utils;
 
 import java.net.InetAddress;
+import java.nio.ByteBuffer;
 import java.util.*;
+import java.util.concurrent.TimeUnit;
 
 import com.datastax.driver.core.*;
 
@@ -185,16 +187,29 @@ public class NativeSSTableLoaderClient extends 
SSTableLoader.Client
         for (Row colRow : session.execute(columnsQuery, keyspace, name))
             defs.add(createDefinitionFromRow(colRow, keyspace, name, types));
 
-        return CFMetaData.create(keyspace,
-                                 name,
-                                 id,
-                                 isDense,
-                                 isCompound,
-                                 isSuper,
-                                 isCounter,
-                                 isView,
-                                 defs,
-                                 partitioner);
+        CFMetaData metadata = CFMetaData.create(keyspace,
+                                                name,
+                                                id,
+                                                isDense,
+                                                isCompound,
+                                                isSuper,
+                                                isCounter,
+                                                isView,
+                                                defs,
+                                                partitioner);
+
+        String droppedColumnsQuery = String.format("SELECT * FROM %s.%s WHERE 
keyspace_name = ? AND table_name = ?",
+                                                   
SchemaConstants.SCHEMA_KEYSPACE_NAME,
+                                                   
SchemaKeyspace.DROPPED_COLUMNS);
+        Map<ByteBuffer, CFMetaData.DroppedColumn> droppedColumns = new 
HashMap<>();
+        for (Row colRow : session.execute(droppedColumnsQuery, keyspace, name))
+        {
+            CFMetaData.DroppedColumn droppedColumn = 
createDroppedColumnFromRow(colRow, keyspace);
+            
droppedColumns.put(UTF8Type.instance.decompose(droppedColumn.name), 
droppedColumn);
+        }
+        metadata.droppedColumns(droppedColumns);
+
+        return metadata;
     }
 
     private static ColumnDefinition createDefinitionFromRow(Row row, String 
keyspace, String table, Types types)
@@ -212,4 +227,12 @@ public class NativeSSTableLoaderClient extends 
SSTableLoader.Client
         ColumnDefinition.Kind kind = 
ColumnDefinition.Kind.valueOf(row.getString("kind").toUpperCase());
         return new ColumnDefinition(keyspace, table, name, type, position, 
kind);
     }
+
+    private static CFMetaData.DroppedColumn createDroppedColumnFromRow(Row 
row, String keyspace)
+    {
+        String name = row.getString("column_name");
+        AbstractType<?> type = CQLTypeParser.parse(keyspace, 
row.getString("type"), Types.none());
+        long droppedTime = 
TimeUnit.MILLISECONDS.toMicros(row.getTimestamp("dropped_time").getTime());
+        return new CFMetaData.DroppedColumn(name, type, droppedTime);
+    }
 }

Reply via email to