You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by al...@apache.org on 2018/07/31 19:33:00 UTC

[3/3] cassandra git commit: Merge branch 'cassandra-3.11' into trunk

Merge branch 'cassandra-3.11' into trunk


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

Branch: refs/heads/trunk
Commit: 62423f6bae1b2f387188a14db6640f749c5ddaf4
Parents: 9bc15ba 559d61a
Author: Aleksey Yeshchenko <al...@apple.com>
Authored: Tue Jul 31 20:31:08 2018 +0100
Committer: Aleksey Yeshchenko <al...@apple.com>
Committed: Tue Jul 31 20:31:08 2018 +0100

----------------------------------------------------------------------
 CHANGES.txt                                                     | 5 +++++
 src/java/org/apache/cassandra/cql3/ColumnIdentifier.java        | 5 +++++
 src/java/org/apache/cassandra/schema/ColumnMetadata.java        | 1 -
 src/java/org/apache/cassandra/schema/SchemaKeyspace.java        | 4 +---
 .../org/apache/cassandra/utils/NativeSSTableLoaderClient.java   | 4 +---
 5 files changed, 12 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/62423f6b/CHANGES.txt
----------------------------------------------------------------------
diff --cc CHANGES.txt
index 8afc0d6,3557863..fb9b7c4
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -1,273 -1,8 +1,278 @@@
 +4.0
 + * Fix toDate function for timestamp arguments (CASSANDRA-14502)
 + * Revert running dtests by default in circleci (CASSANDRA-14614)
 + * Stream entire SSTables when possible (CASSANDRA-14556)
 + * Add experimental support for Java 11 (CASSANDRA-9608)
 + * Make PeriodicCommitLogService.blockWhenSyncLagsNanos configurable (CASSANDRA-14580)
 + * Improve logging in MessageInHandler's constructor (CASSANDRA-14576)
 + * Set broadcast address in internode messaging handshake (CASSANDRA-14579)
 + * Wait for schema agreement prior to building MVs (CASSANDRA-14571)
 + * Make all DDL statements idempotent and not dependent on global state (CASSANDRA-13426)
 + * Bump the hints messaging version to match the current one (CASSANDRA-14536)
 + * OffsetAwareConfigurationLoader doesn't set ssl storage port causing bind errors in CircleCI (CASSANDRA-14546)
 + * Report why native_transport_port fails to bind (CASSANDRA-14544)
 + * Optimize internode messaging protocol (CASSANDRA-14485)
 + * Internode messaging handshake sends wrong messaging version number (CASSANDRA-14540)
 + * Add a virtual table to expose active client connections (CASSANDRA-14458)
 + * Clean up and refactor client metrics (CASSANDRA-14524)
 + * Nodetool import row cache invalidation races with adding sstables to tracker (CASSANDRA-14529)
 + * Fix assertions in LWTs after TableMetadata was made immutable (CASSANDRA-14356)
 + * Abort compactions quicker (CASSANDRA-14397)
 + * Support light-weight transactions in cassandra-stress (CASSANDRA-13529)
 + * Make AsyncOneResponse use the correct timeout (CASSANDRA-14509)
 + * Add option to sanity check tombstones on reads/compactions (CASSANDRA-14467)
 + * Add a virtual table to expose all running sstable tasks (CASSANDRA-14457)
 + * Let nodetool import take a list of directories (CASSANDRA-14442)
 + * Avoid unneeded memory allocations / cpu for disabled log levels (CASSANDRA-14488)
 + * Implement virtual keyspace interface (CASSANDRA-7622)
 + * nodetool import cleanup and improvements (CASSANDRA-14417)
 + * Bump jackson version to >= 2.9.5 (CASSANDRA-14427)
 + * Allow nodetool toppartitions without specifying table (CASSANDRA-14360)
 + * Audit logging for database activity (CASSANDRA-12151)
 + * Clean up build artifacts in docs container (CASSANDRA-14432)
 + * Minor network authz improvements (Cassandra-14413)
 + * Automatic sstable upgrades (CASSANDRA-14197)
 + * Replace deprecated junit.framework.Assert usages with org.junit.Assert (CASSANDRA-14431)
 + * Cassandra-stress throws NPE if insert section isn't specified in user profile (CASSSANDRA-14426)
 + * List clients by protocol versions `nodetool clientstats --by-protocol` (CASSANDRA-14335)
 + * Improve LatencyMetrics performance by reducing write path processing (CASSANDRA-14281)
 + * Add network authz (CASSANDRA-13985)
 + * Use the correct IP/Port for Streaming when localAddress is left unbound (CASSANDRA-14389)
 + * nodetool listsnapshots is missing local system keyspace snapshots (CASSANDRA-14381)
 + * Remove StreamCoordinator.streamExecutor thread pool (CASSANDRA-14402)
 + * Rename nodetool --with-port to --print-port to disambiguate from --port (CASSANDRA-14392)
 + * Client TOPOLOGY_CHANGE messages have wrong port. (CASSANDRA-14398)
 + * Add ability to load new SSTables from a separate directory (CASSANDRA-6719)
 + * Eliminate background repair and probablistic read_repair_chance table options
 +   (CASSANDRA-13910)
 + * Bind to correct local address in 4.0 streaming (CASSANDRA-14362)
 + * Use standard Amazon naming for datacenter and rack in Ec2Snitch (CASSANDRA-7839)
 + * Fix junit failure for SSTableReaderTest (CASSANDRA-14387)
 + * Abstract write path for pluggable storage (CASSANDRA-14118)
 + * nodetool describecluster should be more informative (CASSANDRA-13853)
 + * Compaction performance improvements (CASSANDRA-14261) 
 + * Refactor Pair usage to avoid boxing ints/longs (CASSANDRA-14260)
 + * Add options to nodetool tablestats to sort and limit output (CASSANDRA-13889)
 + * Rename internals to reflect CQL vocabulary (CASSANDRA-14354)
 + * Add support for hybrid MIN(), MAX() speculative retry policies
 +   (CASSANDRA-14293, CASSANDRA-14338, CASSANDRA-14352)
 + * Fix some regressions caused by 14058 (CASSANDRA-14353)
 + * Abstract repair for pluggable storage (CASSANDRA-14116)
 + * Add meaningful toString() impls (CASSANDRA-13653)
 + * Add sstableloader option to accept target keyspace name (CASSANDRA-13884)
 + * Move processing of EchoMessage response to gossip stage (CASSANDRA-13713)
 + * Add coordinator write metric per CF (CASSANDRA-14232)
 + * Correct and clarify SSLFactory.getSslContext method and call sites (CASSANDRA-14314)
 + * Handle static and partition deletion properly on ThrottledUnfilteredIterator (CASSANDRA-14315)
 + * NodeTool clientstats should show SSL Cipher (CASSANDRA-14322)
 + * Add ability to specify driver name and version (CASSANDRA-14275)
 + * Abstract streaming for pluggable storage (CASSANDRA-14115)
 + * Forced incremental repairs should promote sstables if they can (CASSANDRA-14294)
 + * Use Murmur3 for validation compactions (CASSANDRA-14002)
 + * Comma at the end of the seed list is interpretated as localhost (CASSANDRA-14285)
 + * Refactor read executor and response resolver, abstract read repair (CASSANDRA-14058)
 + * Add optional startup delay to wait until peers are ready (CASSANDRA-13993)
 + * Add a few options to nodetool verify (CASSANDRA-14201)
 + * CVE-2017-5929 Security vulnerability and redefine default log rotation policy (CASSANDRA-14183)
 + * Use JVM default SSL validation algorithm instead of custom default (CASSANDRA-13259)
 + * Better document in code InetAddressAndPort usage post 7544, incorporate port into UUIDGen node (CASSANDRA-14226)
 + * Fix sstablemetadata date string for minLocalDeletionTime (CASSANDRA-14132)
 + * Make it possible to change neverPurgeTombstones during runtime (CASSANDRA-14214)
 + * Remove GossipDigestSynVerbHandler#doSort() (CASSANDRA-14174)
 + * Add nodetool clientlist (CASSANDRA-13665)
 + * Revert ProtocolVersion changes from CASSANDRA-7544 (CASSANDRA-14211)
 + * Non-disruptive seed node list reload (CASSANDRA-14190)
 + * Nodetool tablehistograms to print statics for all the tables (CASSANDRA-14185)
 + * Migrate dtests to use pytest and python3 (CASSANDRA-14134)
 + * Allow storage port to be configurable per node (CASSANDRA-7544)
 + * Make sub-range selection for non-frozen collections return null instead of empty (CASSANDRA-14182)
 + * BloomFilter serialization format should not change byte ordering (CASSANDRA-9067)
 + * Remove unused on-heap BloomFilter implementation (CASSANDRA-14152)
 + * Delete temp test files on exit (CASSANDRA-14153)
 + * Make PartitionUpdate and Mutation immutable (CASSANDRA-13867)
 + * Fix CommitLogReplayer exception for CDC data (CASSANDRA-14066)
 + * Fix cassandra-stress startup failure (CASSANDRA-14106)
 + * Remove initialDirectories from CFS (CASSANDRA-13928)
 + * Fix trivial log format error (CASSANDRA-14015)
 + * Allow sstabledump to do a json object per partition (CASSANDRA-13848)
 + * Add option to optimise merkle tree comparison across replicas (CASSANDRA-3200)
 + * Remove unused and deprecated methods from AbstractCompactionStrategy (CASSANDRA-14081)
 + * Fix Distribution.average in cassandra-stress (CASSANDRA-14090)
 + * Support a means of logging all queries as they were invoked (CASSANDRA-13983)
 + * Presize collections (CASSANDRA-13760)
 + * Add GroupCommitLogService (CASSANDRA-13530)
 + * Parallelize initial materialized view build (CASSANDRA-12245)
 + * Fix flaky SecondaryIndexManagerTest.assert[Not]MarkedAsBuilt (CASSANDRA-13965)
 + * Make LWTs send resultset metadata on every request (CASSANDRA-13992)
 + * Fix flaky indexWithFailedInitializationIsNotQueryableAfterPartialRebuild (CASSANDRA-13963)
 + * Introduce leaf-only iterator (CASSANDRA-9988)
 + * Upgrade Guava to 23.3 and Airline to 0.8 (CASSANDRA-13997)
 + * Allow only one concurrent call to StatusLogger (CASSANDRA-12182)
 + * Refactoring to specialised functional interfaces (CASSANDRA-13982)
 + * Speculative retry should allow more friendly params (CASSANDRA-13876)
 + * Throw exception if we send/receive repair messages to incompatible nodes (CASSANDRA-13944)
 + * Replace usages of MessageDigest with Guava's Hasher (CASSANDRA-13291)
 + * Add nodetool cmd to print hinted handoff window (CASSANDRA-13728)
 + * Fix some alerts raised by static analysis (CASSANDRA-13799)
 + * Checksum sstable metadata (CASSANDRA-13321, CASSANDRA-13593)
 + * Add result set metadata to prepared statement MD5 hash calculation (CASSANDRA-10786)
 + * Refactor GcCompactionTest to avoid boxing (CASSANDRA-13941)
 + * Expose recent histograms in JmxHistograms (CASSANDRA-13642)
 + * Fix buffer length comparison when decompressing in netty-based streaming (CASSANDRA-13899)
 + * Properly close StreamCompressionInputStream to release any ByteBuf (CASSANDRA-13906)
 + * Add SERIAL and LOCAL_SERIAL support for cassandra-stress (CASSANDRA-13925)
 + * LCS needlessly checks for L0 STCS candidates multiple times (CASSANDRA-12961)
 + * Correctly close netty channels when a stream session ends (CASSANDRA-13905)
 + * Update lz4 to 1.4.0 (CASSANDRA-13741)
 + * Optimize Paxos prepare and propose stage for local requests (CASSANDRA-13862)
 + * Throttle base partitions during MV repair streaming to prevent OOM (CASSANDRA-13299)
 + * Use compaction threshold for STCS in L0 (CASSANDRA-13861)
 + * Fix problem with min_compress_ratio: 1 and disallow ratio < 1 (CASSANDRA-13703)
 + * Add extra information to SASI timeout exception (CASSANDRA-13677)
 + * Add incremental repair support for --hosts, --force, and subrange repair (CASSANDRA-13818)
 + * Rework CompactionStrategyManager.getScanners synchronization (CASSANDRA-13786)
 + * Add additional unit tests for batch behavior, TTLs, Timestamps (CASSANDRA-13846)
 + * Add keyspace and table name in schema validation exception (CASSANDRA-13845)
 + * Emit metrics whenever we hit tombstone failures and warn thresholds (CASSANDRA-13771)
 + * Make netty EventLoopGroups daemon threads (CASSANDRA-13837)
 + * Race condition when closing stream sessions (CASSANDRA-13852)
 + * NettyFactoryTest is failing in trunk on macOS (CASSANDRA-13831)
 + * Allow changing log levels via nodetool for related classes (CASSANDRA-12696)
 + * Add stress profile yaml with LWT (CASSANDRA-7960)
 + * Reduce memory copies and object creations when acting on ByteBufs (CASSANDRA-13789)
 + * Simplify mx4j configuration (Cassandra-13578)
 + * Fix trigger example on 4.0 (CASSANDRA-13796)
 + * Force minumum timeout value (CASSANDRA-9375)
 + * Use netty for streaming (CASSANDRA-12229)
 + * Use netty for internode messaging (CASSANDRA-8457)
 + * Add bytes repaired/unrepaired to nodetool tablestats (CASSANDRA-13774)
 + * Don't delete incremental repair sessions if they still have sstables (CASSANDRA-13758)
 + * Fix pending repair manager index out of bounds check (CASSANDRA-13769)
 + * Don't use RangeFetchMapCalculator when RF=1 (CASSANDRA-13576)
 + * Don't optimise trivial ranges in RangeFetchMapCalculator (CASSANDRA-13664)
 + * Use an ExecutorService for repair commands instead of new Thread(..).start() (CASSANDRA-13594)
 + * Fix race / ref leak in anticompaction (CASSANDRA-13688)
 + * Expose tasks queue length via JMX (CASSANDRA-12758)
 + * Fix race / ref leak in PendingRepairManager (CASSANDRA-13751)
 + * Enable ppc64le runtime as unsupported architecture (CASSANDRA-13615)
 + * Improve sstablemetadata output (CASSANDRA-11483)
 + * Support for migrating legacy users to roles has been dropped (CASSANDRA-13371)
 + * Introduce error metrics for repair (CASSANDRA-13387)
 + * Refactoring to primitive functional interfaces in AuthCache (CASSANDRA-13732)
 + * Update metrics to 3.1.5 (CASSANDRA-13648)
 + * batch_size_warn_threshold_in_kb can now be set at runtime (CASSANDRA-13699)
 + * Avoid always rebuilding secondary indexes at startup (CASSANDRA-13725)
 + * Upgrade JMH from 1.13 to 1.19 (CASSANDRA-13727)
 + * Upgrade SLF4J from 1.7.7 to 1.7.25 (CASSANDRA-12996)
 + * Default for start_native_transport now true if not set in config (CASSANDRA-13656)
 + * Don't add localhost to the graph when calculating where to stream from (CASSANDRA-13583)
 + * Make CDC availability more deterministic via hard-linking (CASSANDRA-12148)
 + * Allow skipping equality-restricted clustering columns in ORDER BY clause (CASSANDRA-10271)
 + * Use common nowInSec for validation compactions (CASSANDRA-13671)
 + * Improve handling of IR prepare failures (CASSANDRA-13672)
 + * Send IR coordinator messages synchronously (CASSANDRA-13673)
 + * Flush system.repair table before IR finalize promise (CASSANDRA-13660)
 + * Fix column filter creation for wildcard queries (CASSANDRA-13650)
 + * Add 'nodetool getbatchlogreplaythrottle' and 'nodetool setbatchlogreplaythrottle' (CASSANDRA-13614)
 + * fix race condition in PendingRepairManager (CASSANDRA-13659)
 + * Allow noop incremental repair state transitions (CASSANDRA-13658)
 + * Run repair with down replicas (CASSANDRA-10446)
 + * Added started & completed repair metrics (CASSANDRA-13598)
 + * Added started & completed repair metrics (CASSANDRA-13598)
 + * Improve secondary index (re)build failure and concurrency handling (CASSANDRA-10130)
 + * Improve calculation of available disk space for compaction (CASSANDRA-13068)
 + * Change the accessibility of RowCacheSerializer for third party row cache plugins (CASSANDRA-13579)
 + * Allow sub-range repairs for a preview of repaired data (CASSANDRA-13570)
 + * NPE in IR cleanup when columnfamily has no sstables (CASSANDRA-13585)
 + * Fix Randomness of stress values (CASSANDRA-12744)
 + * Allow selecting Map values and Set elements (CASSANDRA-7396)
 + * Fast and garbage-free Streaming Histogram (CASSANDRA-13444)
 + * Update repairTime for keyspaces on completion (CASSANDRA-13539)
 + * Add configurable upper bound for validation executor threads (CASSANDRA-13521)
 + * Bring back maxHintTTL propery (CASSANDRA-12982)
 + * Add testing guidelines (CASSANDRA-13497)
 + * Add more repair metrics (CASSANDRA-13531)
 + * RangeStreamer should be smarter when picking endpoints for streaming (CASSANDRA-4650)
 + * Avoid rewrapping an exception thrown for cache load functions (CASSANDRA-13367)
 + * Log time elapsed for each incremental repair phase (CASSANDRA-13498)
 + * Add multiple table operation support to cassandra-stress (CASSANDRA-8780)
 + * Fix incorrect cqlsh results when selecting same columns multiple times (CASSANDRA-13262)
 + * Fix WriteResponseHandlerTest is sensitive to test execution order (CASSANDRA-13421)
 + * Improve incremental repair logging (CASSANDRA-13468)
 + * Start compaction when incremental repair finishes (CASSANDRA-13454)
 + * Add repair streaming preview (CASSANDRA-13257)
 + * Cleanup isIncremental/repairedAt usage (CASSANDRA-13430)
 + * Change protocol to allow sending key space independent of query string (CASSANDRA-10145)
 + * Make gc_log and gc_warn settable at runtime (CASSANDRA-12661)
 + * Take number of files in L0 in account when estimating remaining compaction tasks (CASSANDRA-13354)
 + * Skip building views during base table streams on range movements (CASSANDRA-13065)
 + * Improve error messages for +/- operations on maps and tuples (CASSANDRA-13197)
 + * Remove deprecated repair JMX APIs (CASSANDRA-11530)
 + * Fix version check to enable streaming keep-alive (CASSANDRA-12929)
 + * Make it possible to monitor an ideal consistency level separate from actual consistency level (CASSANDRA-13289)
 + * Outbound TCP connections ignore internode authenticator (CASSANDRA-13324)
 + * Upgrade junit from 4.6 to 4.12 (CASSANDRA-13360)
 + * Cleanup ParentRepairSession after repairs (CASSANDRA-13359)
 + * Upgrade snappy-java to 1.1.2.6 (CASSANDRA-13336)
 + * Incremental repair not streaming correct sstables (CASSANDRA-13328)
 + * Upgrade the jna version to 4.3.0 (CASSANDRA-13300)
 + * Add the currentTimestamp, currentDate, currentTime and currentTimeUUID functions (CASSANDRA-13132)
 + * Remove config option index_interval (CASSANDRA-10671)
 + * Reduce lock contention for collection types and serializers (CASSANDRA-13271)
 + * Make it possible to override MessagingService.Verb ids (CASSANDRA-13283)
 + * Avoid synchronized on prepareForRepair in ActiveRepairService (CASSANDRA-9292)
 + * Adds the ability to use uncompressed chunks in compressed files (CASSANDRA-10520)
 + * Don't flush sstables when streaming for incremental repair (CASSANDRA-13226)
 + * Remove unused method (CASSANDRA-13227)
 + * Fix minor bugs related to #9143 (CASSANDRA-13217)
 + * Output warning if user increases RF (CASSANDRA-13079)
 + * Remove pre-3.0 streaming compatibility code for 4.0 (CASSANDRA-13081)
 + * Add support for + and - operations on dates (CASSANDRA-11936)
 + * Fix consistency of incrementally repaired data (CASSANDRA-9143)
 + * Increase commitlog version (CASSANDRA-13161)
 + * Make TableMetadata immutable, optimize Schema (CASSANDRA-9425)
 + * Refactor ColumnCondition (CASSANDRA-12981)
 + * Parallelize streaming of different keyspaces (CASSANDRA-4663)
 + * Improved compactions metrics (CASSANDRA-13015)
 + * Speed-up start-up sequence by avoiding un-needed flushes (CASSANDRA-13031)
 + * Use Caffeine (W-TinyLFU) for on-heap caches (CASSANDRA-10855)
 + * Thrift removal (CASSANDRA-11115)
 + * Remove pre-3.0 compatibility code for 4.0 (CASSANDRA-12716)
 + * Add column definition kind to dropped columns in schema (CASSANDRA-12705)
 + * Add (automate) Nodetool Documentation (CASSANDRA-12672)
 + * Update bundled cqlsh python driver to 3.7.0 (CASSANDRA-12736)
 + * Reject invalid replication settings when creating or altering a keyspace (CASSANDRA-12681)
 + * Clean up the SSTableReader#getScanner API wrt removal of RateLimiter (CASSANDRA-12422)
 + * Use new token allocation for non bootstrap case as well (CASSANDRA-13080)
 + * Avoid byte-array copy when key cache is disabled (CASSANDRA-13084)
 + * Require forceful decommission if number of nodes is less than replication factor (CASSANDRA-12510)
 + * Allow IN restrictions on column families with collections (CASSANDRA-12654)
 + * Log message size in trace message in OutboundTcpConnection (CASSANDRA-13028)
 + * Add timeUnit Days for cassandra-stress (CASSANDRA-13029)
 + * Add mutation size and batch metrics (CASSANDRA-12649)
 + * Add method to get size of endpoints to TokenMetadata (CASSANDRA-12999)
 + * Expose time spent waiting in thread pool queue (CASSANDRA-8398)
 + * Conditionally update index built status to avoid unnecessary flushes (CASSANDRA-12969)
 + * cqlsh auto completion: refactor definition of compaction strategy options (CASSANDRA-12946)
 + * Add support for arithmetic operators (CASSANDRA-11935)
 + * Add histogram for delay to deliver hints (CASSANDRA-13234)
 + * Fix cqlsh automatic protocol downgrade regression (CASSANDRA-13307)
 + * Changing `max_hint_window_in_ms` at runtime (CASSANDRA-11720)
 + * Trivial format error in StorageProxy (CASSANDRA-13551)
 + * Nodetool repair can hang forever if we lose the notification for the repair completing/failing (CASSANDRA-13480)
 + * Anticompaction can cause noisy log messages (CASSANDRA-13684)
 + * Switch to client init for sstabledump (CASSANDRA-13683)
 + * CQLSH: Don't pause when capturing data (CASSANDRA-13743)
 + * nodetool clearsnapshot requires --all to clear all snapshots (CASSANDRA-13391)
 + * Correctly count range tombstones in traces and tombstone thresholds (CASSANDRA-8527)
 + * cqlshrc.sample uses incorrect option for time formatting (CASSANDRA-14243)
 +
 +
+ 3.11.4
+ Merged from 3.0:
+  * Fix reading columns with non-UTF names from schema (CASSANDRA-14468)
+ 
+ 
  3.11.3
   * Validate supported column type with SASI analyzer (CASSANDRA-13669)
   * Remove BTree.Builder Recycler to reduce memory usage (CASSANDRA-13929)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/62423f6b/src/java/org/apache/cassandra/cql3/ColumnIdentifier.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cassandra/blob/62423f6b/src/java/org/apache/cassandra/schema/ColumnMetadata.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/schema/ColumnMetadata.java
index b6e743b,0000000..e6547d8
mode 100644,000000..100644
--- a/src/java/org/apache/cassandra/schema/ColumnMetadata.java
+++ b/src/java/org/apache/cassandra/schema/ColumnMetadata.java
@@@ -1,655 -1,0 +1,654 @@@
 +/*
 + * 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.schema;
 +
 +import java.nio.ByteBuffer;
 +import java.util.*;
 +import java.util.function.Predicate;
 +
 +import com.google.common.annotations.VisibleForTesting;
 +import com.google.common.base.MoreObjects;
 +import com.google.common.collect.Collections2;
 +
 +import org.apache.cassandra.cql3.*;
 +import org.apache.cassandra.cql3.selection.Selectable;
 +import org.apache.cassandra.cql3.selection.Selector;
 +import org.apache.cassandra.cql3.selection.SimpleSelector;
 +import org.apache.cassandra.db.rows.*;
 +import org.apache.cassandra.db.marshal.*;
 +import org.apache.cassandra.exceptions.InvalidRequestException;
 +import org.apache.cassandra.serializers.MarshalException;
 +import org.apache.cassandra.utils.ByteBufferUtil;
 +import org.github.jamm.Unmetered;
 +
 +@Unmetered
 +public final class ColumnMetadata extends ColumnSpecification implements Selectable, Comparable<ColumnMetadata>
 +{
 +    public static final Comparator<Object> asymmetricColumnDataComparator =
 +        (a, b) -> ((ColumnData) a).column().compareTo((ColumnMetadata) b);
 +
 +    public static final int NO_POSITION = -1;
 +
 +    public enum ClusteringOrder
 +    {
 +        ASC, DESC, NONE
 +    }
 +
 +    /**
 +     * The type of CQL3 column this definition represents.
 +     * There is 4 main type of CQL3 columns: those parts of the partition key,
 +     * those parts of the clustering columns and amongst the others, regular and
 +     * static ones.
 +     *
 +     * IMPORTANT: this enum is serialized as toString() and deserialized by calling
 +     * Kind.valueOf(), so do not override toString() or rename existing values.
 +     */
 +    public enum Kind
 +    {
 +        // NOTE: if adding a new type, must modify comparisonOrder
 +        PARTITION_KEY,
 +        CLUSTERING,
 +        REGULAR,
 +        STATIC;
 +
 +        public boolean isPrimaryKeyKind()
 +        {
 +            return this == PARTITION_KEY || this == CLUSTERING;
 +        }
 +
 +    }
 +
 +    public final Kind kind;
 +
 +    /*
 +     * If the column is a partition key or clustering column, its position relative to
 +     * other columns of the same kind. Otherwise,  NO_POSITION (-1).
 +     *
 +     * Note that partition key and clustering columns are numbered separately so
 +     * the first clustering column is 0.
 +     */
 +    private final int position;
 +
 +    private final Comparator<CellPath> cellPathComparator;
 +    private final Comparator<Object> asymmetricCellPathComparator;
 +    private final Comparator<? super Cell> cellComparator;
 +
 +    private int hash;
 +
 +    /**
 +     * These objects are compared frequently, so we encode several of their comparison components
 +     * into a single long value so that this can be done efficiently
 +     */
 +    private final long comparisonOrder;
 +
 +    private static long comparisonOrder(Kind kind, boolean isComplex, long position, ColumnIdentifier name)
 +    {
 +        assert position >= 0 && position < 1 << 12;
 +        return   (((long) kind.ordinal()) << 61)
 +               | (isComplex ? 1L << 60 : 0)
 +               | (position << 48)
 +               | (name.prefixComparison >>> 16);
 +    }
 +
 +    public static ColumnMetadata partitionKeyColumn(TableMetadata table, ByteBuffer name, AbstractType<?> type, int position)
 +    {
 +        return new ColumnMetadata(table, name, type, position, Kind.PARTITION_KEY);
 +    }
 +
 +    public static ColumnMetadata partitionKeyColumn(String keyspace, String table, String name, AbstractType<?> type, int position)
 +    {
 +        return new ColumnMetadata(keyspace, table, ColumnIdentifier.getInterned(name, true), type, position, Kind.PARTITION_KEY);
 +    }
 +
 +    public static ColumnMetadata clusteringColumn(TableMetadata table, ByteBuffer name, AbstractType<?> type, int position)
 +    {
 +        return new ColumnMetadata(table, name, type, position, Kind.CLUSTERING);
 +    }
 +
 +    public static ColumnMetadata clusteringColumn(String keyspace, String table, String name, AbstractType<?> type, int position)
 +    {
 +        return new ColumnMetadata(keyspace, table, ColumnIdentifier.getInterned(name, true), type, position, Kind.CLUSTERING);
 +    }
 +
 +    public static ColumnMetadata regularColumn(TableMetadata table, ByteBuffer name, AbstractType<?> type)
 +    {
 +        return new ColumnMetadata(table, name, type, NO_POSITION, Kind.REGULAR);
 +    }
 +
 +    public static ColumnMetadata regularColumn(String keyspace, String table, String name, AbstractType<?> type)
 +    {
 +        return new ColumnMetadata(keyspace, table, ColumnIdentifier.getInterned(name, true), type, NO_POSITION, Kind.REGULAR);
 +    }
 +
 +    public static ColumnMetadata staticColumn(TableMetadata table, ByteBuffer name, AbstractType<?> type)
 +    {
 +        return new ColumnMetadata(table, name, type, NO_POSITION, Kind.STATIC);
 +    }
 +
 +    public static ColumnMetadata staticColumn(String keyspace, String table, String name, AbstractType<?> type)
 +    {
 +        return new ColumnMetadata(keyspace, table, ColumnIdentifier.getInterned(name, true), type, NO_POSITION, Kind.STATIC);
 +    }
 +
 +    public ColumnMetadata(TableMetadata table, ByteBuffer name, AbstractType<?> type, int position, Kind kind)
 +    {
 +        this(table.keyspace,
 +             table.name,
 +             ColumnIdentifier.getInterned(name, table.columnDefinitionNameComparator(kind)),
 +             type,
 +             position,
 +             kind);
 +    }
 +
 +    @VisibleForTesting
 +    public ColumnMetadata(String ksName,
 +                          String cfName,
 +                          ColumnIdentifier name,
 +                          AbstractType<?> type,
 +                          int position,
 +                          Kind kind)
 +    {
 +        super(ksName, cfName, name, type);
 +        assert name != null && type != null && kind != null;
-         assert name.isInterned();
 +        assert (position == NO_POSITION) == !kind.isPrimaryKeyKind(); // The position really only make sense for partition and clustering columns (and those must have one),
 +                                                                      // so make sure we don't sneak it for something else since it'd breaks equals()
 +        this.kind = kind;
 +        this.position = position;
 +        this.cellPathComparator = makeCellPathComparator(kind, type);
 +        this.cellComparator = cellPathComparator == null ? ColumnData.comparator : (a, b) -> cellPathComparator.compare(a.path(), b.path());
 +        this.asymmetricCellPathComparator = cellPathComparator == null ? null : (a, b) -> cellPathComparator.compare(((Cell)a).path(), (CellPath) b);
 +        this.comparisonOrder = comparisonOrder(kind, isComplex(), Math.max(0, position), name);
 +    }
 +
 +    private static Comparator<CellPath> makeCellPathComparator(Kind kind, AbstractType<?> type)
 +    {
 +        if (kind.isPrimaryKeyKind() || !type.isMultiCell())
 +            return null;
 +
 +        AbstractType<?> nameComparator = type.isCollection()
 +                                       ? ((CollectionType) type).nameComparator()
 +                                       : ((UserType) type).nameComparator();
 +
 +
 +        return (path1, path2) ->
 +        {
 +            if (path1.size() == 0 || path2.size() == 0)
 +            {
 +                if (path1 == CellPath.BOTTOM)
 +                    return path2 == CellPath.BOTTOM ? 0 : -1;
 +                if (path1 == CellPath.TOP)
 +                    return path2 == CellPath.TOP ? 0 : 1;
 +                return path2 == CellPath.BOTTOM ? 1 : -1;
 +            }
 +
 +            // This will get more complicated once we have non-frozen UDT and nested collections
 +            assert path1.size() == 1 && path2.size() == 1;
 +            return nameComparator.compare(path1.get(0), path2.get(0));
 +        };
 +    }
 +
 +    public ColumnMetadata copy()
 +    {
 +        return new ColumnMetadata(ksName, cfName, name, type, position, kind);
 +    }
 +
 +    public ColumnMetadata withNewName(ColumnIdentifier newName)
 +    {
 +        return new ColumnMetadata(ksName, cfName, newName, type, position, kind);
 +    }
 +
 +    public ColumnMetadata withNewType(AbstractType<?> newType)
 +    {
 +        return new ColumnMetadata(ksName, cfName, name, newType, position, kind);
 +    }
 +
 +    public boolean isPartitionKey()
 +    {
 +        return kind == Kind.PARTITION_KEY;
 +    }
 +
 +    public boolean isClusteringColumn()
 +    {
 +        return kind == Kind.CLUSTERING;
 +    }
 +
 +    public boolean isStatic()
 +    {
 +        return kind == Kind.STATIC;
 +    }
 +
 +    public boolean isRegular()
 +    {
 +        return kind == Kind.REGULAR;
 +    }
 +
 +    public ClusteringOrder clusteringOrder()
 +    {
 +        if (!isClusteringColumn())
 +            return ClusteringOrder.NONE;
 +
 +        return type.isReversed() ? ClusteringOrder.DESC : ClusteringOrder.ASC;
 +    }
 +
 +    public int position()
 +    {
 +        return position;
 +    }
 +
 +    @Override
 +    public boolean equals(Object o)
 +    {
 +        if (this == o)
 +            return true;
 +
 +        if (!(o instanceof ColumnMetadata))
 +            return false;
 +
 +        ColumnMetadata cd = (ColumnMetadata) o;
 +
 +        return equalsWithoutType(cd) && type.equals(cd.type);
 +    }
 +
 +    private boolean equalsWithoutType(ColumnMetadata other)
 +    {
 +        return name.equals(other.name)
 +            && kind == other.kind
 +            && position == other.position
 +            && ksName.equals(other.ksName)
 +            && cfName.equals(other.cfName);
 +    }
 +
 +    Optional<Difference> compare(ColumnMetadata other)
 +    {
 +        if (!equalsWithoutType(other))
 +            return Optional.of(Difference.SHALLOW);
 +
 +        if (type.equals(other.type))
 +            return Optional.empty();
 +
 +        return type.asCQL3Type().toString().equals(other.type.asCQL3Type().toString())
 +             ? Optional.of(Difference.DEEP)
 +             : Optional.of(Difference.SHALLOW);
 +    }
 +
 +    @Override
 +    public int hashCode()
 +    {
 +        // This achieves the same as Objects.hashcode, but avoids the object array allocation
 +        // which features significantly in the allocation profile and caches the result.
 +        int result = hash;
 +        if (result == 0)
 +        {
 +            result = 31 + (ksName == null ? 0 : ksName.hashCode());
 +            result = 31 * result + (cfName == null ? 0 : cfName.hashCode());
 +            result = 31 * result + (name == null ? 0 : name.hashCode());
 +            result = 31 * result + (type == null ? 0 : type.hashCode());
 +            result = 31 * result + (kind == null ? 0 : kind.hashCode());
 +            result = 31 * result + position;
 +            hash = result;
 +        }
 +        return result;
 +    }
 +
 +    @Override
 +    public String toString()
 +    {
 +        return name.toString();
 +    }
 +
 +    public String debugString()
 +    {
 +        return MoreObjects.toStringHelper(this)
 +                          .add("name", name)
 +                          .add("type", type)
 +                          .add("kind", kind)
 +                          .add("position", position)
 +                          .toString();
 +    }
 +
 +    public boolean isPrimaryKeyColumn()
 +    {
 +        return kind.isPrimaryKeyKind();
 +    }
 +
 +    @Override
 +    public boolean selectColumns(Predicate<ColumnMetadata> predicate)
 +    {
 +        return predicate.test(this);
 +    }
 +
 +    @Override
 +    public boolean processesSelection()
 +    {
 +        return false;
 +    }
 +
 +    /**
 +     * Converts the specified column definitions into column identifiers.
 +     *
 +     * @param definitions the column definitions to convert.
 +     * @return the column identifiers corresponding to the specified definitions
 +     */
 +    public static Collection<ColumnIdentifier> toIdentifiers(Collection<ColumnMetadata> definitions)
 +    {
 +        return Collections2.transform(definitions, columnDef -> columnDef.name);
 +    }
 +
 +    public int compareTo(ColumnMetadata other)
 +    {
 +        if (this == other)
 +            return 0;
 +
 +        if (comparisonOrder != other.comparisonOrder)
 +            return Long.compare(comparisonOrder, other.comparisonOrder);
 +
 +        return this.name.compareTo(other.name);
 +    }
 +
 +    public Comparator<CellPath> cellPathComparator()
 +    {
 +        return cellPathComparator;
 +    }
 +
 +    public Comparator<Object> asymmetricCellPathComparator()
 +    {
 +        return asymmetricCellPathComparator;
 +    }
 +
 +    public Comparator<? super Cell> cellComparator()
 +    {
 +        return cellComparator;
 +    }
 +
 +    public boolean isComplex()
 +    {
 +        return cellPathComparator != null;
 +    }
 +
 +    public boolean isSimple()
 +    {
 +        return !isComplex();
 +    }
 +
 +    public CellPath.Serializer cellPathSerializer()
 +    {
 +        // Collections are our only complex so far, so keep it simple
 +        return CollectionType.cellPathSerializer;
 +    }
 +
 +    public void validateCell(Cell cell)
 +    {
 +        if (cell.isTombstone())
 +        {
 +            if (cell.value().hasRemaining())
 +                throw new MarshalException("A tombstone should not have a value");
 +            if (cell.path() != null)
 +                validateCellPath(cell.path());
 +        }
 +        else if(type.isUDT())
 +        {
 +            // To validate a non-frozen UDT field, both the path and the value
 +            // are needed, the path being an index into an array of value types.
 +            ((UserType)type).validateCell(cell);
 +        }
 +        else
 +        {
 +            type.validateCellValue(cell.value());
 +            if (cell.path() != null)
 +                validateCellPath(cell.path());
 +        }
 +    }
 +
 +    private void validateCellPath(CellPath path)
 +    {
 +        if (!isComplex())
 +            throw new MarshalException("Only complex cells should have a cell path");
 +
 +        assert type.isMultiCell();
 +        if (type.isCollection())
 +            ((CollectionType)type).nameComparator().validate(path.get(0));
 +        else
 +            ((UserType)type).nameComparator().validate(path.get(0));
 +    }
 +
 +    public static String toCQLString(Iterable<ColumnMetadata> defs)
 +    {
 +        return toCQLString(defs.iterator());
 +    }
 +
 +    public static String toCQLString(Iterator<ColumnMetadata> defs)
 +    {
 +        if (!defs.hasNext())
 +            return "";
 +
 +        StringBuilder sb = new StringBuilder();
 +        sb.append(defs.next().name);
 +        while (defs.hasNext())
 +            sb.append(", ").append(defs.next().name);
 +        return sb.toString();
 +    }
 +
 +    /**
 +     * The type of the cell values for cell belonging to this column.
 +     *
 +     * This is the same than the column type, except for non-frozen collections where it's the 'valueComparator'
 +     * of the collection.
 +     * 
 +     * This method should not be used to get value type of non-frozon UDT.
 +     */
 +    public AbstractType<?> cellValueType()
 +    {
 +        assert !(type instanceof UserType && type.isMultiCell());
 +        return type instanceof CollectionType && type.isMultiCell()
 +                ? ((CollectionType)type).valueComparator()
 +                : type;
 +    }
 +
 +    /**
 +     * Check if column is counter type.
 +     */
 +    public boolean isCounterColumn()
 +    {
 +        if (type instanceof CollectionType) // Possible with, for example, supercolumns
 +            return ((CollectionType) type).valueComparator().isCounter();
 +        return type.isCounter();
 +    }
 +
 +    public Selector.Factory newSelectorFactory(TableMetadata table, AbstractType<?> expectedType, List<ColumnMetadata> defs, VariableSpecifications boundNames) throws InvalidRequestException
 +    {
 +        return SimpleSelector.newFactory(this, addAndGetIndex(this, defs));
 +    }
 +
 +    public AbstractType<?> getExactTypeIfKnown(String keyspace)
 +    {
 +        return type;
 +    }
 +
 +    /**
 +     * Because legacy-created tables may have a non-text comparator, we cannot determine the proper 'key' until
 +     * we know the comparator. ColumnMetadata.Raw is a placeholder that can be converted to a real ColumnIdentifier
 +     * once the comparator is known with prepare(). This should only be used with identifiers that are actual
 +     * column names. See CASSANDRA-8178 for more background.
 +     */
 +    public static abstract class Raw extends Selectable.Raw
 +    {
 +        /**
 +         * Creates a {@code ColumnMetadata.Raw} from an unquoted identifier string.
 +         */
 +        public static Raw forUnquoted(String text)
 +        {
 +            return new Literal(text, false);
 +        }
 +
 +        /**
 +         * Creates a {@code ColumnMetadata.Raw} from a quoted identifier string.
 +         */
 +        public static Raw forQuoted(String text)
 +        {
 +            return new Literal(text, true);
 +        }
 +
 +        /**
 +         * Creates a {@code ColumnMetadata.Raw} from a pre-existing {@code ColumnMetadata}
 +         * (useful in the rare cases where we already have the column but need
 +         * a {@code ColumnMetadata.Raw} for typing purposes).
 +         */
 +        public static Raw forColumn(ColumnMetadata column)
 +        {
 +            return new ForColumn(column);
 +        }
 +
 +        /**
 +         * Get the identifier corresponding to this raw column, without assuming this is an
 +         * existing column (unlike {@link Selectable.Raw#prepare}).
 +         */
 +        public abstract ColumnIdentifier getIdentifier(TableMetadata table);
 +
 +        public abstract String rawText();
 +
 +        @Override
 +        public abstract ColumnMetadata prepare(TableMetadata table);
 +
 +        @Override
 +        public final int hashCode()
 +        {
 +            return toString().hashCode();
 +        }
 +
 +        @Override
 +        public final boolean equals(Object o)
 +        {
 +            if(!(o instanceof Raw))
 +                return false;
 +
 +            Raw that = (Raw)o;
 +            return this.toString().equals(that.toString());
 +        }
 +
 +        private static class Literal extends Raw
 +        {
 +            private final String text;
 +
 +            public Literal(String rawText, boolean keepCase)
 +            {
 +                this.text =  keepCase ? rawText : rawText.toLowerCase(Locale.US);
 +            }
 +
 +            public ColumnIdentifier getIdentifier(TableMetadata table)
 +            {
 +                if (!table.isStaticCompactTable())
 +                    return ColumnIdentifier.getInterned(text, true);
 +
 +                AbstractType<?> columnNameType = table.staticCompactOrSuperTableColumnNameType();
 +                if (columnNameType instanceof UTF8Type)
 +                    return ColumnIdentifier.getInterned(text, true);
 +
 +                // We have a legacy-created table with a non-text comparator. Check if we have a matching column, otherwise assume we should use
 +                // columnNameType
 +                ByteBuffer bufferName = ByteBufferUtil.bytes(text);
 +                for (ColumnMetadata def : table.columns())
 +                {
 +                    if (def.name.bytes.equals(bufferName))
 +                        return def.name;
 +                }
 +                return ColumnIdentifier.getInterned(columnNameType, columnNameType.fromString(text), text);
 +            }
 +
 +            public ColumnMetadata prepare(TableMetadata table)
 +            {
 +                if (!table.isStaticCompactTable())
 +                    return find(table);
 +
 +                AbstractType<?> columnNameType = table.staticCompactOrSuperTableColumnNameType();
 +                if (columnNameType instanceof UTF8Type)
 +                    return find(table);
 +
 +                // We have a legacy-created table with a non-text comparator. Check if we have a match column, otherwise assume we should use
 +                // columnNameType
 +                ByteBuffer bufferName = ByteBufferUtil.bytes(text);
 +                for (ColumnMetadata def : table.columns())
 +                {
 +                    if (def.name.bytes.equals(bufferName))
 +                        return def;
 +                }
 +                return find(columnNameType.fromString(text), table);
 +            }
 +
 +            private ColumnMetadata find(TableMetadata table)
 +            {
 +                return find(ByteBufferUtil.bytes(text), table);
 +            }
 +
 +            private ColumnMetadata find(ByteBuffer id, TableMetadata table)
 +            {
 +                ColumnMetadata def = table.getColumn(id);
 +                if (def == null)
 +                    throw new InvalidRequestException(String.format("Undefined column name %s", toString()));
 +                return def;
 +            }
 +
 +            public String rawText()
 +            {
 +                return text;
 +            }
 +
 +            @Override
 +            public String toString()
 +            {
 +                return ColumnIdentifier.maybeQuote(text);
 +            }
 +        }
 +
 +        // Use internally in the rare case where we need a ColumnMetadata.Raw for type-checking but
 +        // actually already have the column itself.
 +        private static class ForColumn extends Raw
 +        {
 +            private final ColumnMetadata column;
 +
 +            private ForColumn(ColumnMetadata column)
 +            {
 +                this.column = column;
 +            }
 +
 +            public ColumnIdentifier getIdentifier(TableMetadata table)
 +            {
 +                return column.name;
 +            }
 +
 +            public ColumnMetadata prepare(TableMetadata table)
 +            {
 +                assert table.getColumn(column.name) != null; // Sanity check that we're not doing something crazy
 +                return column;
 +            }
 +
 +            public String rawText()
 +            {
 +                return column.name.toString();
 +            }
 +
 +            @Override
 +            public String toString()
 +            {
 +                return column.name.toCQLString();
 +            }
 +        }
 +    }
 +
 +
 +
 +}

http://git-wip-us.apache.org/repos/asf/cassandra/blob/62423f6b/src/java/org/apache/cassandra/schema/SchemaKeyspace.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/schema/SchemaKeyspace.java
index 553ccdc,e09c82d..9716862
--- a/src/java/org/apache/cassandra/schema/SchemaKeyspace.java
+++ b/src/java/org/apache/cassandra/schema/SchemaKeyspace.java
@@@ -1021,21 -1120,19 +1021,19 @@@ public final class SchemaKeyspac
          if (order == ClusteringOrder.DESC)
              type = ReversedType.getInstance(type);
  
-         ColumnIdentifier name = ColumnIdentifier.getInterned(type,
-                                                              row.getBytes("column_name_bytes"),
-                                                              row.getString("column_name"));
+         ColumnIdentifier name = new ColumnIdentifier(row.getBytes("column_name_bytes"), row.getString("column_name"));
  
 -        return new ColumnDefinition(keyspace, table, name, type, position, kind);
 +        return new ColumnMetadata(keyspace, table, name, type, position, kind);
      }
  
 -    private static Map<ByteBuffer, CFMetaData.DroppedColumn> fetchDroppedColumns(String keyspace, String table)
 +    private static Map<ByteBuffer, DroppedColumn> fetchDroppedColumns(String keyspace, String table)
      {
          String query = format("SELECT * FROM %s.%s WHERE keyspace_name = ? AND table_name = ?", SchemaConstants.SCHEMA_KEYSPACE_NAME, DROPPED_COLUMNS);
 -        Map<ByteBuffer, CFMetaData.DroppedColumn> columns = new HashMap<>();
 +        Map<ByteBuffer, DroppedColumn> columns = new HashMap<>();
          for (UntypedResultSet.Row row : query(query, keyspace, table))
          {
 -            CFMetaData.DroppedColumn column = createDroppedColumnFromRow(row);
 -            columns.put(UTF8Type.instance.decompose(column.name), column);
 +            DroppedColumn column = createDroppedColumnFromRow(row);
 +            columns.put(column.column.name.bytes, column);
          }
          return columns;
      }

http://git-wip-us.apache.org/repos/asf/cassandra/blob/62423f6b/src/java/org/apache/cassandra/utils/NativeSSTableLoaderClient.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/utils/NativeSSTableLoaderClient.java
index 52fc6ac,dde8e01..bb0ee25
--- a/src/java/org/apache/cassandra/utils/NativeSSTableLoaderClient.java
+++ b/src/java/org/apache/cassandra/utils/NativeSSTableLoaderClient.java
@@@ -230,16 -219,14 +230,14 @@@ public class NativeSSTableLoaderClient 
          if (order == ClusteringOrder.DESC)
              type = ReversedType.getInstance(type);
  
-         ColumnIdentifier name = ColumnIdentifier.getInterned(type,
-                                                              row.getBytes("column_name_bytes"),
-                                                              row.getString("column_name"));
+         ColumnIdentifier name = new ColumnIdentifier(row.getBytes("column_name_bytes"), row.getString("column_name"));
  
          int position = row.getInt("position");
 -        ColumnDefinition.Kind kind = ColumnDefinition.Kind.valueOf(row.getString("kind").toUpperCase());
 -        return new ColumnDefinition(keyspace, table, name, type, position, kind);
 +        org.apache.cassandra.schema.ColumnMetadata.Kind kind = ColumnMetadata.Kind.valueOf(row.getString("kind").toUpperCase());
 +        return new ColumnMetadata(keyspace, table, name, type, position, kind);
      }
  
 -    private static CFMetaData.DroppedColumn createDroppedColumnFromRow(Row row, String keyspace)
 +    private static DroppedColumn createDroppedColumnFromRow(Row row, String keyspace, String table)
      {
          String name = row.getString("column_name");
          AbstractType<?> type = CQLTypeParser.parse(keyspace, row.getString("type"), Types.none());


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org